All of lore.kernel.org
 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: 50+ 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
     [not found]                           ` <20061025153503.GB5673@aon.at>
2006-10-28 22:24                             ` busybox "ps ax" woes, was: " 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.