qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Torbjörn Andersson" <tobbe.tt@home.se>
To: qemu-devel@nongnu.org
Subject: RE: [Qemu-devel] Machine description, an alternativ using XML
Date: Thu, 26 Feb 2009 13:01:38 +0100	[thread overview]
Message-ID: <004d01c99809$fbcacf70$f3606e50$@tt@home.se> (raw)
In-Reply-To: <20090226093640.GA413@shareable.org>

Jamie Lokier Wrote:
> -----Ursprungligt meddelande-----
> Från: qemu-devel-bounces+tobbe.tt=home.se@nongnu.org [mailto:qemu-
> devel-bounces+tobbe.tt=home.se@nongnu.org] För Jamie Lokier
> Skickat: den 26 februari 2009 10:37
> Till: qemu-devel@nongnu.org
> Ämne: Re: [Qemu-devel] Machine description, an alternativ using XML
> 
> Torbjörn Andersson wrote:
> > <MACHINE name=ARM-INTEGRATOR>
> >   <OBJECT name="cpu" class="ARM926ej">
> >     <ATTRIBUTE name="mhz">	<value integer="208"/>  </ATTRIBUTE>
> >     <ATTRIBUTE name="dtcm_size">	<value integer="8192"/>
> </ATTRIBUTE>
> > 	<snipp...>
> >     <ATTRIBUTE name="memmap">	<value obj_ref=":memmap"/>
> </ATTRIBUTE>
> >   </OBJECT>
> >   <OBJECT name="memmap" class="MEMMAP">
> >   </OBJECT>
> >     ....
> >   <OBJECT name="pic" class="pl190">
> >     <ATTRIBUTE name="pic">	<value obj_ref=":cpu"/>  </ATTRIBUTE>
> >     <ATTRIBUTE name="memmap">	<value obj_ref=":memmap"/>
> </ATTRIBUTE>
> >     <ATTRIBUTE name="base">	<value integer="0xc0010000"/>
> </ATTRIBUTE>
> >   </OBJECT>
> > <MACHINE/>
> 
> Why so verbose?
> 
> <machine name="arm-integrator">
>   <cpu name="cpu0" type="ARM926ej">
>      <clock mhz="208"/>
>      <dtcm_size>8192</dtcm_size>
>      <memmap ref="memmap0"/>
>   </cpu>
>   <memmap name="memmap0"/>
>   <pic name="pic" type="pl190">
>      <memmap ref="memmap0"/>
>      <cpu ref="cpu0"/>
>      <base>0xc0010000</base>
>   </pic>
> </machine>

We aimed for not putting any aditional burdon on QEMU, by defining concepts
like PIC and MEMMAP. Simply Objects and Classes should exist. Then we added
MACHINES and CLUSTERS as types in the XML files.

> 
> > I know you are looking at a solution based on FDT. My belief is that
> the XML
> > solution is more flexible, but I admit that I know very little about
> FDT.
> > Further, I believe that one can create FDTs, from the XML machine
> > definitions, in runtime and pass them to the target-os if required.
> >
> > The strong point with the XML solution is that it is very suitable
> for
> > modeling embedded systems where lots of GPIOs, interrupts, dma-
> channels,
> > i2c, spi, i2s/pcm etc.
> 
> Isn't FDT capable of that too?

I happy to see Liu Yu FDT for MPC8544DS. I will study it to see if it fits
our needs/requirements. My targets are highly complex with lots of
connections between my objects. 

An example, interrupt lines need to be defined as a pair <object,pin>,
because the interrupt routing might be more complex. Think of a system with
cascade connected pl190's. How does one define this relationship in FDT?

<OBJECT usb class="xxx"> 
<!--                    2 association     -->
   <ATTRIBUTE irq_map> <VALUE array="2"> 
<!--                                  endpoint                 pic obj
line 
	<VALUE array="3"> <VALUE integer="5"/> <VALUE obj_ref=":pic0"/>
<VALUE integer="0"/> </VALUE>
	<VALUE array="3"> <VALUE integer="5"/> <VALUE obj_ref=":pic1"/>
<VALUE integer="0"/> </VALUE>
     </VALUE>
   </ATTRIBUTE>
</OBJECT>

> 
> > I know that this is will result in a large patch set but I think the
> FDT is
> > equally big. Further I believe we can have both schemes in QEMU in
> parallel,
> > if necessary.
> 
> If the schemes are equivalently powerful, you can have a converter
> which sits outside QEMU.  No need to implement both inside QEMU.
> People do this already, converting config files to QEMU command line
> options.

I see several upsides with the XML parser inside QEMU, but the important
part is that we have a "registry", classes, interfaces and
attributes/properties. I expect that to come with FDT too.

> 
> Fwiw, Microsoft Virtual PC uses an XML file to describe the machine
> and it makes sense to me.

Very readable. But, I dislike the complex DTD, which needs to be maintained
when new machine designs arrive. I believe that Classes and Objects, with
relationships, is enough.

Imagine defining a AMP system, not SMP, in VPC. How can we define AMP
machines in FDT? I'm running targets with two CPUs with separate address
spaces and need to do that in the future too.

> 
> Here's an example from a real VPC machine.  Hmm, maybe it's a bit long.
> Is the equivalent FDT any clearer or shorter, though?
> 
> -- Jamie
> 
> 
> 
> <?xml version="1.0" encoding="UTF-16"?>
> <!-- Microsoft Virtual Machine Options and Settings -->
> <preferences>
>     <version type="string">2.0</version>
>     <alerts>
>         <notifications>
>             <no_boot_disk type="boolean">true</no_boot_disk>
>         </notifications>
>     </alerts>
>     <hardware>
>         <memory>
>             <ram_size type="integer">512</ram_size>
>         </memory>
>         <pci_bus>
>             <ethernet_adapter>
>                 <controller_count type="integer">1</controller_count>
>                 <ethernet_controller id="0">
>                     <virtual_network>
>                         <id
> type="bytes">12341234123412341234123412341234</id>
>                         <name type="string">Marvell Yukon 88E8056 PCI-E
> Gigabit Ethernet Controller</name>
>                     </virtual_network>
>                     <ethernet_card_address
> type="bytes">000123456789</ethernet_card_address>
>                 </ethernet_controller>
>             </ethernet_adapter>
>             <video_adapter>
>                 <vram_size type="integer">8</vram_size>
>             </video_adapter>
>             <ide_adapter>
>                 <ide_controller id="1">
>                     <location id="0">
>                         <drive_type type="integer">2</drive_type>
>                         <pathname>
>                             <absolute
> type="string">\\srv\Develop\Software\MS SQL Eval\SQLEVAL.ISO</absolute>
>                             <relative type="string" />
>                         </pathname>
>                     </location>
>                 </ide_controller>
>                 <ide_controller id="0">
>                     <location id="0">
>                         <drive_type type="integer">1</drive_type>
>                         <pathname>
>                             <absolute type="string">C:\Documents and
> Settings\test\My Documents\My Virtual Machines\test\test Hard
> Disk.vhd</absolute>
>                             <relative type="string">.\test Hard
> Disk.vhd</relative>
>                         </pathname>
>                         <undo_pathname>
>                             <absolute type="string" />
>                             <relative type="string" />
>                         </undo_pathname>
>                     </location>
>                 </ide_controller>
>             </ide_adapter>
>         </pci_bus>
>         <standard>
>             <name type="string">Virtual PC 2007</name>
>             <version type="string">0001.0000.0000</version>
>         </standard>
>         <super_io>
>             <floppy id="0">
>                 <pathname>
>                     <absolute type="string" />
>                     <relative type="string" />
>                 </pathname>
>             </floppy>
>             <floppy>
>                 <auto_detect type="boolean">true</auto_detect>
>             </floppy>
>             <parallel_port>
>                 <port_shared type="boolean">false</port_shared>
>                 <port_type type="integer">0</port_type>
>             </parallel_port>
>             <serial_port>
>                 <connect_immediately
> type="boolean">false</connect_immediately>
>             </serial_port>
>         </super_io>
>         <bios>
>             <base_board>
>                 <serial_number type="string">8886-9141-1653-9060-4025-
> 7842-65</serial_number>
>             </base_board>
>             <bios_guid type="string">{125BDA48-420C-446E-AA48-
> 9B597632229C}</bios_guid>
>             <bios_serial_number type="string">8886-9141-1653-9060-4025-
> 7842-65</bios_serial_number>
>             <chassis>
>                 <asset_tag type="string">8886-9141-1653-9060-4025-7842-
> 65</asset_tag>
>                 <serial_number type="string">8886-9141-1653-9060-4025-
> 7842-65</serial_number>
>             </chassis>
>             <cmos
> type="bytes">00004000F0223F8002FFFF2F00FF3F1000003F00000000000031004C07
> 0707070666FFFF208580FF01000000200C01800CF400000000000000000000000000901
> A32E24A580050E999E62401002784004A2080240000000000085AACFE1032547698BAE4
> 00000000000003000000000000000000000000000000000000000000000000000000000
> 00000000000000000000000000000000000000000000000000000000000000000000000
> 00000000000000000000000000000000000000000000000000000000000000000000000
> 00000000000000000000000000000000000000000000000000000000000000000000000
> </cmos>
>             <time_bytes type="bytes">42004800120002290408</time_bytes>
>         </bios>
>     </hardware>
>     <integration>
>         <microsoft>
>             <mouse>
>                 <allow type="boolean">true</allow>
>             </mouse>
>             <video>
>                 <user_selected>
>                     <depth type="integer">16</depth>
>                     <height type="integer">480</height>
>                     <width type="integer">640</width>
>                 </user_selected>
>             </video>
>             <version>
>                 <additions_number
> type="string">013803</additions_number>
>                 <guest_os>
>                     <build_number
> type="string">5.02.3790</build_number>
>                     <long_name type="string">Microsoft Windows Server
> 2003</long_name>
>                     <revision_number type="string">Service Pack
> 2</revision_number>
>                     <short_name type="string">Windows Server
> 2003</short_name>
>                     <suite_name type="string">Server</suite_name>
>                 </guest_os>
>             </version>
>         </microsoft>
>     </integration>
>     <properties>
>         <creator>
>             <build type="string">6.0.156.0</build>
>             <name type="string">Microsoft Virtual PC 2007</name>
>         </creator>
>         <modifier>
>             <build type="string">6.0.156.0</build>
>             <name type="string">Microsoft Virtual PC 2007</name>
>         </modifier>
>     </properties>
>     <settings>
>         <shutdown>
>             <prompt type="boolean">true</prompt>
>             <quit>
>                 <action type="integer">4</action>
>                 <was_running type="boolean">false</was_running>
>             </quit>
>             <save>
>                 <enable type="boolean">true</enable>
>             </save>
>             <shutdown>
>                 <enable type="boolean">true</enable>
>             </shutdown>
>             <turn_off>
>                 <enable type="boolean">true</enable>
>             </turn_off>
>             <last_shutdown>
>                 <choice type="integer">0</choice>
>                 <commit type="boolean">true</commit>
>             </last_shutdown>
>         </shutdown>
>         <sound>
>             <sound_adapter>
>                 <enable type="boolean">true</enable>
>             </sound_adapter>
>         </sound>
>         <startup>
>             <automatic>
>                 <type type="integer">2</type>
>             </automatic>
>         </startup>
>         <undo_drives>
>             <enabled type="boolean">false</enabled>
>             <purposely_kept type="boolean">false</purposely_kept>
>             <use_default type="boolean">true</use_default>
>         </undo_drives>
>         <video>
>             <disable_resize type="boolean">false</disable_resize>
>             <full_screen type="boolean">false</full_screen>
>             <mode>
>                 <full_screen>
>                     <startup type="boolean">false</startup>
>                 </full_screen>
>             </mode>
>             <resolutions>
>                 <standard_only type="boolean">false</standard_only>
>             </resolutions>
>             <height type="integer">768</height>
>             <left_position type="integer">1361</left_position>
>             <max_height type="integer">768</max_height>
>             <max_width type="integer">1024</max_width>
>             <top_position type="integer">58</top_position>
>             <width type="integer">1024</width>
>         </video>
>         <guest_os type="integer">6</guest_os>
>     </settings>
>     <virtual_machines>
>         <hw_assist>
>             <enable_hw_assist type="boolean">true</enable_hw_assist>
>         </hw_assist>
>     </virtual_machines>
> </preferences>

  reply	other threads:[~2009-02-26 12:01 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-26  9:36 [Qemu-devel] Machine description, an alternativ using XML Jamie Lokier
2009-02-26 12:01 ` Torbjörn Andersson [this message]
2009-02-26 13:24   ` Steve Fosdick
2009-02-26 18:48     ` Andreas Färber
2009-02-26 21:47       ` Jamie Lokier
2009-02-26 19:41 ` Blue Swirl
  -- strict thread matches above, loose matches on Subject: below --
2009-02-26 13:09 Jamie Lokier
2009-02-26  6:49 Torbjörn Andersson
2009-02-26 16:06 ` Paul Brook
2009-02-26 22:14   ` Anthony Liguori

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='004d01c99809$fbcacf70$f3606e50$@tt@home.se' \
    --to=tobbe.tt@home.se \
    --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).