From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LaBwd-0004s3-Dn for qemu-devel@nongnu.org; Thu, 19 Feb 2009 11:40:15 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LaBwc-0004rY-Pv for qemu-devel@nongnu.org; Thu, 19 Feb 2009 11:40:15 -0500 Received: from [199.232.76.173] (port=42832 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LaBwc-0004rO-NR for qemu-devel@nongnu.org; Thu, 19 Feb 2009 11:40:14 -0500 Received: from fg-out-1718.google.com ([72.14.220.154]:58895) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LaBwb-0001ci-Pm for qemu-devel@nongnu.org; Thu, 19 Feb 2009 11:40:14 -0500 Received: by fg-out-1718.google.com with SMTP id e21so1241494fga.8 for ; Thu, 19 Feb 2009 08:40:11 -0800 (PST) MIME-Version: 1.0 In-Reply-To: <871vtuafdr.fsf@pike.pond.sub.org> References: <87iqnh6kyv.fsf@pike.pond.sub.org> <871vtuafdr.fsf@pike.pond.sub.org> Date: Thu, 19 Feb 2009 18:40:10 +0200 Message-ID: Subject: Re: [Qemu-devel] Machine description as data prototype, take 3 (was: [RFC] Machine description as data) From: Blue Swirl Content-Type: multipart/mixed; boundary=001636c5a53799f0370463483038 Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org --001636c5a53799f0370463483038 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 2/19/09, Markus Armbruster wrote: > Third iteration of the prototype. > > What about an early merge? If your answer to that is "yes, but", what > exactly do you want changed? Not until the device tree discussion is finished and Qemu release is out. This isn't something we want to rush in. There is still Paul's development and even Fabrice's original proposal which both have relative merits. > +static int > +dt_parse_int(void *dst, const char *src, dt_prop_spec *spec) dst should be uint64_t *. > +{ > + char *ep; > + long val; uint64_t val > + > + assert(spec->size == sizeof(int)); > + errno = 0; > + val = strtol(src, &ep, 0); strtoull > + if (*ep || ep == src || errno || (int)val != val) > + return -1; > + *(int *)dst = val; > + return 0; > +} > + > +static int > +dt_parse_ram_addr_t(void *dst, const char *src, dt_prop_spec *spec) ram_addr_t *dst > +{ > + char *ep; > + unsigned long val; ram_addr_t val > + > + assert(spec->size == sizeof(ram_addr_t)); > + errno = 0; > + val = strtoul(src, &ep, 0); strtoull > +typedef struct dt_device_cpus { > + const char *model; > + int num; > +} dt_device_cpus; > + > +static dt_prop_spec dt_cpus_props[] = { > + DT_PROP_SPEC_INIT("model", dt_device_cpus, model, string), > + DT_PROP_SPEC_INIT("num", dt_device_cpus, num, int), > +}; There should be one node for each cpu, not "num". Each node is named after the CPU model, like /SUNW,UltraSPARC-IIi. > +static dt_prop_spec dt_memory_props[] = { > + DT_PROP_SPEC_INIT("ram", dt_device_memory, ram_size, ram_addr_t), > +}; Memory node should be name "/memory". It has properties "available" and "reg", in this case we only want "reg". "reg" property consists of several phys_addr, size pairs. > +static dt_prop_spec dt_pc_misc_props[] = { > + DT_PROP_SPEC_INIT("boot-device", dt_device_pc_misc, boot_device, > + string), > +}; This property is quite standard, the correct place is under "/options". > +static dt_prop_spec dt_vga_props[] = { > + DT_PROP_SPEC_INIT("model", dt_device_vga, model, string), > + DT_PROP_SPEC_INIT("ram", dt_device_vga, ram_size, ram_addr_t), Again, there is no "model" property, but the node name specifies the model. "ram" is not correct, this should be under "reg" property. > +static dt_prop_spec dt_nic_props[] = { > + DT_PROP_SPEC_INIT("model", dt_device_nic, nd.model, string), > + DT_PROP_SPEC_INIT("mac", dt_device_nic, nd.macaddr, macaddr), > + DT_PROP_SPEC_INIT("name", dt_device_nic, nd.name, string), > +}; "name" is the node name, you can't use it to anything else. Again, node name should specify the model. > + root = tree_new_kid(NULL, "", NULL); > + leaf = tree_new_kid(root, "cpus", NULL); > + tree_put_propf(leaf, "model", "%s", "qemu32"); > + leaf = tree_new_kid(root, "memory", NULL); > + leaf = tree_new_kid(root, "pc-misc", NULL); Remove pc-misc. > + pci = tree_new_kid(root, "pci", NULL); > + leaf = tree_new_kid(pci, "piix3", NULL); "piix3" is equal to "pci". In this case, there will not be any "piix3" node, "pci" takes it's place. Any known PCI devices use either their class (like "pci" for PCI bridges) or model specific name, like "ebus". > + node = tree_node_by_name(pci, "piix3"); > + for(i = 0; i < MAX_IDE_BUS * MAX_IDE_DEVS; i++) { > + index = drive_get_index(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS); > + if (index != -1) > + dt_attach_drive(host, index, node, drives_table[index].bdrv); > + } For the PIIX IDE controller (under "/pci" node) the correct name is "ide". > + /* Floppy */ > + node = tree_node_by_name(conf, "/pc-misc"); > + for(i = 0; i < MAX_FD; i++) { > + index = drive_get_index(IF_FLOPPY, 0, i); > + if (index != -1) > + dt_attach_drive(host, index, node, drives_table[index].bdrv); > + } ISA devices should be put either under a special "/isa" node, or if there is an PCI-to-ISA bridge, "/pci/isa" or whatever the connection is. I have a troubling feeling that you have not read the 1275 standard or looked how real OpenFirmware machines name things. I've attached a Sparc64 tree as an example, please also read the OF standards at: http://playground.sun.com/pub/p1275/ I'd still like to thank you for your efforts so far, this is a workable starting point. --001636c5a53799f0370463483038 Content-Type: application/x-bzip2; name="fire-t200-tree.bz2" Content-Disposition: attachment; filename="fire-t200-tree.bz2" Content-Transfer-Encoding: base64 X-Attachment-Id: f_frdn9u12 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 kinChIAkrbdY --001636c5a53799f0370463483038--