From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LXe6N-0004SM-On for qemu-devel@nongnu.org; Thu, 12 Feb 2009 11:07:47 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LXe6M-0004QS-JF for qemu-devel@nongnu.org; Thu, 12 Feb 2009 11:07:47 -0500 Received: from [199.232.76.173] (port=53927 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LXe6M-0004QI-Em for qemu-devel@nongnu.org; Thu, 12 Feb 2009 11:07:46 -0500 Received: from mx20.gnu.org ([199.232.41.8]:12730) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LXe6K-0006sR-1Q for qemu-devel@nongnu.org; Thu, 12 Feb 2009 11:07:45 -0500 Received: from mail.codesourcery.com ([65.74.133.4]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LXe6I-0004Aj-E6 for qemu-devel@nongnu.org; Thu, 12 Feb 2009 11:07:43 -0500 From: Paul Brook Subject: Re: [Qemu-devel] [RFC] Machine description as data Date: Thu, 12 Feb 2009 16:07:39 +0000 References: <87iqnh6kyv.fsf@pike.pond.sub.org> <1234378228.28751.79.camel@slate.austin.ibm.com> <87k57w0x4r.fsf@pike.pond.sub.org> In-Reply-To: <87k57w0x4r.fsf@pike.pond.sub.org> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_LlElJ0riY3Pxm0e" Message-Id: <200902121607.39588.paul@codesourcery.com> 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 Cc: Markus Armbruster --Boundary-00=_LlElJ0riY3Pxm0e Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline > * Point me to the FDT code I'm supposed to integrate. I'm looking for > basic decorated tree stuff: create trees, traverse them, get and put > properties, add and delete nodes, read and write them as plain, > human-readable text. I've been threatening to merge my FDT code for a while, but haven't got round to it. I've attached A drop of my current code, along with a bunch of example devices (I haven't yet converted any of the current machines). The basic strategy is the devices should only have deal with this interface, and not with teh config structures or the rest of qemu directly. Register windows and interrupts are converted, but things like DMA accesses still use the old interfaces. Most of the devices (e.g. the serial port) support both new and old init methods. A few (e.g. nand controller) are pure devtree based devices. Paul --Boundary-00=_LlElJ0riY3Pxm0e Content-Type: application/x-tbz; name="devtree.tar.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="devtree.tar.bz2" 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 --Boundary-00=_LlElJ0riY3Pxm0e--