Lines Matching +full:null +full:- +full:delimited
1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2010-2011 Calxeda, Inc.
25 "default-" CONFIG_SYS_ARCH "-" CONFIG_SYS_SOC,
27 "default-" CONFIG_SYS_ARCH,
29 NULL
54 * filenames based on mac addresses. Convert's ':' to '-', and adds "01-" to
59 * Returns 1 for success, -ENOENT if 'ethaddr' is undefined in the
69 return -EINVAL; in format_mac_pxe()
73 return -ENOENT; in format_mac_pxe()
75 sprintf(outbuf, "01-%02x-%02x-%02x-%02x-%02x-%02x", in format_mac_pxe()
85 * in. If bootfile isn't defined in the environment, return NULL, which should
105 if (last_slash == NULL) in get_bootfile_path()
108 path_len = (last_slash - bootfile) + 1; in get_bootfile_path()
114 return -1; in get_bootfile_path()
130 char *tftp_argv[] = {"tftp", NULL, NULL, NULL}; in do_get_tftp()
136 return -ENOENT; in do_get_tftp()
154 return -ENOENT; in do_get_ext2()
167 return -ENOENT; in do_get_fat()
180 return -ENOENT; in do_get_any()
187 * the bootfile path is NULL, we use file_path as is.
212 return -ENAMETOOLONG; in get_relfile()
251 return -ENOENT; in get_pxe_file()
254 return -EINVAL; in get_pxe_file()
283 return -ENAMETOOLONG; in get_pxelinux_path()
303 return -ENOENT; in pxe_uuid_path()
341 for (mask_pos = 7; mask_pos >= 0; mask_pos--) { in pxe_ipaddr_paths()
350 return -ENOENT; in pxe_ipaddr_paths()
431 return -ENOENT; in get_relfile_envaddr()
434 return -EINVAL; in get_relfile_envaddr()
443 * String literals must be recognized based on context - there is no
461 * name - the name of the menu as given on the 'menu label' line.
462 * kernel - the path to the kernel file to use for this label.
463 * append - kernel command line to use when booting this label
464 * initrd - path to the initrd to use for this label.
465 * attempted - 0 if we haven't tried to boot this label, 1 if we have.
466 * localboot - 1 if this label specified 'localboot', 0 otherwise.
467 * list - lets these form a list, which a pxe_menu struct will hold.
489 * title - the name of the menu as given by a 'menu title' line.
490 * default_label - the name of the default label, if any.
491 * timeout - time in tenths of a second to wait for a user key-press before
493 * prompt - if 0, don't prompt for a choice unless the timeout period is
496 * labels - a list of labels defined for the menu.
510 * Returns NULL if malloc fails.
519 return NULL; in label_create()
528 * kernel, append and initrd members, if they're non NULL.
530 * So - be sure to only use dynamically allocated memory for the members of
536 if (label->name) in label_destroy()
537 free(label->name); in label_destroy()
539 if (label->kernel) in label_destroy()
540 free(label->kernel); in label_destroy()
542 if (label->config) in label_destroy()
543 free(label->config); in label_destroy()
545 if (label->append) in label_destroy()
546 free(label->append); in label_destroy()
548 if (label->initrd) in label_destroy()
549 free(label->initrd); in label_destroy()
551 if (label->fdt) in label_destroy()
552 free(label->fdt); in label_destroy()
554 if (label->fdtdir) in label_destroy()
555 free(label->fdtdir); in label_destroy()
569 const char *c = label->menu ? label->menu : label->name; in label_print()
571 printf("%s:\t%s\n", label->num, c); in label_print()
576 * environment variable is defined. Its contents will be executed as U-Boot
590 return -ENOENT; in label_localboot()
592 if (label->append) { in label_localboot()
595 cli_simple_process_macros(label->append, bootargs); in label_localboot()
621 char *bootm_argv[] = { "bootm", NULL, NULL, NULL, NULL }; in label_boot()
625 char *fit_addr = NULL; in label_boot()
633 label->attempted = 1; in label_boot()
635 if (label->localboot) { in label_boot()
636 if (label->localboot_val >= 0) in label_boot()
641 if (label->kernel == NULL) { in label_boot()
643 label->name); in label_boot()
647 if (label->initrd) { in label_boot()
648 if (get_relfile_envaddr(cmdtp, label->initrd, "ramdisk_addr_r") < 0) { in label_boot()
650 label->name); in label_boot()
660 if (get_relfile_envaddr(cmdtp, label->kernel, "kernel_addr_r") < 0) { in label_boot()
662 label->name); in label_boot()
666 if (label->ipappend & 0x1) { in label_boot()
673 if (label->ipappend & 0x2) { in label_boot()
676 err = format_mac_pxe(mac_str + 8, sizeof(mac_str) - 8); in label_boot()
682 if ((label->ipappend & 0x3) || label->append) { in label_boot()
686 if (strlen(label->append ?: "") + in label_boot()
689 strlen(label->append ?: ""), in label_boot()
694 if (label->append) in label_boot()
695 strncpy(bootargs, label->append, in label_boot()
708 if (label->config) { in label_boot()
709 int len = strlen(bootm_argv[1]) + strlen(label->config) + 1; in label_boot()
716 snprintf(fit_addr, len, "%s%s", bootm_argv[1], label->config); in label_boot()
737 char *fdtfile = NULL; in label_boot()
738 char *fdtfilefree = NULL; in label_boot()
740 if (label->fdt) { in label_boot()
741 fdtfile = label->fdt; in label_boot()
742 } else if (label->fdtdir) { in label_boot()
759 f2 = "-"; in label_boot()
764 len = strlen(label->fdtdir); in label_boot()
767 else if (label->fdtdir[len - 1] != '/') in label_boot()
772 len = strlen(label->fdtdir) + strlen(slash) + in label_boot()
782 label->fdtdir, slash, f1, f2, f3, f4); in label_boot()
791 label->name); in label_boot()
795 bootm_argv[3] = NULL; in label_boot()
804 bootm_argv[2] = "-"; in label_boot()
857 * A token - given by a value and a type.
886 {NULL, T_INVALID}
906 * Characters from *p are copied into t-val until a character equal to
915 * of the token - the ending delimiter.
917 * On success, the new value of t->val is returned. Memory for t->val is
919 * memory is available, NULL is returned.
930 * is reached. Then, we take e - b to find the length of the token. in get_string()
940 len = e - b; in get_string()
946 t->val = malloc(len + 1); in get_string()
947 if (!t->val) in get_string()
948 return NULL; in get_string()
952 t->val[i] = tolower(*b); in get_string()
954 t->val[i] = *b; in get_string()
957 t->val[len] = '\0'; in get_string()
964 t->type = T_STRING; in get_string()
966 return t->val; in get_string()
977 if (!strcmp(t->val, keywords[i].val)) { in get_keyword()
978 t->type = keywords[i].type; in get_keyword()
994 t->type = T_INVALID; in get_token()
1010 t->type = T_EOL; in get_token()
1013 t->type = T_EOF; in get_token()
1020 * token delimited by whitespace, and then check if it in get_token()
1060 printf("Expected string literal: %.*s\n", (int)(*c - s), s); in parse_sliteral()
1061 return -EINVAL; in parse_sliteral()
1080 printf("Expected string: %.*s\n", (int)(*c - s), s); in parse_integer()
1081 return -EINVAL; in parse_integer()
1084 *dst = simple_strtol(t.val, NULL, 10); in parse_integer()
1115 (int)(*c - s), s); in handle_include()
1154 err = parse_sliteral(c, &cfg->title); in parse_menu()
1165 (int)(*c - s), s); in parse_menu()
1191 if (!cfg->default_label) in parse_label_menu()
1192 cfg->default_label = strdup(label->name); in parse_label_menu()
1194 if (!cfg->default_label) in parse_label_menu()
1195 return -ENOMEM; in parse_label_menu()
1199 parse_sliteral(c, &label->menu); in parse_label_menu()
1203 (int)(*c - s), s); in parse_label_menu()
1220 err = parse_sliteral(c, &label->kernel); in parse_label_kernel()
1224 s = strstr(label->kernel, "#"); in parse_label_kernel()
1228 label->config = malloc(strlen(s) + 1); in parse_label_kernel()
1229 if (!label->config) in parse_label_kernel()
1230 return -ENOMEM; in parse_label_kernel()
1232 strcpy(label->config, s); in parse_label_kernel()
1256 return -ENOMEM; in parse_label()
1258 err = parse_sliteral(c, &label->name); in parse_label()
1260 printf("Expected label name: %.*s\n", (int)(*c - s), s); in parse_label()
1262 return -EINVAL; in parse_label()
1265 list_add_tail(&label->list, &cfg->labels); in parse_label()
1283 err = parse_sliteral(c, &label->append); in parse_label()
1284 if (label->initrd) in parse_label()
1286 s = strstr(label->append, "initrd="); in parse_label()
1290 len = (int)(strchr(s, ' ') - s); in parse_label()
1291 label->initrd = malloc(len + 1); in parse_label()
1292 strncpy(label->initrd, s, len); in parse_label()
1293 label->initrd[len] = '\0'; in parse_label()
1298 if (!label->initrd) in parse_label()
1299 err = parse_sliteral(c, &label->initrd); in parse_label()
1303 if (!label->fdt) in parse_label()
1304 err = parse_sliteral(c, &label->fdt); in parse_label()
1308 if (!label->fdtdir) in parse_label()
1309 err = parse_sliteral(c, &label->fdtdir); in parse_label()
1313 label->localboot = 1; in parse_label()
1314 err = parse_integer(c, &label->localboot_val); in parse_label()
1318 err = parse_integer(c, &label->ipappend); in parse_label()
1326 * put the token back! we don't want it - it's the end in parse_label()
1364 return -EMLINK; in parse_pxefile_top()
1375 cfg->prompt = 1; in parse_pxefile_top()
1382 err = parse_integer(&p, &cfg->timeout); in parse_pxefile_top()
1394 if (cfg->default_label) in parse_pxefile_top()
1395 free(cfg->default_label); in parse_pxefile_top()
1397 cfg->default_label = label_name; in parse_pxefile_top()
1420 (int)(p - s), s); in parse_pxefile_top()
1437 if (cfg->title) in destroy_pxe_menu()
1438 free(cfg->title); in destroy_pxe_menu()
1440 if (cfg->default_label) in destroy_pxe_menu()
1441 free(cfg->default_label); in destroy_pxe_menu()
1443 list_for_each_safe(pos, n, &cfg->labels) { in destroy_pxe_menu()
1456 * Returns NULL if there is an error, otherwise, returns a pointer to a
1470 return NULL; in parse_pxefile()
1474 INIT_LIST_HEAD(&cfg->labels); in parse_pxefile()
1482 return NULL; in parse_pxefile()
1489 * Converts a pxe_menu struct into a menu struct for use with U-Boot's generic
1499 char *default_num = NULL; in pxe_menu_to_menu()
1504 m = menu_create(cfg->title, DIV_ROUND_UP(cfg->timeout, 10), in pxe_menu_to_menu()
1505 cfg->prompt, label_print, NULL, NULL); in pxe_menu_to_menu()
1508 return NULL; in pxe_menu_to_menu()
1510 list_for_each(pos, &cfg->labels) { in pxe_menu_to_menu()
1513 sprintf(label->num, "%d", i++); in pxe_menu_to_menu()
1514 if (menu_item_add(m, label->num, label) != 1) { in pxe_menu_to_menu()
1516 return NULL; in pxe_menu_to_menu()
1518 if (cfg->default_label && in pxe_menu_to_menu()
1519 (strcmp(label->name, cfg->default_label) == 0)) in pxe_menu_to_menu()
1520 default_num = label->num; in pxe_menu_to_menu()
1531 if (err != -ENOENT) { in pxe_menu_to_menu()
1533 return NULL; in pxe_menu_to_menu()
1536 printf("Missing default: %s\n", cfg->default_label); in pxe_menu_to_menu()
1551 list_for_each(pos, &cfg->labels) { in boot_unattempted_labels()
1554 if (!label->attempted) in boot_unattempted_labels()
1588 * err == -ENOENT if the menu was setup to select the default but no in handle_pxe_menu()
1600 } else if (err != -ENOENT) { in handle_pxe_menu()
1640 if (cfg == NULL) { in do_pxe_boot()
1669 argc--; in do_pxe()
1675 return cp->cmd(cmdtp, flag, argc, argv); in do_pxe()
1683 "get - try to retrieve a pxe file using tftp\npxe "
1684 "boot [pxefile_addr_r] - boot from the pxe file at pxefile_addr_r\n"
1703 if (argc > 1 && strstr(argv[1], "-p")) { in do_sysboot()
1705 argc--; in do_sysboot()
1752 if (cfg == NULL) { in do_sysboot()
1758 cfg->prompt = 1; in do_sysboot()
1770 "[-p] <interface> <dev[:part]> <ext2|fat|any> [addr] [filename]\n"
1771 " - load and parse syslinux menu file 'filename' from ext2, fat\n"