diff options
Diffstat (limited to 'utils/imxtools')
-rw-r--r-- | utils/imxtools/sbtools/elftosb1.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/utils/imxtools/sbtools/elftosb1.c b/utils/imxtools/sbtools/elftosb1.c index 417f7eeb46..b40b62f390 100644 --- a/utils/imxtools/sbtools/elftosb1.c +++ b/utils/imxtools/sbtools/elftosb1.c | |||
@@ -239,6 +239,31 @@ static void *load_file(const char *filename, int *size) | |||
239 | return data; | 239 | return data; |
240 | } | 240 | } |
241 | 241 | ||
242 | static bool parse_sb_sub_version(uint16_t *ver, char *str) | ||
243 | { | ||
244 | *ver = 0; | ||
245 | for(int i = 0; str[i]; i++) | ||
246 | { | ||
247 | if(i >= 4) | ||
248 | return false; | ||
249 | if(str[i] < '0' || str[i] > '9') | ||
250 | return false; | ||
251 | *ver = *ver << 4 | (str[i] - '0'); | ||
252 | } | ||
253 | return true; | ||
254 | } | ||
255 | |||
256 | static bool parse_sb_version(struct sb1_version_t *ver, char *str) | ||
257 | { | ||
258 | char *p = strchr(str, '.'); | ||
259 | char *q = strchr(p + 1, '.'); | ||
260 | if(p == NULL || q == NULL) return false; | ||
261 | *p = *q = 0; | ||
262 | return parse_sb_sub_version(&ver->major, str) && | ||
263 | parse_sb_sub_version(&ver->minor, p + 1) && | ||
264 | parse_sb_sub_version(&ver->revision, q + 1); | ||
265 | } | ||
266 | |||
242 | /** | 267 | /** |
243 | * Command line parsing | 268 | * Command line parsing |
244 | */ | 269 | */ |
@@ -421,6 +446,26 @@ CMD_FN(cmd_loadjumpreturn) | |||
421 | return load_elf(sb, args[0].str, SB1_INST_CALL); | 446 | return load_elf(sb, args[0].str, SB1_INST_CALL); |
422 | } | 447 | } |
423 | 448 | ||
449 | CMD_FN(cmd_rom) | ||
450 | { | ||
451 | sb->rom_version = args[0].uint; | ||
452 | return 0; | ||
453 | } | ||
454 | |||
455 | CMD_FN(cmd_product) | ||
456 | { | ||
457 | if(!parse_sb_version(&sb->product_ver, args[0].str)) | ||
458 | bug("Invalid version string '%s'\n", args[0].str); | ||
459 | return 0; | ||
460 | } | ||
461 | |||
462 | CMD_FN(cmd_component) | ||
463 | { | ||
464 | if(!parse_sb_version(&sb->component_ver, args[0].str)) | ||
465 | bug("Invalid version string '%s'\n", args[0].str); | ||
466 | return 0; | ||
467 | } | ||
468 | |||
424 | #define CMD(name,fn,nr_args,...) {name,nr_args,{__VA_ARGS__},fn}, | 469 | #define CMD(name,fn,nr_args,...) {name,nr_args,{__VA_ARGS__},fn}, |
425 | struct cmd_entry_t g_cmds[] = | 470 | struct cmd_entry_t g_cmds[] = |
426 | { | 471 | { |
@@ -450,6 +495,12 @@ struct cmd_entry_t g_cmds[] = | |||
450 | CMD("-loadjumpreturn", cmd_loadjumpreturn, 1, ARG_STR) | 495 | CMD("-loadjumpreturn", cmd_loadjumpreturn, 1, ARG_STR) |
451 | CMD("-j", cmd_loadjump, 1, ARG_STR) | 496 | CMD("-j", cmd_loadjump, 1, ARG_STR) |
452 | CMD("-loadjump", cmd_loadjump, 1, ARG_STR) | 497 | CMD("-loadjump", cmd_loadjump, 1, ARG_STR) |
498 | CMD("-R", cmd_rom, 1, ARG_UINT) | ||
499 | CMD("-rom", cmd_rom, 1, ARG_UINT) | ||
500 | CMD("-p", cmd_product, 1, ARG_STR) | ||
501 | CMD("-product", cmd_product, 1, ARG_STR) | ||
502 | CMD("-v", cmd_component, 1, ARG_STR) | ||
503 | CMD("-component", cmd_component, 1, ARG_STR) | ||
453 | }; | 504 | }; |
454 | #undef CMD | 505 | #undef CMD |
455 | 506 | ||