On Wed, Apr 18, 2012 at 03:56:54PM -0600, Noel Van Hook wrote: > I am not sure I fully understand the ramifications of having a list of ram > headers. Is the intent to have one additional ram header per additional > head?
Yes, that was the idea. > > For multiple heads to work correctly, I believe: > 1) the framebuffer must be contiguous > 2) the entire framebuffer must be accessible to all heads, and > 3) each head must be able to be abitrarily located in that framebuffer. Do you have any pointers to these? About #3 I understand, but I wasn't aware of #1 or #2. But that said the framebuffer creation is already pretty flexible with QXL. The guest issues a CreatePrimary IO and fills in the header's (the specific head's one, actually this brings a good point - it has to use different io ports - I guess I'll need to add a rom field for that) create_primary field, which has a QXLPHYSICAL address of the surface start, and a stride != width * bpp neccessarily. So it can certainly have a single on pci framebuffer that overlaps all the heads if it wants to - it's a guest issue, spice will never acccess it directly but only via the primary surface for each head. > > Unless I misunderstand what you are doing, I am concerned that multiple ram > headers won't be flexible enough. I think the above description takes care of that. Thanks for the input, Alon > > Noel > > > On Wed, Apr 18, 2012 at 4:53 AM, Alon Levy <al...@redhat.com> wrote: > > > Hi, > > > > I'm just starting to work on this, wanted to solicit some feedback. I > > am thinking that the simplest way to implement multiple heads would be: > > > > Add additional QXLRam headers back to back on the vram bar. > > Add a new flag QXL_RAM_FLAG_MORE_HEADS, set it on all but the last > > (largest offset into bar) header. > > Don't add new fields to QXLRom or QXLRam. > > Update QXLRom.ram_header_offset to point to the first (smallest > > offset) header. > > > > New driver that notices the QXL_RAM_FLAG_MORE_HEADS will count the > > headers (it cannot be done by looking at the header offset since it may > > not know about additional future data that will be put at the end of the > > bar). > > > > Old driver will lose sizeof(QXLRam) * (num_heads - 1) bytes from the end > > of the bar. > > > > Visually it would look like this for a two head qxl device: > > > > .----------------------------------------------. > > | ROM BAR | > > | ... | > > || ram_header_offset | > > || ... | > > || | > > || | > > |'----------------------------------------------' > > | > > | > > |.--------------------------------------------------. > > || VRAM BAR | > > |.--------------------------------------------------. > > || Working area | > > || | > > v.--------------------------------------------------. > > | First Header | > > | magic | > > | ... | > > | flags == QXL_RAM_FLAG_MORE_HEADS | > > | | > > .--------------------------------------------------. > > | Second Header | > > | magic | > > | ... (identical fields) ... | > > | flags == 0 | > > '--------------------------------------------------' > > > > Alon > > _______________________________________________ > > Spice-devel mailing list > > Spice-devel@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/spice-devel > > > > > > -- > Noel Van Hook - Intelligraphics, Inc > 522 Cooper Ave N > Red Lodge, MT 59068 > noel.van.h...@intelligraphics.com (425) 770-5561 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel