root/dev/pci/safereg.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    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_ */

/* [<][>][^][v][top][bottom][index][help] */