#ifndef __DEV_PCI_HIFN7751REG_H__
#define __DEV_PCI_HIFN7751REG_H__
#include <sys/endian.h>
#define HIFN_BAR0 (PCI_MAPREG_START + 0)
#define HIFN_BAR1 (PCI_MAPREG_START + 4)
#define HIFN_RETRY_TIMEOUT 0x41
#define HIFN_TRDY_TIMEOUT 0x40
#define HIFN_MAX_COMMAND (8 + 8 + 8 + 64 + 260)
#define HIFN_MAX_RESULT (8 + 4 + 4 + 20 + 4)
struct hifn_desc {
volatile u_int32_t l;
volatile u_int32_t p;
};
#define HIFN_D_LENGTH 0x0000ffff
#define HIFN_D_MASKDONEIRQ 0x02000000
#define HIFN_D_DESTOVER 0x04000000
#define HIFN_D_OVER 0x08000000
#define HIFN_D_LAST 0x20000000
#define HIFN_D_JUMP 0x40000000
#define HIFN_D_VALID 0x80000000
#define HIFN_0_PUDATA 0x00
#define HIFN_0_PUCTRL 0x04
#define HIFN_0_PUISR 0x08
#define HIFN_0_PUCNFG 0x0c
#define HIFN_0_PUIER 0x10
#define HIFN_0_PUSTAT 0x14
#define HIFN_0_FIFOSTAT 0x18
#define HIFN_0_FIFOCNFG 0x1c
#define HIFN_0_SPACESIZE 0x20
#define HIFN_PUCTRL_CLRSRCFIFO 0x0010
#define HIFN_PUCTRL_STOP 0x0008
#define HIFN_PUCTRL_LOCKRAM 0x0004
#define HIFN_PUCTRL_DMAENA 0x0002
#define HIFN_PUCTRL_RESET 0x0001
#define HIFN_PUISR_CMDINVAL 0x8000
#define HIFN_PUISR_DATAERR 0x4000
#define HIFN_PUISR_SRCFIFO 0x2000
#define HIFN_PUISR_DSTFIFO 0x1000
#define HIFN_PUISR_DSTOVER 0x0200
#define HIFN_PUISR_SRCCMD 0x0080
#define HIFN_PUISR_SRCCTX 0x0040
#define HIFN_PUISR_SRCDATA 0x0020
#define HIFN_PUISR_DSTDATA 0x0010
#define HIFN_PUISR_DSTRESULT 0x0004
#define HIFN_PUCNFG_DRAMMASK 0xe000
#define HIFN_PUCNFG_DSZ_256K 0x0000
#define HIFN_PUCNFG_DSZ_512K 0x2000
#define HIFN_PUCNFG_DSZ_1M 0x4000
#define HIFN_PUCNFG_DSZ_2M 0x6000
#define HIFN_PUCNFG_DSZ_4M 0x8000
#define HIFN_PUCNFG_DSZ_8M 0xa000
#define HIFN_PUNCFG_DSZ_16M 0xc000
#define HIFN_PUCNFG_DSZ_32M 0xe000
#define HIFN_PUCNFG_DRAMREFRESH 0x1800
#define HIFN_PUCNFG_DRFR_512 0x0000
#define HIFN_PUCNFG_DRFR_256 0x0800
#define HIFN_PUCNFG_DRFR_128 0x1000
#define HIFN_PUCNFG_TCALLPHASES 0x0200
#define HIFN_PUCNFG_TCDRVTOTEM 0x0100
#define HIFN_PUCNFG_BIGENDIAN 0x0080
#define HIFN_PUCNFG_BUS32 0x0040
#define HIFN_PUCNFG_BUS16 0x0000
#define HIFN_PUCNFG_CHIPID 0x0020
#define HIFN_PUCNFG_DRAM 0x0010
#define HIFN_PUCNFG_SRAM 0x0000
#define HIFN_PUCNFG_COMPSING 0x0004
#define HIFN_PUCNFG_ENCCNFG 0x0002
#define HIFN_PUIER_CMDINVAL 0x8000
#define HIFN_PUIER_DATAERR 0x4000
#define HIFN_PUIER_SRCFIFO 0x2000
#define HIFN_PUIER_DSTFIFO 0x1000
#define HIFN_PUIER_DSTOVER 0x0200
#define HIFN_PUIER_SRCCMD 0x0080
#define HIFN_PUIER_SRCCTX 0x0040
#define HIFN_PUIER_SRCDATA 0x0020
#define HIFN_PUIER_DSTDATA 0x0010
#define HIFN_PUIER_DSTRESULT 0x0004
#define HIFN_PUSTAT_CMDINVAL 0x8000
#define HIFN_PUSTAT_DATAERR 0x4000
#define HIFN_PUSTAT_SRCFIFO 0x2000
#define HIFN_PUSTAT_DSTFIFO 0x1000
#define HIFN_PUSTAT_DSTOVER 0x0200
#define HIFN_PUSTAT_SRCCMD 0x0080
#define HIFN_PUSTAT_SRCCTX 0x0040
#define HIFN_PUSTAT_SRCDATA 0x0020
#define HIFN_PUSTAT_DSTDATA 0x0010
#define HIFN_PUSTAT_DSTRESULT 0x0004
#define HIFN_PUSTAT_CHIPREV 0x00ff
#define HIFN_PUSTAT_CHIPENA 0xff00
#define HIFN_PUSTAT_ENA_2 0x1100
#define HIFN_PUSTAT_ENA_1 0x1000
#define HIFN_PUSTAT_ENA_0 0x3000
#define HIFN_PUSTAT_REV_2 0x0020
#define HIFN_PUSTAT_REV_3 0x0030
#define HIFN_FIFOSTAT_SRC 0x7f00
#define HIFN_FIFOSTAT_DST 0x007f
#define HIFN_FIFOCNFG_THRESHOLD 0x0400
#define HIFN_1_DMA_CRAR 0x0c
#define HIFN_1_DMA_SRAR 0x1c
#define HIFN_1_DMA_RRAR 0x2c
#define HIFN_1_DMA_DRAR 0x3c
#define HIFN_1_DMA_CSR 0x40
#define HIFN_1_DMA_IER 0x44
#define HIFN_1_DMA_CNFG 0x48
#define HIFN_1_PLL 0x4c
#define HIFN_1_7811_RNGENA 0x60
#define HIFN_1_7811_RNGCFG 0x64
#define HIFN_1_7811_RNGDAT 0x68
#define HIFN_1_7811_RNGSTS 0x6c
#define HIFN_1_7811_MIPSRST 0x94
#define HIFN_1_REVID 0x98
#define HIFN_1_UNLOCK_SECRET1 0xf4
#define HIFN_1_UNLOCK_SECRET2 0xfc
#define HIFN_1_PUB_RESET 0x204
#define HIFN_1_PUB_BASE 0x300
#define HIFN_1_PUB_OPLEN 0x304
#define HIFN_1_PUB_OP 0x308
#define HIFN_1_PUB_STATUS 0x30c
#define HIFN_1_PUB_IEN 0x310
#define HIFN_1_RNG_CONFIG 0x314
#define HIFN_1_RNG_DATA 0x318
#define HIFN_1_PUB_MEM 0x400
#define HIFN_1_PUB_MEMEND 0xbff
#define HIFN_DMACSR_D_CTRLMASK 0xc0000000
#define HIFN_DMACSR_D_CTRL_NOP 0x00000000
#define HIFN_DMACSR_D_CTRL_DIS 0x40000000
#define HIFN_DMACSR_D_CTRL_ENA 0x80000000
#define HIFN_DMACSR_D_ABORT 0x20000000
#define HIFN_DMACSR_D_DONE 0x10000000
#define HIFN_DMACSR_D_LAST 0x08000000
#define HIFN_DMACSR_D_WAIT 0x04000000
#define HIFN_DMACSR_D_OVER 0x02000000
#define HIFN_DMACSR_R_CTRL 0x00c00000
#define HIFN_DMACSR_R_CTRL_NOP 0x00000000
#define HIFN_DMACSR_R_CTRL_DIS 0x00400000
#define HIFN_DMACSR_R_CTRL_ENA 0x00800000
#define HIFN_DMACSR_R_ABORT 0x00200000
#define HIFN_DMACSR_R_DONE 0x00100000
#define HIFN_DMACSR_R_LAST 0x00080000
#define HIFN_DMACSR_R_WAIT 0x00040000
#define HIFN_DMACSR_R_OVER 0x00020000
#define HIFN_DMACSR_S_CTRL 0x0000c000
#define HIFN_DMACSR_S_CTRL_NOP 0x00000000
#define HIFN_DMACSR_S_CTRL_DIS 0x00004000
#define HIFN_DMACSR_S_CTRL_ENA 0x00008000
#define HIFN_DMACSR_S_ABORT 0x00002000
#define HIFN_DMACSR_S_DONE 0x00001000
#define HIFN_DMACSR_S_LAST 0x00000800
#define HIFN_DMACSR_S_WAIT 0x00000400
#define HIFN_DMACSR_ILLW 0x00000200
#define HIFN_DMACSR_ILLR 0x00000100
#define HIFN_DMACSR_C_CTRL 0x000000c0
#define HIFN_DMACSR_C_CTRL_NOP 0x00000000
#define HIFN_DMACSR_C_CTRL_DIS 0x00000040
#define HIFN_DMACSR_C_CTRL_ENA 0x00000080
#define HIFN_DMACSR_C_ABORT 0x00000020
#define HIFN_DMACSR_C_DONE 0x00000010
#define HIFN_DMACSR_C_LAST 0x00000008
#define HIFN_DMACSR_C_WAIT 0x00000004
#define HIFN_DMACSR_PUBDONE 0x00000002
#define HIFN_DMACSR_ENGINE 0x00000001
#define HIFN_DMAIER_D_ABORT 0x20000000
#define HIFN_DMAIER_D_DONE 0x10000000
#define HIFN_DMAIER_D_LAST 0x08000000
#define HIFN_DMAIER_D_WAIT 0x04000000
#define HIFN_DMAIER_D_OVER 0x02000000
#define HIFN_DMAIER_R_ABORT 0x00200000
#define HIFN_DMAIER_R_DONE 0x00100000
#define HIFN_DMAIER_R_LAST 0x00080000
#define HIFN_DMAIER_R_WAIT 0x00040000
#define HIFN_DMAIER_R_OVER 0x00020000
#define HIFN_DMAIER_S_ABORT 0x00002000
#define HIFN_DMAIER_S_DONE 0x00001000
#define HIFN_DMAIER_S_LAST 0x00000800
#define HIFN_DMAIER_S_WAIT 0x00000400
#define HIFN_DMAIER_ILLW 0x00000200
#define HIFN_DMAIER_ILLR 0x00000100
#define HIFN_DMAIER_C_ABORT 0x00000020
#define HIFN_DMAIER_C_DONE 0x00000010
#define HIFN_DMAIER_C_LAST 0x00000008
#define HIFN_DMAIER_C_WAIT 0x00000004
#define HIFN_DMAIER_PUBDONE 0x00000002
#define HIFN_DMAIER_ENGINE 0x00000001
#define HIFN_DMACNFG_BIGENDIAN 0x10000000
#define HIFN_DMACNFG_POLLFREQ 0x00ff0000
#define HIFN_DMACNFG_UNLOCK 0x00000800
#define HIFN_DMACNFG_POLLINVAL 0x00000700
#define HIFN_DMACNFG_LAST 0x00000010
#define HIFN_DMACNFG_MODE 0x00000004
#define HIFN_DMACNFG_DMARESET 0x00000002
#define HIFN_DMACNFG_MSTRESET 0x00000001
#define HIFN_7811_RNGENA_ENA 0x00000001
#define HIFN_7811_RNGCFG_PRE1 0x00000f00
#define HIFN_7811_RNGCFG_OPRE 0x00000080
#define HIFN_7811_RNGCFG_DEFL 0x00000f80
#define HIFN_7811_RNGSTS_RDY 0x00004000
#define HIFN_7811_RNGSTS_UFL 0x00001000
#define HIFN_MIPSRST_BAR2SIZE 0xffff0000
#define HIFN_MIPSRST_GPRAMINIT 0x00008000
#define HIFN_MIPSRST_CRAMINIT 0x00004000
#define HIFN_MIPSRST_LED2 0x00000400
#define HIFN_MIPSRST_LED1 0x00000200
#define HIFN_MIPSRST_LED0 0x00000100
#define HIFN_MIPSRST_MIPSDIS 0x00000004
#define HIFN_MIPSRST_MIPSRST 0x00000002
#define HIFN_MIPSRST_MIPSCOLD 0x00000001
#define HIFN_PLL_7956 0x00001d18
#define HIFN_REVID_7811_PB3_2 0x00000002
#define HIFN_PUBRST_RESET 0x00000001
#define HIFN_PUBBASE_ADDR 0x00003fff
#define HIFN_PUBOPLEN_MOD_M 0x0000007f
#define HIFN_PUBOPLEN_MOD_S 0
#define HIFN_PUBOPLEN_EXP_M 0x0003ff80
#define HIFN_PUBOPLEN_EXP_S 7
#define HIFN_PUBOPLEN_RED_M 0x003c0000
#define HIFN_PUBOPLEN_RED_S 18
#define HIFN_PUBOP_AOFFSET_M 0x0000007f
#define HIFN_PUBOP_AOFFSET_S 0
#define HIFN_PUBOP_BOFFSET_M 0x00000f80
#define HIFN_PUBOP_BOFFSET_S 7
#define HIFN_PUBOP_MOFFSET_M 0x0003f000
#define HIFN_PUBOP_MOFFSET_S 12
#define HIFN_PUBOP_OP_MASK 0x003c0000
#define HIFN_PUBOP_OP_NOP 0x00000000
#define HIFN_PUBOP_OP_ADD 0x00040000
#define HIFN_PUBOP_OP_ADDC 0x00080000
#define HIFN_PUBOP_OP_SUB 0x000c0000
#define HIFN_PUBOP_OP_SUBC 0x00100000
#define HIFN_PUBOP_OP_MODADD 0x00140000
#define HIFN_PUBOP_OP_MODSUB 0x00180000
#define HIFN_PUBOP_OP_INCA 0x001c0000
#define HIFN_PUBOP_OP_DECA 0x00200000
#define HIFN_PUBOP_OP_MULT 0x00240000
#define HIFN_PUBOP_OP_MODMULT 0x00280000
#define HIFN_PUBOP_OP_MODRED 0x002c0000
#define HIFN_PUBOP_OP_MODEXP 0x00300000
#define HIFN_PUBSTS_DONE 0x00000001
#define HIFN_PUBSTS_CARRY 0x00000002
#define HIFN_PUBIEN_DONE 0x00000001
#define HIFN_RNGCFG_ENA 0x00000001
struct hifn_base_command {
volatile u_int16_t masks;
volatile u_int16_t session_num;
volatile u_int16_t total_source_count;
volatile u_int16_t total_dest_count;
};
#define HIFN_BASE_CMD_COMP 0x0100
#define HIFN_BASE_CMD_PAD 0x0200
#define HIFN_BASE_CMD_MAC 0x0400
#define HIFN_BASE_CMD_CRYPT 0x0800
#define HIFN_BASE_CMD_DECODE 0x2000
#define HIFN_BASE_CMD_SRCLEN_M 0xc000
#define HIFN_BASE_CMD_SRCLEN_S 14
#define HIFN_BASE_CMD_DSTLEN_M 0x3000
#define HIFN_BASE_CMD_DSTLEN_S 12
#define HIFN_BASE_CMD_LENMASK_HI 0x30000
#define HIFN_BASE_CMD_LENMASK_LO 0x0ffff
struct hifn_crypt_command {
volatile u_int16_t masks;
volatile u_int16_t header_skip;
volatile u_int16_t source_count;
volatile u_int16_t reserved;
};
#define HIFN_CRYPT_CMD_ALG_MASK 0x0003
#define HIFN_CRYPT_CMD_ALG_DES 0x0000
#define HIFN_CRYPT_CMD_ALG_3DES 0x0001
#define HIFN_CRYPT_CMD_ALG_RC4 0x0002
#define HIFN_CRYPT_CMD_ALG_AES 0x0003
#define HIFN_CRYPT_CMD_MODE_MASK 0x0018
#define HIFN_CRYPT_CMD_MODE_ECB 0x0000
#define HIFN_CRYPT_CMD_MODE_CBC 0x0008
#define HIFN_CRYPT_CMD_MODE_CFB 0x0010
#define HIFN_CRYPT_CMD_MODE_OFB 0x0018
#define HIFN_CRYPT_CMD_CLR_CTX 0x0040
#define HIFN_CRYPT_CMD_KSZ_MASK 0x0600
#define HIFN_CRYPT_CMD_KSZ_128 0x0000
#define HIFN_CRYPT_CMD_KSZ_192 0x0200
#define HIFN_CRYPT_CMD_KSZ_256 0x0400
#define HIFN_CRYPT_CMD_NEW_KEY 0x0800
#define HIFN_CRYPT_CMD_NEW_IV 0x1000
#define HIFN_CRYPT_CMD_SRCLEN_M 0xc000
#define HIFN_CRYPT_CMD_SRCLEN_S 14
struct hifn_mac_command {
volatile u_int16_t masks;
volatile u_int16_t header_skip;
volatile u_int16_t source_count;
volatile u_int16_t reserved;
};
#define HIFN_MAC_CMD_ALG_MASK 0x0001
#define HIFN_MAC_CMD_ALG_SHA1 0x0000
#define HIFN_MAC_CMD_ALG_MD5 0x0001
#define HIFN_MAC_CMD_MODE_MASK 0x000c
#define HIFN_MAC_CMD_MODE_HMAC 0x0000
#define HIFN_MAC_CMD_MODE_SSL_MAC 0x0004
#define HIFN_MAC_CMD_MODE_HASH 0x0008
#define HIFN_MAC_CMD_MODE_FULL 0x0004
#define HIFN_MAC_CMD_TRUNC 0x0010
#define HIFN_MAC_CMD_RESULT 0x0020
#define HIFN_MAC_CMD_APPEND 0x0040
#define HIFN_MAC_CMD_SRCLEN_M 0xc000
#define HIFN_MAC_CMD_SRCLEN_S 14
#define HIFN_MAC_CMD_POS_IPSEC 0x0200
#define HIFN_MAC_CMD_NEW_KEY 0x0800
struct hifn_comp_command {
volatile u_int16_t masks;
volatile u_int16_t header_skip;
volatile u_int16_t source_count;
volatile u_int16_t reserved;
};
#define HIFN_COMP_CMD_SRCLEN_M 0xc000
#define HIFN_COMP_CMD_SRCLEN_S 14
#define HIFN_COMP_CMD_ONE 0x0100
#define HIFN_COMP_CMD_CLEARHIST 0x0010
#define HIFN_COMP_CMD_UPDATEHIST 0x0008
#define HIFN_COMP_CMD_LZS_STRIP0 0x0004
#define HIFN_COMP_CMD_MPPC_RESTART 0x0004
#define HIFN_COMP_CMD_ALG_MASK 0x0001
#define HIFN_COMP_CMD_ALG_MPPC 0x0001
#define HIFN_COMP_CMD_ALG_LZS 0x0000
struct hifn_base_result {
volatile u_int16_t flags;
volatile u_int16_t session;
volatile u_int16_t src_cnt;
volatile u_int16_t dst_cnt;
};
#define HIFN_BASE_RES_DSTOVERRUN 0x0200
#define HIFN_BASE_RES_SRCLEN_M 0xc000
#define HIFN_BASE_RES_SRCLEN_S 14
#define HIFN_BASE_RES_DSTLEN_M 0x3000
#define HIFN_BASE_RES_DSTLEN_S 12
struct hifn_comp_result {
volatile u_int16_t flags;
volatile u_int16_t crc;
};
#define HIFN_COMP_RES_LCB_M 0xff00
#define HIFN_COMP_RES_LCB_S 8
#define HIFN_COMP_RES_RESTART 0x0004
#define HIFN_COMP_RES_ENDMARKER 0x0002
#define HIFN_COMP_RES_SRC_NOTZERO 0x0001
struct hifn_mac_result {
volatile u_int16_t flags;
volatile u_int16_t reserved;
};
#define HIFN_MAC_RES_MISCOMPARE 0x0002
#define HIFN_MAC_RES_SRC_NOTZERO 0x0001
struct hifn_crypt_result {
volatile u_int16_t flags;
volatile u_int16_t reserved;
};
#define HIFN_CRYPT_RES_SRC_NOTZERO 0x0001
#ifndef HIFN_POLL_FREQUENCY
#define HIFN_POLL_FREQUENCY 0x1
#endif
#ifndef HIFN_POLL_SCALAR
#define HIFN_POLL_SCALAR 0x0
#endif
#define HIFN_MAX_SEGLEN 0xffff
#define HIFN_MAX_DMALEN 0x3ffff
#endif