From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1Vsquf-0000Tc-7a for mharc-grub-devel@gnu.org; Tue, 17 Dec 2013 04:26:01 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50422) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VsquV-0000TJ-KJ for grub-devel@gnu.org; Tue, 17 Dec 2013 04:25:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VsquN-0002RZ-3n for grub-devel@gnu.org; Tue, 17 Dec 2013 04:25:51 -0500 Received: from mail-bk0-x230.google.com ([2a00:1450:4008:c01::230]:54875) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VsquM-0002RM-Sl for grub-devel@gnu.org; Tue, 17 Dec 2013 04:25:43 -0500 Received: by mail-bk0-f48.google.com with SMTP id r7so2703796bkg.21 for ; Tue, 17 Dec 2013 01:25:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=65SVEmkAjO0G7IRZLAGqwFF74t2RL+b60RRFGfQ6Eek=; b=t0aVoffTV3e5iCg2YvbtqvstkDDXf0MwwShod87na8laxu0g30CNySYA9lIaQPwWaK NWG+9meI3cMqV+KO0WJ6p92+ZsQWuIYb0apsmLm6BJ5SDy9D2pTM6l5Xkj8/KyUPPY// 1FaW7hh6dStjzV5RsXxAhH0w5W2Roex5xv287lnRV5FSKcfbLt3BpYXcakrhDKejpwfn KaNlceEs0E9G7N1tA3j3MjuYsWMHGqm8SDWaZDviD6vBI15BOjsejPrpDKj4ssSIquG9 i6dY3Vq2PxHXzL9dWpq8yLjiJHviuo398Sl5Do0NPlKJnoDzazoAyLfJv23g96kYK7Ae AK1Q== X-Received: by 10.205.36.81 with SMTP id sz17mr6399482bkb.29.1387272340822; Tue, 17 Dec 2013 01:25:40 -0800 (PST) Received: from [192.168.56.2] (mi-18-4-135.service.infuturo.it. [151.18.4.135]) by mx.google.com with ESMTPSA id it12sm12949250bkb.12.2013.12.17.01.25.38 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 17 Dec 2013 01:25:39 -0800 (PST) Message-ID: <52B018F0.6030409@gmail.com> Date: Tue, 17 Dec 2013 10:27:12 +0100 From: Francesco Lavra User-Agent: Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1 MIME-Version: 1.0 To: The development of GNU GRUB Subject: Re: [PATCH] add fdt prerequisites for arm64 UEFI Linux loader References: <20131216135210.GU22356@rocoto.smurfnet.nu> In-Reply-To: <20131216135210.GU22356@rocoto.smurfnet.nu> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4008:c01::230 Cc: Leif Lindholm X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 17 Dec 2013 09:26:00 -0000 On 12/16/2013 02:52 PM, Leif Lindholm wrote: > diff --git a/grub-core/lib/fdt.c b/grub-core/lib/fdt.c > index 9f34dc7..fb13672 100644 > --- a/grub-core/lib/fdt.c > +++ b/grub-core/lib/fdt.c > @@ -423,3 +423,31 @@ int grub_fdt_set_prop (void *fdt, unsigned int nodeoffset, const char *name, > grub_memcpy (prop + 3, val, len); > return 0; > } > + > +int > +grub_fdt_create_empty_tree (void *fdt, unsigned int size) > +{ > + struct grub_fdt_empty_tree *et; > + > + if (size < GRUB_FDT_EMPTY_TREE_SZ) > + return -1; > + > + grub_memset (fdt, 0, size); > + et = fdt; > + > + et->empty_node.node_end = grub_cpu_to_be32 (FDT_END); > + et->empty_node.prop_end = grub_cpu_to_be32 (FDT_END_NODE); > + et->empty_node.prop_start = grub_cpu_to_be32 (FDT_BEGIN_NODE); > + ((struct grub_fdt_empty_tree *) fdt)->header.off_mem_rsvmap = > + grub_cpu_to_be32 (ALIGN_UP (sizeof (grub_fdt_header_t), 8)); > + > + grub_fdt_set_off_dt_strings (fdt, sizeof (*et)); > + grub_fdt_set_off_dt_struct (fdt, sizeof (grub_fdt_header_t) + 16); I would write the offset as sizeof (et->header) + sizeof (et->empty_rsvmap) > + grub_fdt_set_version (fdt, FDT_SUPPORTED_VERSION); > + grub_fdt_set_last_comp_version (fdt, FDT_SUPPORTED_VERSION); > + grub_fdt_set_size_dt_struct (fdt, sizeof (et->empty_node)); > + grub_fdt_set_totalsize (fdt, size); > + grub_fdt_set_magic (fdt, FDT_MAGIC); > + > + return 0; > +} > diff --git a/include/grub/fdt.h b/include/grub/fdt.h > index 2ad0536..bbc88ec 100644 > --- a/include/grub/fdt.h > +++ b/include/grub/fdt.h > @@ -36,6 +36,19 @@ typedef struct { > grub_uint32_t size_dt_struct; > } grub_fdt_header_t; > > +struct grub_fdt_empty_tree { > + grub_fdt_header_t header; > + grub_uint64_t empty_rsvmap[2]; > + struct { > + grub_uint32_t prop_start; > + grub_uint8_t name[1]; > + grub_uint32_t prop_end; > + grub_uint32_t node_end; > + } empty_node; Field names don't reflect their actual meaning: I would rename them as: struct { grub_uint32_t node_start; grub_uint8_t name[1]; grub_uint32_t node_end; grub_uint32_t tree_end; } empty_tree; -- Francesco