📄 ubscrypt.h
字号:
#define PKTCONTEXT_ALIGNMENT 64 /* Boundary to which PacketContexts will be aligned. Must be power of 2 */#if (SYS_CACHELINE_SIZE >= PKTCONTEXT_ALIGNMENT) #define PKTCONTEXT_ALIGNMENT_PAD (PKTCONTEXT_ALIGNMENT - (sizeof(PacketContextUnaligned_t) & (PKTCONTEXT_ALIGNMENT-1)))#else #undef PKTCONTEXT_ALIGNMENT_PAD#endif/***********************************************************************//* Hardware (DMA) version of above structure that is cacheline sized *//* (an integer multiple of SYS_CACHELINE_SIZE bytes in length). *//* Any changes made to either structure must be mirrored in the other *//***********************************************************************/typedef struct PacketContext_s {#ifdef UBSEC_582x_CLASS_DEVICE#if (UBS_CRYPTONET_ATTRIBUTE == UBS_LITTLE_ENDIAN) VOLATILE unsigned short cmd_structure_length; VOLATILE unsigned short operation_type; #else VOLATILE unsigned short operation_type; VOLATILE unsigned short cmd_structure_length;#endif /* UBS_CRYPTONET_ATTRIBUTE conditional */#endif /* 582x conditional */ VOLATILE CryptoContext_t Context; VOLATILE UBS_UINT32 PhysicalAddress;#if (SYS_CACHELINE_SIZE >= PKTCONTEXT_ALIGNMENT) /***********************************************************************/ /**** If PacketContextUnaligned_t is cacheline sized, the following ****/ /**** pad array will have a subscript of zero. Under this condition ****/ /**** the following line should be commented out. ****/ unsigned char pad[PKTCONTEXT_ALIGNMENT_PAD]; /***/ /***********************************************************************/#endif} PacketContext_t,*PacketContext_pt;/* Size of command fields. */#define CIPHER_CONTEXT_SIZE (sizeof(CipherContext_t)+4) #define SSLMAC_CONTEXT_SIZE (sizeof(SSL_MACContext_t)+4)#define SSLCRYPTO_CONTEXT_SIZE (sizeof(SSL_CryptoContext_t)+4) #define TLSHMAC_CONTEXT_SIZE (sizeof(TLS_HMACContext_t)+4) #define ARC4_CONTEXT_SIZE (sizeof(ARC4_CryptoContext_t)+4)#define HASH_CONTEXT_SIZE (sizeof(Hash_Context_t)+4)/* * Crypto operation types. *//* #ifdef UBS_LITTLE_ENDIAN */#if (UBS_CPU_ATTRIBUTE == UBS_CRYPTONET_ATTRIBUTE)#define OPERATION_IPSEC 0x0000#define OPERATION_SSL_HMAC 0x0001#define OPERATION_SSL_MAC 0x0001#define OPERATION_TLS_HMAC 0x0002#define OPERATION_SSL_CRYPTO 0x0003#define OPERATION_ARC4 0x0004#define OPERATION_HASH 0x0005#else#define OPERATION_IPSEC 0x0000#define OPERATION_SSL_HMAC 0x0100#define OPERATION_SSL_MAC 0x0100#define OPERATION_TLS_HMAC 0x0200#define OPERATION_SSL_CRYPTO 0x0300#define OPERATION_ARC4 0x0400#define OPERATION_HASH 0x0500#endif#define NULL_PACKET_CONTEXT (PacketContext_pt) 0/*-------------------------------------------------------------------------- * Data Buffer Chain element * * An element in the linked list of data buffers that makes up a * Packet * * DataAddress pointer to this buffer's data * pNext pointer to the next element * DataLength size in bytes of this element * Reserved reserved */typedef struct DataBufChain_s { VOLATILE UBS_UINT32 DataAddress; /* Physical address. */ VOLATILE UBS_UINT32 pNext; /* Physical address. */#if (UBS_CRYPTONET_ATTRIBUTE == UBS_LITTLE_ENDIAN) VOLATILE unsigned short DataLength; VOLATILE unsigned short Reserved;#else VOLATILE unsigned short Reserved; VOLATILE unsigned short DataLength;#endif /* UBS_CRYPTONET_ATTRIBUTE conditional */} DataBufChain_t, *DataBufChain_pt;/* This is the same structure as above but with a physical address location for efficiency */typedef struct DataBufChainList_s { VOLATILE UBS_UINT32 DataAddress; /* Physical address. */ VOLATILE UBS_UINT32 pNext; /* Physical address. */#if (UBS_CRYPTONET_ATTRIBUTE == UBS_LITTLE_ENDIAN) VOLATILE unsigned short DataLength; VOLATILE unsigned short Reserved;#else VOLATILE unsigned short Reserved; VOLATILE unsigned short DataLength;#endif /* UBS_CRYPTONET_ATTRIBUTE conditional */ VOLATILE UBS_UINT32 PhysicalAddress;} DataBufChainList_t, *DataBufChainList_pt;#define NULL_DATA_CHAIN ((DataBufChainList_pt) 0)/* * Packet */typedef struct Packet_s { VOLATILE UBS_UINT32 PacketContextBuffer; VOLATILE DataBufChain_t InputHead;#if (UBS_CRYPTONET_ATTRIBUTE == UBS_LITTLE_ENDIAN) VOLATILE unsigned short Reserved; VOLATILE unsigned short PacketLength;#else VOLATILE unsigned short PacketLength; VOLATILE unsigned short Reserved;#endif /* UBS_CRYPTONET_ATTRIBUTE conditional */ VOLATILE DataBufChain_t OutputHead; } Packet_t, *Packet_pt;/* * Master Command Record structure * * The master command record is the structure that gets passed * to the chip. * * NumberOfPackets number of packets in this MCR * Flags completion status from chip * PacketArray array of packet structures */typedef struct CallBackInfo_s { void(*CompletionCallback)(unsigned long Context,ubsec_Status_t Result); unsigned long CommandContext; } CallBackInfo_t, *CallBackInfo_pt;#if (UBS_CPU_ATTRIBUTE == UBS_CRYPTONET_ATTRIBUTE)#define MCR_FLAG_COMPLETION 0x0001 /* bit [0] indicates done */#define MCR_INTERRUPT_SUPPRESS 0x8000 /* bit [15] suppresses interrupt for 5821 MCR */#else#define MCR_FLAG_COMPLETION 0xff00 /* bit [8] indicates done */#define MCR_INTERRUPT_SUPPRESS 0x0080 /* bit [7] suppresses interrupt for 5821 MCR */#endif/* MCR_DMA_MEM_OFFSET forces the PacketArray list to start on a 32-byte boundary. *//* This assumes that each MCR is aligned to at least a 32-byte boundary. That *//* means that OS_AllocateDMAMemory() must return physical memory aligned to *//* at least 32-byte boundaries (32, 64, 96 etc.) as defined by SYS_CACHELINE_SIZE. */#if (SYS_CACHELINE_SIZE && !(SYS_CACHELINE_SIZE & 0x1F)) #define MCR_DMA_MEM_OFFSET (sizeof(Packet_t) - 2*sizeof(unsigned short)) #else #define MCR_DMA_MEM_OFFSET 0#endiftypedef struct MasterCommandUnaligned_s {#if (SYS_CACHELINE_SIZE && !(SYS_CACHELINE_SIZE & 0x1F)) unsigned char dma_pad[MCR_DMA_MEM_OFFSET];#endif#if (UBS_CRYPTONET_ATTRIBUTE == UBS_LITTLE_ENDIAN) VOLATILE unsigned short NumberOfPackets; VOLATILE unsigned short Flags;#else VOLATILE unsigned short Flags; VOLATILE unsigned short NumberOfPackets;#endif /* UBS_CRYPTONET_ATTRIBUTE conditional */ VOLATILE Packet_t PacketArray[MCR_MAXIMUM_PACKETS]; /* * The following fields are not part of the MCR but are present here * for easy access. */ OS_MemHandle_t MCRMemHandle; /* Memory handle to use for current MCR */ UBS_UINT32 MCRMemHandleOffset; /* Used with handle for OS_SyncTo calls */ VOLATILE CallBackInfo_t CompletionArray[MCR_MAXIMUM_PACKETS]; VOLATILE PacketContext_t *ContextList; VOLATILE KeyContext_t *KeyContextList[MCR_MAXIMUM_PACKETS]; OS_MemHandle_t ContextListHandle[MCR_MAXIMUM_PACKETS];#ifdef STATIC_F_LIST VOLATILE DataBufChainList_t InputFragmentList[MCR_MAXIMUM_PACKETS*UBSEC_MAX_FRAGMENTS]; VOLATILE DataBufChainList_t OutputFragmentList[MCR_MAXIMUM_PACKETS*UBSEC_MAX_FRAGMENTS];#else VOLATILE DataBufChainList_t *InputFragmentList; VOLATILE DataBufChainList_t *OutputFragmentList; OS_MemHandle_t InputFragmentListHandle; OS_MemHandle_t OutputFragmentListHandle;#endif VOLATILE UBS_UINT32 MCRPhysicalAddress; VOLATILE UBS_UINT32 MCRState; VOLATILE struct MasterCommand_s *pNextMCR; /* Pointer to next in list. */ UBS_UINT32 Index;} MasterCommandUnaligned_t;#define MCR_ALIGNMENT 32 /* Boundary to which MCRs will be aligned. Must be power of 2 */#if (SYS_CACHELINE_SIZE >= MCR_ALIGNMENT) #define MCR_ALIGNMENT_PAD (MCR_ALIGNMENT - (sizeof(MasterCommandUnaligned_t) & (MCR_ALIGNMENT-1)))#else #undef MCR_ALIGNMENT_PAD #endif/***********************************************************************//* Hardware (DMA) version of above structure that is 'alignably' sized *//* (an integer multiple of 32 bytes in length). *//* Any changes made to either structure must be mirrored in the other *//***********************************************************************/typedef struct MasterCommand_s {#if (SYS_CACHELINE_SIZE && !(SYS_CACHELINE_SIZE & 0x3)) unsigned char dma_pad[MCR_DMA_MEM_OFFSET];#endif#if (UBS_CRYPTONET_ATTRIBUTE == UBS_LITTLE_ENDIAN) VOLATILE unsigned short NumberOfPackets; VOLATILE unsigned short Flags;#else VOLATILE unsigned short Flags; VOLATILE unsigned short NumberOfPackets;#endif /* UBS_CRYPTONET_ATTRIBUTE conditional */ VOLATILE Packet_t PacketArray[MCR_MAXIMUM_PACKETS]; /* * The following fields are not part of the MCR but are present here * for easy access. */ OS_MemHandle_t MCRMemHandle; /* Memory handle to use for current MCR */ UBS_UINT32 MCRMemHandleOffset; /* Used with handle for OS_SyncTo calls */ VOLATILE CallBackInfo_t CompletionArray[MCR_MAXIMUM_PACKETS]; VOLATILE PacketContext_t *ContextList; VOLATILE KeyContext_t *KeyContextList[MCR_MAXIMUM_PACKETS]; OS_MemHandle_t ContextListHandle[MCR_MAXIMUM_PACKETS];#ifdef STATIC_F_LIST VOLATILE DataBufChainList_t InputFragmentList[MCR_MAXIMUM_PACKETS*UBSEC_MAX_FRAGMENTS]; VOLATILE DataBufChainList_t OutputFragmentList[MCR_MAXIMUM_PACKETS*UBSEC_MAX_FRAGMENTS];#else VOLATILE DataBufChainList_t *InputFragmentList; VOLATILE DataBufChainList_t *OutputFragmentList; OS_MemHandle_t InputFragmentListHandle; OS_MemHandle_t OutputFragmentListHandle;#endif VOLATILE UBS_UINT32 MCRPhysicalAddress; VOLATILE UBS_UINT32 MCRState; VOLATILE struct MasterCommand_s *pNextMCR; /* Pointer to next in list. */ UBS_UINT32 Index;#if (SYS_CACHELINE_SIZE >= MCR_ALIGNMENT) /***********************************************************************/ /**** If sizeof(MasterCommandUnaligned_t)%32 is zero, the following ****/ /**** pad array will have a subscript of zero. Under this condition ****/ /**** the following line should be commented out. ****/ unsigned char pad[MCR_ALIGNMENT_PAD]; /**/ /***********************************************************************/#endif} MasterCommand_t, *MasterCommand_pt;#define NULL_MASTER_COMMAND (MasterCommand_pt) 0#define MCR_STATE_FREE 0x00 /* Not in use. */#define MCR_STATE_ACTIVE 0x01 /* Packets in the MCR. */#define MCR_STATE_PUSHED 0x02 /* Pushed onto device. */#define UBSEC_IS_SSL_DEVICE(pDevice) ( (pDevice->DeviceID==BROADCOM_DEVICE_ID_5820) || \(pDevice->DeviceID==BROADCOM_DEVICE_ID_5821) || \(pDevice->DeviceID==BROADCOM_DEVICE_ID_5822) )#endif /* _UBSCRYPT_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -