X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=lib%2Fpb-protocol%2Fpb-protocol.c;h=bcc7230a0060c062600ed69c66aadfde2cdf2f25;hp=2792bf832c7ea2866a6accbe3b82b191eaa406f4;hb=37d865eb008f746a0b013557312c6b44c7236eb7;hpb=6b87c9c7776796c766e3dcbdb32f5d292f7125d5 diff --git a/lib/pb-protocol/pb-protocol.c b/lib/pb-protocol/pb-protocol.c index 2792bf8..bcc7230 100644 --- a/lib/pb-protocol/pb-protocol.c +++ b/lib/pb-protocol/pb-protocol.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -33,6 +34,7 @@ * 4-byte len, icon_file * 4-byte len, boot_image_file * 4-byte len, initrd_file + * 4-byte len, dtb_file * 4-byte len, boot_args * * action = 0x2: device remove message @@ -44,6 +46,7 @@ * 4-byte len, boot option id * 4-byte len, boot_image_file * 4-byte len, initrd_file + * 4-byte len, dtb_file * 4-byte len, boot_args * */ @@ -66,6 +69,7 @@ void pb_protocol_dump_device(const struct device *dev, const char *text, fprintf(stream, "%s\t\ticon: %s\n", text, opt->icon_file); fprintf(stream, "%s\t\tboot: %s\n", text, opt->boot_image_file); fprintf(stream, "%s\t\tinit: %s\n", text, opt->initrd_file); + fprintf(stream, "%s\t\tdtb: %s\n", text, opt->dtb_file); fprintf(stream, "%s\t\targs: %s\n", text, opt->boot_args); } } @@ -177,7 +181,9 @@ int pb_protocol_boot_option_len(const struct boot_option *opt) 4 + optional_strlen(opt->icon_file) + 4 + optional_strlen(opt->boot_image_file) + 4 + optional_strlen(opt->initrd_file) + - 4 + optional_strlen(opt->boot_args); + 4 + optional_strlen(opt->dtb_file) + + 4 + optional_strlen(opt->boot_args) + + sizeof(opt->is_default); } int pb_protocol_boot_len(const struct boot_command *boot) @@ -185,6 +191,7 @@ int pb_protocol_boot_len(const struct boot_command *boot) return 4 + optional_strlen(boot->option_id) + 4 + optional_strlen(boot->boot_image_file) + 4 + optional_strlen(boot->initrd_file) + + 4 + optional_strlen(boot->dtb_file) + 4 + optional_strlen(boot->boot_args); } @@ -224,8 +231,12 @@ int pb_protocol_serialise_boot_option(const struct boot_option *opt, pos += pb_protocol_serialise_string(pos, opt->icon_file); pos += pb_protocol_serialise_string(pos, opt->boot_image_file); pos += pb_protocol_serialise_string(pos, opt->initrd_file); + pos += pb_protocol_serialise_string(pos, opt->dtb_file); pos += pb_protocol_serialise_string(pos, opt->boot_args); + *(bool *)pos = opt->is_default; + pos += sizeof(bool); + assert(pos <= buf + buf_len); (void)buf_len; @@ -240,6 +251,7 @@ int pb_protocol_serialise_boot_command(const struct boot_command *boot, pos += pb_protocol_serialise_string(pos, boot->option_id); pos += pb_protocol_serialise_string(pos, boot->boot_image_file); pos += pb_protocol_serialise_string(pos, boot->initrd_file); + pos += pb_protocol_serialise_string(pos, boot->dtb_file); pos += pb_protocol_serialise_string(pos, boot->boot_args); assert(pos <= buf + buf_len); @@ -418,9 +430,16 @@ int pb_protocol_deserialise_boot_option(struct boot_option *opt, if (read_string(opt, &pos, &len, &opt->initrd_file)) goto out; + if (read_string(opt, &pos, &len, &opt->dtb_file)) + goto out; + if (read_string(opt, &pos, &len, &opt->boot_args)) goto out; + if (len < sizeof(bool)) + goto out; + opt->is_default = *(bool *)(pos); + rc = 0; out: @@ -446,6 +465,9 @@ int pb_protocol_deserialise_boot_command(struct boot_command *cmd, if (read_string(cmd, &pos, &len, &cmd->initrd_file)) goto out; + if (read_string(cmd, &pos, &len, &cmd->dtb_file)) + goto out; + if (read_string(cmd, &pos, &len, &cmd->boot_args)) goto out;