qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Paul Brook <paul@codesourcery.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC] New device API
Date: Tue, 05 May 2009 13:22:45 -0500	[thread overview]
Message-ID: <4A0083F5.7050606@codemonkey.ws> (raw)
In-Reply-To: <200905051231.09759.paul@codesourcery.com>

Paul Brook wrote:
> The attached patch is my attempt at a new internal API for device creation in 
> qemu.
>   

Instead of recreating constructors, I think we should just use GCC's 
constructor attribute.  This gives us ordering which will be important 
when dealing with buses.

I think the layering is not quite right with qdev.

Not all devices fit into the parameters of register_mmio/connect_irq.  
When dealing with bus devices (like PCI devices), I think you really 
have to model the constructs that the bus expose.  Note, this starts to 
look very similar to the Linux kernel's layered device model.

For instance, the following makes sense to me (from an x86 perspective):

Device              <- for devices connected directly to the 
northbridge/southbridge
  - raise_interrupt(0..255)
  - lower_interrupt(0..255)
  - register_mmio
  - register_pio
  - read_memory
  - write_memory


A PCI controller is a Device, but it introduces the concept of 
PCIDevice.  This is:

PCIDevice
  - raise_link(A|B|C|D)
  - lower_link(A|B|C|D)
  - register_io_region(IO|MEM, BAR, size)
  - read_memory
  - write_memory

A SCSI controller is a PCIDevice, but it introduces the concept of 
SCSIDevice.  This is:

SCSIDevice
  - send_cdb()
  - recv_cdb()

And so forth.  Virtio is a bus, ISA is a bus, etc. etc.

Regards,

Anthony Liguori

  parent reply	other threads:[~2009-05-05 18:22 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-05 11:31 [Qemu-devel] [RFC] New device API Paul Brook
2009-05-05 15:56 ` Blue Swirl
2009-05-05 16:17   ` Paul Brook
2009-05-05 16:26     ` Blue Swirl
2009-05-05 16:35       ` Paul Brook
2009-05-05 18:22 ` Anthony Liguori [this message]
2009-05-05 22:42   ` Edgar E. Iglesias
2009-05-06  0:52   ` Paul Brook
2009-05-06  1:04     ` Paul Brook
2009-05-06 13:35       ` Anthony Liguori
2009-05-09 20:55       ` Anthony Liguori
2009-05-09 21:06         ` Paul Brook
2009-05-10  1:34           ` Anthony Liguori
2009-05-09 22:52         ` malc
2009-05-10  1:35           ` Anthony Liguori
2009-05-10  6:50             ` Andreas Färber
2009-05-10 18:38             ` malc
2009-05-10  1:37           ` Anthony Liguori
2009-05-05 22:25 ` Edgar E. Iglesias
2009-05-08  1:54 ` Zachary Amsden
2009-05-08 11:28   ` Paul Brook
2009-05-08 13:47   ` Anthony Liguori
2009-05-09  1:21     ` Zachary Amsden
2009-05-09 13:36       ` Anthony Liguori
2009-05-08  5:27 ` Marcelo Tosatti
2009-05-08 10:44   ` Paul Brook
2009-05-28 13:53   ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A0083F5.7050606@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=paul@codesourcery.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).