Add Broadcom / Netgear changes from RAXE 1.0.0.48
[project/bcm63xx/u-boot.git] / board / broadcom / bcmbca / reimage.h
diff --git a/board/broadcom/bcmbca/reimage.h b/board/broadcom/bcmbca/reimage.h
new file mode 100644 (file)
index 0000000..f45e652
--- /dev/null
@@ -0,0 +1,103 @@
+
+#include <cli.h>
+
+#define NVRAM_MAGIC "nVrAmDaT"
+#define MASQ_SPLIT_A "ImageFollows - e62b6965f01ec7e98fcde8ee1de"
+#define MASQ_SPLIT_B "57bfa9bc4e2e4eb5cee95406d5337ed9355da"
+
+#define NP_TOTAL 5
+
+struct allocs_dhd {
+       unsigned char dhd_size[3];
+       unsigned char reserved;
+};
+
+struct nvram_s {
+       unsigned int version;
+       char bootline[256];
+       char boardid[16];
+       unsigned int ulMainTpNum;
+       unsigned int ulPsiSize;
+       unsigned int ulNumMacAddrs;
+       unsigned char ucaBaseMacAddr[6];
+       char pad;
+       char backupPsi;  /**< if 0x01, allocate space for a backup PSI */
+       unsigned int ulCheckSumV4;
+       char dummy1[292];
+       unsigned int ulNandPartOfsKb[NP_TOTAL];
+       unsigned int ulNandPartSizeKb[NP_TOTAL];
+       char szVoiceBoardId[16];
+       unsigned int afeId[2];
+       unsigned short opticRxPwrReading;       // optical initial rx power reading
+       unsigned short opticRxPwrOffset;        // optical rx power offset
+       unsigned short opticTxPwrReading;       // optical initial tx power reading
+       unsigned char ucUnused2[58];
+       unsigned char ucFlashBlkSize;
+       unsigned char ucAuxFSPercent;
+       unsigned char ucUnused3[2];
+       unsigned int ulBoardStuffOption;        // board options. bit0-3 is for DECT
+       unsigned int reserved2;
+       unsigned int ulMemoryConfig;
+       struct partition_info {
+               /*
+                  2MSB represent the
+                  00 = MB
+                  01 = GB
+                  10 = reserved
+                  11 = reserved
+                  14LSB represent multiple of 2MSB
+                */
+
+               unsigned short size;
+       } part_info[4];
+       struct allocs_dhd alloc_dhd;
+
+       /* Add any new non-secure related elements here */
+       unsigned int ulFeatures;        // feature bitmask
+       char chUnused[268];     /* Adjust chUnused such that everything above + chUnused[] + ulCheckSum = 1k */
+       unsigned int ulCheckSum;
+};
+
+struct recovery_chunks {
+       int flashpage;          // page in flash
+       int size;               // number of bytes before fill
+       int type;               // 0x0= fill with 0xff, 0x1 = fill with 0x00, 0x7fffffff = END
+};
+
+static struct reimager {
+       // layout items
+       int loader_blocks;      // number of erase blocks in loader IMAGE
+       int split_image_start;  // start of image partition in blocks
+       int split_image_end;    // end of image partition in blocks
+       int payload_start;      // actual block number where payload starts in flash
+       int payload_blocks;     // this will be after decompression if stored compressed
+       int erase_first_start;  // the old linux image erase block start
+       int erase_first_blocks; // old linux image erase block size 
+       int burn_first_start;   // the old linux image, but after loader (erase block number)
+       int burn_first_blocks;  // number of erase blocks usable once erase_first is erased
+       int burn_remaining_start;       // starting erase block where we can write once we have erased all
+       int burn_remaining_blocks;      // number of blocks available where we can write once we have erased
+       int erase_last_start;   // starting EB to be erased after everything is written
+       int erase_last_blocks;  // number of EBs to erase last
+       // bookkeeping
+       int blocksizeK;
+       char *remaining_payload;        // buffer for EBs that are part of payload and didn't fit in burn_first
+       int remaining_payload_len;      // length of payload held in remaining_payload[]
+       char *loader_payload;   // in-memory copy of loader
+       char *preserved_data;   // buffer for preserved data (filename\0hexlength\0data)...
+       int preserved_data_len; // number of bytes of buffered preserved data
+       int preserved_data_max_len;     // allocated max preserved data
+       struct recovery_chunks *recovery_chunks_list;
+       char *recovery_data_buf;
+       int recovery_data_len;
+       struct nvram_s nvram;   // in-memory copy of nvram
+       struct ubi_device *ubi;
+       int pure_payload_image; // if using pureubi, select payload image
+       int pure_payload_volume_index;  // if using pureubi payload volume index
+
+};
+
+int do_reimage_auto(cmd_tbl_t * cmdtp, int flag, int argc, char *const argv[]);
+
+void reimage_splice_env(struct reimager *r, char *more_env, int more_env_size);
+void reimage_env_append(struct reimager *r);