279 lines
8.3 KiB
C
279 lines
8.3 KiB
C
#ifndef _LOADTABLE_H_
|
|
#define _LOADTABLE_H_
|
|
#include <stdlib.h>
|
|
#include <common.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define BINARY_LOAD_TABLE_OFFSET 0x04 //the size of region DDR_RO_INIT
|
|
#define FLASH_BASE_ADDR 0x80000000
|
|
#define INVALID_ADDRESS 0x4c4c554E //NULL
|
|
#define EMPTY_ADDRESS 0x00000000 //NULL
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
//AREA_1: LOADTABLE_HEADER
|
|
|
|
#define LOADTABLE_HEADER_SIZE 28
|
|
typedef union{
|
|
struct loadtable_init_routine{
|
|
unsigned int b2init; /* branch to init routine */
|
|
unsigned int init; /* image init routine */
|
|
}init_routine;
|
|
|
|
unsigned char filer[LOADTABLE_HEADER_SIZE]; /* max size*/
|
|
}LOADTABLE_AREA_HEADER;
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
//AREA_2: VERSION & SIGNATURE
|
|
typedef enum {
|
|
XIP,
|
|
PSRAM
|
|
}CP_EXECUTE_MODE;
|
|
|
|
typedef enum {
|
|
NBIOT,
|
|
CATM,
|
|
LTEONLY,
|
|
LTEGSM
|
|
}PS_MODE;
|
|
|
|
|
|
#define LOADTABLE_VER_AREA_SIZE 96
|
|
typedef union{
|
|
struct loadtable_version_info{
|
|
char anti_rollback_version[16]; /* anti-roll back version , co-work with boot33 */
|
|
char execute_mode[8]; /* XIP or PSRAM*/
|
|
char ps_mode[8]; /* LTEONLY/LG/CAT1/NBIOT*/
|
|
char image_info[50]; /* filled by external script ,default IMG_INFO as index*/
|
|
}version_info;
|
|
|
|
unsigned char filer[LOADTABLE_VER_AREA_SIZE]; /* max size*/
|
|
}LOADTABLE_AREA_VER_INFO;
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
//AREA_3: RW COMPRESS REGION SYMBOL
|
|
#define RW_REGION_CPZ_NUM 16
|
|
#define RW_REGION_MARK_PRE_STRING "RW_CPZ_"
|
|
#define RW_REGION_CPZ_OFFSET 0xE8
|
|
#define RW_REGION_COMPRESSED_ADDR_NONE 0x00000000
|
|
|
|
typedef struct
|
|
{
|
|
char RW_REGION_MARK[7];
|
|
char RW_REGION_MARK_NUM;
|
|
char RW_REGION_NAME[8];
|
|
unsigned int RW_REGION_EXEC_ADDR;
|
|
unsigned int RW_REGION_LOAD_ADDR;
|
|
unsigned int RW_REGION_LENGTH;
|
|
unsigned int RW_REGION_COMPRESSED_ADDR;
|
|
}rw_region_item;
|
|
|
|
#define LOADTABLE_RW_CPZ_SIZE 512
|
|
typedef union{
|
|
rw_region_item compress_rw_region_list[RW_REGION_CPZ_NUM];
|
|
|
|
unsigned char filer[LOADTABLE_RW_CPZ_SIZE]; /* max size*/
|
|
}LOADTABLE_AREA_RW_CPZ_INFO;
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
//AREA_4: ARMLINKE SYMBOL LIST
|
|
typedef struct{
|
|
char name[12];
|
|
unsigned int value;
|
|
}armlink_symbol_item;
|
|
|
|
typedef struct {
|
|
//cp.bin
|
|
armlink_symbol_item cp_exec_addr;
|
|
armlink_symbol_item cp_load_addr;
|
|
armlink_symbol_item image_end;
|
|
armlink_symbol_item binary_size;
|
|
//dsp.bin
|
|
armlink_symbol_item dsp_begin_addr;
|
|
armlink_symbol_item dsp_end_addr;
|
|
//rf.bin
|
|
armlink_symbol_item rf_z2_load_addr;
|
|
armlink_symbol_item rf_a0_load_addr;
|
|
//rd.bin
|
|
armlink_symbol_item rd_begin_addr;
|
|
armlink_symbol_item rd_end_addr;
|
|
//apn.bin
|
|
armlink_symbol_item apn_begin_addr;
|
|
armlink_symbol_item apn_end_addr;
|
|
//fota_param
|
|
armlink_symbol_item fota_param_start_address;
|
|
armlink_symbol_item fota_param_end_address;
|
|
//updater
|
|
armlink_symbol_item updater_start_address;
|
|
armlink_symbol_item updater_end_address;
|
|
//fota_pkg
|
|
armlink_symbol_item fota_pkg_start_address;
|
|
armlink_symbol_item fota_pkg_end_address;
|
|
//nvm
|
|
armlink_symbol_item nvm_begin_addr;
|
|
armlink_symbol_item nvm_end_addr;
|
|
//factory_a
|
|
armlink_symbol_item factory_a_begin_addr;
|
|
armlink_symbol_item factory_a_end_addr;
|
|
//factory_b
|
|
armlink_symbol_item factory_b_begin_addr;
|
|
armlink_symbol_item factory_b_end_addr;
|
|
#if 0
|
|
//mmipool
|
|
armlink_symbol_item mmipool_start_address;
|
|
armlink_symbol_item mmipool_size_address;
|
|
#endif
|
|
//ddr_ro_exec
|
|
armlink_symbol_item ddr_ro_exec_address;
|
|
armlink_symbol_item ddr_ro_exec_size_address;
|
|
//using heap to backup dsp
|
|
armlink_symbol_item ddr_heap_guard_begin_addr;
|
|
armlink_symbol_item ddr_heap_guard_end_addr;
|
|
armlink_symbol_item dsp_bk_size;
|
|
}loadtable_armlink_symbol_info;
|
|
|
|
#define LOADTABLE_ARMLINK_SYMBOL_SIZE 512
|
|
typedef union{
|
|
loadtable_armlink_symbol_info armlink_symbol_info;
|
|
|
|
unsigned char filer[LOADTABLE_ARMLINK_SYMBOL_SIZE]; /* max size*/
|
|
}LOADTABLE_AREA_ARMLINK_SYMBOL;
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
//AREA_5: FUNCTIONAL VAL
|
|
typedef struct{
|
|
char name[12];
|
|
unsigned int value;
|
|
}functional_item;
|
|
|
|
typedef struct {
|
|
functional_item vergin; /* vergin */
|
|
functional_item number_of_life; /* number_of_life++ for each bootup,design for SIMPIN lock detect */
|
|
functional_item uart_printf_enable; /* enable uart printf after CP init*/
|
|
functional_item fatal_printf_enable; /* enable fatal printf after CP init */
|
|
functional_item default_core_freq; /* TODO:further porting */
|
|
functional_item default_core_voltage; /* TODO:further porting*/
|
|
}loadtable_functional_info;
|
|
|
|
#define LOADTABLE_FUNC_VAL_SIZE 256
|
|
typedef union{
|
|
loadtable_functional_info func_val;
|
|
|
|
unsigned char filer[LOADTABLE_FUNC_VAL_SIZE]; /* max size*/
|
|
}LOADTABLE_AREA_FUNC_VAL;
|
|
|
|
typedef struct
|
|
{
|
|
LOADTABLE_AREA_HEADER lt_area_header;
|
|
LOADTABLE_AREA_VER_INFO lt_area_ver_info;
|
|
LOADTABLE_AREA_RW_CPZ_INFO lt_area_rw_cpz_info;
|
|
LOADTABLE_AREA_ARMLINK_SYMBOL lt_area_armlink_symbol;
|
|
LOADTABLE_AREA_FUNC_VAL lt_area_func_val;
|
|
/* TODO: explore the vendor area for customer's usage
|
|
LOADTABLE_AREA_vendor lt_area_vendor;
|
|
*/
|
|
}LoadTableType;
|
|
|
|
|
|
/**************************************/
|
|
//for craneM section compressed DSP
|
|
typedef struct _asr_section_ImageStruct{
|
|
UINT32 ImageID;
|
|
UINT32 ImagesOffset;
|
|
UINT32 ImagesLen;
|
|
UINT32 ImagesCheckSum;
|
|
|
|
UINT32 DeviceFlashAddress;
|
|
//UINT32 oldDeviceFlashLen;
|
|
UINT32 reserved[7];
|
|
|
|
}asr_section_ImageStruct;
|
|
|
|
#define SECTION_MAX_NUMBER_OF_IMAGE 64
|
|
#define LZMA_SECTION_MAGIC 0x4C5A4D41
|
|
|
|
typedef struct _asr_section_head_info{
|
|
UINT32 magic;
|
|
UINT32 format_version;
|
|
UINT32 reserved1[32];
|
|
asr_section_ImageStruct Image[SECTION_MAX_NUMBER_OF_IMAGE];
|
|
UINT32 reserved2[221];
|
|
UINT32 checksum;
|
|
}asr_section_head_info;
|
|
|
|
typedef union{
|
|
asr_section_head_info section_head;
|
|
|
|
unsigned char reserved[4096];
|
|
}ASR_SECTION_HEADER;
|
|
/**************************************/
|
|
#ifdef QUECTEL_FOTA // quectel add
|
|
unsigned int get_nvm_start_address(void);
|
|
unsigned int get_nvm_end_address(void);
|
|
#endif
|
|
|
|
void loadtable_init(unsigned int cp_flash_addr);
|
|
unsigned int get_cp_load_addr(void);
|
|
unsigned int get_cp_exec_addr(void);
|
|
unsigned int get_cp_binary_size(void);
|
|
unsigned int get_cp_copy_size(void);
|
|
unsigned int get_dsp_load_addr(void);
|
|
unsigned int get_dsp_copy_size(void);
|
|
unsigned int get_rf_load_addr(void);
|
|
unsigned int get_rw_cpz_struct_addr(void);
|
|
unsigned int get_fota_param_start_addr(void);
|
|
unsigned int get_fota_pkg_start_addr(void);
|
|
unsigned int get_updater_start_addr(void);
|
|
unsigned int get_updater_copy_size(void);
|
|
void set_rd_begin_addr(unsigned int begin_addr);
|
|
void set_apn_begin_addr(unsigned int begin_addr);
|
|
void set_nvm_begin_addr(unsigned int begin_addr);
|
|
void set_md_end_addr(unsigned int end_addr);
|
|
void set_apn_end_addr(unsigned int end_addr);
|
|
void set_nvm_end_addr(unsigned int end_addr);
|
|
unsigned int get_ps_mode(void);
|
|
unsigned int get_rf_load_size(void);
|
|
|
|
void update_nvm_begin_addr(unsigned int available_base_addr);
|
|
void dump_loadtable(void);
|
|
int anti_rollback_check(void);
|
|
CP_EXECUTE_MODE get_cp_execute_mode(void);
|
|
void number_of_life_update(void);
|
|
int vergin_status_fetch(void);
|
|
unsigned int get_factory_a_start_address(void);
|
|
unsigned int get_dsp_adc_start_addr(void);
|
|
unsigned int get_dsp_adc_end_addr(void);
|
|
unsigned int get_dsp_adc_copy_size(void);
|
|
unsigned int get_dsp_adc_backup_start_addr(void);
|
|
unsigned int get_dsp_adc_backup_end_addr(void);
|
|
unsigned int get_ddr_heap_size(void);
|
|
unsigned int get_dsp_backup_addr(void);
|
|
unsigned int get_dsp_backup_size(void);
|
|
|
|
|
|
BOOL IsUpdaterbakExist(void);
|
|
unsigned int get_updater_backup_start_addr(void);
|
|
|
|
|
|
typedef enum{
|
|
CRANE_Z2 = 0xF16731,
|
|
CRANE_A0 = 0xA06731,
|
|
CRANE_A1 = 0xA16731
|
|
}CRANE_CHIP_TYPE;
|
|
unsigned int getLongChipId(void);
|
|
|
|
#ifdef SUPPORT_FLASH_IMAGE_PROTECT
|
|
typedef enum
|
|
{
|
|
IMG_PROTECT_OPT_ERASE,
|
|
IMG_PROTECT_OPT_PROGRAM,
|
|
} IMG_PROTECT_OPT;
|
|
BOOL IsImageProtectArea_Boot(UINT32 addr, UINT32 size,IMG_PROTECT_OPT opt);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif // _LOADTABLE_H_
|