/******************************************************************************/ /** @file mid_upgrade.h @brief ability about upgrade @author Unknow *******************************************************************************/ #ifndef _MID_UPGRADE_ #define _MID_UPGRADE_ #include "drv_spi_flashalloc_external.h" #include #include #include //#include "mid_ota.h" #ifdef __cplusplus extern "C"{ #endif #define OUIMAININFO "OUIMAINinfo" #define OUIBOOTINFO "OUIBOOTinfo" /* Encript function of write flash * when 0xbe000010[1] is 1,will disable Encript function of Spi write flash; * when 0xbe000010[1] is 0,will enable Encript function of Spi write flash; */ #define SPI_IOCtrl_Address 0xbe000010 //#define DATA_FLASH_MASK 0xbf000000 //#define CODE_FLASH_MASK 0xbc000000 //#define IF_DATAFLASH(addr) ((addr&DATA_FLASH_MASK)==DATA_FLASH_MASK) //#define IF_CODEFLASH(addr) ((addr&CODE_FLASH_MASK)==CODE_FLASH_MASK) // flash start addr #define CODE_FLASH_ADDR SPI_CODEFLASH_BASEADDR #define DATA_FLASH_ADDR SPI_DATAFLASH_BASEADDR #define SHELL_FLASH_ADDR SPI_SHELLROM_FLASHADDR #define BOOTROM_FLASH_ADDR SPI_BOOTROM_FLASHADDR //#define GAMMA_FLASH_ADDR SPI_GAMMATABLE_FLASHADDR //mark by kai.wang for temp //#define AUDIO_FLASH_ADDR SPI_AUDIOROM_FLASHADDR //mark by kai.wang for temp //#define VIP_FLASH_ADDR SPI_VIPTABLE_FLASHADDR //mark by kai.wang for temp #define LOGO_FLASH_ADDR SPI_LOGO_FLASHADDR #define LINUX_FLASH_ADDR SPI_KERNEL_FLASHADDR #define EDID_FLASH_ADDR SPI_EDID_FLASHADDR #define INITRAMFS_FLASH_ADDR 0x00000000 //#define PANNELSET_FLASH_ADDR SPI_PANELSET_FLASHADDR //mark by kai.wang for temp #define CODE_FLASH_BIN_ADDR SPI_CODEFLASH_BASEADDR #define DATA_FLASH_BIN_ADDR SPI_DATAFLASH_BASEADDR #define FLASH_PACKET_ADDR SPI_CODEFLASH_BASEADDR #define FLASH_OAD_ADDR SPI_CODEFLASH_BASEADDR #define DTV_IMG_ADDR 0x00000000 //flash size #define CODE_FLASH_SIZE 0x0 #define DATA_FLASH_SIZE 0x0 #define SHELL_FLASH_SIZE 0x0 #define BOOTROM_FLASH_SIZE 0x0 #define GAMMA_FLASH_SIZE 0x0 #define AUDIO_FLASH_SIZE 0x0 #define VIP_FLASH_SIZE 0x0 #if ((CONFIG_CODE_FLASH_SIZE == 4096) && (CONFIG_DATA_FLASH_SIZE == 512)) #define LOGO_FLASH_SIZE 0xF8000 // 62KB #else #define LOGO_FLASH_SIZE 0x8000 //32KB #endif #define LINUX_FLASH_SIZE 0x0 #define EDID_FLASH_SIZE 0x0 #define INITRAMFS_FLASH_SIZE 0x0 #define PANNELSET_FLASH_SIZE 0x800 #define FLASH_CODE_BIN_SIZE 0x0 #define FLASH_DATA_BIN_SIZE 0x0 #define FLASH_PACKET_SIZE 0x0 #define FLASH_OAD_SIZE 0x0 #define FLASH_DTV_IMG_SIZE 0x0 typedef struct _CustomerProtectRegion { unsigned int addr[20]; unsigned int size[20]; unsigned int Protectnum; }CustomerProtectRegion;//,*pProtectRegion; typedef struct _flash_header_t{ UINT32 crcCheck; UINT8 flashType; UINT8 flashSize; UINT8 swEncodeMode; UINT8 hwEncodeMmode; UINT32 reserved01:32; UINT32 reserved02:32; }flash_header_t,*flash_header_ptr; typedef struct _savefile_array_s{ unsigned int size; unsigned int addr; }savefile_array_s; #define TAG_LENGTH 12 typedef struct _ProtectInfo_t{ char sys_tag[TAG_LENGTH]; /* ascii */ savefile_array_s FlashInfo; savefile_array_s FileInfo; }ProtectInfo_t; typedef struct _spighost_t{ ProtectInfo_t *Protect_array; UINT32 index; UINT32 dest; UINT32 size; UINT32 realcodeflashSZ; UINT8 crossflashs; int fd0; UINT32 fd0_sz; UINT8 encrypted; /*<0: default 1:encrypted*/ UINT32 state; UINT32 saveaddr[20]; UINT32 savesize[20]; UINT32 savenum; UINT8 dramsetting; UINT32 namesetting; UINT32 PacketCodeCRC; UINT32 PacketDataCRC; }spighost_t; enum _SPIGHOST_STATE { SPIGHOST_OK, SPIGHOST_CRC_ERROR, SPIGHOST_RESERVED_MEM_ERROR, SPIGHOST_FILE_ERROR, SPIGHOST_FILE_MEM_ERROR, SPIGHOST_DEST_ADDR_ERROR, SPIGHOST_ERROR, SPIGHOST_MAX, }; enum _FLASH_ID { FLASH_CODE, FLASH_DATA, FLASH_SHELL, FLASH_BOOTROM, FLASH_GAMMA, FLASH_AUDIO, FLASH_VIP, FLASH_LOGO, FLASH_LINUX, FLASH_EDID, FLASH_INITRAMFS, FLASH_CUSTOMIZE, //20081103 Kai add for customization FLASH_PANNELSET, FLASH_CODE_BIN, FLASH_DATA_BIN, FLASH_PACKET, FLASH_OAD, FLASH_DTV_IMG, //15 FLASH_UPDATE, FLASH_MAX, }; enum _UPDATE_STATE { UPDATE_STATE_OK=0x0, BACKUP_STATE_OK, RESET_STATE_OK, RECOVE_STATE_OK, UPDATE_STATE_NO_USB_DEV, UPDATE_STATE_NO_FIT_FILE, //sd or usb file not found, please insert SD/USB UPDATE_STATE_FILE_SIZE_ERROR, UPDATE_STATE_CRC_ERROR, UPDATE_STATE_SPI_ERROR, //spi misc errors UPDATE_STATE_CHECK_SUM_ERROR,//20081209 Kai add UPDATE_STATE_PROJECT_ID_ERROR, UPDATE_STATE_SAVE_FILE_ERROR, UPDATE_STATE_DTV_FW_ERROR,//20090908 Ivan add UPDATE_STATE_BOOTROM_VER_ERROR, //bootrom version different with kernel UPDATE_STATE_TAR_NOTFOUND, //sis_android_fs.tar not found UPDATE_STATE_NAND_ERROR, //nand flash broken UPDATE_STATE_NOR_FLASH_ERROR, //nor flash progrma error RECOVE_STATE_NO_FIT_FILE, BACKUP_STATE_DEV_FAIL, //disc fail when backup UPDATE_CONTINUE, UPDATE_STATE_NO_FREESPACE, //sd or usb not have enough freespace to unzip UPDATE_STATE_ERROR=0xff, }; enum _KEY_PROTECT { NON_Protect, EDID_Protect = 0x1, HDCP_Protect = 0x2, CIKEY_Protect = 0x4, ALL_Protect = EDID_Protect + HDCP_Protect + CIKEY_Protect, EDID_BK = 0x8, HDCP_BK = 0x10, CIKEY_BK = 0x20, }; typedef enum HEADType { BOOT_TYPE, MAINCODE_TYPE, }HEADType_E; /* this date is come from flash*/ typedef enum SystemInfoType { OUI_TYPE, SWMODEL_TYPE, SWVERSION_TYPE, HWMODEL_TYPE, HWVERSION_TYPE, TIMESTAMP_TYPE, CODESIZE_TYPE, MAX_TYPE, }SIType_E; /* old code for complier */ typedef enum { UPGRADE_START_ZERO = 0, UPGRADE_START_ZERO_WITH_NVM, /*upgrade file including nvm,so not reserve nvm*/ UPGRADE_START_ZERO_RESERVE_NVM, UPGRADE_START_FIRSTBOOT_END, UPGRADE_START_FIRSTBOOT_END_WITH_NVM, /*upgrade file including nvm,so not reserve nvm*/ UPGRADE_START_FIRSTBOOT_END_RESERVE_NVM, UPGRADE_START_MAINCODE_START, UPGRADE_START_MAINCODE_START_WITH_NVM, /*upgrade file including nvm,so not reserve nvm*/ UPGRADE_START_MAINCODE_START_RESERVE_NVM, UPGRADE_WHOLE_FLASH, } upgrade_type_t; typedef enum { FLASH_UPGRADE_STATUS_SUCCESS, FLASH_UPGRADE_STATUS_INIT_OVER, FLASH_UPGRADE_STATUS_OVER_FLASH_SIZE, FLASH_UPGRADE_STATUS_PARAM_ERROR, FLASH_UPGRADE_STATUS_ERASING, FLASH_UPGRADE_STATUS_ERASE_ERROR, FLASH_UPGRADE_STATUS_PROGRAMMING, FLASH_UPGRADE_STATUS_PROGRAM_ERROR, FLASH_UPGRADE_STATUS_CHECKING, FLASH_UPGRADE_STATUS_CHECK_ERROR, }flash_upgrade_status_t; typedef enum { UPGRADE_STATE_FIND_DOWNLOAD_INFO, UPGRADE_STATE_FIND_TABLE_ID, UPGRADE_STATE_RECEIVE_DATA, UPGRADE_STATE_INIT, //20131128 temp item UPGRADE_STATE_INIT_MENU, UPGRADE_STATE_INIT_FACTORY, //~20131128 UPGRADE_STATE_ERASE, UPGRADE_STATE_PROGRAM, UPGRADE_STATE_CHECK, UPGRADE_STATE_RESET, UPGRADE_STATE_RETURN, UPGRADE_STATE_RETURN_OK, UPGRADE_STATE_MAX, }upgrade_state_t; typedef enum _Upgrade_attr_type_e { Upgrade_attr_type_FALSE = 0, Upgrade_attr_type_TRUE, Upgrade_attr_type_MAX, }Upgrade_attr_type_e; typedef struct _Upgrade_attr { Upgrade_attr_type_e ReserveBOOT; Upgrade_attr_type_e ReserveNvm; Upgrade_attr_type_e EraseALL; }Upgrade_attr_t; typedef enum UpgradeType { OTA_UPGRADE = 0, USB_UPGRADE, MAX_UPGRADE, }UpgradeType_e; #define BUFLEN 40 void Mid_CmnUpgrade_GetFlashCodeInfo_test(void); void Mid_CmnUpgrade_GetFileCodeInfo_test(int fd); UINT32 Mid_CmnGetFlashModuleCheckSum(UINT8 flashID); void MID_CmnUpgrade_SetOtaFlag(UpgradeType_e type); INT32 Mid_CmnUpgrade_GetCodeInfo(HEADType_E headtype, SIType_E type, unsigned char * start_address, void * data); typedef void (*Callbackfunction)(UINT8 bWrite); /** * @brief a.this API will compare bootrom between upgrade file and flash; * param -: pu8UpgradeFile: upgrade file addr * if return 0: bootrom is identical * 1: bootrom is different */ INT32 Mid_CmnUpgrade_CompareBootrom(UINT8 *pu8UpgradeFile); /** * @brief compare flash code size and file code szie * * param -Flash_CodeSize: code size of Flash *.bin * File_CodeSize: code szie of Flash*.bin. * if return TURE: ok * FALSE: FAILE */ Boolean MID_CmnUpgrade_CompareCodeSize(UINT16 Flash_CodeSize,UINT8 * File_buffer, UINT32 File_CodeSize); /** * @brief we need check tht upgrade file. * * param -the upgrade file. * * if return 0: ok * -1: FAILE */ INT32 Mid_CmnUpgrade_CheckCrc(UINT8 *pu8UpgradeFile, UINT32 pu32BuffSize); INT32 Mid_CmnUpgrade_ModuleCheckCrc(UINT8 *pu8UpgradeFile,UINT32 pu32BuffSize); /** * @brief a. Using VIP reserve memory to be updating buffer for UAB update or OTA update. * b. VIP reserve memory in DTV source is minimum, about 11 MB. * * param -pu8Buf:start address * pu32BuffSize: size of upgrade file. * if return 0: ok * -1: FAILE */ INT32 MID_CmnUpgradeInit(UINT8** pu8Buf, UINT32 pu32BuffSize); /** * @brief Give used memory to VIP. * * param -pu8Buf:start address * * if return 0: ok * -1: FAILE */ INT32 MID_CmnUpgradeUnit(UINT8** pu8Buf); /** * @brief a.ResverBOOT: * TRUE: use ini file ; * FALSE: don't carry ini file; * b.ResverNvm: * TRUE: Resver; * FALSE: clear NVM * c.EraseALL: for AUERALL.BIN ,don't carry ini file; * */ void Mid_CmnUpgradeSetAttri(Upgrade_attr_type_e ResverBOOT, Upgrade_attr_type_e ResverNvm, Upgrade_attr_type_e EraseALL); void Mid_CmnUpgradeInitAttri(void); /** * @brief enable flash before erase. * * param -none * * if return */ void Mid_CmnUpgradeEnableFlash(void); /** * @brief disable flash after program. * * param -none * * if return */ void Mid_CmnUpgradeDisableFlash(void); /** * @brief a.this API will check the Upgrade file and Flash size. when eUpgradeState == UPGRADE_STATE_INIT; * b.this API will erase the flash when eUpgradeState == UPGRADE_STATE_ERASE; * c.this API will program the flash when eUpgradeState == UPGRADE_STATE_PROGRAM; * param -:pu8UpgradeInfo: the start address of the upgrade file; * u32FileSize: the size of the upgrade file; * ReserveNvm:TRUE - reserve. * out: u8Progress: for UI * if return 0: ok * -1: FAILE */ UINT32 Mid_CmnUpgradeFlash(upgrade_state_t eUpgradeState, UINT8* pu8UpgradeInfo, UINT32 u32FileSize, UINT8 *u8Progress); UINT32 MID_lookup_flashtable_addr_bytag(UINT8* sys_tag, UINT32 srcAddr, UINT32 size); UINT32 MID_lookup_Binfile_Module(char *sys_tag, int Fhead, void *srcAddr, UINT32 size); void MID_CheckBinNum(char* buffer, UINT32 bufferSize); /** * @brief maybe system will modify upgrade file,so, app layer need konw it. * * param -NONE. * * if return TURE: Upgradeing. * FAILE: NONE. */ void Mid_CmnUpgradeGetModifyUpgradeFileSize(UINT32 *filesize); /** * @brief check system is upgradeing. * * param -NONE. * * if return TURE: Upgradeing. * FAILE: NONE. */ Boolean Mid_CmnUpgradeIsUpgradeing(void); Boolean Mid_CmnUpgradeRigestCallback(Callbackfunction function); #ifdef __cplusplus } #endif /* __cplusplus */ #endif