summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/gadget/f_fastboot.c118
1 files changed, 71 insertions, 47 deletions
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
index 8f856b6..95b323b 100644
--- a/drivers/usb/gadget/f_fastboot.c
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -171,50 +171,37 @@ static struct usb_gadget_strings *fastboot_strings[] = {
#define MMC_SATA_BLOCK_SIZE 512
#define FASTBOOT_FBPARTS_ENV_MAX_LEN 1024
-/* To support the Android-style naming of flash */
-#define MAX_PTN 16
-
/*pentry index internally*/
-#ifdef CONFIG_BRILLO_SUPPORT
-
enum {
-#ifdef CONFIG_EFI_PARTITION
- PTN_GPT_INDEX = 0,
-#endif
- PTN_MBR_INDEX = 0,
+ PTN_MBR_GPT_INDEX = 0,
PTN_BOOTLOADER_INDEX,
+#ifndef CONFIG_EFI_PARTITION
+#ifdef CONFIG_BRILLO_SUPPORT
PTN_BOOT_A_INDEX,
PTN_BOOT_B_INDEX,
PTN_SYSTEM_A_INDEX,
PTN_SYSTEM_B_INDEX,
PTN_ODM_A_INDEX,
PTN_ODM_B_INDEX,
- PTN_MISC_INDEX,
- PTN_DATA_INDEX,
- PTN_FBMISC_INDEX,
-#ifdef CONFIG_EFI_PARTITION
- PTN_NUM = 32
-#else
- PTN_NUM
-#endif
-};
-
-#else
-
-enum {
- PTN_MBR_INDEX = 0,
- PTN_BOOTLOADER_INDEX,
+#else /* CONFIG_BRILLO_SUPPORT */
PTN_KERNEL_INDEX,
PTN_URAMDISK_INDEX,
PTN_SYSTEM_INDEX,
PTN_RECOVERY_INDEX,
+#ifdef CONFIG_FASTBOOT_LOCK
+ PTN_PRDATA_INDEX,
+#endif /* CONFIG_FASTBOOT_LOCK */
+#endif /* CONFIG_BRILLO_SUPPORT */
PTN_DATA_INDEX,
- PTN_NUM
+ PTN_MISC_INDEX,
+#ifdef CONFIG_FASTBOOT_LOCK
+ PTN_FBMISC_INDEX,
+#endif /* CONFIG_FASTBOOT_LOCK */
+#endif /* CONFIG_EFI_PARTITION */
+ MAX_PTN_NUM = 32
};
-#endif
-
static unsigned int download_bytes_unpadded;
static struct cmd_fastboot_interface interface = {
@@ -1108,7 +1095,7 @@ static void parameters_setup(void)
CONFIG_USB_FASTBOOT_BUF_SIZE;
}
-static struct fastboot_ptentry g_ptable[MAX_PTN];
+static struct fastboot_ptentry g_ptable[MAX_PTN_NUM];
static unsigned int g_pcount;
struct fastboot_device_info fastboot_devinfo;
@@ -1220,7 +1207,7 @@ static int _fastboot_parts_load_from_ptable(void)
struct mmc *mmc;
block_dev_desc_t *dev_desc;
- struct fastboot_ptentry ptable[PTN_NUM];
+ struct fastboot_ptentry ptable[MAX_PTN_NUM];
/* sata case in env */
if (fastboot_devinfo.type == DEV_SATA) {
@@ -1267,21 +1254,20 @@ static int _fastboot_parts_load_from_ptable(void)
}
memset((char *)ptable, 0,
- sizeof(struct fastboot_ptentry) * (PTN_NUM));
+ sizeof(struct fastboot_ptentry) * (MAX_PTN_NUM));
#ifdef CONFIG_EFI_PARTITION
/* GPT */
- strcpy(ptable[PTN_GPT_INDEX].name, "gpt");
- ptable[PTN_GPT_INDEX].start = ANDROID_GPT_OFFSET / dev_desc->blksz;
- ptable[PTN_GPT_INDEX].length = ANDROID_GPT_SIZE / dev_desc->blksz;
- ptable[PTN_GPT_INDEX].partition_id = user_partition;
+ strcpy(ptable[PTN_MBR_GPT_INDEX].name, "gpt");
+ ptable[PTN_MBR_GPT_INDEX].start = ANDROID_GPT_OFFSET / dev_desc->blksz;
+ ptable[PTN_MBR_GPT_INDEX].length = ANDROID_GPT_SIZE / dev_desc->blksz;
#else
/* MBR */
- strcpy(ptable[PTN_MBR_INDEX].name, "mbr");
- ptable[PTN_MBR_INDEX].start = ANDROID_MBR_OFFSET / dev_desc->blksz;
- ptable[PTN_MBR_INDEX].length = ANDROID_MBR_SIZE / dev_desc->blksz;
- ptable[PTN_MBR_INDEX].partition_id = user_partition;
+ strcpy(ptable[PTN_MBR_GPT_INDEX].name, "mbr");
+ ptable[PTN_MBR_GPT_INDEX].start = ANDROID_MBR_OFFSET / dev_desc->blksz;
+ ptable[PTN_MBR_GPT_INDEX].length = ANDROID_MBR_SIZE / dev_desc->blksz;
#endif
+ ptable[PTN_MBR_GPT_INDEX].partition_id = user_partition;
/* Bootloader */
strcpy(ptable[PTN_BOOTLOADER_INDEX].name, FASTBOOT_PARTITION_BOOTLOADER);
@@ -1291,14 +1277,12 @@ static int _fastboot_parts_load_from_ptable(void)
ANDROID_BOOTLOADER_SIZE / dev_desc->blksz;
ptable[PTN_BOOTLOADER_INDEX].partition_id = boot_partition;
-#ifdef CONFIG_BRILLO_SUPPORT
-
#ifdef CONFIG_EFI_PARTITION
int tbl_idx;
int part_idx = 1;
int ret;
- for (tbl_idx = 2; tbl_idx < PTN_NUM; tbl_idx++) {
+ for (tbl_idx = 2; tbl_idx < MAX_PTN_NUM; tbl_idx++) {
ret = _fastboot_parts_add_ptable_entry(tbl_idx,
part_idx++,
user_partition,
@@ -1310,7 +1294,9 @@ static int _fastboot_parts_load_from_ptable(void)
break;
}
-#else
+#else /* CONFIG_EFI_PARTITION */
+
+#ifdef CONFIG_BRILLO_SUPPORT
_fastboot_parts_add_ptable_entry(PTN_BOOT_A_INDEX,
CONFIG_ANDROID_BOOT_PARTITION_MMC,
@@ -1355,7 +1341,14 @@ static int _fastboot_parts_load_from_ptable(void)
FASTBOOT_PARTITION_DATA_FS,
dev_desc, ptable);
-#endif /* CONFIG_EFI_PARTITION */
+#ifdef CONFIG_FASTBOOT_LOCK
+ _fastboot_parts_add_ptable_entry(PTN_FBMISC_INDEX,
+ CONFIG_ANDROID_FBMISC_PARTITION_MMC,
+ user_partition,
+ FASTBOOT_PARTITION_FBMISC,
+ FASTBOOT_PARTITION_FBMISC_FS,
+ dev_desc, ptable);
+#endif /* CONFIG_FASTBOOT_LOCK */
#else /* CONFIG_BRILLO_SUPPORT */
_fastboot_parts_add_ptable_entry(PTN_KERNEL_INDEX,
@@ -1385,10 +1378,37 @@ static int _fastboot_parts_load_from_ptable(void)
FASTBOOT_PARTITION_DATA,
FASTBOOT_PARTITION_DATA_FS,
dev_desc, ptable);
-#endif
- for (i = 0; i < PTN_NUM; i++)
- fastboot_flash_add_ptn(&ptable[i]);
+ _fastboot_parts_add_ptable_entry(PTN_MISC_INDEX,
+ CONFIG_ANDROID_MISC_PARTITION_MMC,
+ user_partition,
+ FASTBOOT_PARTITION_MISC,
+ FASTBOOT_PARTITION_MISC_FS,
+ dev_desc, ptable);
+
+#ifdef CONFIG_FASTBOOT_LOCK
+ _fastboot_parts_add_ptable_entry(PTN_FBMISC_INDEX,
+ CONFIG_ANDROID_FBMISC_PARTITION_MMC,
+ user_partition,
+ FASTBOOT_PARTITION_FBMISC,
+ FASTBOOT_PARTITION_FBMISC_FS,
+ dev_desc, ptable);
+
+ _fastboot_parts_add_ptable_entry(PTN_PRDATA_INDEX,
+ CONFIG_ANDROID_PRDATA_PARTITION_MMC,
+ user_partition,
+ FASTBOOT_PARTITION_PRDATA,
+ FASTBOOT_PARTITION_PRDATA_FS,
+ dev_desc, ptable);
+#endif /* CONFIG_FASTBOOT_LOCK */
+#endif /* CONFIG_BRILLO_SUPPORT */
+
+#endif /* CONFIG_EFI_PARTITION */
+
+ for (i = 0; i < MAX_PTN_NUM; i++) {
+ if(ptable[i].length != 0)
+ fastboot_flash_add_ptn(&ptable[i]);
+ }
return 0;
}
@@ -1571,7 +1591,7 @@ static void _fastboot_load_partitions(void)
* Android style flash utilties */
void fastboot_flash_add_ptn(struct fastboot_ptentry *ptn)
{
- if (g_pcount < MAX_PTN) {
+ if (g_pcount < MAX_PTN_NUM) {
memcpy(g_ptable + g_pcount, ptn,
sizeof(struct fastboot_ptentry));
g_pcount++;
@@ -2718,20 +2738,24 @@ static void cb_flash(struct usb_ep *ep, struct usb_request *req)
strcpy(response, "FAILno flash device defined");
#ifdef CONFIG_FSL_FASTBOOT
+#ifdef CONFIG_FASTBOOT_LOCK
int gpt_valid_pre = 0;
int gpt_valid_pst = 0;
if (strncmp(cmd, "gpt", 3) == 0)
gpt_valid_pre = partition_table_valid();
+#endif
rx_process_flash(cmd, response);
+#ifdef CONFIG_FASTBOOT_LOCK
/* If gpt invalid -> valid, write unlock status, also wipe data. */
if (strncmp(cmd, "gpt", 3) == 0) {
gpt_valid_pst = partition_table_valid();
if ((gpt_valid_pre == 0) && (gpt_valid_pst == 1))
do_fastboot_unlock();
}
+#endif
#else
#ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV
fb_mmc_flash_write(cmd, (void *)CONFIG_USB_FASTBOOT_BUF_ADDR,