Allow multipart property values

At present each property definition in a dts file must give as the
value either a string ("abc..."), a bytestring ([12abcd...]) or a cell
list (<1 2 3 ...>).  This patch allows a property value to be given as
several of these, comma-separated.  The final property value is just
the components appended together.  So a property could have a list of
cells followed by a string, or a bytestring followed by some cells.
Cells are always aligned, so if cells are given following a string or
bytestring which is not a multiple of 4 bytes long, zero bytes are
inserted to align the following cells.

The primary motivation for this feature, however, is to allow defining
a property as a list of several strings.  This is what's needed for
defining OF 'compatible' properties, and is less ugly and fiddly than
using embedded \0s in the strings.

Signed-off-by: David Gibson <dwg@au1.ibm.com>
Signed-off-by: Jon Loeliger <jdl@freescale.com>
This commit is contained in:
David Gibson
2007-02-07 16:37:50 +11:00
committed by Jon Loeliger
parent 54382390e4
commit 32da475af1
5 changed files with 49 additions and 4 deletions

View File

@@ -58,6 +58,7 @@ extern struct boot_info *the_boot_info;
%token <str> DT_REF
%type <data> propdata
%type <data> propdataprefix
%type <re> memreserve
%type <re> memreserves
%type <data> celllist
@@ -121,9 +122,15 @@ propdef: label DT_PROPNAME '=' propdata ';' {
}
;
propdata: DT_STRING { $$ = $1; }
| '<' celllist '>' { $$ = $2; }
| '[' bytestring ']' { $$ = $2; }
propdata: propdataprefix DT_STRING { $$ = data_merge($1, $2); }
| propdataprefix '<' celllist '>' {
$$ = data_merge(data_append_align($1, sizeof(cell_t)), $3);
}
| propdataprefix '[' bytestring ']' { $$ = data_merge($1, $3); }
;
propdataprefix: propdata ',' { $$ = $1; }
| /* empty */ { $$ = empty_data; }
;
celllist: celllist DT_CELL { $$ = data_append_cell($1, $2); }