diff mbox

[v1,1/1] fastboot: Update getvar command to get 'userdata' partition size

Message ID 1424289147-21828-1-git-send-email-dileep.katta@linaro.org
State New
Headers show

Commit Message

Dileep Katta Feb. 18, 2015, 7:52 p.m. UTC
This patch adds functionality to getvar command to get the userdata partition
size.

Signed-off-by: Dileep Katta <dileep.katta@linaro.org>
---
 common/fb_mmc.c                 | 38 ++++++++++++++++++++++++++++++++++++++
 drivers/usb/gadget/f_fastboot.c |  2 ++
 include/fb_mmc.h                |  2 ++
 3 files changed, 42 insertions(+)
diff mbox

Patch

diff --git a/common/fb_mmc.c b/common/fb_mmc.c
index 6ea3938..1bb6335 100644
--- a/common/fb_mmc.c
+++ b/common/fb_mmc.c
@@ -32,6 +32,44 @@  void fastboot_okay(const char *s)
 	strncat(response_str, s, RESPONSE_LEN - 4 - 1);
 }
 
+void fb_mmc_get_ptn_size(const char *cmd, char *response)
+{
+	int ret;
+	block_dev_desc_t *dev_desc;
+	disk_partition_t info;
+	u32 sz_mb;
+	u64 sz = 0;
+	char buf[RESPONSE_LEN];
+
+	/* initialize the response buffer */
+	response_str = response;
+
+	dev_desc = get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV);
+	if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) {
+		error("invalid mmc device");
+		fastboot_fail("invalid mmc device");
+		return;
+	}
+
+	ret = get_partition_info_efi_by_name(dev_desc, cmd, &info);
+	if (ret) {
+		error("cannot find partition: '%s'", cmd);
+		fastboot_fail("cannot find partition");
+		return;
+	}
+
+	sz = (info.size * (u64)info.blksz) >> 10;
+
+	if (sz >= 0xFFFFFFFF) {
+		sz_mb = (u32)(sz >> 10);
+		sprintf(buf, "0x%d MB", sz_mb);
+		fastboot_okay(buf);
+	} else {
+		sprintf(buf, "%d KB", (u32)sz);
+		fastboot_okay(buf);
+	}
+}
+
 static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t *info,
 		const char *part_name, void *buffer,
 		unsigned int download_bytes)
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
index 310175a..17b64ef 100644
--- a/drivers/usb/gadget/f_fastboot.c
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -363,6 +363,8 @@  static void cb_getvar(struct usb_ep *ep, struct usb_request *req)
 			strncat(response, s, chars_left);
 		else
 			strcpy(response, "FAILValue not set");
+	} else if (!strcmp_l1("userdata_size", cmd)) {
+		fb_mmc_get_ptn_size("userdata", response);
 	} else {
 		error("unknown variable: %s\n", cmd);
 		strcpy(response, "FAILVariable not implemented");
diff --git a/include/fb_mmc.h b/include/fb_mmc.h
index 1ad1d13..353f325 100644
--- a/include/fb_mmc.h
+++ b/include/fb_mmc.h
@@ -4,5 +4,7 @@ 
  * SPDX-License-Identifier:	GPL-2.0+
  */
 
+void fb_mmc_get_ptn_size(const char *cmd, char *response);
+
 void fb_mmc_flash_write(const char *cmd, void *download_buffer,
 			unsigned int download_bytes, char *response);