Revision 97c38f8c device_tree.c
b/device_tree.c | ||
---|---|---|
308 | 308 |
exit(g_file_set_contents(dumpdtb, fdt, size, NULL) ? 0 : 1); |
309 | 309 |
} |
310 | 310 |
} |
311 |
|
|
312 |
int qemu_devtree_setprop_sized_cells_from_array(void *fdt, |
|
313 |
const char *node_path, |
|
314 |
const char *property, |
|
315 |
int numvalues, |
|
316 |
uint64_t *values) |
|
317 |
{ |
|
318 |
uint32_t *propcells; |
|
319 |
uint64_t value; |
|
320 |
int cellnum, vnum, ncells; |
|
321 |
uint32_t hival; |
|
322 |
|
|
323 |
propcells = g_new0(uint32_t, numvalues * 2); |
|
324 |
|
|
325 |
cellnum = 0; |
|
326 |
for (vnum = 0; vnum < numvalues; vnum++) { |
|
327 |
ncells = values[vnum * 2]; |
|
328 |
if (ncells != 1 && ncells != 2) { |
|
329 |
return -1; |
|
330 |
} |
|
331 |
value = values[vnum * 2 + 1]; |
|
332 |
hival = cpu_to_be32(value >> 32); |
|
333 |
if (ncells > 1) { |
|
334 |
propcells[cellnum++] = hival; |
|
335 |
} else if (hival != 0) { |
|
336 |
return -1; |
|
337 |
} |
|
338 |
propcells[cellnum++] = cpu_to_be32(value); |
|
339 |
} |
|
340 |
|
|
341 |
return qemu_devtree_setprop(fdt, node_path, property, propcells, |
|
342 |
cellnum * sizeof(uint32_t)); |
|
343 |
} |
Also available in: Unified diff