pxe: add support for per arch and SoC default paths
authorRob Herring <rob.herring@calxeda.com>
Mon, 3 Dec 2012 03:00:28 +0000 (21:00 -0600)
committerJoe Hershberger <joe.hershberger@ni.com>
Tue, 25 Jun 2013 00:07:34 +0000 (19:07 -0500)
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-<arch>-<soc> and then default-<arch> before
falling back to just "default".

Signed-off-by: Rob Herring <rob.herring@calxeda.com>
common/cmd_pxe.c

index 5a239edebe688aa95ccdc1e384bd53c553d8cac0..59483a75c8fd7960b7dcb300a03ef5e3bebf37bf 100644 (file)
 
 #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;