2025-04-11 09:40:32 +08:00

217 lines
5.8 KiB
C

/******************************************************************************
*(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 */