[U-Boot] [RFC PATCH v2 09/20] fastboot: Refactor write_fb_response into fastboot_okay/fail/response

Alex Kiernan alex.kiernan at gmail.com
Mon Apr 30 08:32:43 UTC 2018


Replace write_fb_response with fastboot_okay/fail/response. Also allow
fastboot_okay to take NULL when we have no message to send.

Signed-off-by: Alex Kiernan <alex.kiernan at gmail.com>
---

Changes in v2: None

 drivers/fastboot/fb_common.c    |  5 ++-
 drivers/fastboot/fb_mmc.c       | 10 ++---
 drivers/fastboot/fb_nand.c      |  4 +-
 drivers/fastboot/image-sparse.c |  2 +-
 net/fastboot.c                  | 95 +++++++++++++++--------------------------
 5 files changed, 47 insertions(+), 69 deletions(-)

diff --git a/drivers/fastboot/fb_common.c b/drivers/fastboot/fb_common.c
index 7367fbb..f0bf53d 100644
--- a/drivers/fastboot/fb_common.c
+++ b/drivers/fastboot/fb_common.c
@@ -45,7 +45,10 @@ void fastboot_fail(const char *reason, char *response)
 
 void fastboot_okay(const char *reason, char *response)
 {
-	fastboot_response("OKAY", response, "%s", reason);
+	if (reason)
+		fastboot_response("OKAY", response, "%s", reason);
+	else
+		fastboot_response("OKAY", response, NULL);
 }
 
 void timed_send_info(ulong *start, const char *msg)
diff --git a/drivers/fastboot/fb_mmc.c b/drivers/fastboot/fb_mmc.c
index 304bda1..416f309 100644
--- a/drivers/fastboot/fb_mmc.c
+++ b/drivers/fastboot/fb_mmc.c
@@ -128,7 +128,7 @@ static void write_raw_image(struct blk_desc *dev_desc, disk_partition_t *info,
 
 	printf("........ wrote " LBAFU " bytes to '%s'\n", blkcnt * info->blksz,
 	       part_name);
-	fastboot_okay("", response);
+	fastboot_okay(NULL, response);
 }
 
 #ifdef CONFIG_ANDROID_BOOT_IMAGE
@@ -288,7 +288,7 @@ static int fb_mmc_update_zimage(struct blk_desc *dev_desc,
 	}
 
 	puts("........ zImage was updated in boot partition\n");
-	fastboot_okay("", response);
+	fastboot_okay(NULL, response);
 	return 0;
 }
 #endif
@@ -323,7 +323,7 @@ void fb_mmc_flash_write(const char *cmd, void *download_buffer,
 			return;
 		}
 		printf("........ success\n");
-		fastboot_okay("", response);
+		fastboot_okay(NULL, response);
 		return;
 	}
 #endif
@@ -344,7 +344,7 @@ void fb_mmc_flash_write(const char *cmd, void *download_buffer,
 			return;
 		}
 		printf("........ success\n");
-		fastboot_okay("", response);
+		fastboot_okay(NULL, response);
 		return;
 	}
 #endif
@@ -436,5 +436,5 @@ void fb_mmc_erase(const char *cmd, char *response)
 
 	printf("........ erased " LBAFU " bytes from '%s'\n",
 	       blks_size * info.blksz, cmd);
-	fastboot_okay("", response);
+	fastboot_okay(NULL, response);
 }
diff --git a/drivers/fastboot/fb_nand.c b/drivers/fastboot/fb_nand.c
index 3a0b101..de869a0 100644
--- a/drivers/fastboot/fb_nand.c
+++ b/drivers/fastboot/fb_nand.c
@@ -199,7 +199,7 @@ void fb_nand_flash_write(const char *cmd, void *download_buffer,
 		return;
 	}
 
-	fastboot_okay("", response);
+	fastboot_okay(NULL, response);
 }
 
 void fb_nand_erase(const char *cmd, char *response)
@@ -226,5 +226,5 @@ void fb_nand_erase(const char *cmd, char *response)
 		return;
 	}
 
-	fastboot_okay("", response);
+	fastboot_okay(NULL, response);
 }
diff --git a/drivers/fastboot/image-sparse.c b/drivers/fastboot/image-sparse.c
index 616c2bd..ecdb3d3 100644
--- a/drivers/fastboot/image-sparse.c
+++ b/drivers/fastboot/image-sparse.c
@@ -257,7 +257,7 @@ void write_sparse_image(
 	if (total_blocks != sparse_header->total_blks)
 		fastboot_fail("sparse image write failure", response);
 	else
-		fastboot_okay("", response);
+		fastboot_okay(NULL, response);
 
 	return;
 }
diff --git a/net/fastboot.c b/net/fastboot.c
index 87c12e5..960e7f1 100644
--- a/net/fastboot.c
+++ b/net/fastboot.c
@@ -67,7 +67,6 @@ static void fb_continue(char *);
 static void fb_reboot(char *);
 static void boot_downloaded_image(void);
 static void cleanup_command_data(void);
-static void write_fb_response(const char *, const char *, char *);
 
 void fastboot_send_info(const char *msg)
 {
@@ -89,7 +88,7 @@ void fastboot_send_info(const char *msg)
 	memcpy(packet, &fb_response_header, sizeof(fb_response_header));
 	packet += sizeof(fb_response_header);
 	/* Write response */
-	write_fb_response("INFO", msg, response);
+	fastboot_response("INFO", response, "%s", msg);
 	memcpy(packet, response, strlen(response));
 	packet += strlen(response);
 
@@ -178,18 +177,17 @@ static void fastboot_send(struct fastboot_header fb_header, char *fastboot_data,
 			fb_erase(response);
 #endif
 		} else if (!strcmp("boot", cmd_string)) {
-			write_fb_response("OKAY", "", response);
+			fastboot_okay(NULL, response);
 		} else if (!strcmp("continue", cmd_string)) {
 			fb_continue(response);
 		} else if (!strncmp("reboot", cmd_string, 6)) {
 			fb_reboot(response);
 		} else if (!strcmp("set_active", cmd_string)) {
 			/* A/B not implemented, for now do nothing */
-			write_fb_response("OKAY", "", response);
+			fastboot_okay(NULL, response);
 		} else {
 			pr_err("command %s not implemented.\n", cmd_string);
-			write_fb_response("FAIL", "unrecognized command",
-					  response);
+			fastboot_fail("unrecognized command", response);
 		}
 		/* Sent some INFO packets, need to update sequence number in
 		 * header
@@ -242,74 +240,67 @@ static void fastboot_send(struct fastboot_header fb_header, char *fastboot_data,
 static void fb_getvar(char *response)
 {
 	if (!cmd_parameter) {
-		write_fb_response("FAIL", "missing var", response);
+		fastboot_fail("missing var", response);
 	} else if (!strcmp("version", cmd_parameter)) {
-		write_fb_response("OKAY", FASTBOOT_VERSION, response);
+		fastboot_okay(FASTBOOT_VERSION, response);
 	} else if (!strcmp("bootloader-version", cmd_parameter) ||
 		   !strcmp("version-bootloader", cmd_parameter)) {
-		write_fb_response("OKAY", U_BOOT_VERSION, response);
+		fastboot_okay(U_BOOT_VERSION, response);
 	} else if (!strcmp("downloadsize", cmd_parameter) ||
 		   !strcmp("max-download-size", cmd_parameter)) {
-		char buf_size_str[12];
-
-		sprintf(buf_size_str, "0x%08x", CONFIG_FASTBOOT_BUF_SIZE);
-		write_fb_response("OKAY", buf_size_str, response);
+		fastboot_response("OKAY", response,
+				  "0x%08x", CONFIG_FASTBOOT_BUF_SIZE);
 	} else if (!strcmp("serialno", cmd_parameter)) {
 		const char *tmp = env_get("serial#");
 
 		if (tmp)
-			write_fb_response("OKAY", tmp, response);
+			fastboot_okay(tmp, response);
 		else
-			write_fb_response("FAIL", "Value not set", response);
+			fastboot_fail("Value not set", response);
 	} else if (!strcmp("version-baseband", cmd_parameter)) {
-		write_fb_response("OKAY", "N/A", response);
+		fastboot_okay("N/A", response);
 	} else if (!strcmp("product", cmd_parameter)) {
 		const char *board = env_get("board");
 
 		if (board)
-			write_fb_response("OKAY", board, response);
+			fastboot_okay(board, response);
 		else
-			write_fb_response("FAIL", "Board not set", response);
+			fastboot_fail("Board not set", response);
 	} else if (!strcmp("current-slot", cmd_parameter)) {
 		/* A/B not implemented, for now always return _a */
-		write_fb_response("OKAY", "_a", response);
+		fastboot_okay("_a", response);
 	} else if (!strcmp("slot-suffixes", cmd_parameter)) {
-		write_fb_response("OKAY", "_a,_b", response);
+		fastboot_okay("_a,_b", response);
 	} else if (!strncmp("has-slot", cmd_parameter, 8)) {
 		char *part_name = cmd_parameter;
 
 		cmd_parameter = strsep(&part_name, ":");
 		if (!strcmp(part_name, "boot") || !strcmp(part_name, "system"))
-			write_fb_response("OKAY", "yes", response);
+			fastboot_okay("yes", response);
 		else
-			write_fb_response("OKAY", "no", response);
+			fastboot_okay("no", response);
 	} else if (!strncmp("partition-type", cmd_parameter, 14) ||
 		   !strncmp("partition-size", cmd_parameter, 14)) {
 		disk_partition_t part_info;
 		struct blk_desc *dev_desc;
 		char *part_name = cmd_parameter;
-		char part_size_str[20];
 
 		cmd_parameter = strsep(&part_name, ":");
 		dev_desc = blk_get_dev("mmc", 0);
 		if (!dev_desc) {
-			write_fb_response("FAIL", "block device not found",
-					  response);
+			fastboot_fail("block device not found", response);
 		} else if (part_get_info_by_name(dev_desc, part_name,
 						 &part_info) < 0) {
-			write_fb_response("FAIL", "partition not found",
-					  response);
+			fastboot_fail("partition not found", response);
 		} else if (!strncmp("partition-type", cmd_parameter, 14)) {
-			write_fb_response("OKAY", (char *)part_info.type,
-					  response);
+			fastboot_okay((char *)part_info.type, response);
 		} else if (!strncmp("partition-size", cmd_parameter, 14)) {
-			sprintf(part_size_str, "0x%016x", (int)part_info.size);
-			write_fb_response("OKAY", part_size_str, response);
+			fastboot_response("OKAY", response,
+					  "0x%016x", (int)part_info.size);
 		}
 	} else {
 		printf("WARNING: unknown variable: %s\n", cmd_parameter);
-		write_fb_response("FAIL", "Variable not implemented",
-				  response);
+		fastboot_fail("Variable not implemented", response);
 	}
 }
 
@@ -328,14 +319,12 @@ static void fb_download(char *fastboot_data, unsigned int fastboot_data_len,
 
 	if (bytes_expected == 0) {
 		if (!cmd_parameter) {
-			write_fb_response("FAIL", "Expected command parameter",
-					  response);
+			fastboot_fail("Expected command parameter", response);
 			return;
 		}
 		bytes_expected = simple_strtoul(cmd_parameter, &tmp, 16);
 		if (bytes_expected == 0) {
-			write_fb_response("FAIL", "Expected nonzero image size",
-					  response);
+			fastboot_fail("Expected nonzero image size", response);
 			return;
 		}
 	}
@@ -346,22 +335,22 @@ static void fb_download(char *fastboot_data, unsigned int fastboot_data_len,
 		 * where cmd_parameter is an 8 digit hexadecimal number
 		 */
 		if (bytes_expected > CONFIG_FASTBOOT_BUF_SIZE)
-			write_fb_response("FAIL", cmd_parameter, response);
+			fastboot_fail(cmd_parameter, response);
 		else
-			write_fb_response("DATA", cmd_parameter, response);
+			fastboot_response("DATA", response, "%s",
+					  cmd_parameter);
 	} else if (fastboot_data_len == 0 &&
 		   (bytes_received >= bytes_expected)) {
 		/* Download complete. Respond with "OKAY" */
-		write_fb_response("OKAY", "", response);
+		fastboot_okay(NULL, response);
 		image_size = bytes_received;
 		bytes_expected = 0;
 		bytes_received = 0;
 	} else {
 		if (fastboot_data_len == 0 ||
 		    (bytes_received + fastboot_data_len) > bytes_expected) {
-			write_fb_response("FAIL",
-					  "Received invalid data length",
-					  response);
+			fastboot_fail("Received invalid data length",
+				      response);
 			return;
 		}
 		/* Download data to CONFIG_FASTBOOT_BUF_ADDR */
@@ -408,9 +397,9 @@ static void fb_continue(char *response)
 
 	bootcmd = env_get("bootcmd");
 	if (bootcmd)
-		write_fb_response("OKAY", "", response);
+		fastboot_okay(NULL, response);
 	else
-		write_fb_response("FAIL", "bootcmd not set", response);
+		fastboot_fail("bootcmd not set", response);
 }
 
 /**
@@ -420,7 +409,7 @@ static void fb_continue(char *response)
  */
 static void fb_reboot(char *response)
 {
-	write_fb_response("OKAY", "", response);
+	fastboot_okay(NULL, response);
 	if (!strcmp("reboot-bootloader", cmd_string))
 		strcpy((char *)CONFIG_FASTBOOT_BUF_ADDR, "reboot-bootloader");
 }
@@ -447,20 +436,6 @@ static void boot_downloaded_image(void)
 }
 
 /**
- * Writes a response to response buffer of the form "$tag$reason".
- *
- * @param tag         The first part of the response
- * @param reason      The second part of the response
- * @param repsonse    Pointer to fastboot response buffer
- */
-static void write_fb_response(const char *tag, const char *reason,
-			      char *response)
-{
-	strncpy(response, tag, strlen(tag));
-	strncat(response, reason, FASTBOOT_RESPONSE_LEN - strlen(tag) - 1);
-}
-
-/**
  * Frees any resources allocated during current fastboot command.
  */
 static void cleanup_command_data(void)
-- 
2.7.4



More information about the U-Boot mailing list