Files
banban/ql-kernel/threadx/common/include/IMEI.h
T

187 lines
6.1 KiB
C

/*------------------------------------------------------------
(C) Copyright [2006-2008] Marvell International Ltd.
All Rights Reserved
------------------------------------------------------------*/
//Copyright 2005, Intel Corporation, All rights reserved.
/******************************************************************************
* MODULE IMPLEMENTATION FILE
*******************************************************************************
* Title: IMEI
*
* Filename: IMEI.h
*
* Authors: ashenkal
*
* Description: IMEI API - Set / Read / Lock IMEI number to / from / in INT_FLASH
*
* Last Updated: 23/1/2006
* 26/02/2008, yshemla - new design for IMEI management by Shay Shrot: means that
* IMEI is now burn to specific location in Flash, and retrieved by OBM
* to predefined location in DDR (predefined but still dynamic)
*
* Notes:
******************************************************************************/
#ifndef _IMEI_H
#define _IMEI_H
#include "global_types.h"
//#if defined(_HERMON_B0_SILICON_) && !defined(INTEL_2CHIP_PLAT_BVD)
/* OLD DESIGN */
//#else//(_TAVOR_HARBELL_) && TTC
#define IMEI_NEW_DESIGN // comment this for SW that doesn't support new IMEI design
// new design for IMEI management by Shay Shrot: means that
// IMEI is now burn to specific location in Flash, and retrieved by OBM
// to predefined location in DDR
//#endif//_HERMON_B0_SILICON_
#if defined IMEI_NEW_DESIGN
/********************************************************************************
\* IMEISV format (16 numbers) - :
* Manufacturer Code Platform Code SV Code
* digits[0]... digits[7] digits[8]... digits[13] digits[14] digits[15]
*
* Generic Format (support only IMEISV) as returned in IMEIRead :
*
* digits[0] : first char (MSB) in Manufacturer Code
* digits[7] : last char (LSB) in Manufacturer Code
* digits[8] : first char (MSB) in Platform Code
* digits[13] : last char (LSB) in Platform Code
* digits[14] : first char (MSB) in SV Code
* digits[15] : last char (MSB) in SV Code
*
******************************************************************************/
#define IMEI_DEFAULT_NUMBER "0010680000000000"
#define IMEI_TOTAL_LEN 15
#define IMEI_LEN 14
#define IMEI_NUMBER_SIZE 16 // 16 bytes
#define USER_DATA_SIZE 16 // 16 bytes
#define IMEI_SUB_KEY_SIZE 26 // Longs == 104 bytes
#define IMEI_USER_KEY_SIZE 26 // Longs == 104 bytes
typedef enum
{
IMEI_IS_NOT_ENC = 0,
IMEI_IS_ENC
} IMEI_DEC_ENC;
typedef struct
{
char digits[16];
} IMEIData;
typedef enum
{
IMEI_RC_OK = 0,
IMEI_RC_LOCKED,
IMEI_RC_FLASH_BUSY,
IMEI_RC_RW_NO_SUPPORT,
IMEI_RC_VALUE_ERR,
IMEI_RC_PROGRAM_ERR,
IMEI_RC_VPP_LOW_ERR,
IMEI_RC_FPR_MODIFIED_WARN
} IMEI_ReturnCode;
typedef struct
{
unsigned char DeycrptNumber[IMEI_NUMBER_SIZE];
unsigned char UserData[USER_DATA_SIZE];
unsigned char EncryptNumber[IMEI_NUMBER_SIZE];
unsigned long UserKey[IMEI_USER_KEY_SIZE]; // 104 bytes
unsigned long SubKey[IMEI_SUB_KEY_SIZE]; // 104 bytes
unsigned char ImeiEncrypt; /* this will be set to 'IMEI_IS_ENC' in case the EncryptNumber
* is valid */
} IMEIExtendedData;
typedef struct
{
// CD = Check Digit , SV = Software Version
// IMEI(14 digits)+ CD(1 digit), SV(2 digits)
char imei_digits[16];
char sv_digits[3];
} IMEIStr;
void IMEIinit(unsigned long *ddrBuffaddr);
void IMEIExtendedInit(unsigned long *ddrBuffaddr);
IMEI_ReturnCode IMEIRead( IMEIData *imei); // PS calls this API with pointer to struct of size 9
void IMEIReadOnly( const IMEIData **imei);
void IMEIExtendedRead( const IMEIExtendedData **ext_imei);
void IMEIReadStr( IMEIStr* imeiStr );
BOOL IMEIIsDefaultNumber ( void );
void IMEI2init(unsigned long *ddrBuffaddr);
void IMEI2ExtendedInit(unsigned long *ddrBuffaddr);
IMEI_ReturnCode IMEI2Read( IMEIData *imei); // PS calls this API with pointer to struct of size 9
void IMEI2ReadOnly( const IMEIData **imei);
void IMEI2ExtendedRead( const IMEIExtendedData **ext_imei);
void IMEI2ReadStr( IMEIStr* imeiStr );
BOOL IMEI2IsDefaultNumber ( void );
#else /* IMEI_NEW_DESIGN */
//compile flags:
#define IMEI_DEBUG_ENABLED
//#define HEXA_DIGITS_ENABLED
#define IMEI_ICAT_ENABLED
#define MC_INTEL 0x89
#define INT_FLASH_ADDR 0x80000000
#define EXT_FLASH_ADDR 0x04000000
#define TETON_FLASH_ID 0x27
#define TETON_FLASH_FPR_OFFSET 0x80
#define TETON_FLASH_FPR_BITS 64
#define TETON_FLASH_FAC_ID_SIZE 4
#define FPR_LOCK_BIT_MASK 0x0002
typedef struct
{
unsigned int *baseFlashAddr; //
unsigned int offset; //of FPR lock register from base address of flash.
unsigned int facIdSize; //in words
unsigned int fprSize; //in bits
unsigned char imeiLength; // in digits
} FPRData;
typedef enum
{
FPR_INT_FLASH = 0,
FPR_EXT_FLASH,
FPR_FDI
} FlashLoc;
typedef enum
{
IMEI_RC_OK = 0,
IMEI_RC_LOCKED,
IMEI_RC_FLASH_BUSY,
IMEI_RC_RW_NO_SUPPORT,
IMEI_RC_VALUE_ERR,
IMEI_RC_PROGRAM_ERR,
IMEI_RC_VPP_LOW_ERR,
IMEI_RC_FPR_MODIFIED_WARN
} IMEI_ReturnCode;
unsigned short FPRInit (FlashLoc flashPick);
IMEI_ReturnCode IMEIInit (FlashLoc flashPick, unsigned char imeiLength);
IMEI_ReturnCode IMEIWrite (char *imei);
void IMEIRead (char* imei);
IMEI_ReturnCode FPRWrite (FlashLoc flashPick, unsigned char* valPtr, unsigned char highWrBit, unsigned char lowWrBit);
void FPRRead (FlashLoc flashPick, unsigned char* dataBufPtr);
IMEI_ReturnCode FPRLock (FlashLoc flashPick);
void FacIDRead (FlashLoc flashPick, unsigned short* facId);
#endif /* IMEI_NEW_DESIGN */
#endif /* _IMEI_H */