374 lines
9.1 KiB
C
374 lines
9.1 KiB
C
/*------------------------------------------------------------
|
|
(C) Copyright [2006-2008] Marvell International Ltd.
|
|
All Rights Reserved
|
|
------------------------------------------------------------*/
|
|
|
|
#ifndef _DTC_H_
|
|
#define _DTC_H_
|
|
|
|
// CQ00092184 begin
|
|
#if defined DTC_TEST_MODE
|
|
#define DTC_ENABLE_PRINTS
|
|
#endif
|
|
// CQ00092184 end
|
|
#include "dtc_config.h"
|
|
#ifdef UPGRADE_DTC_DRIVER
|
|
|
|
#include "global_types.h"
|
|
|
|
typedef unsigned char Int8;
|
|
typedef unsigned short Int16;
|
|
typedef unsigned long Int32;
|
|
typedef unsigned long long Int64; // CQ00092184 add
|
|
|
|
/////// MACROS for descriptor handling ///////
|
|
#define DTC_EXTRACT_HEADER_SIZE(reg) (((reg) >> 28) & 0xF)
|
|
#define DTC_EXTRACT_HEADER_DATA(reg,size) ( ((reg) << (32-(size))) >> (32-(size)))
|
|
#define DTC_EXTRACT_CONT(reg) (((reg) >> 4) & 1)
|
|
#define DTC_EXTRACT_CB(reg) (((reg) >> 5) & 1)
|
|
#define DTC_EXTRACT_RCS(reg) (((reg) >> 6) & 1)
|
|
#define DTC_EXTRACT_CIPHER_OFFSET(reg) ((reg) & 7)
|
|
// CQ00092184 begin
|
|
#if defined (DTC_TEST_MODE)
|
|
#define DIR_BIT_OFFSET 11
|
|
#define DTC_TEST_MAX_CHAIN_LIST_SIZE (255)
|
|
#define MAX_BYTE_SIZE_FOR_OUTPUT_IN_CONT_MODE (2000)
|
|
/**************************** Functions prototypes *****************************/
|
|
//CQ00096634 begin
|
|
#if defined (DTC_ENABLE_PRINTS)
|
|
void dtcTestPrintChainListArray(void);
|
|
#endif /* DTC_ENABLE_PRINTS */
|
|
#endif /* DTC_TEST_MODE */
|
|
|
|
#define DTC_EEA_BIT_IN_16BITS (0x8000)
|
|
#define DTC_DIR_BIT_OFFSET_IN_16BITS (11)
|
|
#define DTC_ALG_BIT_OFFSET_IN_16BITS (6)
|
|
#define DTC_TATA_BIT_LENGTH_MASK_IN_32BITS (0x0000ffff)
|
|
#define DTC_EXTRACT_SRC_BIT_OFFSET_FROM_DESCRIPTOR(A) ((A&0xffff0000)>>16)
|
|
#define DTC_EXTRACT_DST_BIT_OFFSET_FROM_DESCRIPTOR(A) (A&0x0000ffff)
|
|
#define DTC_EXTRACT_CB_BIT_FROM_DESCRIPTOR(A) ((A&0x2000) != 0)
|
|
|
|
#define DTC_CTRL_START_BIT_OFFSET (5)
|
|
#define DTC_CTRL_MODE_BIT_OFFSET (6)
|
|
#define DTC_SW_BYPASS_SET_COMMON_MODE(A) (A=A&0x07ffffff)
|
|
#define DTC_UNSET_ALG_16_BITS(A) (A=A&0xff3f)
|
|
#define DTC_CLEAR_CB_BIT_FROM_DESCRIPTOR(A) (A=A&0xdfff)
|
|
|
|
|
|
extern void dtcPrintHwRegisters(void);
|
|
// CQ00092184 end
|
|
//CQ00096634 end
|
|
enum
|
|
{
|
|
DTC_HEADER_SIZE_PARAM_0 = 0,
|
|
DTC_HEADER_SIZE_PARAM_1 = 4,
|
|
DTC_HEADER_SIZE_PARAM_2 = 6,
|
|
DTC_HEADER_SIZE_PARAM_3 = 8,
|
|
DTC_HEADER_SIZE_PARAM_4 = 12,
|
|
DTC_HEADER_SIZE_PARAM_5 = 14,
|
|
DTC_HEADER_SIZE_PARAM_6 = 16,
|
|
DTC_HEADER_SIZE_PARAM_7 = 20,
|
|
DTC_HEADER_SIZE_PARAM_8 = 22,
|
|
// CQ00092184 begin
|
|
#if defined DTC_TEST_MODE
|
|
DTC_HEADER_SIZE_PARAM_9 = 24,
|
|
DTC_HEADER_SIZE_PARAM_10 = 32,
|
|
#else
|
|
DTC_HEADER_SIZE_PARAM_9 = 0,
|
|
DTC_HEADER_SIZE_PARAM_10 = 0,
|
|
#endif
|
|
// CQ00092184 end
|
|
DTC_HEADER_SIZE_PARAM_11 = 0,
|
|
DTC_HEADER_SIZE_PARAM_12 = 0,
|
|
DTC_HEADER_SIZE_PARAM_13 = 0,
|
|
DTC_HEADER_SIZE_PARAM_14 = 0,
|
|
DTC_HEADER_SIZE_PARAM_15 = 0
|
|
};
|
|
|
|
enum
|
|
{
|
|
DTC_CIPHER_OFFSET_PARAM_0 = 0,
|
|
DTC_CIPHER_OFFSET_PARAM_1 = 4,
|
|
DTC_CIPHER_OFFSET_PARAM_2 = 8,
|
|
DTC_CIPHER_OFFSET_PARAM_3 = 12,
|
|
DTC_CIPHER_OFFSET_PARAM_4 = 16,
|
|
DTC_CIPHER_OFFSET_PARAM_5 = 20,
|
|
DTC_CIPHER_OFFSET_PARAM_6 = 0,
|
|
DTC_CIPHER_OFFSET_PARAM_7 = 0
|
|
};
|
|
|
|
////////////////////////////////////////////////////////
|
|
|
|
/////// I/F types ///////
|
|
enum dtcTransferEndStatusTag
|
|
{
|
|
DTC_TRANSFER_END_SUCCESS,
|
|
DTC_TRANSFER_END_ERROR
|
|
};
|
|
|
|
typedef UINT8 DtcF8F9Select;
|
|
enum DtcF8F9SelectTag
|
|
{
|
|
DTC_SELECT_F9 = 0,
|
|
DTC_SELECT_F8 = 2
|
|
};
|
|
|
|
typedef UINT8 DtcDirection;
|
|
enum DtcDirectionTag
|
|
{
|
|
DTC_DIR_UL = 0,
|
|
DTC_DIR_DL = 1
|
|
};
|
|
|
|
typedef UINT8 DtcChainEndEvent;
|
|
enum
|
|
{
|
|
DTC_CEE_NONE = 0,
|
|
DTC_CEE_TRIG_EDCH_HW = 8
|
|
};
|
|
|
|
typedef UINT8 DtcPriority;
|
|
enum
|
|
{
|
|
DTC_PRIORITY_NORMAL = 0,
|
|
DTC_PRIORITY_HIGH = 1
|
|
};
|
|
|
|
typedef UINT8 DtcBlockingMode;
|
|
enum
|
|
{
|
|
DTC_MODE_BLOCKING = 0,
|
|
DTC_MODE_NON_BLOCKING = 1
|
|
};
|
|
|
|
typedef enum
|
|
{
|
|
DTC_SUCCESS,
|
|
DTC_ERROR
|
|
} dtcReqStatus;
|
|
|
|
//CQ00096634 begin
|
|
typedef UINT8 DtcModeSelect;
|
|
enum
|
|
{
|
|
DTC_MODE_3G = 0,
|
|
DTC_MODE_4G = 1
|
|
};
|
|
//CQ00096634 end
|
|
|
|
//#if defined (L1_UPGRADE_R7)
|
|
typedef UINT8 cipherType_te;
|
|
//CQ00092184 begin
|
|
//ICAT EXPORTED ENUM
|
|
enum
|
|
{
|
|
#if defined (DTC_TEST_MODE)
|
|
UEA1_UIA1 = 0x0,
|
|
UEA2_UIA2 = 0x20,
|
|
EEA2_EIA2 = 0x40,
|
|
EEA3_EIA3 = 0x80
|
|
#else
|
|
UEA1_UIA1 = 0,
|
|
UEA2_UIA2 = 0x40
|
|
#endif
|
|
};
|
|
// CQ00092184 end
|
|
//#endif
|
|
|
|
//F8 descriptor
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct UdtcF8DescriptorTag
|
|
{
|
|
struct UdtcF8DescriptorTag *next_p;
|
|
UINT8 *srcData_p;
|
|
UINT8 *dstData_p;
|
|
UINT16 bitLength;
|
|
UINT8 bearer;
|
|
UINT8 dtcModeReg;
|
|
UINT32 headerReg;
|
|
UINT16 dstBitOffset;
|
|
UINT16 srcBitOffset;
|
|
UINT32 countC;
|
|
UINT8 *key_p;
|
|
} dtcF8DescriptorInfo;
|
|
|
|
//F9 descriptor
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct UdtcF9DescriptorTag
|
|
{
|
|
UINT32 reserved0;
|
|
UINT8 *srcData_p;
|
|
UINT32 bitLength;
|
|
UINT32 fresh;
|
|
UINT32 countI;
|
|
UINT8 *key_p;
|
|
UINT16 srcBitOffset;
|
|
UINT16 reserved1;
|
|
UINT32 reserved2;
|
|
} dtcF9DescriptorInfo;
|
|
|
|
// CQ00092184 begin
|
|
#if defined DTC_TEST_MODE
|
|
//List Chain test info - the input type of chainList tests as in dtc_test_data.c.
|
|
// holds up to 8 chains to request
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct dtcListChainTestInfoTag
|
|
{
|
|
UINT16 listLength;
|
|
UINT32 reserve[2];
|
|
} dtcListChainTestInfo;
|
|
#endif
|
|
// CQ00092184 end
|
|
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct dtcTransferEndTag
|
|
{
|
|
UINT32 status;
|
|
UINT32 macIF9Result;
|
|
UINT32 requestID;
|
|
} dtcTransferEnd_ts;
|
|
|
|
|
|
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct LteDtcDesTag
|
|
{
|
|
struct LteDtcDesTag *next; //pointer to the next description
|
|
Int8 *dataPtr; // Pointer to the source data address
|
|
Int8 *des_addr; // Pointer to the destination data address
|
|
Int16 dataBitLen;
|
|
Int16 shareBufPara; // include Algorithom, Retain Cipher State, Cipher Bypass, RB ID, Bcontinued, Cipher Offset and isSrb(for RLC mask 0x0800)
|
|
Int32 headerAndFresh; // include HDR size and Header Data
|
|
Int32 bitOffset; // include input bit offset and output bit offset
|
|
Int32 count;
|
|
Int8 *key_addr;
|
|
}LteDtcDes;
|
|
|
|
|
|
typedef void (*dtcTransferEndCallback)(dtcTransferEnd_ts *);
|
|
// CQ00092184 begin
|
|
#if defined DTC_TEST_MODE
|
|
//holds the test information about a chain in the list
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct dtcTestListChainInfoTag
|
|
{
|
|
UINT32 testNum;
|
|
dtcTransferEndCallback callback;
|
|
dtcTransferEnd_ts transferEndData;
|
|
} dtcTestListChainInfo;
|
|
|
|
// holds END info for all the list
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct dtcListTransferEndTag
|
|
{
|
|
UINT8 chainListChRequestIndex; // holds the index for the next chain request in the list mode array (lteChainBaseAddressCh0) and the dtc list mode end array ChainListCh0EndInfo
|
|
Int8 lastReportDoneIndexCh;
|
|
dtcTestListChainInfo chainInfo[DTC_TEST_MAX_CHAIN_LIST_SIZE];
|
|
} dtcListTransferEnd_ts;
|
|
#endif /* DTC_TEST_MODE */
|
|
// CQ00092184 end
|
|
#if 0
|
|
//Dtc request structure
|
|
typedef struct dtcTransferReqTag
|
|
{
|
|
DtcF8F9Select select;
|
|
DtcChainEndEvent cee;
|
|
DtcPriority priority;
|
|
DtcBlockingMode blockingMode;
|
|
DtcDirection dir;
|
|
UINT8 reserved[3];
|
|
UINT32 requestID;
|
|
void *firstDescriptor_p;
|
|
dtcTransferEndCallback callback;
|
|
} dtcTransferReq_ts;
|
|
#endif
|
|
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct dtcTransferReqTag
|
|
{
|
|
DtcF8F9Select select;
|
|
DtcChainEndEvent cee;
|
|
DtcPriority priority;
|
|
DtcBlockingMode blockingMode;
|
|
DtcDirection dir;
|
|
//#if defined (L1_UPGRADE_R7)
|
|
cipherType_te cipherAlgorithm;
|
|
UINT8 reserved[2];
|
|
//#else
|
|
//UINT8 reserved[3];
|
|
//#endif
|
|
UINT32 requestID;
|
|
void *firstDescriptor_p;
|
|
dtcTransferEndCallback callback;
|
|
} dtcTransferReq_ts;
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
|
|
/////// function prototype ///////
|
|
|
|
//generator I/F func
|
|
extern void dtc
|
|
(void *Desc_p,
|
|
UINT32 *input_p,
|
|
UINT32 *output_p,
|
|
UINT8 *key_p,
|
|
DtcDirection dir,
|
|
DtcF8F9Select select
|
|
);
|
|
|
|
extern void dtcF9CallbackFunction(dtcTransferEnd_ts *TransferEndData);
|
|
|
|
extern dtcReqStatus dtcTransferReq (dtcTransferReq_ts *dtcRequest);
|
|
|
|
extern void dtcPreF8TransferReq(UINT8 savedBuff[], UINT8 chainLen, dtcF8DescriptorInfo *firstF8Desc_p);
|
|
|
|
extern void dtcPostF8TransferReq(UINT8 savedBuff[], UINT8 chainLen, dtcF8DescriptorInfo *firstF8Desc_p);
|
|
|
|
extern dtcReqStatus dtcPahse1Init(void);
|
|
|
|
extern dtcReqStatus dtcPahse2Init(void);
|
|
|
|
extern dtcReqStatus InitDtc(void); //CQ00096760 modify
|
|
#ifndef UPGRADE_DTC_SIMULATOR
|
|
extern void dtcSetDtcResetAfterRequest (UINT8 val);
|
|
void dtcD2Register(void);
|
|
#endif
|
|
|
|
#if defined (PHS_SW_DEMO_TTC)
|
|
#if 0
|
|
UINT32 f9
|
|
(UINT8 * key_p,
|
|
UINT32 countI,
|
|
UINT32 fresh,
|
|
UINT8 dir,
|
|
UINT8 * data_p,
|
|
UINT16 bitLength
|
|
);
|
|
void f8(
|
|
UINT8 * key_p,
|
|
UINT32 countC,
|
|
UINT32 bearer,
|
|
UINT8 dir,
|
|
UINT8 * data_p,
|
|
UINT16 bitLength,
|
|
UINT16 bitOffset
|
|
);
|
|
void f8Enhanced(
|
|
UINT8 * key_p,
|
|
UINT32 countC,
|
|
UINT32 bearer,
|
|
UINT8 dir,
|
|
UINT8 * srcData_p,
|
|
UINT8 * dstData_p,
|
|
UINT16 bitLength,
|
|
UINT16 srcBitOffset,
|
|
UINT16 dstBitOffset
|
|
);
|
|
#endif
|
|
#endif
|
|
|
|
#endif //UPGRADE_DTC_DRIVER
|
|
|
|
#endif
|