summaryrefslogtreecommitdiff
path: root/utils/imxtools/sbtools/elftosb1.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils/imxtools/sbtools/elftosb1.c')
-rw-r--r--utils/imxtools/sbtools/elftosb1.c51
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
242static 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
256static 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
449CMD_FN(cmd_rom)
450{
451 sb->rom_version = args[0].uint;
452 return 0;
453}
454
455CMD_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
462CMD_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},
425struct cmd_entry_t g_cmds[] = 470struct 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