1844d9543SConrad Meyer /*- 24d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3844d9543SConrad Meyer * 4844d9543SConrad Meyer * Copyright (c) 2017 Conrad Meyer <cem@FreeBSD.org> 5844d9543SConrad Meyer * All rights reserved. 6844d9543SConrad Meyer * 7844d9543SConrad Meyer * Redistribution and use in source and binary forms, with or without 8844d9543SConrad Meyer * modification, are permitted provided that the following conditions 9844d9543SConrad Meyer * are met: 10844d9543SConrad Meyer * 1. Redistributions of source code must retain the above copyright 11844d9543SConrad Meyer * notice, this list of conditions and the following disclaimer. 12844d9543SConrad Meyer * 2. Redistributions in binary form must reproduce the above copyright 13844d9543SConrad Meyer * notice, this list of conditions and the following disclaimer in the 14844d9543SConrad Meyer * documentation and/or other materials provided with the distribution. 15844d9543SConrad Meyer * 16844d9543SConrad Meyer * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17844d9543SConrad Meyer * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18844d9543SConrad Meyer * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19844d9543SConrad Meyer * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20844d9543SConrad Meyer * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21844d9543SConrad Meyer * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22844d9543SConrad Meyer * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23844d9543SConrad Meyer * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24844d9543SConrad Meyer * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25844d9543SConrad Meyer * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26844d9543SConrad Meyer * SUCH DAMAGE. 27844d9543SConrad Meyer */ 28844d9543SConrad Meyer 29844d9543SConrad Meyer #pragma once 30844d9543SConrad Meyer 31844d9543SConrad Meyer #define CMD_QUEUE_MASK_OFFSET 0x000 32844d9543SConrad Meyer #define CMD_QUEUE_PRIO_OFFSET 0x004 33844d9543SConrad Meyer #define CMD_REQID_CONFIG_OFFSET 0x008 34844d9543SConrad Meyer #define TRNG_OUT_OFFSET 0x00C 35844d9543SConrad Meyer #define CMD_CMD_TIMEOUT_OFFSET 0x010 36844d9543SConrad Meyer #define LSB_PUBLIC_MASK_LO_OFFSET 0x018 37844d9543SConrad Meyer #define LSB_PUBLIC_MASK_HI_OFFSET 0x01C 38844d9543SConrad Meyer #define LSB_PRIVATE_MASK_LO_OFFSET 0x020 39844d9543SConrad Meyer #define LSB_PRIVATE_MASK_HI_OFFSET 0x024 40844d9543SConrad Meyer 41844d9543SConrad Meyer #define VERSION_REG 0x100 42844d9543SConrad Meyer #define VERSION_NUM_MASK 0x3F 43844d9543SConrad Meyer #define VERSION_CAP_MASK 0x7FC0 44844d9543SConrad Meyer #define VERSION_CAP_AES (1 << 6) 45844d9543SConrad Meyer #define VERSION_CAP_3DES (1 << 7) 46844d9543SConrad Meyer #define VERSION_CAP_SHA (1 << 8) 47844d9543SConrad Meyer #define VERSION_CAP_RSA (1 << 9) 48844d9543SConrad Meyer #define VERSION_CAP_ECC (1 << 10) 49844d9543SConrad Meyer #define VERSION_CAP_ZDE (1 << 11) 50844d9543SConrad Meyer #define VERSION_CAP_ZCE (1 << 12) 51844d9543SConrad Meyer #define VERSION_CAP_TRNG (1 << 13) 52844d9543SConrad Meyer #define VERSION_CAP_ELFC (1 << 14) 53844d9543SConrad Meyer #define VERSION_NUMVQM_SHIFT 15 54844d9543SConrad Meyer #define VERSION_NUMVQM_MASK 0xF 55844d9543SConrad Meyer #define VERSION_LSBSIZE_SHIFT 19 56844d9543SConrad Meyer #define VERSION_LSBSIZE_MASK 0x3FF 57844d9543SConrad Meyer 58844d9543SConrad Meyer #define CMD_Q_CONTROL_BASE 0x000 59844d9543SConrad Meyer #define CMD_Q_TAIL_LO_BASE 0x004 60844d9543SConrad Meyer #define CMD_Q_HEAD_LO_BASE 0x008 61844d9543SConrad Meyer #define CMD_Q_INT_ENABLE_BASE 0x00C 62844d9543SConrad Meyer #define CMD_Q_INTERRUPT_STATUS_BASE 0x010 63844d9543SConrad Meyer 64844d9543SConrad Meyer #define CMD_Q_STATUS_BASE 0x100 65844d9543SConrad Meyer #define CMD_Q_INT_STATUS_BASE 0x104 66844d9543SConrad Meyer 67844d9543SConrad Meyer #define CMD_Q_STATUS_INCR 0x1000 68844d9543SConrad Meyer 69844d9543SConrad Meyer /* Don't think there's much point in keeping these -- OS can't access: */ 70844d9543SConrad Meyer #define CMD_CONFIG_0_OFFSET 0x6000 71844d9543SConrad Meyer #define CMD_TRNG_CTL_OFFSET 0x6008 72844d9543SConrad Meyer #define CMD_AES_MASK_OFFSET 0x6010 73844d9543SConrad Meyer #define CMD_CLK_GATE_CTL_OFFSET 0x603C 74844d9543SConrad Meyer 75844d9543SConrad Meyer /* CMD_Q_CONTROL_BASE bits */ 76844d9543SConrad Meyer #define CMD_Q_RUN (1 << 0) 77844d9543SConrad Meyer #define CMD_Q_HALTED (1 << 1) 78844d9543SConrad Meyer #define CMD_Q_MEM_LOCATION (1 << 2) 79844d9543SConrad Meyer #define CMD_Q_SIZE_SHIFT 3 80844d9543SConrad Meyer #define CMD_Q_SIZE_MASK 0x1F 81844d9543SConrad Meyer #define CMD_Q_PTR_HI_SHIFT 16 82844d9543SConrad Meyer #define CMD_Q_PTR_HI_MASK 0xFFFF 83844d9543SConrad Meyer 84844d9543SConrad Meyer /* 85844d9543SConrad Meyer * The following bits are used for both CMD_Q_INT_ENABLE_BASE and 86844d9543SConrad Meyer * CMD_Q_INTERRUPT_STATUS_BASE. 87844d9543SConrad Meyer */ 88844d9543SConrad Meyer #define INT_COMPLETION (1 << 0) 89844d9543SConrad Meyer #define INT_ERROR (1 << 1) 90844d9543SConrad Meyer #define INT_QUEUE_STOPPED (1 << 2) 91844d9543SConrad Meyer #define INT_QUEUE_EMPTY (1 << 3) 92844d9543SConrad Meyer #define ALL_INTERRUPTS (INT_COMPLETION | \ 93844d9543SConrad Meyer INT_ERROR | \ 94844d9543SConrad Meyer INT_QUEUE_STOPPED | \ 95844d9543SConrad Meyer INT_QUEUE_EMPTY) 96844d9543SConrad Meyer 97844d9543SConrad Meyer #define STATUS_ERROR_MASK 0x3F 98844d9543SConrad Meyer #define STATUS_JOBSTATUS_SHIFT 7 99844d9543SConrad Meyer #define STATUS_JOBSTATUS_MASK 0x7 100844d9543SConrad Meyer #define STATUS_ERRORSOURCE_SHIFT 10 101844d9543SConrad Meyer #define STATUS_ERRORSOURCE_MASK 0x3 102844d9543SConrad Meyer #define STATUS_VLSB_FAULTBLOCK_SHIFT 12 103844d9543SConrad Meyer #define STATUS_VLSB_FAULTBLOCK_MASK 0x7 104844d9543SConrad Meyer 105844d9543SConrad Meyer /* From JOBSTATUS field in STATUS register above */ 106844d9543SConrad Meyer #define JOBSTATUS_IDLE 0 107844d9543SConrad Meyer #define JOBSTATUS_ACTIVE_WAITING 1 108844d9543SConrad Meyer #define JOBSTATUS_ACTIVE 2 109844d9543SConrad Meyer #define JOBSTATUS_WAIT_ABORT 3 110844d9543SConrad Meyer #define JOBSTATUS_DYN_ERROR 4 111844d9543SConrad Meyer #define JOBSTATUS_PREPARE_HALT 5 112844d9543SConrad Meyer 113844d9543SConrad Meyer /* From ERRORSOURCE field in STATUS register */ 114844d9543SConrad Meyer #define ERRORSOURCE_INPUT_MEMORY 0 115844d9543SConrad Meyer #define ERRORSOURCE_CMD_DESCRIPTOR 1 116844d9543SConrad Meyer #define ERRORSOURCE_INPUT_DATA 2 117844d9543SConrad Meyer #define ERRORSOURCE_KEY_DATA 3 118844d9543SConrad Meyer 119844d9543SConrad Meyer #define Q_DESC_SIZE sizeof(struct ccp_desc) 120844d9543SConrad Meyer 121844d9543SConrad Meyer enum ccp_aes_mode { 122844d9543SConrad Meyer CCP_AES_MODE_ECB = 0, 123844d9543SConrad Meyer CCP_AES_MODE_CBC, 124844d9543SConrad Meyer CCP_AES_MODE_OFB, 125844d9543SConrad Meyer CCP_AES_MODE_CFB, 126844d9543SConrad Meyer CCP_AES_MODE_CTR, 127844d9543SConrad Meyer CCP_AES_MODE_CMAC, 128844d9543SConrad Meyer CCP_AES_MODE_GHASH, 129844d9543SConrad Meyer CCP_AES_MODE_GCTR, 130844d9543SConrad Meyer CCP_AES_MODE_IAPM_NIST, 131844d9543SConrad Meyer CCP_AES_MODE_IAPM_IPSEC, 132844d9543SConrad Meyer 133844d9543SConrad Meyer /* Not a real hardware mode; used as a sentinel value internally. */ 134844d9543SConrad Meyer CCP_AES_MODE_XTS, 135844d9543SConrad Meyer }; 136844d9543SConrad Meyer 137844d9543SConrad Meyer enum ccp_aes_ghash_mode { 138844d9543SConrad Meyer CCP_AES_MODE_GHASH_AAD = 0, 139844d9543SConrad Meyer CCP_AES_MODE_GHASH_FINAL, 140844d9543SConrad Meyer }; 141844d9543SConrad Meyer 142844d9543SConrad Meyer enum ccp_aes_type { 143844d9543SConrad Meyer CCP_AES_TYPE_128 = 0, 144844d9543SConrad Meyer CCP_AES_TYPE_192, 145844d9543SConrad Meyer CCP_AES_TYPE_256, 146844d9543SConrad Meyer }; 147844d9543SConrad Meyer 148844d9543SConrad Meyer enum ccp_des_mode { 149844d9543SConrad Meyer CCP_DES_MODE_ECB = 0, 150844d9543SConrad Meyer CCP_DES_MODE_CBC, 151844d9543SConrad Meyer CCP_DES_MODE_CFB, 152844d9543SConrad Meyer }; 153844d9543SConrad Meyer 154844d9543SConrad Meyer enum ccp_des_type { 155844d9543SConrad Meyer CCP_DES_TYPE_128 = 0, /* 112 + 16 parity */ 156844d9543SConrad Meyer CCP_DES_TYPE_192, /* 168 + 24 parity */ 157844d9543SConrad Meyer }; 158844d9543SConrad Meyer 159844d9543SConrad Meyer enum ccp_sha_type { 160844d9543SConrad Meyer CCP_SHA_TYPE_1 = 1, 161844d9543SConrad Meyer CCP_SHA_TYPE_224, 162844d9543SConrad Meyer CCP_SHA_TYPE_256, 163844d9543SConrad Meyer CCP_SHA_TYPE_384, 164844d9543SConrad Meyer CCP_SHA_TYPE_512, 165844d9543SConrad Meyer CCP_SHA_TYPE_RSVD1, 166844d9543SConrad Meyer CCP_SHA_TYPE_RSVD2, 167844d9543SConrad Meyer CCP_SHA3_TYPE_224, 168844d9543SConrad Meyer CCP_SHA3_TYPE_256, 169844d9543SConrad Meyer CCP_SHA3_TYPE_384, 170844d9543SConrad Meyer CCP_SHA3_TYPE_512, 171844d9543SConrad Meyer }; 172844d9543SConrad Meyer 173844d9543SConrad Meyer enum ccp_cipher_algo { 174844d9543SConrad Meyer CCP_CIPHER_ALGO_AES_CBC = 0, 175844d9543SConrad Meyer CCP_CIPHER_ALGO_AES_ECB, 176844d9543SConrad Meyer CCP_CIPHER_ALGO_AES_CTR, 177844d9543SConrad Meyer CCP_CIPHER_ALGO_AES_GCM, 178844d9543SConrad Meyer CCP_CIPHER_ALGO_3DES_CBC, 179844d9543SConrad Meyer }; 180844d9543SConrad Meyer 181844d9543SConrad Meyer enum ccp_cipher_dir { 182844d9543SConrad Meyer CCP_CIPHER_DIR_DECRYPT = 0, 183844d9543SConrad Meyer CCP_CIPHER_DIR_ENCRYPT = 1, 184844d9543SConrad Meyer }; 185844d9543SConrad Meyer 186844d9543SConrad Meyer enum ccp_hash_algo { 187844d9543SConrad Meyer CCP_AUTH_ALGO_SHA1 = 0, 188844d9543SConrad Meyer CCP_AUTH_ALGO_SHA1_HMAC, 189844d9543SConrad Meyer CCP_AUTH_ALGO_SHA224, 190844d9543SConrad Meyer CCP_AUTH_ALGO_SHA224_HMAC, 191844d9543SConrad Meyer CCP_AUTH_ALGO_SHA3_224, 192844d9543SConrad Meyer CCP_AUTH_ALGO_SHA3_224_HMAC, 193844d9543SConrad Meyer CCP_AUTH_ALGO_SHA256, 194844d9543SConrad Meyer CCP_AUTH_ALGO_SHA256_HMAC, 195844d9543SConrad Meyer CCP_AUTH_ALGO_SHA3_256, 196844d9543SConrad Meyer CCP_AUTH_ALGO_SHA3_256_HMAC, 197844d9543SConrad Meyer CCP_AUTH_ALGO_SHA384, 198844d9543SConrad Meyer CCP_AUTH_ALGO_SHA384_HMAC, 199844d9543SConrad Meyer CCP_AUTH_ALGO_SHA3_384, 200844d9543SConrad Meyer CCP_AUTH_ALGO_SHA3_384_HMAC, 201844d9543SConrad Meyer CCP_AUTH_ALGO_SHA512, 202844d9543SConrad Meyer CCP_AUTH_ALGO_SHA512_HMAC, 203844d9543SConrad Meyer CCP_AUTH_ALGO_SHA3_512, 204844d9543SConrad Meyer CCP_AUTH_ALGO_SHA3_512_HMAC, 205844d9543SConrad Meyer CCP_AUTH_ALGO_AES_CMAC, 206844d9543SConrad Meyer CCP_AUTH_ALGO_AES_GCM, 207844d9543SConrad Meyer }; 208844d9543SConrad Meyer 209844d9543SConrad Meyer enum ccp_hash_op { 210844d9543SConrad Meyer CCP_AUTH_OP_GENERATE = 0, 211844d9543SConrad Meyer CCP_AUTH_OP_VERIFY = 1, 212844d9543SConrad Meyer }; 213844d9543SConrad Meyer 214844d9543SConrad Meyer enum ccp_engine { 215844d9543SConrad Meyer CCP_ENGINE_AES = 0, 216844d9543SConrad Meyer CCP_ENGINE_XTS_AES, 217844d9543SConrad Meyer CCP_ENGINE_3DES, 218844d9543SConrad Meyer CCP_ENGINE_SHA, 219844d9543SConrad Meyer CCP_ENGINE_RSA, 220844d9543SConrad Meyer CCP_ENGINE_PASSTHRU, 221844d9543SConrad Meyer CCP_ENGINE_ZLIB_DECOMPRESS, 222844d9543SConrad Meyer CCP_ENGINE_ECC, 223844d9543SConrad Meyer }; 224844d9543SConrad Meyer 225844d9543SConrad Meyer enum ccp_xts_unitsize { 226844d9543SConrad Meyer CCP_XTS_AES_UNIT_SIZE_16 = 0, 227844d9543SConrad Meyer CCP_XTS_AES_UNIT_SIZE_512, 228844d9543SConrad Meyer CCP_XTS_AES_UNIT_SIZE_1024, 229844d9543SConrad Meyer CCP_XTS_AES_UNIT_SIZE_2048, 230844d9543SConrad Meyer CCP_XTS_AES_UNIT_SIZE_4096, 231844d9543SConrad Meyer }; 232844d9543SConrad Meyer 233844d9543SConrad Meyer enum ccp_passthru_bitwise { 234844d9543SConrad Meyer CCP_PASSTHRU_BITWISE_NOOP = 0, 235844d9543SConrad Meyer CCP_PASSTHRU_BITWISE_AND, 236844d9543SConrad Meyer CCP_PASSTHRU_BITWISE_OR, 237844d9543SConrad Meyer CCP_PASSTHRU_BITWISE_XOR, 238844d9543SConrad Meyer CCP_PASSTHRU_BITWISE_MASK, 239844d9543SConrad Meyer }; 240844d9543SConrad Meyer 241844d9543SConrad Meyer enum ccp_passthru_byteswap { 242844d9543SConrad Meyer CCP_PASSTHRU_BYTESWAP_NOOP = 0, 243844d9543SConrad Meyer CCP_PASSTHRU_BYTESWAP_32BIT, 244844d9543SConrad Meyer CCP_PASSTHRU_BYTESWAP_256BIT, 245844d9543SConrad Meyer }; 246844d9543SConrad Meyer 247844d9543SConrad Meyer /** 248844d9543SConrad Meyer * descriptor for version 5 CPP commands 249844d9543SConrad Meyer * 8 32-bit words: 250844d9543SConrad Meyer * word 0: function; engine; control bits 251844d9543SConrad Meyer * word 1: length of source data 252844d9543SConrad Meyer * word 2: low 32 bits of source pointer 253844d9543SConrad Meyer * word 3: upper 16 bits of source pointer; source memory type 254844d9543SConrad Meyer * word 4: low 32 bits of destination pointer 255844d9543SConrad Meyer * word 5: upper 16 bits of destination pointer; destination memory 256844d9543SConrad Meyer * type 257844d9543SConrad Meyer * word 6: low 32 bits of key pointer 258844d9543SConrad Meyer * word 7: upper 16 bits of key pointer; key memory type 259844d9543SConrad Meyer */ 260844d9543SConrad Meyer 261844d9543SConrad Meyer struct ccp_desc { 262844d9543SConrad Meyer union dword0 { 263844d9543SConrad Meyer struct { 264844d9543SConrad Meyer uint32_t hoc:1; /* Halt on completion */ 265844d9543SConrad Meyer uint32_t ioc:1; /* Intr. on completion */ 266844d9543SConrad Meyer uint32_t reserved_1:1; 267844d9543SConrad Meyer uint32_t som:1; /* Start of message */ 268844d9543SConrad Meyer uint32_t eom:1; /* End " */ 269844d9543SConrad Meyer uint32_t size:7; 270844d9543SConrad Meyer uint32_t encrypt:1; 271844d9543SConrad Meyer uint32_t mode:5; 272844d9543SConrad Meyer uint32_t type:2; 273844d9543SConrad Meyer uint32_t engine:4; 274844d9543SConrad Meyer uint32_t prot:1; 275844d9543SConrad Meyer uint32_t reserved_2:7; 276844d9543SConrad Meyer } aes; 277844d9543SConrad Meyer struct { 278844d9543SConrad Meyer uint32_t hoc:1; /* Halt on completion */ 279844d9543SConrad Meyer uint32_t ioc:1; /* Intr. on completion */ 280844d9543SConrad Meyer uint32_t reserved_1:1; 281844d9543SConrad Meyer uint32_t som:1; /* Start of message */ 282844d9543SConrad Meyer uint32_t eom:1; /* End " */ 283844d9543SConrad Meyer uint32_t size:7; 284844d9543SConrad Meyer uint32_t encrypt:1; 285844d9543SConrad Meyer uint32_t mode:5; 286844d9543SConrad Meyer uint32_t type:2; 287844d9543SConrad Meyer uint32_t engine:4; 288844d9543SConrad Meyer uint32_t prot:1; 289844d9543SConrad Meyer uint32_t reserved_2:7; 290844d9543SConrad Meyer } des; 291844d9543SConrad Meyer struct { 292844d9543SConrad Meyer uint32_t hoc:1; /* Halt on completion */ 293844d9543SConrad Meyer uint32_t ioc:1; /* Intr. on completion */ 294844d9543SConrad Meyer uint32_t reserved_1:1; 295844d9543SConrad Meyer uint32_t som:1; /* Start of message */ 296844d9543SConrad Meyer uint32_t eom:1; /* End " */ 297844d9543SConrad Meyer uint32_t size:7; 298844d9543SConrad Meyer uint32_t encrypt:1; 299844d9543SConrad Meyer uint32_t reserved_2:5; 300844d9543SConrad Meyer uint32_t type:2; 301844d9543SConrad Meyer uint32_t engine:4; 302844d9543SConrad Meyer uint32_t prot:1; 303844d9543SConrad Meyer uint32_t reserved_3:7; 304844d9543SConrad Meyer } aes_xts; 305844d9543SConrad Meyer struct { 306844d9543SConrad Meyer uint32_t hoc:1; /* Halt on completion */ 307844d9543SConrad Meyer uint32_t ioc:1; /* Intr. on completion */ 308844d9543SConrad Meyer uint32_t reserved_1:1; 309844d9543SConrad Meyer uint32_t som:1; /* Start of message */ 310844d9543SConrad Meyer uint32_t eom:1; /* End " */ 311844d9543SConrad Meyer uint32_t reserved_2:10; 312844d9543SConrad Meyer uint32_t type:4; 313844d9543SConrad Meyer uint32_t reserved_3:1; 314844d9543SConrad Meyer uint32_t engine:4; 315844d9543SConrad Meyer uint32_t prot:1; 316844d9543SConrad Meyer uint32_t reserved_4:7; 317844d9543SConrad Meyer } sha; 318844d9543SConrad Meyer struct { 319844d9543SConrad Meyer uint32_t hoc:1; /* Halt on completion */ 320844d9543SConrad Meyer uint32_t ioc:1; /* Intr. on completion */ 321844d9543SConrad Meyer uint32_t reserved_1:1; 322844d9543SConrad Meyer uint32_t som:1; /* Start of message */ 323844d9543SConrad Meyer uint32_t eom:1; /* End " */ 324844d9543SConrad Meyer uint32_t mode:3; 325844d9543SConrad Meyer uint32_t size:12; 326844d9543SConrad Meyer uint32_t engine:4; 327844d9543SConrad Meyer uint32_t prot:1; 328844d9543SConrad Meyer uint32_t reserved_2:7; 329844d9543SConrad Meyer } rsa; 330844d9543SConrad Meyer struct { 331844d9543SConrad Meyer uint32_t hoc:1; /* Halt on completion */ 332844d9543SConrad Meyer uint32_t ioc:1; /* Intr. on completion */ 333844d9543SConrad Meyer uint32_t reserved_1:1; 334844d9543SConrad Meyer uint32_t som:1; /* Start of message */ 335844d9543SConrad Meyer uint32_t eom:1; /* End " */ 336844d9543SConrad Meyer uint32_t byteswap:2; 337844d9543SConrad Meyer uint32_t bitwise:3; 338844d9543SConrad Meyer uint32_t reflect:2; 339844d9543SConrad Meyer uint32_t reserved_2:8; 340844d9543SConrad Meyer uint32_t engine:4; 341844d9543SConrad Meyer uint32_t prot:1; 342844d9543SConrad Meyer uint32_t reserved_3:7; 343844d9543SConrad Meyer } pt; 344844d9543SConrad Meyer struct { 345844d9543SConrad Meyer uint32_t hoc:1; /* Halt on completion */ 346844d9543SConrad Meyer uint32_t ioc:1; /* Intr. on completion */ 347844d9543SConrad Meyer uint32_t reserved_1:1; 348844d9543SConrad Meyer uint32_t som:1; /* Start of message */ 349844d9543SConrad Meyer uint32_t eom:1; /* End " */ 350844d9543SConrad Meyer uint32_t reserved_2:13; 351844d9543SConrad Meyer uint32_t reserved_3:2; 352844d9543SConrad Meyer uint32_t engine:4; 353844d9543SConrad Meyer uint32_t prot:1; 354844d9543SConrad Meyer uint32_t reserved_4:7; 355844d9543SConrad Meyer } zlib; 356844d9543SConrad Meyer struct { 357844d9543SConrad Meyer uint32_t hoc:1; /* Halt on completion */ 358844d9543SConrad Meyer uint32_t ioc:1; /* Intr. on completion */ 359844d9543SConrad Meyer uint32_t reserved_1:1; 360844d9543SConrad Meyer uint32_t som:1; /* Start of message */ 361844d9543SConrad Meyer uint32_t eom:1; /* End " */ 362844d9543SConrad Meyer uint32_t size:10; 363844d9543SConrad Meyer uint32_t type:2; 364844d9543SConrad Meyer uint32_t mode:3; 365844d9543SConrad Meyer uint32_t engine:4; 366844d9543SConrad Meyer uint32_t prot:1; 367844d9543SConrad Meyer uint32_t reserved_2:7; 368844d9543SConrad Meyer } ecc; 369844d9543SConrad Meyer struct { 370844d9543SConrad Meyer uint32_t hoc:1; /* Halt on completion */ 371844d9543SConrad Meyer uint32_t ioc:1; /* Intr. on completion */ 372844d9543SConrad Meyer uint32_t reserved_1:1; 373844d9543SConrad Meyer uint32_t som:1; /* Start of message */ 374844d9543SConrad Meyer uint32_t eom:1; /* End " */ 375844d9543SConrad Meyer uint32_t function:15; 376844d9543SConrad Meyer uint32_t engine:4; 377844d9543SConrad Meyer uint32_t prot:1; 378844d9543SConrad Meyer uint32_t reserved_2:7; 379844d9543SConrad Meyer } /* generic */; 380844d9543SConrad Meyer }; 381844d9543SConrad Meyer 382844d9543SConrad Meyer uint32_t length; 383844d9543SConrad Meyer uint32_t src_lo; 384844d9543SConrad Meyer 385844d9543SConrad Meyer struct dword3 { 386844d9543SConrad Meyer uint32_t src_hi:16; 387844d9543SConrad Meyer uint32_t src_mem:2; 388844d9543SConrad Meyer uint32_t lsb_ctx_id:8; 389844d9543SConrad Meyer uint32_t reserved_3:5; 390844d9543SConrad Meyer uint32_t src_fixed:1; 391844d9543SConrad Meyer }; 392844d9543SConrad Meyer 393844d9543SConrad Meyer union dword4 { 394844d9543SConrad Meyer uint32_t dst_lo; /* NON-SHA */ 395844d9543SConrad Meyer uint32_t sha_len_lo; /* SHA */ 396844d9543SConrad Meyer }; 397844d9543SConrad Meyer 398844d9543SConrad Meyer union dword5 { 399844d9543SConrad Meyer struct { 400844d9543SConrad Meyer uint32_t dst_hi:16; 401844d9543SConrad Meyer uint32_t dst_mem:2; 402844d9543SConrad Meyer uint32_t reserved_4:13; 403844d9543SConrad Meyer uint32_t dst_fixed:1; 404844d9543SConrad Meyer }; 405844d9543SConrad Meyer uint32_t sha_len_hi; 406844d9543SConrad Meyer }; 407844d9543SConrad Meyer 408844d9543SConrad Meyer uint32_t key_lo; 409844d9543SConrad Meyer 410844d9543SConrad Meyer struct dword7 { 411844d9543SConrad Meyer uint32_t key_hi:16; 412844d9543SConrad Meyer uint32_t key_mem:2; 413844d9543SConrad Meyer uint32_t reserved_5:14; 414844d9543SConrad Meyer }; 415844d9543SConrad Meyer }; 416844d9543SConrad Meyer 417844d9543SConrad Meyer enum ccp_memtype { 418844d9543SConrad Meyer CCP_MEMTYPE_SYSTEM = 0, 419844d9543SConrad Meyer CCP_MEMTYPE_SB, 420844d9543SConrad Meyer CCP_MEMTYPE_LOCAL, 421844d9543SConrad Meyer }; 422844d9543SConrad Meyer 423844d9543SConrad Meyer enum ccp_cmd_order { 424844d9543SConrad Meyer CCP_CMD_CIPHER = 0, 425844d9543SConrad Meyer CCP_CMD_AUTH, 426844d9543SConrad Meyer CCP_CMD_CIPHER_HASH, 427844d9543SConrad Meyer CCP_CMD_HASH_CIPHER, 428844d9543SConrad Meyer CCP_CMD_COMBINED, 429844d9543SConrad Meyer CCP_CMD_NOT_SUPPORTED, 430844d9543SConrad Meyer }; 431