cmd: mem: Drop eldk-4.2 workaround and use cast in unmap_sysmem()
[oweals/u-boot.git] / cmd / pxe_utils.c
index 9ec7e3bc2bcc0ba231ce5b63001a11e61c64bd81..53af04d7dc75bdef091c34f7d94c7d97ace60777 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <common.h>
 #include <env.h>
+#include <image.h>
 #include <malloc.h>
 #include <mapmem.h>
 #include <lcd.h>
@@ -22,7 +23,7 @@
 
 #include "pxe_utils.h"
 
-#define MAX_TFTP_PATH_LEN 127
+#define MAX_TFTP_PATH_LEN 512
 
 bool is_pxe;
 
@@ -78,14 +79,14 @@ static int get_bootfile_path(const char *file_path, char *bootfile_path,
 
        last_slash = strrchr(bootfile, '/');
 
-       if (last_slash == NULL                          )
+       if (!last_slash)
                goto ret;
 
        path_len = (last_slash - bootfile) + 1;
 
        if (bootfile_path_size < path_len) {
                printf("bootfile_path too small. (%zd < %zd)\n",
-                               bootfile_path_size, path_len);
+                      bootfile_path_size, path_len);
 
                return -1;
        }
@@ -109,10 +110,10 @@ int (*do_getfile)(cmd_tbl_t *cmdtp, const char *file_path, char *file_addr);
  * Returns 1 for success, or < 0 on error.
  */
 static int get_relfile(cmd_tbl_t *cmdtp, const char *file_path,
-       unsigned long file_addr)
+                      unsigned long file_addr)
 {
        size_t path_len;
-       char relfile[MAX_TFTP_PATH_LEN+1];
+       char relfile[MAX_TFTP_PATH_LEN + 1];
        char addr_buf[18];
        int err;
 
@@ -125,9 +126,7 @@ static int get_relfile(cmd_tbl_t *cmdtp, const char *file_path,
        path_len += strlen(relfile);
 
        if (path_len > MAX_TFTP_PATH_LEN) {
-               printf("Base path too long (%s%s)\n",
-                                       relfile,
-                                       file_path);
+               printf("Base path too long (%s%s)\n", relfile, file_path);
 
                return -ENAMETOOLONG;
        }
@@ -149,7 +148,7 @@ static int get_relfile(cmd_tbl_t *cmdtp, const char *file_path,
  * Returns 1 on success, or < 0 for error.
  */
 int get_pxe_file(cmd_tbl_t *cmdtp, const char *file_path,
-       unsigned long file_addr)
+                unsigned long file_addr)
 {
        unsigned long config_file_size;
        char *tftp_filesize;
@@ -182,7 +181,6 @@ int get_pxe_file(cmd_tbl_t *cmdtp, const char *file_path,
 
 #define PXELINUX_DIR "pxelinux.cfg/"
 
-
 /*
  * Retrieves a file in the 'pxelinux.cfg' folder. Since this uses get_pxe_file
  * to do the hard work, the location of the 'pxelinux.cfg' folder is generated
@@ -191,14 +189,14 @@ int get_pxe_file(cmd_tbl_t *cmdtp, const char *file_path,
  * Returns 1 on success or < 0 on error.
  */
 int get_pxelinux_path(cmd_tbl_t *cmdtp, const char *file,
-       unsigned long pxefile_addr_r)
+                     unsigned long pxefile_addr_r)
 {
        size_t base_len = strlen(PXELINUX_DIR);
-       char path[MAX_TFTP_PATH_LEN+1];
+       char path[MAX_TFTP_PATH_LEN + 1];
 
        if (base_len + strlen(file) > MAX_TFTP_PATH_LEN) {
                printf("path (%s%s) too long, skipping\n",
-                               PXELINUX_DIR, file);
+                      PXELINUX_DIR, file);
                return -ENAMETOOLONG;
        }
 
@@ -214,7 +212,8 @@ int get_pxelinux_path(cmd_tbl_t *cmdtp, const char *file,
  *
  * Returns 1 on success or < 0 on error.
  */
-static int get_relfile_envaddr(cmd_tbl_t *cmdtp, const char *file_path, const char *envaddr_name)
+static int get_relfile_envaddr(cmd_tbl_t *cmdtp, const char *file_path,
+                              const char *envaddr_name)
 {
        unsigned long file_addr;
        char *envaddr;
@@ -365,16 +364,16 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label)
                return 0;
        }
 
-       if (label->kernel == NULL) {
+       if (!label->kernel) {
                printf("No kernel given, skipping %s\n",
-                               label->name);
+                      label->name);
                return 1;
        }
 
        if (label->initrd) {
                if (get_relfile_envaddr(cmdtp, label->initrd, "ramdisk_addr_r") < 0) {
                        printf("Skipping %s for failure retrieving initrd\n",
-                                       label->name);
+                              label->name);
                        return 1;
                }
 
@@ -387,7 +386,7 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label)
 
        if (get_relfile_envaddr(cmdtp, label->kernel, "kernel_addr_r") < 0) {
                printf("Skipping %s for failure retrieving kernel\n",
-                               label->name);
+                      label->name);
                return 1;
        }
 
@@ -400,6 +399,7 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label)
 #ifdef CONFIG_CMD_NET
        if (label->ipappend & 0x2) {
                int err;
+
                strcpy(mac_str, " BOOTIF=");
                err = format_mac_pxe(mac_str + 8, sizeof(mac_str) - 8);
                if (err < 0)
@@ -418,17 +418,17 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label)
                               strlen(ip_str), strlen(mac_str),
                               sizeof(bootargs));
                        return 1;
-               } else {
-                       if (label->append)
-                               strncpy(bootargs, label->append,
-                                       sizeof(bootargs));
-                       strcat(bootargs, ip_str);
-                       strcat(bootargs, mac_str);
-
-                       cli_simple_process_macros(bootargs, finalbootargs);
-                       env_set("bootargs", finalbootargs);
-                       printf("append: %s\n", finalbootargs);
                }
+
+               if (label->append)
+                       strncpy(bootargs, label->append, sizeof(bootargs));
+
+               strcat(bootargs, ip_str);
+               strcat(bootargs, mac_str);
+
+               cli_simple_process_macros(bootargs, finalbootargs);
+               env_set("bootargs", finalbootargs);
+               printf("append: %s\n", finalbootargs);
        }
 
        bootm_argv[1] = env_get("kernel_addr_r");
@@ -512,11 +512,13 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label)
                }
 
                if (fdtfile) {
-                       int err = get_relfile_envaddr(cmdtp, fdtfile, "fdt_addr_r");
+                       int err = get_relfile_envaddr(cmdtp, fdtfile,
+                                                     "fdt_addr_r");
+
                        free(fdtfilefree);
                        if (err < 0) {
                                printf("Skipping %s for failure retrieving fdt\n",
-                                               label->name);
+                                      label->name);
                                goto cleanup;
                        }
                } else {
@@ -659,7 +661,8 @@ static char *get_string(char **p, struct token *t, char delim, int lower)
         * e is incremented until we find the ending delimiter, or a NUL byte
         * is reached. Then, we take e - b to find the length of the token.
         */
-       b = e = *p;
+       b = *p;
+       e = *p;
 
        while (*e) {
                if ((delim == ' ' && isspace(*e)) || delim == *e)
@@ -819,7 +822,7 @@ static int parse_integer(char **c, int *dst)
 }
 
 static int parse_pxefile_top(cmd_tbl_t *cmdtp, char *p, unsigned long base,
-       struct pxe_menu *cfg, int nest_level);
+                            struct pxe_menu *cfg, int nest_level);
 
 /*
  * Parse an include statement, and retrieve and parse the file it mentions.
@@ -830,7 +833,7 @@ static int parse_pxefile_top(cmd_tbl_t *cmdtp, char *p, unsigned long base,
  * incremented here.
  */
 static int handle_include(cmd_tbl_t *cmdtp, char **c, unsigned long base,
-                               struct pxe_menu *cfg, int nest_level)
+                         struct pxe_menu *cfg, int nest_level)
 {
        char *include_path;
        char *s = *c;
@@ -841,8 +844,7 @@ static int handle_include(cmd_tbl_t *cmdtp, char **c, unsigned long base,
        err = parse_sliteral(c, &include_path);
 
        if (err < 0) {
-               printf("Expected include path: %.*s\n",
-                                (int)(*c - s), s);
+               printf("Expected include path: %.*s\n", (int)(*c - s), s);
                return err;
        }
 
@@ -871,7 +873,7 @@ static int handle_include(cmd_tbl_t *cmdtp, char **c, unsigned long base,
  * a file it includes, 3 when parsing a file included by that file, and so on.
  */
 static int parse_menu(cmd_tbl_t *cmdtp, char **c, struct pxe_menu *cfg,
-                               unsigned long base, int nest_level)
+                     unsigned long base, int nest_level)
 {
        struct token t;
        char *s = *c;
@@ -886,8 +888,7 @@ static int parse_menu(cmd_tbl_t *cmdtp, char **c, struct pxe_menu *cfg,
                break;
 
        case T_INCLUDE:
-               err = handle_include(cmdtp, c, base, cfg,
-                                               nest_level + 1);
+               err = handle_include(cmdtp, c, base, cfg, nest_level + 1);
                break;
 
        case T_BACKGROUND:
@@ -896,7 +897,7 @@ static int parse_menu(cmd_tbl_t *cmdtp, char **c, struct pxe_menu *cfg,
 
        default:
                printf("Ignoring malformed menu command: %.*s\n",
-                               (int)(*c - s), s);
+                      (int)(*c - s), s);
        }
 
        if (err < 0)
@@ -911,7 +912,7 @@ static int parse_menu(cmd_tbl_t *cmdtp, char **c, struct pxe_menu *cfg,
  * Handles parsing a 'menu line' when we're parsing a label.
  */
 static int parse_label_menu(char **c, struct pxe_menu *cfg,
-                               struct pxe_label *label)
+                           struct pxe_label *label)
 {
        struct token t;
        char *s;
@@ -934,7 +935,7 @@ static int parse_label_menu(char **c, struct pxe_menu *cfg,
                break;
        default:
                printf("Ignoring malformed menu command: %.*s\n",
-                               (int)(*c - s), s);
+                      (int)(*c - s), s);
        }
 
        eol_or_eof(c);
@@ -1085,7 +1086,7 @@ static int parse_label(char **c, struct pxe_menu *cfg)
  * Returns 1 on success, < 0 on error.
  */
 static int parse_pxefile_top(cmd_tbl_t *cmdtp, char *p, unsigned long base,
-                               struct pxe_menu *cfg, int nest_level)
+                            struct pxe_menu *cfg, int nest_level)
 {
        struct token t;
        char *s, *b, *label_name;
@@ -1108,8 +1109,8 @@ static int parse_pxefile_top(cmd_tbl_t *cmdtp, char *p, unsigned long base,
                case T_MENU:
                        cfg->prompt = 1;
                        err = parse_menu(cmdtp, &p, cfg,
-                               base + ALIGN(strlen(b) + 1, 4),
-                               nest_level);
+                                        base + ALIGN(strlen(b) + 1, 4),
+                                        nest_level);
                        break;
 
                case T_TIMEOUT:
@@ -1135,8 +1136,8 @@ static int parse_pxefile_top(cmd_tbl_t *cmdtp, char *p, unsigned long base,
 
                case T_INCLUDE:
                        err = handle_include(cmdtp, &p,
-                               base + ALIGN(strlen(b), 4), cfg,
-                               nest_level + 1);
+                                            base + ALIGN(strlen(b), 4), cfg,
+                                            nest_level + 1);
                        break;
 
                case T_PROMPT:
@@ -1151,7 +1152,7 @@ static int parse_pxefile_top(cmd_tbl_t *cmdtp, char *p, unsigned long base,
 
                default:
                        printf("Ignoring unknown command: %.*s\n",
-                                                       (int)(p - s), s);
+                              (int)(p - s), s);
                        eol_or_eof(&p);
                }
 
@@ -1252,7 +1253,6 @@ static struct menu *pxe_menu_to_menu(struct pxe_menu *cfg)
                if (cfg->default_label &&
                    (strcmp(label->name, cfg->default_label) == 0))
                        default_num = label->num;
-
        }
 
        /*
@@ -1311,9 +1311,10 @@ void handle_pxe_menu(cmd_tbl_t *cmdtp, struct pxe_menu *cfg)
 #ifdef CONFIG_CMD_BMP
        /* display BMP if available */
        if (cfg->bmp) {
-               if (get_relfile(cmdtp, cfg->bmp, load_addr)) {
-                       run_command("cls", 0);
-                       bmp_display(load_addr,
+               if (get_relfile(cmdtp, cfg->bmp, image_load_addr)) {
+                       if (CONFIG_IS_ENABLED(CMD_CLS))
+                               run_command("cls", 0);
+                       bmp_display(image_load_addr,
                                    BMP_ALIGN_CENTER, BMP_ALIGN_CENTER);
                } else {
                        printf("Skipping background bmp %s for failure\n",