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

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