diff options
author | Che-Liang Chiou <clchiou@chromium.org> | 2011-07-02 02:59:05 +0800 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2011-08-29 10:58:42 -0700 |
commit | e6810c3099876d58f0525d592a391ed2031a3298 (patch) | |
tree | 6e464742f62eceac296c805dd216698d4281454c /lib/chromeos | |
parent | 43ba0ec710b4f7a1f40401444fee7af700733347 (diff) |
CHROMIUM: crossystem: [2] write crossystem data into a device tree
BUG=chromium-os:15744
TEST=see first patch
Change-Id: I6bb713572831c739dc83c0fb18e79edd401ace32
Reviewed-on: http://gerrit.chromium.org/gerrit/3574
Reviewed-by: Che-Liang Chiou <clchiou@chromium.org>
Tested-by: Che-Liang Chiou <clchiou@chromium.org>
Diffstat (limited to 'lib/chromeos')
-rw-r--r-- | lib/chromeos/crossystem_data.c | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/lib/chromeos/crossystem_data.c b/lib/chromeos/crossystem_data.c index eafbf170d5a..1e9f646947f 100644 --- a/lib/chromeos/crossystem_data.c +++ b/lib/chromeos/crossystem_data.c @@ -99,8 +99,56 @@ int crossystem_data_set_recovery_reason(crossystem_data_t *cdata, int crossystem_data_embed_into_fdt(crossystem_data_t *cdata, void *fdt, uint32_t *size_ptr) { - /* TODO implement later */ - return 0; + char path[] = "/crossystem"; + int nodeoffset, err; + + err = fdt_open_into(fdt, fdt, + fdt_totalsize(fdt) + sizeof(*cdata) + 4096); + if (err < 0) { + VBDEBUG(PREFIX "fail to resize fdt: %s\n", fdt_strerror(err)); + return 1; + } + *size_ptr = fdt_totalsize(fdt); + + nodeoffset = fdt_add_subnodes_from_path(fdt, 0, path); + if (nodeoffset < 0) { + VBDEBUG(PREFIX "fail to create subnode %s: %s\n", path, + fdt_strerror(nodeoffset)); + return 1; + } + +#define set_scalar_prop(f) \ + err |= fdt_setprop_cell(fdt, nodeoffset, #f, cdata->f) +#define set_array_prop(f) \ + err |= fdt_setprop(fdt, nodeoffset, #f, cdata->f, sizeof(cdata->f)) +#define set_string_prop(f) \ + err |= fdt_setprop_string(fdt, nodeoffset, #f, cdata->f) + + err = 0; + set_scalar_prop(total_size); + set_string_prop(signature); + set_scalar_prop(version); + set_scalar_prop(nvcxt_lba); + set_array_prop(vbnv); + set_array_prop(nvcxt_cache); + set_scalar_prop(write_protect_sw); + set_scalar_prop(recovery_sw); + set_scalar_prop(developer_sw); + set_array_prop(binf); + set_scalar_prop(chsw); + set_string_prop(hwid); + set_string_prop(fwid); + set_string_prop(frid); + set_scalar_prop(fmap_base); + set_array_prop(vbshared_data); + +#undef set_scalar_prop +#undef set_array_prop +#undef set_string_prop + + if (err) + VBDEBUG(PREFIX "fail to store all properties into fdt\n"); + return err; } void crossystem_data_dump(crossystem_data_t *cdata) |