qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paul Brook <paul@codesourcery.com>
To: Rob Landley <rob@landley.net>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Config file support
Date: Tue, 24 Oct 2006 00:33:49 +0100	[thread overview]
Message-ID: <200610240033.51392.paul@codesourcery.com> (raw)
In-Reply-To: <200610231822.59310.rob@landley.net>

> > Not really. I guess a generic key/value pair is sufficient for most
> > things (base address, model number, etc).
>
> The things are what I was asking about.  Assuming that QEMU has support for
> the appropriate processor type, support for the right bus controller(s),
> and support for various devices that can attach to that bus, what other
> information is needed to completely specify a machine?  (You mention IRQ
> lines and DMA channels...)

A good first guess is to look at the the *_init functions in the hw/ 
directory. They should tell you what parameters a device has.

> I'm still a little fuzzy about basic questions like "How much information
> is in 'processor type'?"  (Does that include cache size?  Floating point
> support?  Has mmu flag?  Are these separate processors with their own
> names, or are they options to a base processor type?)
>
> I'm generally not worried about parsing data files being hard, I just don't
> currently know what's involved in adding a new machine type to QEMU anyway.
> don't know what all the data _is_ let alone what to do with it once it's
> read in.

This is why I suggested a *generic* key/value system. Basically each "device" 
registers itself with qemu, and provides an initialisation function and a 
list of properties. qemu doesn't know the meaning of a particular key, just 
its name and type (number/string/whatever).

The machine config file instantiates particular devices (explicitly or 
implicitly one per section). qemu validates+parses the keys in the config 
file against the list provided by the device. Then the init function is 
called.

> Last I checked, each processor was in its own directory (at the top level,
> not under any kind of processors/ directory), 

qemu doesn't support different CPUs in the same machine. That's a whole other 
problem.

> the devices were under "hw", 
> and the motherboards gluing together a bunch of devices were _also_ under
> "hw".
>...
> Currently, this is all hard-wired together into a big blob.  Step one of
> untangling it would probably be moving the device files and the motherboard
> files to separate directories...

My intention is that a machine config file would remove the "motherboard" bits 
altogether. ie. the config file describes everything that pc_init_1 does. The 
first half of pc.c would remain because that's device emulation.

For things like network/serial/disks we need to figure out how to make the 
machine description adapt to the config the user requested. Proably want to 
replace the fixed tables eg. bs_table with some mechanism for 
identifying/requesting disks by name.

Likewise if you identify PCI busses and IRQs by name/location this provides a 
way for the user to wire them up.

Most of the code is already fairly well separated. It's just that the glue is 
hardcoded in C and parameters passed as function arguments rather than being 
something that is determined at runtime.

Take the Integrator/CP board as an example. I'd expect the machine config to 
look something like:

ram {base=0; size=RAM_SIZE, physaddr=0}
ram {base=0x80000000; size=RAM_SIZE, physaddr=0}
integrator_core{ram_size=RAM_SIZE};
arm_cpu_pic {cpu_index=0, pic_name="CPU0"}
integrator_pic {pic_name="PRIMARY", base=0x14000000,parent="CPU0", 
parent_irq=0, parent_fiq=1}
integrator_pic {pic_name="SECONDARY", base=0xca000000, pic="PRIMARY",irq=0, 
fiq=1}
integrator_pit{base=0x13000000, pic="PRIMARY", irq=5}
pl011{base=0x16000000, name="serial0", pic="PRIMARY", irq=1}
etc.

The syntax I just made up, and there are the issues I mentioned above, but 
hopefully you get the idea.

Paul

  reply	other threads:[~2006-10-23 23:34 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-10-20 17:55 [Qemu-devel] Config file support Chuck Brazie
2006-10-21  0:12 ` Johannes Schindelin
2006-10-21 10:00   ` Ricardo Almeida
2006-10-21 11:40     ` Stefan Weil
2006-10-22  9:51     ` Johannes Schindelin
2006-10-22 17:01       ` Flavio Visentin
2006-10-22 17:19         ` Martin Guy
2006-10-22 18:27           ` Paul Brook
2006-10-23  6:33             ` [Qemu-devel] " Antti P Miettinen
2006-10-23 20:01             ` [Qemu-devel] " Rob Landley
2006-10-23 20:29               ` Paul Brook
2006-10-23 22:22                 ` Rob Landley
2006-10-23 23:33                   ` Paul Brook [this message]
2006-10-24  9:04                     ` Rob Landley
2006-10-24 10:47                     ` Flavio Visentin
2006-10-24 12:05                       ` Christian MICHON
2006-10-24 16:46                         ` Blue Swirl
2006-10-24 20:38                           ` Christian MICHON
2006-10-24 23:32                       ` Rob Landley
2006-10-25  8:20                         ` Johannes Schindelin
2006-10-24  0:11                   ` andrzej zaborowski
2006-10-24  0:34                     ` Paul Brook
2006-10-24  0:12                 ` Re[2]: " Paul Sokolovsky
2006-10-24  0:36                   ` Paul Brook
2006-10-24  1:38                     ` Re[2]: " Paul Sokolovsky
2006-10-24  2:31                       ` Paul Brook
2006-10-24  8:37                         ` Christian MICHON
2006-10-24 23:28                       ` Rob Landley
2006-10-25  0:18                         ` Re[2]: " Paul Sokolovsky
2006-10-25 15:01                           ` Paul Brook
2006-10-26 14:31                             ` Rob Landley
2006-10-27 20:00                               ` Re[2]: " Paul Sokolovsky
2006-10-27 19:33                             ` Paul Sokolovsky
2006-10-28  0:08                               ` Paul Brook
2006-10-28  1:46                                 ` Re[2]: " Paul Sokolovsky
2006-10-24 23:28                   ` Rob Landley
2006-10-21 18:00   ` David Baird
  -- strict thread matches above, loose matches on Subject: below --
2006-10-23 18:25 [Qemu-devel] config " Ben Taylor
2006-10-18 18:42 Chuck Brazie
2006-10-22 21:51 ` Rob Landley
2006-10-23 10:58   ` Christian MICHON
2006-10-23 11:48     ` Jan Marten Simons
2006-10-23 12:24       ` Paul Brook
2006-10-23 17:50   ` K. Richard Pixley
2006-10-23 20:39     ` Rob Landley
2006-10-23 20:58       ` Paul Brook
2006-10-23 21:01       ` K. Richard Pixley
2006-10-23 21:17       ` M. Warner Losh
2006-10-23 20:42     ` André Braga

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=200610240033.51392.paul@codesourcery.com \
    --to=paul@codesourcery.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rob@landley.net \
    /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).