rmilib.h revision 202066
1/*- 2 * Copyright (c) 2003-2009 RMI Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of RMI Corporation, nor the names of its contributors, 14 * may be used to endorse or promote products derived from this software 15 * without specific prior written permission. 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 * RMI_BSD 30 */ 31 32#ifndef _RMILIB_H_ 33#define _RMILIB_H_ 34 35#include <sys/cdefs.h> 36__FBSDID("$FreeBSD: head/sys/mips/rmi/dev/sec/rmilib.h 202066 2010-01-11 04:49:44Z imp $"); 37 38#include <mips/rmi/dev/sec/desc.h> 39#include <mips/xlr/iomap.h> 40 41/*#define XLR_SEC_CMD_DEBUG*/ 42 43#ifdef XLR_SEC_CMD_DEBUG 44#define DPRINT printf 45#define XLR_SEC_CMD_DIAG(fmt, args...) { \ 46 DPRINT(fmt, ##args); \ 47 } 48#define XLR_SEC_CMD_DIAG_SYM_DESC(desc, vec) { \ 49 decode_symkey_desc ((desc), (vec)); \ 50 } 51#else 52#define DPRINT(fmt, args...) 53#define XLR_SEC_CMD_DIAG(fmt, args...) 54#define XLR_SEC_CMD_DIAG_SYM_DESC(desc, vec) 55#endif 56 57 58 59 60 61 62/* 63#include <mips/include/pmap.h> 64 65#define OS_ALLOC_KERNEL(size) kmalloc((size), GFP_KERNEL) 66#define virt_to_phys(x) vtophys((vm_offset_t)(x)) 67*/ 68/* 69 * Cryptographic parameter definitions 70 */ 71#define XLR_SEC_DES_KEY_LENGTH 8 /* Bytes */ 72#define XLR_SEC_3DES_KEY_LENGTH 24 /* Bytes */ 73#define XLR_SEC_AES128_KEY_LENGTH 16 /* Bytes */ 74#define XLR_SEC_AES192_KEY_LENGTH 24 /* Bytes */ 75#define XLR_SEC_AES256_KEY_LENGTH 32 /* Bytes */ 76#define XLR_SEC_AES128F8_KEY_LENGTH 32 /* Bytes */ 77#define XLR_SEC_AES192F8_KEY_LENGTH 48 /* Bytes */ 78#define XLR_SEC_AES256F8_KEY_LENGTH 64 /* Bytes */ 79#define XLR_SEC_KASUMI_F8_KEY_LENGTH 16 /* Bytes */ 80#define XLR_SEC_MAX_CRYPT_KEY_LENGTH XLR_SEC_AES256F8_KEY_LENGTH 81 82 83#define XLR_SEC_DES_IV_LENGTH 8 /* Bytes */ 84#define XLR_SEC_AES_IV_LENGTH 16 /* Bytes */ 85#define XLR_SEC_ARC4_IV_LENGTH 0 /* Bytes */ 86#define XLR_SEC_KASUMI_F8_IV_LENGTH 16 /* Bytes */ 87#define XLR_SEC_MAX_IV_LENGTH 16 /* Bytes */ 88#define XLR_SEC_IV_LENGTH_BYTES 8 /* Bytes */ 89 90#define XLR_SEC_AES_BLOCK_SIZE 16 /* Bytes */ 91#define XLR_SEC_DES_BLOCK_SIZE 8 /* Bytes */ 92#define XLR_SEC_3DES_BLOCK_SIZE 8 /* Bytes */ 93 94#define XLR_SEC_MD5_BLOCK_SIZE 64 /* Bytes */ 95#define XLR_SEC_SHA1_BLOCK_SIZE 64 /* Bytes */ 96#define XLR_SEC_SHA256_BLOCK_SIZE 64 /* Bytes */ 97#define XLR_SEC_SHA384_BLOCK_SIZE 128 /* Bytes */ 98#define XLR_SEC_SHA512_BLOCK_SIZE 128 /* Bytes */ 99#define XLR_SEC_GCM_BLOCK_SIZE 16 /* XXX: Bytes */ 100#define XLR_SEC_KASUMI_F9_BLOCK_SIZE 16 /* XXX: Bytes */ 101#define XLR_SEC_MAX_BLOCK_SIZE 64 /* Max of MD5/SHA */ 102#define XLR_SEC_MD5_LENGTH 16 /* Bytes */ 103#define XLR_SEC_SHA1_LENGTH 20 /* Bytes */ 104#define XLR_SEC_SHA256_LENGTH 32 /* Bytes */ 105#define XLR_SEC_SHA384_LENGTH 64 /* Bytes */ 106#define XLR_SEC_SHA512_LENGTH 64 /* Bytes */ 107#define XLR_SEC_GCM_LENGTH 16 /* Bytes */ 108#define XLR_SEC_KASUMI_F9_LENGTH 16 /* Bytes */ 109#define XLR_SEC_KASUMI_F9_RESULT_LENGTH 4 /* Bytes */ 110#define XLR_SEC_HMAC_LENGTH 64 /* Max of MD5/SHA/SHA256 */ 111#define XLR_SEC_MAX_AUTH_KEY_LENGTH XLR_SEC_SHA512_BLOCK_SIZE 112#define XLR_SEC_MAX_RC4_STATE_SIZE 264 /* char s[256], int i, int j */ 113 114/* Status code is used by the SRL to indicate status */ 115typedef unsigned int xlr_sec_status_t; 116 117/* 118 * Status codes 119 */ 120#define XLR_SEC_STATUS_SUCCESS 0 121#define XLR_SEC_STATUS_NO_DEVICE -1 122#define XLR_SEC_STATUS_TIMEOUT -2 123#define XLR_SEC_STATUS_INVALID_PARAMETER -3 124#define XLR_SEC_STATUS_DEVICE_FAILED -4 125#define XLR_SEC_STATUS_DEVICE_BUSY -5 126#define XLR_SEC_STATUS_NO_RESOURCE -6 127#define XLR_SEC_STATUS_CANCELLED -7 128 129/* 130 * Flags 131 */ 132#define XLR_SEC_FLAGS_HIGH_PRIORITY 1 133 134/* Error code is used to indicate any errors */ 135typedef int xlr_sec_error_t; 136 137/* 138 */ 139#define XLR_SEC_ERR_NONE 0 140#define XLR_SEC_ERR_CIPHER_OP -1 141#define XLR_SEC_ERR_CIPHER_TYPE -2 142#define XLR_SEC_ERR_CIPHER_MODE -3 143#define XLR_SEC_ERR_CIPHER_INIT -4 144#define XLR_SEC_ERR_DIGEST_TYPE -5 145#define XLR_SEC_ERR_DIGEST_INIT -6 146#define XLR_SEC_ERR_DIGEST_SRC -7 147#define XLR_SEC_ERR_CKSUM_TYPE -8 148#define XLR_SEC_ERR_CKSUM_SRC -9 149#define XLR_SEC_ERR_ALLOC -10 150#define XLR_SEC_ERR_CONTROL_VECTOR -11 151#define XLR_SEC_ERR_LOADHMACKEY_MODE -12 152#define XLR_SEC_ERR_PADHASH_MODE -13 153#define XLR_SEC_ERR_HASHBYTES_MODE -14 154#define XLR_SEC_ERR_NEXT_MODE -15 155#define XLR_SEC_ERR_PKT_IV_MODE -16 156#define XLR_SEC_ERR_LASTWORD_MODE -17 157#define XLR_SEC_ERR_PUBKEY_OP -18 158#define XLR_SEC_ERR_SYMKEY_MSGSND -19 159#define XLR_SEC_ERR_PUBKEY_MSGSND -20 160#define XLR_SEC_ERR_SYMKEY_GETSEM -21 161#define XLR_SEC_ERR_PUBKEY_GETSEM -22 162 163/* 164 * Descriptor Vector quantities 165 * (helps to identify descriptor type per operation) 166 */ 167#define XLR_SEC_VECTOR_CIPHER_DES 0x0001 168#define XLR_SEC_VECTOR_CIPHER_3DES 0x0002 169#define XLR_SEC_VECTOR_CIPHER_AES128 0x0004 170#define XLR_SEC_VECTOR_CIPHER_AES192 0x0008 171#define XLR_SEC_VECTOR_CIPHER_AES256 0x0010 172#define XLR_SEC_VECTOR_CIPHER_ARC4 0x0020 173#define XLR_SEC_VECTOR_CIPHER_AES (XLR_SEC_VECTOR_CIPHER_AES128 | \ 174 XLR_SEC_VECTOR_CIPHER_AES192 | \ 175 XLR_SEC_VECTOR_CIPHER_AES256) 176#define XLR_SEC_VECTOR_CIPHER (XLR_SEC_VECTOR_CIPHER_DES | \ 177 XLR_SEC_VECTOR_CIPHER_3DES | \ 178 XLR_SEC_VECTOR_CIPHER_AES128 | \ 179 XLR_SEC_VECTOR_CIPHER_AES192 | \ 180 XLR_SEC_VECTOR_CIPHER_AES256 | \ 181 XLR_SEC_VECTOR_CIPHER_ARC4) 182 183#define XLR_SEC_VECTOR_HMAC 0x0040 184#define XLR_SEC_VECTOR_MAC 0x0080 185#define XLR_SEC_VECTOR_MODE_CTR_CFB 0x0100 186#define XLR_SEC_VECTOR_MODE_ECB_CBC_OFB 0x0200 187#define XLR_SEC_VECTOR_MODE_ECB_CBC 0x0400 188#define XLR_SEC_VECTOR_STATE 0x0800 189#define XLR_SEC_VECTOR_CIPHER_KASUMI_F8 0x01000 190#define XLR_SEC_VECTOR_HMAC2 0x02000 191#define XLR_SEC_VECTOR_GCM 0x04000 192#define XLR_SEC_VECTOR_F9 0x08000 193#define XLR_SEC_VECTOR_MODE_F8 0x10000 194 195#define XLR_SEC_VECTOR_CIPHER_ARC4__HMAC \ 196(XLR_SEC_VECTOR_CIPHER_ARC4 | XLR_SEC_VECTOR_HMAC) 197#define XLR_SEC_VECTOR_CIPHER_ARC4__STATE \ 198(XLR_SEC_VECTOR_CIPHER_ARC4 | XLR_SEC_VECTOR_STATE) 199#define XLR_SEC_VECTOR_CIPHER_ARC4__HMAC__STATE \ 200(XLR_SEC_VECTOR_CIPHER_ARC4 | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_STATE) 201 202#define XLR_SEC_VECTOR__CIPHER_DES__HMAC__MODE_ECB_CBC \ 203(XLR_SEC_VECTOR_CIPHER_DES | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_MODE_ECB_CBC) 204 205#define XLR_SEC_VECTOR__CIPHER_DES__MODE_ECB_CBC \ 206(XLR_SEC_VECTOR_CIPHER_DES | XLR_SEC_VECTOR_MODE_ECB_CBC) 207 208#define XLR_SEC_VECTOR__CIPHER_3DES__HMAC__MODE_ECB_CBC \ 209(XLR_SEC_VECTOR_CIPHER_3DES | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_MODE_ECB_CBC) 210 211#define XLR_SEC_VECTOR__CIPHER_3DES__MODE_ECB_CBC \ 212(XLR_SEC_VECTOR_CIPHER_3DES | XLR_SEC_VECTOR_MODE_ECB_CBC) 213 214#define XLR_SEC_VECTOR__CIPHER_AES128__HMAC__MODE_CTR_CFB \ 215(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_MODE_CTR_CFB) 216 217#define XLR_SEC_VECTOR__CIPHER_AES128__MODE_CTR_CFB \ 218(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_MODE_CTR_CFB) 219 220#define XLR_SEC_VECTOR__CIPHER_AES128__HMAC__MODE_ECB_CBC_OFB \ 221(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 222 223#define XLR_SEC_VECTOR__CIPHER_AES128__MODE_ECB_CBC_OFB \ 224(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 225 226#define XLR_SEC_VECTOR__CIPHER_AES192__HMAC__MODE_CTR_CFB \ 227(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_MODE_CTR_CFB) 228 229#define XLR_SEC_VECTOR__CIPHER_AES192__MODE_CTR_CFB \ 230(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_MODE_CTR_CFB) 231 232#define XLR_SEC_VECTOR__CIPHER_AES192__HMAC__MODE_ECB_CBC_OFB \ 233(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 234 235#define XLR_SEC_VECTOR__CIPHER_AES192__MODE_ECB_CBC_OFB \ 236(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 237 238#define XLR_SEC_VECTOR__CIPHER_AES256__HMAC__MODE_CTR_CFB \ 239(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_MODE_CTR_CFB) 240 241#define XLR_SEC_VECTOR__CIPHER_AES256__MODE_CTR_CFB \ 242(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_MODE_CTR_CFB) 243 244#define XLR_SEC_VECTOR__CIPHER_AES256__HMAC__MODE_ECB_CBC_OFB \ 245(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 246 247#define XLR_SEC_VECTOR__CIPHER_AES256__MODE_ECB_CBC_OFB \ 248(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 249 250#define XLR_SEC_VECTOR__CIPHER_AES128__HMAC__MODE_F8 \ 251(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_MODE_F8) 252 253#define XLR_SEC_VECTOR__CIPHER_AES128__MODE_F8 \ 254(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_MODE_F8) 255 256#define XLR_SEC_VECTOR__CIPHER_AES192__HMAC__MODE_F8 \ 257(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_MODE_F8) 258 259#define XLR_SEC_VECTOR__CIPHER_AES192__MODE_F8 \ 260(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_MODE_F8) 261 262#define XLR_SEC_VECTOR__CIPHER_AES256__HMAC__MODE_F8 \ 263(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_HMAC | XLR_SEC_VECTOR_MODE_F8) 264 265#define XLR_SEC_VECTOR__CIPHER_AES256__MODE_F8 \ 266(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_MODE_F8) 267 268#define XLR_SEC_VECTOR_CIPHER_KASUMI_F8__F9 \ 269(XLR_SEC_VECTOR_CIPHER_KASUMI_F8 | XLR_SEC_VECTOR_F9) 270 271#define XLR_SEC_VECTOR_CIPHER_KASUMI_F8__HMAC \ 272(XLR_SEC_VECTOR_CIPHER_KASUMI_F8 | XLR_SEC_VECTOR_HMAC) 273 274#define XLR_SEC_VECTOR_CIPHER_KASUMI_F8__HMAC2 \ 275(XLR_SEC_VECTOR_CIPHER_KASUMI_F8 | XLR_SEC_VECTOR_HMAC2) 276 277#define XLR_SEC_VECTOR_CIPHER_KASUMI_F8__GCM \ 278(XLR_SEC_VECTOR_CIPHER_KASUMI_F8 | XLR_SEC_VECTOR_GCM) 279 280#define XLR_SEC_VECTOR_CIPHER_ARC4__HMAC2 \ 281(XLR_SEC_VECTOR_CIPHER_ARC4 | XLR_SEC_VECTOR_HMAC2) 282 283#define XLR_SEC_VECTOR_CIPHER_ARC4__HMAC2__STATE \ 284(XLR_SEC_VECTOR_CIPHER_ARC4 | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_STATE) 285 286#define XLR_SEC_VECTOR__CIPHER_DES__HMAC2__MODE_ECB_CBC \ 287(XLR_SEC_VECTOR_CIPHER_DES | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_MODE_ECB_CBC) 288 289#define XLR_SEC_VECTOR__CIPHER_3DES__HMAC2__MODE_ECB_CBC \ 290(XLR_SEC_VECTOR_CIPHER_3DES | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_MODE_ECB_CBC) 291 292#define XLR_SEC_VECTOR__CIPHER_AES128__HMAC2__MODE_CTR_CFB \ 293(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_MODE_CTR_CFB) 294 295#define XLR_SEC_VECTOR__CIPHER_AES128__HMAC2__MODE_ECB_CBC_OFB \ 296(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 297 298#define XLR_SEC_VECTOR__CIPHER_AES192__HMAC2__MODE_CTR_CFB \ 299(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_MODE_CTR_CFB) 300 301#define XLR_SEC_VECTOR__CIPHER_AES192__HMAC2__MODE_ECB_CBC_OFB \ 302(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 303 304#define XLR_SEC_VECTOR__CIPHER_AES256__HMAC2__MODE_CTR_CFB \ 305(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_MODE_CTR_CFB) 306 307#define XLR_SEC_VECTOR__CIPHER_AES256__HMAC2__MODE_ECB_CBC_OFB \ 308(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 309 310#define XLR_SEC_VECTOR__CIPHER_AES128__HMAC2__MODE_F8 \ 311(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_MODE_F8) 312 313#define XLR_SEC_VECTOR__CIPHER_AES192__HMAC2__MODE_F8 \ 314(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_MODE_F8) 315 316#define XLR_SEC_VECTOR__CIPHER_AES256__HMAC2__MODE_F8 \ 317(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_HMAC2 | XLR_SEC_VECTOR_MODE_F8) 318 319#define XLR_SEC_VECTOR_CIPHER_ARC4__GCM \ 320(XLR_SEC_VECTOR_CIPHER_ARC4 | XLR_SEC_VECTOR_GCM) 321 322#define XLR_SEC_VECTOR_CIPHER_ARC4__GCM__STATE \ 323(XLR_SEC_VECTOR_CIPHER_ARC4 | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_STATE) 324 325#define XLR_SEC_VECTOR__CIPHER_DES__GCM__MODE_ECB_CBC \ 326(XLR_SEC_VECTOR_CIPHER_DES | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_MODE_ECB_CBC) 327 328#define XLR_SEC_VECTOR__CIPHER_3DES__GCM__MODE_ECB_CBC \ 329(XLR_SEC_VECTOR_CIPHER_3DES | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_MODE_ECB_CBC) 330 331#define XLR_SEC_VECTOR__CIPHER_AES128__GCM__MODE_CTR_CFB \ 332(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_MODE_CTR_CFB) 333 334#define XLR_SEC_VECTOR__CIPHER_AES128__GCM__MODE_ECB_CBC_OFB \ 335(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 336 337#define XLR_SEC_VECTOR__CIPHER_AES192__GCM__MODE_CTR_CFB \ 338(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_MODE_CTR_CFB) 339 340#define XLR_SEC_VECTOR__CIPHER_AES192__GCM__MODE_ECB_CBC_OFB \ 341(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 342 343#define XLR_SEC_VECTOR__CIPHER_AES256__GCM__MODE_CTR_CFB \ 344(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_MODE_CTR_CFB) 345 346#define XLR_SEC_VECTOR__CIPHER_AES256__GCM__MODE_ECB_CBC_OFB \ 347(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 348 349#define XLR_SEC_VECTOR__CIPHER_AES128__GCM__MODE_F8 \ 350(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_MODE_F8) 351 352#define XLR_SEC_VECTOR__CIPHER_AES192__GCM__MODE_F8 \ 353(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_MODE_F8) 354 355#define XLR_SEC_VECTOR__CIPHER_AES256__GCM__MODE_F8 \ 356(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_GCM | XLR_SEC_VECTOR_MODE_F8) 357 358#define XLR_SEC_VECTOR_CIPHER_ARC4__F9 \ 359(XLR_SEC_VECTOR_CIPHER_ARC4 | XLR_SEC_VECTOR_F9) 360 361#define XLR_SEC_VECTOR_CIPHER_ARC4__F9__STATE \ 362(XLR_SEC_VECTOR_CIPHER_ARC4 | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_STATE) 363 364#define XLR_SEC_VECTOR__CIPHER_DES__F9__MODE_ECB_CBC \ 365(XLR_SEC_VECTOR_CIPHER_DES | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_MODE_ECB_CBC) 366 367#define XLR_SEC_VECTOR__CIPHER_3DES__F9__MODE_ECB_CBC \ 368(XLR_SEC_VECTOR_CIPHER_3DES | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_MODE_ECB_CBC) 369 370#define XLR_SEC_VECTOR__CIPHER_AES128__F9__MODE_CTR_CFB \ 371(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_MODE_CTR_CFB) 372 373#define XLR_SEC_VECTOR__CIPHER_AES128__F9__MODE_ECB_CBC_OFB \ 374(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 375 376#define XLR_SEC_VECTOR__CIPHER_AES192__F9__MODE_CTR_CFB \ 377(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_MODE_CTR_CFB) 378 379#define XLR_SEC_VECTOR__CIPHER_AES192__F9__MODE_ECB_CBC_OFB \ 380(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 381 382#define XLR_SEC_VECTOR__CIPHER_AES256__F9__MODE_CTR_CFB \ 383(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_MODE_CTR_CFB) 384 385#define XLR_SEC_VECTOR__CIPHER_AES256__F9__MODE_ECB_CBC_OFB \ 386(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_MODE_ECB_CBC_OFB) 387 388#define XLR_SEC_VECTOR__CIPHER_AES128__F9__MODE_F8 \ 389(XLR_SEC_VECTOR_CIPHER_AES128 | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_MODE_F8) 390 391#define XLR_SEC_VECTOR__CIPHER_AES192__F9__MODE_F8 \ 392(XLR_SEC_VECTOR_CIPHER_AES192 | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_MODE_F8) 393 394#define XLR_SEC_VECTOR__CIPHER_AES256__F9__MODE_F8 \ 395(XLR_SEC_VECTOR_CIPHER_AES256 | XLR_SEC_VECTOR_F9 | XLR_SEC_VECTOR_MODE_F8) 396 397/* 398 * Cipher Modes 399 */ 400typedef enum { 401 XLR_SEC_CIPHER_MODE_NONE = 0, 402 XLR_SEC_CIPHER_MODE_PASS = 1, 403 XLR_SEC_CIPHER_MODE_ECB, 404 XLR_SEC_CIPHER_MODE_CBC, 405 XLR_SEC_CIPHER_MODE_OFB, 406 XLR_SEC_CIPHER_MODE_CTR, 407 XLR_SEC_CIPHER_MODE_CFB, 408 XLR_SEC_CIPHER_MODE_F8 409} XLR_SEC_CIPHER_MODE; 410 411typedef enum { 412 XLR_SEC_CIPHER_OP_NONE = 0, 413 XLR_SEC_CIPHER_OP_ENCRYPT = 1, 414 XLR_SEC_CIPHER_OP_DECRYPT 415} XLR_SEC_CIPHER_OP; 416 417typedef enum { 418 XLR_SEC_CIPHER_TYPE_UNSUPPORTED = -1, 419 XLR_SEC_CIPHER_TYPE_NONE = 0, 420 XLR_SEC_CIPHER_TYPE_DES, 421 XLR_SEC_CIPHER_TYPE_3DES, 422 XLR_SEC_CIPHER_TYPE_AES128, 423 XLR_SEC_CIPHER_TYPE_AES192, 424 XLR_SEC_CIPHER_TYPE_AES256, 425 XLR_SEC_CIPHER_TYPE_ARC4, 426 XLR_SEC_CIPHER_TYPE_KASUMI_F8 427} XLR_SEC_CIPHER_TYPE; 428 429typedef enum { 430 XLR_SEC_CIPHER_INIT_OK = 1, /* Preserve old Keys */ 431 XLR_SEC_CIPHER_INIT_NK /* Load new Keys */ 432} XLR_SEC_CIPHER_INIT; 433 434 435/* 436 * Hash Modes 437 */ 438typedef enum { 439 XLR_SEC_DIGEST_TYPE_UNSUPPORTED = -1, 440 XLR_SEC_DIGEST_TYPE_NONE = 0, 441 XLR_SEC_DIGEST_TYPE_MD5, 442 XLR_SEC_DIGEST_TYPE_SHA1, 443 XLR_SEC_DIGEST_TYPE_SHA256, 444 XLR_SEC_DIGEST_TYPE_SHA384, 445 XLR_SEC_DIGEST_TYPE_SHA512, 446 XLR_SEC_DIGEST_TYPE_GCM, 447 XLR_SEC_DIGEST_TYPE_KASUMI_F9, 448 XLR_SEC_DIGEST_TYPE_HMAC_MD5, 449 XLR_SEC_DIGEST_TYPE_HMAC_SHA1, 450 XLR_SEC_DIGEST_TYPE_HMAC_SHA256, 451 XLR_SEC_DIGEST_TYPE_HMAC_SHA384, 452 XLR_SEC_DIGEST_TYPE_HMAC_SHA512, 453 XLR_SEC_DIGEST_TYPE_HMAC_AES_CBC, 454 XLR_SEC_DIGEST_TYPE_HMAC_AES_XCBC 455} XLR_SEC_DIGEST_TYPE; 456 457typedef enum { 458 XLR_SEC_DIGEST_INIT_OLDKEY = 1, /* Preserve old key HMAC key stored in 459 * ID registers (moot if HASH.HMAC == 460 * 0) */ 461 XLR_SEC_DIGEST_INIT_NEWKEY /* Load new HMAC key from memory ctrl 462 * section to ID registers */ 463} XLR_SEC_DIGEST_INIT; 464 465typedef enum { 466 XLR_SEC_DIGEST_SRC_DMA = 1, /* DMA channel */ 467 XLR_SEC_DIGEST_SRC_CPHR /* Cipher if word count exceeded 468 * Cipher_Offset; else DMA */ 469} XLR_SEC_DIGEST_SRC; 470 471/* 472 * Checksum Modes 473 */ 474typedef enum { 475 XLR_SEC_CKSUM_TYPE_NOP = 1, 476 XLR_SEC_CKSUM_TYPE_IP 477} XLR_SEC_CKSUM_TYPE; 478 479typedef enum { 480 XLR_SEC_CKSUM_SRC_DMA = 1, 481 XLR_SEC_CKSUM_SRC_CIPHER 482} XLR_SEC_CKSUM_SRC; 483 484/* 485 * Packet Modes 486 */ 487typedef enum { 488 XLR_SEC_LOADHMACKEY_MODE_OLD = 1, 489 XLR_SEC_LOADHMACKEY_MODE_LOAD 490} XLR_SEC_LOADHMACKEY_MODE; 491 492typedef enum { 493 XLR_SEC_PADHASH_PADDED = 1, 494 XLR_SEC_PADHASH_PAD 495} XLR_SEC_PADHASH_MODE; 496 497typedef enum { 498 XLR_SEC_HASHBYTES_ALL8 = 1, 499 XLR_SEC_HASHBYTES_MSB, 500 XLR_SEC_HASHBYTES_MSW 501} XLR_SEC_HASHBYTES_MODE; 502 503typedef enum { 504 XLR_SEC_NEXT_FINISH = 1, 505 XLR_SEC_NEXT_DO 506} XLR_SEC_NEXT_MODE; 507 508typedef enum { 509 XLR_SEC_PKT_IV_OLD = 1, 510 XLR_SEC_PKT_IV_NEW 511} XLR_SEC_PKT_IV_MODE; 512 513typedef enum { 514 XLR_SEC_LASTWORD_128 = 1, 515 XLR_SEC_LASTWORD_96MASK, 516 XLR_SEC_LASTWORD_64MASK, 517 XLR_SEC_LASTWORD_32MASK 518} XLR_SEC_LASTWORD_MODE; 519 520typedef enum { 521 XLR_SEC_CFB_MASK_REGULAR_CTR = 0, 522 XLR_SEC_CFB_MASK_CCMP, 523 XLR_SEC_CFB_MASK_GCM_WITH_SCI, 524 XLR_SEC_CFB_MASK_GCM_WITHOUT_SCI 525} XLR_SEC_CFB_MASK_MODE; 526 527/* 528 * Public Key 529 */ 530typedef enum { 531 RMIPK_BLKWIDTH_512 = 1, 532 RMIPK_BLKWIDTH_1024 533} RMIPK_BLKWIDTH_MODE; 534 535typedef enum { 536 RMIPK_LDCONST_OLD = 1, 537 RMIPK_LDCONST_NEW 538} RMIPK_LDCONST_MODE; 539 540 541typedef struct xlr_sec_io_s { 542 unsigned int command; 543 unsigned int result_status; 544 unsigned int flags; 545 unsigned int session_num; 546 unsigned int use_callback; 547 unsigned int time_us; 548 unsigned int user_context[2]; /* usable for anything by caller */ 549 unsigned int command_context; /* Context (ID) of this command). */ 550 unsigned char initial_vector[XLR_SEC_MAX_IV_LENGTH]; 551 unsigned char crypt_key[XLR_SEC_MAX_CRYPT_KEY_LENGTH]; 552 unsigned char mac_key[XLR_SEC_MAX_AUTH_KEY_LENGTH]; 553 554 XLR_SEC_CIPHER_OP cipher_op; 555 XLR_SEC_CIPHER_MODE cipher_mode; 556 XLR_SEC_CIPHER_TYPE cipher_type; 557 XLR_SEC_CIPHER_INIT cipher_init; 558 unsigned int cipher_offset; 559 560 XLR_SEC_DIGEST_TYPE digest_type; 561 XLR_SEC_DIGEST_INIT digest_init; 562 XLR_SEC_DIGEST_SRC digest_src; 563 unsigned int digest_offset; 564 565 XLR_SEC_CKSUM_TYPE cksum_type; 566 XLR_SEC_CKSUM_SRC cksum_src; 567 unsigned int cksum_offset; 568 569 XLR_SEC_LOADHMACKEY_MODE pkt_hmac; 570 XLR_SEC_PADHASH_MODE pkt_hash; 571 XLR_SEC_HASHBYTES_MODE pkt_hashbytes; 572 XLR_SEC_NEXT_MODE pkt_next; 573 XLR_SEC_PKT_IV_MODE pkt_iv; 574 XLR_SEC_LASTWORD_MODE pkt_lastword; 575 576 unsigned int nonce; 577 unsigned int cfb_mask; 578 579 unsigned int iv_offset; 580 unsigned short pad_type; 581 unsigned short rc4_key_len; 582 583 unsigned int num_packets; 584 unsigned int num_fragments; 585 586 uint64_t source_buf; 587 unsigned int source_buf_size; 588 uint64_t dest_buf; 589 unsigned int dest_buf_size; 590 591 uint64_t auth_dest; 592 uint64_t cksum_dest; 593 594 unsigned short rc4_loadstate; 595 unsigned short rc4_savestate; 596 uint64_t rc4_state; 597 598} xlr_sec_io_t, *xlr_sec_io_pt; 599 600 601#define XLR_SEC_SESSION(sid) ((sid) & 0x000007ff) 602#define XLR_SEC_SID(crd,ses) (((crd) << 28) | ((ses) & 0x7ff)) 603 604/* 605 * Length values for cryptography 606 */ 607/* 608#define XLR_SEC_DES_KEY_LENGTH 8 609#define XLR_SEC_3DES_KEY_LENGTH 24 610#define XLR_SEC_MAX_CRYPT_KEY_LENGTH XLR_SEC_3DES_KEY_LENGTH 611#define XLR_SEC_IV_LENGTH 8 612#define XLR_SEC_AES_IV_LENGTH 16 613#define XLR_SEC_MAX_IV_LENGTH XLR_SEC_AES_IV_LENGTH 614*/ 615 616#define SEC_MAX_FRAG_LEN 16000 617 618struct xlr_sec_command { 619 uint16_t session_num; 620 struct cryptop *crp; 621 struct cryptodesc *enccrd, *maccrd; 622 623 xlr_sec_io_t op; 624}; 625struct xlr_sec_session { 626 uint32_t sessionid; 627 int hs_used; 628 int hs_mlen; 629 struct xlr_sec_command cmd; 630 void *desc_ptr; 631 uint8_t multi_frag_flag; 632}; 633 634/* 635 * Holds data specific to rmi security accelerators 636 */ 637struct xlr_sec_softc { 638 device_t sc_dev; /* device backpointer */ 639 struct mtx sc_mtx; /* per-instance lock */ 640 641 int32_t sc_cid; 642 struct xlr_sec_session *sc_sessions; 643 int sc_nsessions; 644 xlr_reg_t *mmio; 645}; 646 647 648/* 649 650union xlr_sec_operand_t { 651 struct mbuf *m; 652 struct uio *io; 653 void *buf; 654}xlr_sec_operand; 655*/ 656 657 658 659 660 661/* this is passed to packet setup to optimize */ 662#define XLR_SEC_SETUP_OP_CIPHER 0x00000001 663#define XLR_SEC_SETUP_OP_HMAC 0x00000002 664#define XLR_SEC_SETUP_OP_CIPHER_HMAC (XLR_SEC_SETUP_OP_CIPHER | XLR_SEC_SETUP_OP_HMAC) 665/* this is passed to control_setup to update w/preserving existing keys */ 666#define XLR_SEC_SETUP_OP_PRESERVE_HMAC_KEY 0x80000000 667#define XLR_SEC_SETUP_OP_PRESERVE_CIPHER_KEY 0x40000000 668#define XLR_SEC_SETUP_OP_UPDATE_KEYS 0x00000010 669#define XLR_SEC_SETUP_OP_FLIP_3DES_KEY 0x00000020 670 671 672 673 674 675/* 676 * Message Ring Specifics 677 */ 678 679#define SEC_MSGRING_WORDSIZE 2 680 681 682/* 683 * 684 * 685 * rwR 31 30 29 27 26 24 23 21 20 18 686 * | NA | RSA0Out | Rsa0In | Pipe3Out | Pipe3In | ... 687 * 688 * 17 15 14 12 11 9 8 6 5 3 2 0 689 * | Pipe2Out | Pipe2In | Pipe1In | Pipe1In | Pipe0Out | Pipe0In | 690 * 691 * DMA CREDIT REG - 692 * NUMBER OF CREDITS PER PIPE 693 */ 694 695#define SEC_DMA_CREDIT_RSA0_OUT_FOUR 0x20000000 696#define SEC_DMA_CREDIT_RSA0_OUT_TWO 0x10000000 697#define SEC_DMA_CREDIT_RSA0_OUT_ONE 0x08000000 698 699#define SEC_DMA_CREDIT_RSA0_IN_FOUR 0x04000000 700#define SEC_DMA_CREDIT_RSA0_IN_TWO 0x02000000 701#define SEC_DMA_CREDIT_RSA0_IN_ONE 0x01000000 702 703#define SEC_DMA_CREDIT_PIPE3_OUT_FOUR 0x00800000 704#define SEC_DMA_CREDIT_PIPE3_OUT_TWO 0x00400000 705#define SEC_DMA_CREDIT_PIPE3_OUT_ONE 0x00200000 706 707#define SEC_DMA_CREDIT_PIPE3_IN_FOUR 0x00100000 708#define SEC_DMA_CREDIT_PIPE3_IN_TWO 0x00080000 709#define SEC_DMA_CREDIT_PIPE3_IN_ONE 0x00040000 710 711#define SEC_DMA_CREDIT_PIPE2_OUT_FOUR 0x00020000 712#define SEC_DMA_CREDIT_PIPE2_OUT_TWO 0x00010000 713#define SEC_DMA_CREDIT_PIPE2_OUT_ONE 0x00008000 714 715#define SEC_DMA_CREDIT_PIPE2_IN_FOUR 0x00004000 716#define SEC_DMA_CREDIT_PIPE2_IN_TWO 0x00002000 717#define SEC_DMA_CREDIT_PIPE2_IN_ONE 0x00001000 718 719#define SEC_DMA_CREDIT_PIPE1_OUT_FOUR 0x00000800 720#define SEC_DMA_CREDIT_PIPE1_OUT_TWO 0x00000400 721#define SEC_DMA_CREDIT_PIPE1_OUT_ONE 0x00000200 722 723#define SEC_DMA_CREDIT_PIPE1_IN_FOUR 0x00000100 724#define SEC_DMA_CREDIT_PIPE1_IN_TWO 0x00000080 725#define SEC_DMA_CREDIT_PIPE1_IN_ONE 0x00000040 726 727#define SEC_DMA_CREDIT_PIPE0_OUT_FOUR 0x00000020 728#define SEC_DMA_CREDIT_PIPE0_OUT_TWO 0x00000010 729#define SEC_DMA_CREDIT_PIPE0_OUT_ONE 0x00000008 730 731#define SEC_DMA_CREDIT_PIPE0_IN_FOUR 0x00000004 732#define SEC_DMA_CREDIT_PIPE0_IN_TWO 0x00000002 733#define SEC_DMA_CREDIT_PIPE0_IN_ONE 0x00000001 734 735 736/* 737 * Currently, FOUR credits per PIPE 738 * 0x24924924 739 */ 740#define SEC_DMA_CREDIT_CONFIG SEC_DMA_CREDIT_RSA0_OUT_FOUR | \ 741 SEC_DMA_CREDIT_RSA0_IN_FOUR | \ 742 SEC_DMA_CREDIT_PIPE3_OUT_FOUR | \ 743 SEC_DMA_CREDIT_PIPE3_IN_FOUR | \ 744 SEC_DMA_CREDIT_PIPE2_OUT_FOUR | \ 745 SEC_DMA_CREDIT_PIPE2_IN_FOUR | \ 746 SEC_DMA_CREDIT_PIPE1_OUT_FOUR | \ 747 SEC_DMA_CREDIT_PIPE1_IN_FOUR | \ 748 SEC_DMA_CREDIT_PIPE0_OUT_FOUR | \ 749 SEC_DMA_CREDIT_PIPE0_IN_FOUR 750 751 752 753 754/* 755 * CONFIG2 756 * 31 5 4 3 757 * | NA | PIPE3_DEF_DBL_ISS | PIPE2_DEF_DBL_ISS | ... 758 * 759 * 2 1 0 760 * ... | PIPE1_DEF_DBL_ISS | PIPE0_DEF_DBL_ISS | ROUND_ROBIN_MODE | 761 * 762 * DBL_ISS - mode for SECENG and DMA controller which slows down transfers 763 * (to be conservativei; 0=Disable,1=Enable). 764 * ROUND_ROBIN - mode where SECENG dispatches operations to PIPE0-PIPE3 765 * and all messages are sent to PIPE0. 766 * 767 */ 768 769#define SEC_CFG2_PIPE3_DBL_ISS_ON 0x00000010 770#define SEC_CFG2_PIPE3_DBL_ISS_OFF 0x00000000 771#define SEC_CFG2_PIPE2_DBL_ISS_ON 0x00000008 772#define SEC_CFG2_PIPE2_DBL_ISS_OFF 0x00000000 773#define SEC_CFG2_PIPE1_DBL_ISS_ON 0x00000004 774#define SEC_CFG2_PIPE1_DBL_ISS_OFF 0x00000000 775#define SEC_CFG2_PIPE0_DBL_ISS_ON 0x00000002 776#define SEC_CFG2_PIPE0_DBL_ISS_OFF 0x00000000 777#define SEC_CFG2_ROUND_ROBIN_ON 0x00000001 778#define SEC_CFG2_ROUND_ROBIN_OFF 0x00000000 779 780 781enum sec_pipe_config { 782 783 SEC_PIPE_CIPHER_KEY0_L0 = 0x00, 784 SEC_PIPE_CIPHER_KEY0_HI, 785 SEC_PIPE_CIPHER_KEY1_LO, 786 SEC_PIPE_CIPHER_KEY1_HI, 787 SEC_PIPE_CIPHER_KEY2_LO, 788 SEC_PIPE_CIPHER_KEY2_HI, 789 SEC_PIPE_CIPHER_KEY3_LO, 790 SEC_PIPE_CIPHER_KEY3_HI, 791 SEC_PIPE_HMAC_KEY0_LO, 792 SEC_PIPE_HMAC_KEY0_HI, 793 SEC_PIPE_HMAC_KEY1_LO, 794 SEC_PIPE_HMAC_KEY1_HI, 795 SEC_PIPE_HMAC_KEY2_LO, 796 SEC_PIPE_HMAC_KEY2_HI, 797 SEC_PIPE_HMAC_KEY3_LO, 798 SEC_PIPE_HMAC_KEY3_HI, 799 SEC_PIPE_HMAC_KEY4_LO, 800 SEC_PIPE_HMAC_KEY4_HI, 801 SEC_PIPE_HMAC_KEY5_LO, 802 SEC_PIPE_HMAC_KEY5_HI, 803 SEC_PIPE_HMAC_KEY6_LO, 804 SEC_PIPE_HMAC_KEY6_HI, 805 SEC_PIPE_HMAC_KEY7_LO, 806 SEC_PIPE_HMAC_KEY7_HI, 807 SEC_PIPE_NCFBM_LO, 808 SEC_PIPE_NCFBM_HI, 809 SEC_PIPE_INSTR_LO, 810 SEC_PIPE_INSTR_HI, 811 SEC_PIPE_RSVD0, 812 SEC_PIPE_RSVD1, 813 SEC_PIPE_RSVD2, 814 SEC_PIPE_RSVD3, 815 816 SEC_PIPE_DF_PTRS0, 817 SEC_PIPE_DF_PTRS1, 818 SEC_PIPE_DF_PTRS2, 819 SEC_PIPE_DF_PTRS3, 820 SEC_PIPE_DF_PTRS4, 821 SEC_PIPE_DF_PTRS5, 822 SEC_PIPE_DF_PTRS6, 823 SEC_PIPE_DF_PTRS7, 824 825 SEC_PIPE_DU_DATA_IN_LO, 826 SEC_PIPE_DU_DATA_IN_HI, 827 SEC_PIPE_DU_DATA_IN_CTRL, 828 SEC_PIPE_DU_DATA_OUT_LO, 829 SEC_PIPE_DU_DATA_OUT_HI, 830 SEC_PIPE_DU_DATA_OUT_CTRL, 831 832 SEC_PIPE_STATE0, 833 SEC_PIPE_STATE1, 834 SEC_PIPE_STATE2, 835 SEC_PIPE_STATE3, 836 SEC_PIPE_STATE4, 837 SEC_PIPE_INCLUDE_MASK0, 838 SEC_PIPE_INCLUDE_MASK1, 839 SEC_PIPE_INCLUDE_MASK2, 840 SEC_PIPE_INCLUDE_MASK3, 841 SEC_PIPE_INCLUDE_MASK4, 842 SEC_PIPE_EXCLUDE_MASK0, 843 SEC_PIPE_EXCLUDE_MASK1, 844 SEC_PIPE_EXCLUDE_MASK2, 845 SEC_PIPE_EXCLUDE_MASK3, 846 SEC_PIPE_EXCLUDE_MASK4, 847}; 848 849 850enum sec_pipe_base_config { 851 852 SEC_PIPE0_BASE = 0x00, 853 SEC_PIPE1_BASE = 0x40, 854 SEC_PIPE2_BASE = 0x80, 855 SEC_PIPE3_BASE = 0xc0 856 857}; 858 859enum sec_rsa_config { 860 861 SEC_RSA_PIPE0_DU_DATA_IN_LO = 0x100, 862 SEC_RSA_PIPE0_DU_DATA_IN_HI, 863 SEC_RSA_PIPE0_DU_DATA_IN_CTRL, 864 SEC_RSA_PIPE0_DU_DATA_OUT_LO, 865 SEC_RSA_PIPE0_DU_DATA_OUT_HI, 866 SEC_RSA_PIPE0_DU_DATA_OUT_CTRL, 867 SEC_RSA_RSVD0, 868 SEC_RSA_RSVD1, 869 870 SEC_RSA_PIPE0_STATE0, 871 SEC_RSA_PIPE0_STATE1, 872 SEC_RSA_PIPE0_STATE2, 873 SEC_RSA_PIPE0_INCLUDE_MASK0, 874 SEC_RSA_PIPE0_INCLUDE_MASK1, 875 SEC_RSA_PIPE0_INCLUDE_MASK2, 876 SEC_RSA_PIPE0_EXCLUDE_MASK0, 877 SEC_RSA_PIPE0_EXCLUDE_MASK1, 878 SEC_RSA_PIPE0_EXCLUDE_MASK2, 879 SEC_RSA_PIPE0_EVENT_CTR 880 881}; 882 883 884 885 886enum sec_config { 887 888 SEC_DMA_CREDIT = 0x140, 889 SEC_CONFIG1, 890 SEC_CONFIG2, 891 SEC_CONFIG3, 892 893}; 894 895 896 897enum sec_debug_config { 898 899 SEC_DW0_DESCRIPTOR0_LO = 0x180, 900 SEC_DW0_DESCRIPTOR0_HI, 901 SEC_DW0_DESCRIPTOR1_LO, 902 SEC_DW0_DESCRIPTOR1_HI, 903 SEC_DW1_DESCRIPTOR0_LO, 904 SEC_DW1_DESCRIPTOR0_HI, 905 SEC_DW1_DESCRIPTOR1_LO, 906 SEC_DW1_DESCRIPTOR1_HI, 907 SEC_DW2_DESCRIPTOR0_LO, 908 SEC_DW2_DESCRIPTOR0_HI, 909 SEC_DW2_DESCRIPTOR1_LO, 910 SEC_DW2_DESCRIPTOR1_HI, 911 SEC_DW3_DESCRIPTOR0_LO, 912 SEC_DW3_DESCRIPTOR0_HI, 913 SEC_DW3_DESCRIPTOR1_LO, 914 SEC_DW3_DESCRIPTOR1_HI, 915 916 SEC_STATE0, 917 SEC_STATE1, 918 SEC_STATE2, 919 SEC_INCLUDE_MASK0, 920 SEC_INCLUDE_MASK1, 921 SEC_INCLUDE_MASK2, 922 SEC_EXCLUDE_MASK0, 923 SEC_EXCLUDE_MASK1, 924 SEC_EXCLUDE_MASK2, 925 SEC_EVENT_CTR 926 927}; 928 929 930enum sec_msgring_bucket_config { 931 932 SEC_BIU_CREDITS = 0x308, 933 934 SEC_MSG_BUCKET0_SIZE = 0x320, 935 SEC_MSG_BUCKET1_SIZE, 936 SEC_MSG_BUCKET2_SIZE, 937 SEC_MSG_BUCKET3_SIZE, 938 SEC_MSG_BUCKET4_SIZE, 939 SEC_MSG_BUCKET5_SIZE, 940 SEC_MSG_BUCKET6_SIZE, 941 SEC_MSG_BUCKET7_SIZE, 942}; 943 944enum sec_msgring_credit_config { 945 946 SEC_CC_CPU0_0 = 0x380, 947 SEC_CC_CPU1_0 = 0x388, 948 SEC_CC_CPU2_0 = 0x390, 949 SEC_CC_CPU3_0 = 0x398, 950 SEC_CC_CPU4_0 = 0x3a0, 951 SEC_CC_CPU5_0 = 0x3a8, 952 SEC_CC_CPU6_0 = 0x3b0, 953 SEC_CC_CPU7_0 = 0x3b8 954 955}; 956 957enum sec_engine_id { 958 SEC_PIPE0, 959 SEC_PIPE1, 960 SEC_PIPE2, 961 SEC_PIPE3, 962 SEC_RSA 963}; 964 965enum sec_cipher { 966 SEC_AES256_MODE_HMAC, 967 SEC_AES256_MODE, 968 SEC_AES256_HMAC, 969 SEC_AES256, 970 SEC_AES192_MODE_HMAC, 971 SEC_AES192_MODE, 972 SEC_AES192_HMAC, 973 SEC_AES192, 974 SEC_AES128_MODE_HMAC, 975 SEC_AES128_MODE, 976 SEC_AES128_HMAC, 977 SEC_AES128, 978 SEC_DES_HMAC, 979 SEC_DES, 980 SEC_3DES, 981 SEC_3DES_HMAC, 982 SEC_HMAC 983}; 984 985enum sec_msgrng_msg_ctrl_config { 986 SEC_EOP = 5, 987 SEC_SOP = 6, 988}; 989 990 991 992void 993xlr_sec_init(struct xlr_sec_softc *sc); 994 995int 996xlr_sec_setup(struct xlr_sec_session *ses, 997 struct xlr_sec_command *cmd, symkey_desc_pt desc); 998 999symkey_desc_pt xlr_sec_allocate_desc(void *); 1000 1001#endif 1002