[BACK]Return to safereg.h CVS log [TXT][DIR] Up to [local] / sys / dev / pci

Annotation of sys/dev/pci/safereg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: safereg.h,v 1.4 2003/08/20 16:28:35 jason Exp $       */
                      2:
                      3: /*-
                      4:  * Copyright (c) 2003 Sam Leffler, Errno Consulting
                      5:  * Copyright (c) 2003 Global Technology Associates, Inc.
                      6:  * All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  *
                     17:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
                     18:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     19:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     20:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     21:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     22:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     23:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     24:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     25:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     26:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     27:  * SUCH DAMAGE.
                     28:  *
                     29:  * $FreeBSD: /repoman/r/ncvs/src/sys/dev/safe/safereg.h,v 1.1 2003/07/21 21:46:07 sam Exp $
                     30:  */
                     31: #ifndef _SAFE_SAFEREG_H_
                     32: #define        _SAFE_SAFEREG_H_
                     33:
                     34: /*
                     35:  * Register definitions for SafeNet SafeXcel-1141 crypto device.
                     36:  * Definitions from revision 1.3 (Nov 6 2002) of the User's Manual.
                     37:  */
                     38:
                     39: #define SAFE_BAR               0x10    /* DMA base address register */
                     40:
                     41: #define        PCI_VENDOR_SAFENET      0x16ae          /* SafeNet, Inc. */
                     42:
                     43: /* SafeNet */
                     44: #define        PCI_PRODUCT_SAFEXCEL    0x1141          /* 1141 */
                     45:
                     46: #define        SAFE_PE_CSR             0x0000  /* Packet Enginge Ctrl/Status */
                     47: #define        SAFE_PE_SRC             0x0004  /* Packet Engine Source */
                     48: #define        SAFE_PE_DST             0x0008  /* Packet Engine Destination */
                     49: #define        SAFE_PE_SA              0x000c  /* Packet Engine SA */
                     50: #define        SAFE_PE_LEN             0x0010  /* Packet Engine Length */
                     51: #define        SAFE_PE_DMACFG          0x0040  /* Packet Engine DMA Configuration */
                     52: #define        SAFE_PE_DMASTAT         0x0044  /* Packet Engine DMA Status */
                     53: #define        SAFE_PE_PDRBASE         0x0048  /* Packet Engine Descriptor Ring Base */
                     54: #define        SAFE_PE_RDRBASE         0x004c  /* Packet Engine Result Ring Base */
                     55: #define        SAFE_PE_RINGCFG         0x0050  /* Packet Engine Ring Configuration */
                     56: #define        SAFE_PE_RINGPOLL        0x0054  /* Packet Engine Ring Poll */
                     57: #define        SAFE_PE_IRNGSTAT        0x0058  /* Packet Engine Internal Ring Status */
                     58: #define        SAFE_PE_ERNGSTAT        0x005c  /* Packet Engine External Ring Status */
                     59: #define        SAFE_PE_IOTHRESH        0x0060  /* Packet Engine I/O Threshold */
                     60: #define        SAFE_PE_GRNGBASE        0x0064  /* Packet Engine Gather Ring Base */
                     61: #define        SAFE_PE_SRNGBASE        0x0068  /* Packet Engine Scatter Ring Base */
                     62: #define        SAFE_PE_PARTSIZE        0x006c  /* Packet Engine Particlar Ring Size */
                     63: #define        SAFE_PE_PARTCFG         0x0070  /* Packet Engine Particle Ring Config */
                     64: #define        SAFE_CRYPTO_CTRL        0x0080  /* Crypto Control */
                     65: #define        SAFE_DEVID              0x0084  /* Device ID */
                     66: #define        SAFE_DEVINFO            0x0088  /* Device Info */
                     67: #define        SAFE_HU_STAT            0x00a0  /* Host Unmasked Status */
                     68: #define        SAFE_HM_STAT            0x00a4  /* Host Masked Status (read-only) */
                     69: #define        SAFE_HI_CLR             0x00a4  /* Host Clear Interrupt (write-only) */
                     70: #define        SAFE_HI_MASK            0x00a8  /* Host Mask Control */
                     71: #define        SAFE_HI_CFG             0x00ac  /* Interrupt Configuration */
                     72: #define        SAFE_HI_RD_DESCR        0x00b4  /* Force Descriptor Read */
                     73: #define        SAFE_HI_DESC_CNT        0x00b8  /* Host Descriptor Done Count */
                     74: #define        SAFE_DMA_ENDIAN         0x00c0  /* Master Endian Status */
                     75: #define        SAFE_DMA_SRCADDR        0x00c4  /* DMA Source Address Status */
                     76: #define        SAFE_DMA_DSTADDR        0x00c8  /* DMA Destination Address Status */
                     77: #define        SAFE_DMA_STAT           0x00cc  /* DMA Current Status */
                     78: #define        SAFE_DMA_CFG            0x00d4  /* DMA Configuration/Status */
                     79: #define        SAFE_ENDIAN             0x00e0  /* Endian Configuration */
                     80: #define        SAFE_RNG_OUT            0x0100  /* RNG Output */
                     81: #define        SAFE_RNG_STAT           0x0104  /* RNG Status */
                     82: #define        SAFE_RNG_CTRL           0x0108  /* RNG Control */
                     83: #define        SAFE_RNG_A              0x010c  /* RNG A */
                     84: #define        SAFE_RNG_B              0x0110  /* RNG B */
                     85: #define        SAFE_RNG_X_LO           0x0114  /* RNG X [31:0] */
                     86: #define        SAFE_RNG_X_MID          0x0118  /* RNG X [63:32] */
                     87: #define        SAFE_RNG_X_HI           0x011c  /* RNG X [80:64] */
                     88: #define        SAFE_RNG_X_CNTR         0x0120  /* RNG Counter */
                     89: #define        SAFE_RNG_ALM_CNT        0x0124  /* RNG Alarm Count */
                     90: #define        SAFE_RNG_CNFG           0x0128  /* RNG Configuration */
                     91: #define        SAFE_RNG_LFSR1_LO       0x012c  /* RNG LFSR1 [31:0] */
                     92: #define        SAFE_RNG_LFSR1_HI       0x0130  /* RNG LFSR1 [47:32] */
                     93: #define        SAFE_RNG_LFSR2_LO       0x0134  /* RNG LFSR1 [31:0] */
                     94: #define        SAFE_RNG_LFSR2_HI       0x0138  /* RNG LFSR1 [47:32] */
                     95: #define        SAFE_PK_A_ADDR          0x0800  /* Public Key A Address */
                     96: #define        SAFE_PK_B_ADDR          0x0804  /* Public Key B Address */
                     97: #define        SAFE_PK_C_ADDR          0x0808  /* Public Key C Address */
                     98: #define        SAFE_PK_D_ADDR          0x080c  /* Public Key D Address */
                     99: #define        SAFE_PK_A_LEN           0x0810  /* Public Key A Length */
                    100: #define        SAFE_PK_B_LEN           0x0814  /* Public Key B Length */
                    101: #define        SAFE_PK_SHIFT           0x0818  /* Public Key Shift */
                    102: #define        SAFE_PK_FUNC            0x081c  /* Public Key Function */
                    103: #define        SAFE_PK_RAM_START       0x1000  /* Public Key RAM start address */
                    104: #define        SAFE_PK_RAM_END         0x1fff  /* Public Key RAM end address */
                    105:
                    106: #define        SAFE_PE_CSR_READY       0x00000001      /* ready for processing */
                    107: #define        SAFE_PE_CSR_DONE        0x00000002      /* h/w completed processing */
                    108: #define        SAFE_PE_CSR_LOADSA      0x00000004      /* load SA digests */
                    109: #define        SAFE_PE_CSR_HASHFINAL   0x00000010      /* do hash pad & write result */
                    110: #define        SAFE_PE_CSR_SABUSID     0x000000c0      /* bus id for SA */
                    111: #define        SAFE_PE_CSR_SAPCI       0x00000040      /* PCI bus id for SA */
                    112: #define        SAFE_PE_CSR_NXTHDR      0x0000ff00      /* next hdr value for IPsec */
                    113: #define        SAFE_PE_CSR_FPAD        0x0000ff00      /* fixed pad for basic ops */
                    114: #define        SAFE_PE_CSR_STATUS      0x00ff0000      /* operation result status */
                    115: #define        SAFE_PE_CSR_AUTH_FAIL   0x00010000      /* ICV mismatch (inbound) */
                    116: #define        SAFE_PE_CSR_PAD_FAIL    0x00020000      /* pad verify fail (inbound) */
                    117: #define        SAFE_PE_CSR_SEQ_FAIL    0x00040000      /* sequence number (inbound) */
                    118: #define        SAFE_PE_CSR_XERROR      0x00080000      /* extended error follows */
                    119: #define        SAFE_PE_CSR_XECODE      0x00f00000      /* extended error code */
                    120: #define        SAFE_PE_CSR_XECODE_S    20
                    121: #define        SAFE_PE_CSR_XECODE_BADCMD       0       /* invalid command */
                    122: #define        SAFE_PE_CSR_XECODE_BADALG       1       /* invalid algorithm */
                    123: #define        SAFE_PE_CSR_XECODE_ALGDIS       2       /* algorithm disabled */
                    124: #define        SAFE_PE_CSR_XECODE_ZEROLEN      3       /* zero packet length */
                    125: #define        SAFE_PE_CSR_XECODE_DMAERR       4       /* bus DMA error */
                    126: #define        SAFE_PE_CSR_XECODE_PIPEABORT    5       /* secondary bus DMA error */
                    127: #define        SAFE_PE_CSR_XECODE_BADSPI       6       /* IPsec SPI mismatch */
                    128: #define        SAFE_PE_CSR_XECODE_TIMEOUT      10      /* failsafe timeout */
                    129: #define        SAFE_PE_CSR_PAD         0xff000000      /* ESP padding control/status */
                    130: #define        SAFE_PE_CSR_PAD_MIN     0x00000000      /* minimum IPsec padding */
                    131: #define        SAFE_PE_CSR_PAD_16      0x08000000      /* pad to 16-byte boundary */
                    132: #define        SAFE_PE_CSR_PAD_32      0x10000000      /* pad to 32-byte boundary */
                    133: #define        SAFE_PE_CSR_PAD_64      0x20000000      /* pad to 64-byte boundary */
                    134: #define        SAFE_PE_CSR_PAD_128     0x40000000      /* pad to 128-byte boundary */
                    135: #define        SAFE_PE_CSR_PAD_256     0x80000000      /* pad to 256-byte boundary */
                    136:
                    137: /*
                    138:  * Check the CSR to see if the PE has returned ownership to
                    139:  * the host.  Note that before processing a descriptor this
                    140:  * must be done followed by a check of the SAFE_PE_LEN register
                    141:  * status bits to avoid premature processing of a descriptor
                    142:  * on its way back to the host.
                    143:  */
                    144: #define        SAFE_PE_CSR_IS_DONE(_csr) \
                    145:     (((_csr) & (SAFE_PE_CSR_READY | SAFE_PE_CSR_DONE)) == SAFE_PE_CSR_DONE)
                    146:
                    147: #define        SAFE_PE_LEN_LENGTH      0x000fffff      /* total length (bytes) */
                    148: #define        SAFE_PE_LEN_READY       0x00400000      /* ready for processing */
                    149: #define        SAFE_PE_LEN_DONE        0x00800000      /* h/w completed processing */
                    150: #define        SAFE_PE_LEN_BYPASS      0xff000000      /* bypass offset (bytes) */
                    151: #define        SAFE_PE_LEN_BYPASS_S    24
                    152:
                    153: #define        SAFE_PE_LEN_IS_DONE(_len) \
                    154:     (((_len) & (SAFE_PE_LEN_READY | SAFE_PE_LEN_DONE)) == SAFE_PE_LEN_DONE)
                    155:
                    156: /* NB: these apply to HU_STAT, HM_STAT, HI_CLR, and HI_MASK */
                    157: #define        SAFE_INT_PE_CDONE       0x00000002      /* PE context done */
                    158: #define        SAFE_INT_PE_DDONE       0x00000008      /* PE descriptor done */
                    159: #define        SAFE_INT_PE_ERROR       0x00000010      /* PE error */
                    160: #define        SAFE_INT_PE_ODONE       0x00000020      /* PE operation done */
                    161:
                    162: #define        SAFE_HI_CFG_PULSE       0x00000001      /* use pulse interrupt */
                    163: #define        SAFE_HI_CFG_LEVEL       0x00000000      /* use level interrupt */
                    164: #define        SAFE_HI_CFG_AUTOCLR     0x00000002      /* auto-clear pulse interrupt */
                    165:
                    166: #define        SAFE_ENDIAN_TGT_PASS    0x00e40000      /* target pass-thru */
                    167: #define        SAFE_ENDIAN_TGT_SWAB    0x001b0000      /* target swap32 */
                    168: #define        SAFE_ENDIAN_DMA_PASS    0x000000e4      /* DMA pass-thru */
                    169: #define        SAFE_ENDIAN_DMA_SWAB    0x0000001b      /* DMA swap32 */
                    170:
                    171: #define        SAFE_PE_DMACFG_PERESET  0x00000001      /* reset packet engine */
                    172: #define        SAFE_PE_DMACFG_PDRRESET 0x00000002      /* reset PDR counters/ptrs */
                    173: #define        SAFE_PE_DMACFG_SGRESET  0x00000004      /* reset scatter/gather cache */
                    174: #define        SAFE_PE_DMACFG_FSENA    0x00000008      /* enable failsafe reset */
                    175: #define        SAFE_PE_DMACFG_PEMODE   0x00000100      /* packet engine mode */
                    176: #define        SAFE_PE_DMACFG_SAPREC   0x00000200      /* SA precedes packet */
                    177: #define        SAFE_PE_DMACFG_PKFOLL   0x00000400      /* packet follows descriptor */
                    178: #define        SAFE_PE_DMACFG_GPRBID   0x00003000      /* gather particle ring busid */
                    179: #define        SAFE_PE_DMACFG_GPRPCI   0x00001000      /* PCI gather particle ring */
                    180: #define        SAFE_PE_DMACFG_SPRBID   0x0000c000      /* scatter part. ring busid */
                    181: #define        SAFE_PE_DMACFG_SPRPCI   0x00004000      /* PCI scatter part. ring */
                    182: #define        SAFE_PE_DMACFG_ESDESC   0x00010000      /* endian swap descriptors */
                    183: #define        SAFE_PE_DMACFG_ESSA     0x00020000      /* endian swap SA data */
                    184: #define        SAFE_PE_DMACFG_ESPACKET 0x00040000      /* endian swap packet data */
                    185: #define        SAFE_PE_DMACFG_ESPDESC  0x00080000      /* endian swap particle desc. */
                    186: #define        SAFE_PE_DMACFG_NOPDRUP  0x00100000      /* supp. PDR ownership update */
                    187: #define        SAFE_PD_EDMACFG_PCIMODE 0x01000000      /* PCI target mode */
                    188:
                    189: #define        SAFE_PE_DMASTAT_PEIDONE 0x00000001      /* PE core input done */
                    190: #define        SAFE_PE_DMASTAT_PEODONE 0x00000002      /* PE core output done */
                    191: #define        SAFE_PE_DMASTAT_ENCDONE 0x00000004      /* encryption done */
                    192: #define        SAFE_PE_DMASTAT_IHDONE  0x00000008      /* inner hash done */
                    193: #define        SAFE_PE_DMASTAT_OHDONE  0x00000010      /* outer hash (HMAC) done */
                    194: #define        SAFE_PE_DMASTAT_PADFLT  0x00000020      /* crypto pad fault */
                    195: #define        SAFE_PE_DMASTAT_ICVFLT  0x00000040      /* ICV fault */
                    196: #define        SAFE_PE_DMASTAT_SPIMIS  0x00000080      /* SPI mismatch */
                    197: #define        SAFE_PE_DMASTAT_CRYPTO  0x00000100      /* crypto engine timeout */
                    198: #define        SAFE_PE_DMASTAT_CQACT   0x00000200      /* command queue active */
                    199: #define        SAFE_PE_DMASTAT_IRACT   0x00000400      /* input request active */
                    200: #define        SAFE_PE_DMASTAT_ORACT   0x00000800      /* output request active */
                    201: #define        SAFE_PE_DMASTAT_PEISIZE 0x003ff000      /* PE input size:32-bit words */
                    202: #define        SAFE_PE_DMASTAT_PEOSIZE 0xffc00000      /* PE out. size:32-bit words */
                    203:
                    204: #define        SAFE_PE_RINGCFG_SIZE    0x000003ff      /* ring size (descriptors) */
                    205: #define        SAFE_PE_RINGCFG_OFFSET  0xffff0000      /* offset btw desc's (dwords) */
                    206: #define        SAFE_PE_RINGCFG_OFFSET_S        16
                    207:
                    208: #define        SAFE_PE_RINGPOLL_POLL   0x00000fff      /* polling frequency/divisor */
                    209: #define        SAFE_PE_RINGPOLL_RETRY  0x03ff0000      /* polling frequency/divisor */
                    210: #define        SAFE_PE_RINGPOLL_CONT   0x80000000      /* continuously poll */
                    211:
                    212: #define        SAFE_PE_IRNGSTAT_CQAVAIL 0x00000001     /* command queue available */
                    213:
                    214: #define        SAFE_PE_ERNGSTAT_NEXT   0x03ff0000      /* index of next packet desc. */
                    215: #define        SAFE_PE_ERNGSTAT_NEXT_S 16
                    216:
                    217: #define        SAFE_PE_IOTHRESH_INPUT  0x000003ff      /* input threshold (dwords) */
                    218: #define        SAFE_PE_IOTHRESH_OUTPUT 0x03ff0000      /* output threshold (dwords) */
                    219:
                    220: #define        SAFE_PE_PARTCFG_SIZE    0x0000ffff      /* scatter particle size */
                    221: #define        SAFE_PE_PARTCFG_GBURST  0x00030000      /* gather particle burst */
                    222: #define        SAFE_PE_PARTCFG_GBURST_2        0x00000000
                    223: #define        SAFE_PE_PARTCFG_GBURST_4        0x00010000
                    224: #define        SAFE_PE_PARTCFG_GBURST_8        0x00020000
                    225: #define        SAFE_PE_PARTCFG_GBURST_16       0x00030000
                    226: #define        SAFE_PE_PARTCFG_SBURST  0x000c0000      /* scatter particle burst */
                    227: #define        SAFE_PE_PARTCFG_SBURST_2        0x00000000
                    228: #define        SAFE_PE_PARTCFG_SBURST_4        0x00040000
                    229: #define        SAFE_PE_PARTCFG_SBURST_8        0x00080000
                    230: #define        SAFE_PE_PARTCFG_SBURST_16       0x000c0000
                    231:
                    232: #define        SAFE_PE_PARTSIZE_SCAT   0xffff0000      /* scatter particle ring size */
                    233: #define        SAFE_PE_PARTSIZE_GATH   0x0000ffff      /* gather particle ring size */
                    234:
                    235: #define        SAFE_CRYPTO_CTRL_3DES   0x00000001      /* enable 3DES support */
                    236: #define        SAFE_CRYPTO_CTRL_PKEY   0x00010000      /* enable public key support */
                    237: #define        SAFE_CRYPTO_CTRL_RNG    0x00020000      /* enable RNG support */
                    238:
                    239: #define        SAFE_DEVINFO_REV_MIN    0x0000000f      /* minor rev for chip */
                    240: #define        SAFE_DEVINFO_REV_MAJ    0x000000f0      /* major rev for chip */
                    241: #define        SAFE_DEVINFO_REV_MAJ_S  4
                    242: #define        SAFE_DEVINFO_DES        0x00000100      /* DES/3DES support present */
                    243: #define        SAFE_DEVINFO_ARC4       0x00000200      /* ARC4 support present */
                    244: #define        SAFE_DEVINFO_AES        0x00000400      /* AES support present */
                    245: #define        SAFE_DEVINFO_MD5        0x00001000      /* MD5 support present */
                    246: #define        SAFE_DEVINFO_SHA1       0x00002000      /* SHA-1 support present */
                    247: #define        SAFE_DEVINFO_RIPEMD     0x00004000      /* RIPEMD support present */
                    248: #define        SAFE_DEVINFO_DEFLATE    0x00010000      /* Deflate support present */
                    249: #define        SAFE_DEVINFO_SARAM      0x00100000      /* on-chip SA RAM present */
                    250: #define        SAFE_DEVINFO_EMIBUS     0x00200000      /* EMI bus present */
                    251: #define        SAFE_DEVINFO_PKEY       0x00400000      /* public key support present */
                    252: #define        SAFE_DEVINFO_RNG        0x00800000      /* RNG present */
                    253:
                    254: #define        SAFE_REV(_maj, _min)    (((_maj) << SAFE_DEVINFO_REV_MAJ_S) | (_min))
                    255: #define        SAFE_REV_MAJ(_chiprev) \
                    256:        (((_chiprev) & SAFE_DEVINFO_REV_MAJ) >> SAFE_DEVINFO_REV_MAJ_S)
                    257: #define        SAFE_REV_MIN(_chiprev)  ((_chiprev) & SAFE_DEVINFO_REV_MIN)
                    258:
                    259: #define        SAFE_PK_FUNC_MULT       0x00000001      /* Multiply function */
                    260: #define        SAFE_PK_FUNC_SQUARE     0x00000004      /* Square function */
                    261: #define        SAFE_PK_FUNC_ADD        0x00000010      /* Add function */
                    262: #define        SAFE_PK_FUNC_SUB        0x00000020      /* Subtract function */
                    263: #define        SAFE_PK_FUNC_LSHIFT     0x00000040      /* Left-shift function */
                    264: #define        SAFE_PK_FUNC_RSHIFT     0x00000080      /* Right-shift function */
                    265: #define        SAFE_PK_FUNC_DIV        0x00000100      /* Divide function */
                    266: #define        SAFE_PK_FUNC_CMP        0x00000400      /* Compare function */
                    267: #define        SAFE_PK_FUNC_COPY       0x00000800      /* Copy function */
                    268: #define        SAFE_PK_FUNC_EXP16      0x00002000      /* Exponentiate (4-bit ACT) */
                    269: #define        SAFE_PK_FUNC_EXP4       0x00004000      /* Exponentiate (2-bit ACT) */
                    270: #define        SAFE_PK_FUNC_RUN        0x00008000      /* start/status */
                    271:
                    272: #define        SAFE_RNG_STAT_BUSY      0x00000001      /* busy, data not valid */
                    273:
                    274: #define        SAFE_RNG_CTRL_PRE_LFSR  0x00000001      /* enable output pre-LFSR */
                    275: #define        SAFE_RNG_CTRL_TST_MODE  0x00000002      /* enable test mode */
                    276: #define        SAFE_RNG_CTRL_TST_RUN   0x00000004      /* start test state machine */
                    277: #define        SAFE_RNG_CTRL_ENA_RING1 0x00000008      /* test entropy oscillator #1 */
                    278: #define        SAFE_RNG_CTRL_ENA_RING2 0x00000010      /* test entropy oscillator #2 */
                    279: #define        SAFE_RNG_CTRL_DIS_ALARM 0x00000020      /* disable RNG alarm reports */
                    280: #define        SAFE_RNG_CTRL_TST_CLOCK 0x00000040      /* enable test clock */
                    281: #define        SAFE_RNG_CTRL_SHORTEN   0x00000080      /* shorten state timers */
                    282: #define        SAFE_RNG_CTRL_TST_ALARM 0x00000100      /* simulate alarm state */
                    283: #define        SAFE_RNG_CTRL_RST_LFSR  0x00000200      /* reset LFSR */
                    284:
                    285: /*
                    286:  * Packet engine descriptor.  Note that d_csr is a copy of the
                    287:  * SAFE_PE_CSR register and all definitions apply, and d_len
                    288:  * is a copy of the SAFE_PE_LEN register and all definitions apply.
                    289:  * d_src and d_len may point directly to contiguous data or to a
                    290:  * list of ``particle descriptors'' when using scatter/gather i/o.
                    291:  */
                    292: struct safe_desc {
                    293:        volatile u_int32_t      d_csr;          /* per-packet control/status */
                    294:        volatile u_int32_t      d_src;          /* source address */
                    295:        volatile u_int32_t      d_dst;          /* destination address */
                    296:        volatile u_int32_t      d_sa;           /* SA address */
                    297:        volatile u_int32_t      d_len;          /* length, bypass, status */
                    298: };
                    299:
                    300: /*
                    301:  * Scatter/Gather particle descriptor.
                    302:  *
                    303:  * NB: scatter descriptors do not specify a size; this is fixed
                    304:  *     by the setting of the SAFE_PE_PARTCFG register.
                    305:  */
                    306: struct safe_pdesc {
                    307:        volatile u_int32_t      pd_addr;        /* particle address */
                    308:        volatile u_int32_t      pd_ctrl;        /* length/flags */
                    309: };
                    310:
                    311: #define        SAFE_PD_LEN_M   0xffff0000              /* length mask */
                    312: #define        SAFE_PD_LEN_S   16
                    313: #define        SAFE_PD_READY   0x00000001              /* ready for processing */
                    314: #define        SAFE_PD_DONE    0x00000002              /* h/w completed processing */
                    315:
                    316: /*
                    317:  * Security Association (SA) Record (Rev 1).  One of these is
                    318:  * required for each operation processed by the packet engine.
                    319:  */
                    320: struct safe_sarec {
                    321:        volatile u_int32_t      sa_cmd0;
                    322:        volatile u_int32_t      sa_cmd1;
                    323:        volatile u_int32_t      sa_resv0;
                    324:        volatile u_int32_t      sa_resv1;
                    325:        volatile u_int32_t      sa_key[8];      /* DES/3DES/AES key */
                    326:        volatile u_int32_t      sa_indigest[5]; /* inner digest */
                    327:        volatile u_int32_t      sa_outdigest[5];/* outer digest */
                    328:        volatile u_int32_t      sa_spi;         /* SPI */
                    329:        volatile u_int32_t      sa_seqnum;      /* sequence number */
                    330:        volatile u_int32_t      sa_seqmask[2];  /* sequence number mask */
                    331:        volatile u_int32_t      sa_resv2;
                    332:        volatile u_int32_t      sa_staterec;    /* address of state record */
                    333:        volatile u_int32_t      sa_resv3[2];
                    334:        volatile u_int32_t      sa_samgmt0;     /* SA management field 0 */
                    335:        volatile u_int32_t      sa_samgmt1;     /* SA management field 0 */
                    336: };
                    337:
                    338: #define        SAFE_SA_CMD0_OP         0x00000007      /* operation code */
                    339: #define        SAFE_SA_CMD0_OP_CRYPT   0x00000000      /* encrypt/decrypt (basic) */
                    340: #define        SAFE_SA_CMD0_OP_BOTH    0x00000001      /* encrypt-hash/hash-decrypto */
                    341: #define        SAFE_SA_CMD0_OP_HASH    0x00000003      /* hash (outbound-only) */
                    342: #define        SAFE_SA_CMD0_OP_ESP     0x00000000      /* ESP in/out (proto) */
                    343: #define        SAFE_SA_CMD0_OP_AH      0x00000001      /* AH in/out (proto) */
                    344: #define        SAFE_SA_CMD0_INBOUND    0x00000008      /* inbound operation */
                    345: #define        SAFE_SA_CMD0_OUTBOUND   0x00000000      /* outbound operation */
                    346: #define        SAFE_SA_CMD0_GROUP      0x00000030      /* operation group */
                    347: #define        SAFE_SA_CMD0_BASIC      0x00000000      /* basic operation */
                    348: #define        SAFE_SA_CMD0_PROTO      0x00000010      /* protocol/packet operation */
                    349: #define        SAFE_SA_CMD0_BUNDLE     0x00000020      /* bundled operation (resvd) */
                    350: #define        SAFE_SA_CMD0_PAD        0x000000c0      /* crypto pad method */
                    351: #define        SAFE_SA_CMD0_PAD_IPSEC  0x00000000      /* IPsec padding */
                    352: #define        SAFE_SA_CMD0_PAD_PKCS7  0x00000040      /* PKCS#7 padding */
                    353: #define        SAFE_SA_CMD0_PAD_CONS   0x00000080      /* constant padding */
                    354: #define        SAFE_SA_CMD0_PAD_ZERO   0x000000c0      /* zero padding */
                    355: #define        SAFE_SA_CMD0_CRYPT_ALG  0x00000f00      /* symmetric crypto algorithm */
                    356: #define        SAFE_SA_CMD0_DES        0x00000000      /* DES crypto algorithm */
                    357: #define        SAFE_SA_CMD0_3DES       0x00000100      /* 3DES crypto algorithm */
                    358: #define        SAFE_SA_CMD0_AES        0x00000300      /* AES crypto algorithm */
                    359: #define        SAFE_SA_CMD0_CRYPT_NULL 0x00000f00      /* null crypto algorithm */
                    360: #define        SAFE_SA_CMD0_HASH_ALG   0x0000f000      /* hash algorithm */
                    361: #define        SAFE_SA_CMD0_MD5        0x00000000      /* MD5 hash algorithm */
                    362: #define        SAFE_SA_CMD0_SHA1       0x00001000      /* SHA-1 hash algorithm */
                    363: #define        SAFE_SA_CMD0_HASH_NULL  0x0000f000      /* null hash algorithm */
                    364: #define        SAFE_SA_CMD0_HDR_PROC   0x00080000      /* header processing */
                    365: #define        SAFE_SA_CMD0_IBUSID     0x00300000      /* input bus id */
                    366: #define        SAFE_SA_CMD0_IPCI       0x00100000      /* PCI input bus id */
                    367: #define        SAFE_SA_CMD0_OBUSID     0x00c00000      /* output bus id */
                    368: #define        SAFE_SA_CMD0_OPCI       0x00400000      /* PCI output bus id */
                    369: #define        SAFE_SA_CMD0_IVLD       0x03000000      /* IV loading */
                    370: #define        SAFE_SA_CMD0_IVLD_NONE  0x00000000      /* IV no load (reuse) */
                    371: #define        SAFE_SA_CMD0_IVLD_IBUF  0x01000000      /* IV load from input buffer */
                    372: #define        SAFE_SA_CMD0_IVLD_STATE 0x02000000      /* IV load from state */
                    373: #define        SAFE_SA_CMD0_HSLD       0x0c000000      /* hash state loading */
                    374: #define        SAFE_SA_CMD0_HSLD_SA    0x00000000      /* hash state load from SA */
                    375: #define        SAFE_SA_CMD0_HSLD_STATE 0x08000000      /* hash state load from state */
                    376: #define        SAFE_SA_CMD0_HSLD_NONE  0x0c000000      /* hash state no load */
                    377: #define        SAFE_SA_CMD0_SAVEIV     0x10000000      /* save IV */
                    378: #define        SAFE_SA_CMD0_SAVEHASH   0x20000000      /* save hash state */
                    379: #define        SAFE_SA_CMD0_IGATHER    0x40000000      /* input gather */
                    380: #define        SAFE_SA_CMD0_OSCATTER   0x80000000      /* output scatter */
                    381:
                    382: #define        SAFE_SA_CMD1_HDRCOPY    0x00000002      /* copy header to output */
                    383: #define        SAFE_SA_CMD1_PAYCOPY    0x00000004      /* copy payload to output */
                    384: #define        SAFE_SA_CMD1_PADCOPY    0x00000008      /* copy pad to output */
                    385: #define        SAFE_SA_CMD1_IPV4       0x00000000      /* IPv4 protocol */
                    386: #define        SAFE_SA_CMD1_IPV6       0x00000010      /* IPv6 protocol */
                    387: #define        SAFE_SA_CMD1_MUTABLE    0x00000020      /* mutable bit processing */
                    388: #define        SAFE_SA_CMD1_SRBUSID    0x000000c0      /* state record bus id */
                    389: #define        SAFE_SA_CMD1_SRPCI      0x00000040      /* state record from PCI */
                    390: #define        SAFE_SA_CMD1_CRMODE     0x00000300      /* crypto mode */
                    391: #define        SAFE_SA_CMD1_ECB        0x00000000      /* ECB crypto mode */
                    392: #define        SAFE_SA_CMD1_CBC        0x00000100      /* CBC crypto mode */
                    393: #define        SAFE_SA_CMD1_OFB        0x00000200      /* OFB crypto mode */
                    394: #define        SAFE_SA_CMD1_CFB        0x00000300      /* CFB crypto mode */
                    395: #define        SAFE_SA_CMD1_CRFEEDBACK 0x00000c00      /* crypto feedback mode */
                    396: #define        SAFE_SA_CMD1_64BIT      0x00000000      /* 64-bit crypto feedback */
                    397: #define        SAFE_SA_CMD1_8BIT       0x00000400      /* 8-bit crypto feedback */
                    398: #define        SAFE_SA_CMD1_1BIT       0x00000800      /* 1-bit crypto feedback */
                    399: #define        SAFE_SA_CMD1_128BIT     0x00000c00      /* 128-bit crypto feedback */
                    400: #define        SAFE_SA_CMD1_OPTIONS    0x00001000      /* HMAC/options mutable bit */
                    401: #define        SAFE_SA_CMD1_HMAC       SAFE_SA_CMD1_OPTIONS
                    402: #define        SAFE_SA_CMD1_SAREV1     0x00008000      /* SA Revision 1 */
                    403: #define        SAFE_SA_CMD1_OFFSET     0x00ff0000      /* hash/crypto offset(dwords) */
                    404: #define        SAFE_SA_CMD1_OFFSET_S   16
                    405: #define        SAFE_SA_CMD1_AESKEYLEN  0x0f000000      /* AES key length */
                    406: #define        SAFE_SA_CMD1_AES128     0x02000000      /* 128-bit AES key */
                    407: #define        SAFE_SA_CMD1_AES192     0x03000000      /* 192-bit AES key */
                    408: #define        SAFE_SA_CMD1_AES256     0x04000000      /* 256-bit AES key */
                    409:
                    410: /*
                    411:  * Security Associate State Record (Rev 1).
                    412:  */
                    413: struct safe_sastate {
                    414:        volatile u_int32_t      sa_saved_iv[4]; /* saved IV (DES/3DES/AES) */
                    415:        volatile u_int32_t      sa_saved_hashbc;/* saved hash byte count */
                    416:        volatile u_int32_t      sa_saved_indigest[5]; /* saved inner digest */
                    417: };
                    418: #endif /* _SAFE_SAFEREG_H_ */

CVSweb