aboot: Preliminary support for meta image format
Add support for meta image format; this allows multiple images
packaged in meta image to be programmed using single 'flash'
command.
Change-Id: I1e5a5fdf1660dec8c2ff54dcf6a39f5a6285b15f
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index 25755a1..35373d8 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -68,6 +68,7 @@
#include "bootimg.h"
#include "fastboot.h"
#include "sparse_format.h"
+#include "meta_format.h"
#include "mmc.h"
#include "devinfo.h"
#include "board.h"
@@ -2016,6 +2017,33 @@
return;
}
+void cmd_flash_meta_img(const char *arg, void *data, unsigned sz)
+{
+ int i, images;
+ meta_header_t *meta_header;
+ img_header_entry_t *img_header_entry;
+
+ meta_header = (meta_header_t*) data;
+ img_header_entry = (img_header_entry_t*) (data+sizeof(meta_header_t));
+
+ images = meta_header->img_hdr_sz / sizeof(img_header_entry_t);
+
+ for (i=0; i<images; i++) {
+
+ if((img_header_entry[i].ptn_name == NULL) ||
+ (img_header_entry[i].start_offset == 0) ||
+ (img_header_entry[i].size == 0))
+ break;
+
+ cmd_flash_mmc_img(img_header_entry[i].ptn_name,
+ (void *) data + img_header_entry[i].start_offset,
+ img_header_entry[i].size);
+ }
+
+ fastboot_okay("");
+ return;
+}
+
void cmd_flash_mmc_sparse_img(const char *arg, void *data, unsigned sz)
{
unsigned int chunk;
@@ -2193,6 +2221,7 @@
void cmd_flash_mmc(const char *arg, void *data, unsigned sz)
{
sparse_header_t *sparse_header;
+ meta_header_t *meta_header;
#ifdef SSD_ENABLE
/* 8 Byte Magic + 2048 Byte xml + Encrypted Data */
@@ -2279,10 +2308,13 @@
#endif
sparse_header = (sparse_header_t *) data;
- if (sparse_header->magic != SPARSE_HEADER_MAGIC)
- cmd_flash_mmc_img(arg, data, sz);
- else
+ meta_header = (meta_header_t *) data;
+ if (sparse_header->magic == SPARSE_HEADER_MAGIC)
cmd_flash_mmc_sparse_img(arg, data, sz);
+ else if (meta_header->magic == META_HEADER_MAGIC)
+ cmd_flash_meta_img(arg, data, sz);
+ else
+ cmd_flash_mmc_img(arg, data, sz);
return;
}