]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - drivers/usb/gadget/f_fastboot.c
treewide: replace with error() with pr_err()
[people/ms/u-boot.git] / drivers / usb / gadget / f_fastboot.c
index 28b244a8d002c1c6d15c8372477dd755e0e35abe..7acffb6c87e062757f2bc820100b2896c75a0d27 100644 (file)
@@ -59,7 +59,6 @@ static inline struct f_fastboot *func_to_fastboot(struct usb_function *f)
 }
 
 static struct f_fastboot *fastboot_func;
-static unsigned int fastboot_flash_session_id;
 static unsigned int download_size;
 static unsigned int download_bytes;
 
@@ -152,16 +151,18 @@ static void rx_handler_command(struct usb_ep *ep, struct usb_request *req);
 static int strcmp_l1(const char *s1, const char *s2);
 
 
-void fastboot_fail(char *response, const char *reason)
+static char *fb_response_str;
+
+void fastboot_fail(const char *reason)
 {
-       strncpy(response, "FAIL\0", 5);
-       strncat(response, reason, FASTBOOT_RESPONSE_LEN - 4 - 1);
+       strncpy(fb_response_str, "FAIL\0", 5);
+       strncat(fb_response_str, reason, FASTBOOT_RESPONSE_LEN - 4 - 1);
 }
 
-void fastboot_okay(char *response, const char *reason)
+void fastboot_okay(const char *reason)
 {
-       strncpy(response, "OKAY\0", 5);
-       strncat(response, reason, FASTBOOT_RESPONSE_LEN - 4 - 1);
+       strncpy(fb_response_str, "OKAY\0", 5);
+       strncat(fb_response_str, reason, FASTBOOT_RESPONSE_LEN - 4 - 1);
 }
 
 static void fastboot_complete(struct usb_ep *ep, struct usb_request *req)
@@ -211,7 +212,7 @@ static int fastboot_bind(struct usb_configuration *c, struct usb_function *f)
                f->hs_descriptors = fb_hs_function;
        }
 
-       s = getenv("serial#");
+       s = env_get("serial#");
        if (s)
                g_dnl_set_serialnumber((char *)s);
 
@@ -409,7 +410,7 @@ static void cb_getvar(struct usb_ep *ep, struct usb_request *req)
 
        strsep(&cmd, ":");
        if (!cmd) {
-               error("missing variable");
+               pr_err("missing variable");
                fastboot_tx_write_str("FAILmissing var");
                return;
        }
@@ -424,32 +425,31 @@ static void cb_getvar(struct usb_ep *ep, struct usb_request *req)
 
                sprintf(str_num, "0x%08x", CONFIG_FASTBOOT_BUF_SIZE);
                strncat(response, str_num, chars_left);
-
-               /*
-                * This also indicates the start of a new flashing
-                * "session", in which we could have 1-N buffers to
-                * write to a partition.
-                *
-                * Reset our session counter.
-                */
-               fastboot_flash_session_id = 0;
        } else if (!strcmp_l1("serialno", cmd)) {
-               s = getenv("serial#");
+               s = env_get("serial#");
                if (s)
                        strncat(response, s, chars_left);
                else
                        strcpy(response, "FAILValue not set");
        } else {
-               char envstr[32];
+               char *envstr;
 
-               snprintf(envstr, sizeof(envstr) - 1, "fastboot.%s", cmd);
-               s = getenv(envstr);
+               envstr = malloc(strlen("fastboot.") + strlen(cmd) + 1);
+               if (!envstr) {
+                       fastboot_tx_write_str("FAILmalloc error");
+                       return;
+               }
+
+               sprintf(envstr, "fastboot.%s", cmd);
+               s = env_get(envstr);
                if (s) {
                        strncat(response, s, chars_left);
                } else {
                        printf("WARNING: unknown variable: %s\n", cmd);
                        strcpy(response, "FAILVariable not implemented");
                }
+
+               free(envstr);
        }
        fastboot_tx_write_str(response);
 }
@@ -561,7 +561,7 @@ static void do_bootm_on_complete(struct usb_ep *ep, struct usb_request *req)
 
        puts("Booting kernel..\n");
 
-       sprintf(boot_addr_start, "0x%lx", load_addr);
+       sprintf(boot_addr_start, "0x%lx", (long)CONFIG_FASTBOOT_BUF_ADDR);
        do_bootm(NULL, 0, 2, bootm_args);
 
        /* This only happens if image is somehow faulty so we start over */
@@ -593,23 +593,24 @@ static void cb_flash(struct usb_ep *ep, struct usb_request *req)
 
        strsep(&cmd, ":");
        if (!cmd) {
-               error("missing partition name");
+               pr_err("missing partition name");
                fastboot_tx_write_str("FAILmissing partition name");
                return;
        }
 
-       strcpy(response, "FAILno flash device defined");
+       /* initialize the response buffer */
+       fb_response_str = response;
+
+       fastboot_fail("no flash device defined");
 #ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV
-       fb_mmc_flash_write(cmd, fastboot_flash_session_id,
-                          (void *)CONFIG_FASTBOOT_BUF_ADDR,
-                          download_bytes, response);
+       fb_mmc_flash_write(cmd, (void *)CONFIG_FASTBOOT_BUF_ADDR,
+                          download_bytes);
 #endif
 #ifdef CONFIG_FASTBOOT_FLASH_NAND_DEV
-       fb_nand_flash_write(cmd, fastboot_flash_session_id,
+       fb_nand_flash_write(cmd,
                            (void *)CONFIG_FASTBOOT_BUF_ADDR,
-                           download_bytes, response);
+                           download_bytes);
 #endif
-       fastboot_flash_session_id++;
        fastboot_tx_write_str(response);
 }
 #endif
@@ -644,18 +645,20 @@ static void cb_erase(struct usb_ep *ep, struct usb_request *req)
 
        strsep(&cmd, ":");
        if (!cmd) {
-               error("missing partition name");
+               pr_err("missing partition name");
                fastboot_tx_write_str("FAILmissing partition name");
                return;
        }
 
-       strcpy(response, "FAILno flash device defined");
+       /* initialize the response buffer */
+       fb_response_str = response;
 
+       fastboot_fail("no flash device defined");
 #ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV
-       fb_mmc_erase(cmd, response);
+       fb_mmc_erase(cmd);
 #endif
 #ifdef CONFIG_FASTBOOT_FLASH_NAND_DEV
-       fb_nand_erase(cmd, response);
+       fb_nand_erase(cmd);
 #endif
        fastboot_tx_write_str(response);
 }
@@ -715,7 +718,7 @@ static void rx_handler_command(struct usb_ep *ep, struct usb_request *req)
        }
 
        if (!func_cb) {
-               error("unknown command: %s", cmdbuf);
+               pr_err("unknown command: %.*s", req->actual, cmdbuf);
                fastboot_tx_write_str("FAILunknown command");
        } else {
                if (req->actual < req->length) {
@@ -723,7 +726,7 @@ static void rx_handler_command(struct usb_ep *ep, struct usb_request *req)
                        buf[req->actual] = 0;
                        func_cb(ep, req);
                } else {
-                       error("buffer overflow");
+                       pr_err("buffer overflow");
                        fastboot_tx_write_str("FAILbuffer overflow");
                }
        }