On Do, 2013-11-21 at 13:12 +1000, Dave Airlie wrote: > On Wed, Nov 20, 2013 at 10:02 PM, Gerd Hoffmann <kra...@redhat.com> wrote: > > On Mi, 2013-11-20 at 15:52 +1000, Dave Airlie wrote: > >> From: Dave Airlie <airl...@redhat.com> > >> > >> This is a virtio-vga device built on top of the virtio-gpu device. > > > > Ah, I see what you use the wrapping for. Hmm. I think you should use a > > common base class instead, i.e. something like virtio-gpu-base which > > holds all the common stuff. Both virtio-gpu and virtio-vga can use that > > as TypeInfo->parent then. This way virtio-vga doesn't have to muck with > > virtio-gpu internals. virtio-gpu-base can be tagged as abstract class > > (using .abstract = true) so it will not be instantiated directly. > > > > I'm not sure what that buys me here, I need the virtio-vga to attach > the vga ops the first console that the virtio-gpu registers, it can't > be a separate console, and since virtio-gpu initialises before > virtio-vga I can't tell it to not register the console.
virtio-gpu-core registers no consoles. It just export the hw_ops functions. virtio-gpu-core inly initializes the stuff which is identical for both virtio-gpu and virtio-vga, everything else is left to the init functions of the subclasses. virtio-gpu uses virtio-gpu-core as parent. Registers the the consoles, using the hw_ops functions exported by virtio-gpu-core. Also sets the pci class to DISPLAY_OTHER. virtio-vga uses virtio-gpu-core as parent too. Registers the consoles, using functions basically doing "if vgamode then call vga hw_ops else call virtio-gpu-core hw_ops". Simliar to what you have today but without the funky wrapping. Sets pci class to DISPLAY_VGA and initializes vga stuff. cheers, Gerd