From 39f985536d3f0df5dba32c15b64ba2b5d32dd296 Mon Sep 17 00:00:00 2001 From: Rob Herring Date: Sun, 2 Dec 2012 21:00:28 -0600 Subject: pxe: add support for per arch and SoC default paths A pxelinux server setup for "default" menu is typically an x86 binary. This does not work well with a mixed architecture setup. Extend the default search to look for default-- and then default- before falling back to just "default". Signed-off-by: Rob Herring diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c index 5a239ed..59483a7 100644 --- a/common/cmd_pxe.c +++ b/common/cmd_pxe.c @@ -26,6 +26,13 @@ #define MAX_TFTP_PATH_LEN 127 +const char *pxe_default_paths[] = { + "default-" CONFIG_SYS_ARCH "-" CONFIG_SYS_SOC, + "default-" CONFIG_SYS_ARCH, + "default", + NULL +}; + /* * Like getenv, but prints an error if envvar isn't defined in the * environment. It always returns what getenv does, so it can be used in @@ -339,7 +346,7 @@ do_pxe_get(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { char *pxefile_addr_str; unsigned long pxefile_addr_r; - int err; + int err, i = 0; do_getfile = do_get_tftp; @@ -360,16 +367,23 @@ do_pxe_get(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) * Keep trying paths until we successfully get a file we're looking * for. */ - if (pxe_uuid_path((void *)pxefile_addr_r) > 0 - || pxe_mac_path((void *)pxefile_addr_r) > 0 - || pxe_ipaddr_paths((void *)pxefile_addr_r) > 0 - || get_pxelinux_path("default", (void *)pxefile_addr_r) > 0) { - + if (pxe_uuid_path((void *)pxefile_addr_r) > 0 || + pxe_mac_path((void *)pxefile_addr_r) > 0 || + pxe_ipaddr_paths((void *)pxefile_addr_r) > 0) { printf("Config file found\n"); return 0; } + while (pxe_default_paths[i]) { + if (get_pxelinux_path(pxe_default_paths[i], + (void *)pxefile_addr_r) > 0) { + printf("Config file found\n"); + return 0; + } + i++; + } + printf("Config file not found\n"); return 1; -- cgit v0.10.2