On Wed, Feb 18, 2015 at 1:52 PM, Dileep Katta <dileep.ka...@linaro.org> wrote: > This patch adds functionality to getvar command to get the userdata partition > size.
This is non-standard and doesn't scale to other partitions. There is already a standard var "partition-size:<part name>". There is also "partition-type:<part name>" which probably needs to be supported as well. It would probably be good to have generic code to retrieve fastboot variables from a u-boot environment variables. Something like this: fastboot: allow retrieving fastboot variables from env Signed-off-by: Rob Herring <r...@kernel.org> diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c index 310175a..31e1063 100644 --- a/drivers/usb/gadget/f_fastboot.c +++ b/drivers/usb/gadget/f_fastboot.c @@ -364,8 +364,15 @@ static void cb_getvar(struct usb_ep *ep, struct usb_request *req) else strcpy(response, "FAILValue not set"); } else { - error("unknown variable: %s\n", cmd); - strcpy(response, "FAILVariable not implemented"); + char envstr[32]; + snprintf(envstr, sizeof(envstr) - 1, "fastboot.%s", cmd); + s = getenv(envstr); + if (s) { + strncat(response, s, chars_left); + } else { + error("unknown variable: %s\n", cmd); + strcpy(response, "FAILVariable not implemented"); + } } fastboot_tx_write_str(response); } Rob > Signed-off-by: Dileep Katta <dileep.ka...@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 --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); > -- > 1.8.3.2 > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot