/****************************************************************************** *(C) Copyright 2018 EIGENCOMM International Ltd. * All Rights Reserved ****************************************************************************** * Filename: * * Description: * * History: * * Notes: * ******************************************************************************/ #ifndef _NVRAM_H #define _NVRAM_H /*----------------------------------------------------------------------------* * INCLUDES * *----------------------------------------------------------------------------*/ #ifdef __cplusplus extern "C" { #endif #ifndef WIN32 #else #pragma pack(1) #include "win32_config.h" #endif #if (defined CHIP_EC618) || (defined TYPE_EC718H) || (defined TYPE_EC718U) || (defined TYPE_EC718UM) || (defined TYPE_EC718HM) // the size of rf calibration table is 100K bytes. #define RF_CALI_TABLE_SIZE_100K #define RF_CALI_NV_SECTOR_BANK_NUM_MAX 25 #elif (defined CHIP_EC716) || (defined TYPE_EC718S) || (defined TYPE_EC718P) || (defined TYPE_EC718PM) || (defined TYPE_EC718SM)// EC716, EC718S, EC718P || (defined TYPE_EC718U) // the size of rf calibration table is 48K bytes. #define RF_CALI_TABLE_SIZE_48K #define RF_CALI_NV_SECTOR_BANK_NUM_MAX 12 #endif /*----------------------------------------------------------------------------* * MACROS * *----------------------------------------------------------------------------*/ #define NVRAM_SECTOR_SIZE 4096 #define NVRAM_PAGE_SIZE 256 #define NVRAM_FAC_RESTORE_ERR 0xFFFFFFFE #if (defined TYPE_EC718U) || (defined TYPE_EC718UM) || (defined TYPE_EC718HM) #define NVRAM_COMPRESS_FAC_MAX_SIZE (0x9000)//36k #define NVRAM_DECOMPRESS_FAC_MAX_SIZE (0x19000)//100k #else #define NVRAM_COMPRESS_FAC_MAX_SIZE (0x4000)//16k #define NVRAM_DECOMPRESS_FAC_MAX_SIZE (0xC000)//48k #endif #define NVRAM_COMPRESS_HEADER_MAGIC 0xECAC0129 #if (defined TYPE_EC716S) ||(defined TYPE_EC718S) || (defined TYPE_EC718P) || (defined TYPE_EC716E) || (defined TYPE_EC718U) || (defined TYPE_EC718M)// EC716S, EC718S, EC718P, EC716E, ec718PE,ec718UE #define AP_NV_IMEISN_OFFSET (0) #define AP_NV_IMEISN_MAX_SZIE (256) #define AP_NV_NPI_OFFSET (256) #define AP_NV_NPI_MAX_SZIE (256) #define AP_NV_DXCO_OFFSET (512) #define AP_NV_DCXO_MAX_SZIE (1536-32)//32B hdr to ensure resv region is 2KB #define AP_NV_RESV_OFFSET (2048) #define AP_NV_RESV_MAX_SZIE (2048) #endif /*----------------------------------------------------------------------------* * DATA TYPE DEFINITION * *----------------------------------------------------------------------------*/ typedef enum { NVRAM_OK=0, NVRAM_ERR, NVRAM_FORMAT_ERR, NVRAM_ERASE_FLASH_ERR, NVRAM_WRITE_FLASH_ERR, NVRAM_CHECK_ITEM_ERR, NVRAM_CHECK_ITEM_NO_EXIST, NVRAM_FAC_BROKEN, NVRAM_PART_LEN_ERR, } NvErr_e; typedef enum { NV = 0x0, NV_FAC, NV_BANK_MAX, } NvBank_e; typedef enum { SAVE_ALL = 0x0, SAVE_CALI, SAVE_OTHER, } NvSaveFac_e; #if(defined TYPE_EC718H) typedef enum { APNV1 = 0x0, APNV2, APNV3, APNV4, CPNV1, CPNV2, CPNV3, CPNV4, CPNV5, CPNV6, NV_MAX, } NvType_t; #elif (defined TYPE_EC716S) ||(defined TYPE_EC718S)|| (defined TYPE_EC718P) || (defined TYPE_EC716E) || (defined TYPE_EC718PM) || (defined TYPE_EC718SM)// EC716S, EC718S, EC718P, EC716E typedef enum { APNV1 = 0x0, CPNV1, CPNV2, CPNV3, CPNV4, NV_MAX, } NvType_t; #elif (defined TYPE_EC718U) || (defined TYPE_EC718UM) || (defined TYPE_EC718HM) typedef enum { APNV1 = 0x0, CPNV1, CPNV2, CPNV3, CPNV4, CPNV5, CPNV6, NV_MAX, } NvType_t; #endif #if (defined TYPE_EC716S) ||(defined TYPE_EC718S) || (defined TYPE_EC718P) || (defined TYPE_EC716E) || (defined TYPE_EC718U) || (defined TYPE_EC718M) // EC716S, EC718S, EC718P, EC716E typedef enum { APNV_IMEISN_PART = 0x0, APNV_NPI_PART, APNV_DCXO_PART, APNV_RESV_PART, APNV_PART_MAX, } ApNvPart_t; #endif typedef struct { uint32_t nv_flag; uint32_t time_counter; //default:0x00000001 uint16_t used_size; uint16_t size_dummy; //0xFFFF uint32_t chksum; //CRC32 uint32_t dummy1; //0xFFFFFFFF uint32_t dummy2; //0xFFFFFFFF uint32_t dummy3; //0xFFFFFFFF uint16_t header_chk_dummy; //0xFFFF uint16_t header_chk; } NvHeader_t; typedef struct { uint32_t magic; //default:0xECAC2013 uint32_t compressedSize; // uint32_t crc; //opt uint32_t resv; // } NvRfCompHeader_t; /*----------------------------------------------------------------------------* * GLOBAL FUNCTIONS DECLEARATION * *----------------------------------------------------------------------------*/ NvErr_e nvramInit(void); uint32_t nvramRead(NvType_t nvt,uint8_t * data,uint32_t size,uint32_t offset); uint32_t nvramWrite(NvType_t nvt,uint8_t * data,uint32_t size); uint32_t nvramGetAddr(NvType_t nvt); uint32_t nvramSave2Fac(void); uint32_t nvramSave2FacAp(); uint32_t nvramGetnvAddr(NvType_t nvt); void *nvramGetDCXOBufAddr( void ); #ifdef CORE_IS_AP uint32_t nvramGetnvFacAddr(NvType_t nvt); uint32_t nvramGetnvLength(NvType_t nvt); #endif #if (defined TYPE_EC716S) || (defined TYPE_EC718S) || (defined TYPE_EC718P) || (defined TYPE_EC716E) || (defined TYPE_EC718U) || (defined TYPE_EC718M) uint32_t apNvramWrite(ApNvPart_t partType,uint8_t * data,uint32_t size); uint32_t apNvramRead(ApNvPart_t partType,uint8_t * data,uint32_t size,uint32_t offset); uint32_t nvramSave2CprsFac(uint8_t * data,uint32_t size, uint8_t *decprsBuf); #endif #ifdef __cplusplus } #endif #endif /* _NVRAM_H */