102b553caSRafal Jaworowski /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3718cf2ccSPedro F. Giffuni * 402b553caSRafal Jaworowski * Copyright (C) 2008-2009 Semihalf, Piotr Ziecik 502b553caSRafal Jaworowski * All rights reserved. 602b553caSRafal Jaworowski * 702b553caSRafal Jaworowski * Redistribution and use in source and binary forms, with or without 802b553caSRafal Jaworowski * modification, are permitted provided that the following conditions 902b553caSRafal Jaworowski * are met: 1002b553caSRafal Jaworowski * 1. Redistributions of source code must retain the above copyright 1102b553caSRafal Jaworowski * notice, this list of conditions and the following disclaimer. 1202b553caSRafal Jaworowski * 2. Redistributions in binary form must reproduce the above copyright 1302b553caSRafal Jaworowski * notice, this list of conditions and the following disclaimer in the 1402b553caSRafal Jaworowski * documentation and/or other materials provided with the distribution. 1502b553caSRafal Jaworowski * 1602b553caSRafal Jaworowski * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1702b553caSRafal Jaworowski * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1802b553caSRafal Jaworowski * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 1902b553caSRafal Jaworowski * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2002b553caSRafal Jaworowski * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 2102b553caSRafal Jaworowski * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2202b553caSRafal Jaworowski * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 2302b553caSRafal Jaworowski * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 2402b553caSRafal Jaworowski * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 2502b553caSRafal Jaworowski * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2602b553caSRafal Jaworowski */ 2702b553caSRafal Jaworowski 2802b553caSRafal Jaworowski #ifndef _SEC_H 2902b553caSRafal Jaworowski #define _SEC_H 3002b553caSRafal Jaworowski 3102b553caSRafal Jaworowski /* 3202b553caSRafal Jaworowski * Each SEC channel can hold up to 24 descriptors. All 4 channels can be 3302b553caSRafal Jaworowski * simultaneously active holding 96 descriptors. Each descriptor can use 0 or 3402b553caSRafal Jaworowski * more link table entries depending of size and granulation of input/output 3502b553caSRafal Jaworowski * data. One link table entry is needed for each 65535 bytes of data. 3602b553caSRafal Jaworowski */ 3702b553caSRafal Jaworowski 3802b553caSRafal Jaworowski /* Driver settings */ 3902b553caSRafal Jaworowski #define SEC_TIMEOUT 100000 4002b553caSRafal Jaworowski #define SEC_MAX_SESSIONS 256 4102b553caSRafal Jaworowski #define SEC_DESCRIPTORS 256 /* Must be power of 2 */ 4202b553caSRafal Jaworowski #define SEC_LT_ENTRIES 1024 /* Must be power of 2 */ 4302b553caSRafal Jaworowski #define SEC_MAX_IV_LEN 16 4402b553caSRafal Jaworowski #define SEC_MAX_KEY_LEN 64 4502b553caSRafal Jaworowski 4602b553caSRafal Jaworowski /* SEC information */ 4702b553caSRafal Jaworowski #define SEC_20_ID 0x0000000000000040ULL 4802b553caSRafal Jaworowski #define SEC_30_ID 0x0030030000000000ULL 491aba5158SRafal Jaworowski #define SEC_31_ID 0x0030030100000000ULL 5002b553caSRafal Jaworowski #define SEC_CHANNELS 4 5102b553caSRafal Jaworowski #define SEC_POINTERS 7 5202b553caSRafal Jaworowski #define SEC_MAX_DMA_BLOCK_SIZE 0xFFFF 5302b553caSRafal Jaworowski #define SEC_MAX_FIFO_LEVEL 24 5402b553caSRafal Jaworowski #define SEC_DMA_ALIGNMENT 8 5502b553caSRafal Jaworowski 5602b553caSRafal Jaworowski #define __packed__ __attribute__ ((__packed__)) 5702b553caSRafal Jaworowski 5802b553caSRafal Jaworowski struct sec_softc; 5902b553caSRafal Jaworowski struct sec_session; 6002b553caSRafal Jaworowski 6102b553caSRafal Jaworowski /* SEC descriptor definition */ 6202b553caSRafal Jaworowski struct sec_hw_desc_ptr { 6302b553caSRafal Jaworowski u_int shdp_length : 16; 6402b553caSRafal Jaworowski u_int shdp_j : 1; 6502b553caSRafal Jaworowski u_int shdp_extent : 7; 6602b553caSRafal Jaworowski u_int __padding0 : 4; 6702b553caSRafal Jaworowski uint64_t shdp_ptr : 36; 6802b553caSRafal Jaworowski } __packed__; 6902b553caSRafal Jaworowski 7002b553caSRafal Jaworowski struct sec_hw_desc { 7102b553caSRafal Jaworowski union __packed__ { 7202b553caSRafal Jaworowski struct __packed__ { 7302b553caSRafal Jaworowski u_int eu_sel0 : 4; 7402b553caSRafal Jaworowski u_int mode0 : 8; 7502b553caSRafal Jaworowski u_int eu_sel1 : 4; 7602b553caSRafal Jaworowski u_int mode1 : 8; 7702b553caSRafal Jaworowski u_int desc_type : 5; 7802b553caSRafal Jaworowski u_int __padding0 : 1; 7902b553caSRafal Jaworowski u_int dir : 1; 8002b553caSRafal Jaworowski u_int dn : 1; 8102b553caSRafal Jaworowski u_int __padding1 : 32; 8202b553caSRafal Jaworowski } request; 8302b553caSRafal Jaworowski struct __packed__ { 8402b553caSRafal Jaworowski u_int done : 8; 8502b553caSRafal Jaworowski u_int __padding0 : 27; 8602b553caSRafal Jaworowski u_int iccr0 : 2; 8702b553caSRafal Jaworowski u_int __padding1 : 6; 8802b553caSRafal Jaworowski u_int iccr1 : 2; 8902b553caSRafal Jaworowski u_int __padding2 : 19; 9002b553caSRafal Jaworowski } feedback; 9102b553caSRafal Jaworowski } shd_control; 9202b553caSRafal Jaworowski 9302b553caSRafal Jaworowski struct sec_hw_desc_ptr shd_pointer[SEC_POINTERS]; 9402b553caSRafal Jaworowski 9502b553caSRafal Jaworowski /* Data below is mapped to descriptor pointers */ 9602b553caSRafal Jaworowski uint8_t shd_iv[SEC_MAX_IV_LEN]; 9702b553caSRafal Jaworowski uint8_t shd_key[SEC_MAX_KEY_LEN]; 9802b553caSRafal Jaworowski uint8_t shd_mkey[SEC_MAX_KEY_LEN]; 99c0341432SJohn Baldwin uint8_t shd_digest[HASH_MAX_LEN]; 10002b553caSRafal Jaworowski } __packed__; 10102b553caSRafal Jaworowski 10202b553caSRafal Jaworowski #define shd_eu_sel0 shd_control.request.eu_sel0 10302b553caSRafal Jaworowski #define shd_mode0 shd_control.request.mode0 10402b553caSRafal Jaworowski #define shd_eu_sel1 shd_control.request.eu_sel1 10502b553caSRafal Jaworowski #define shd_mode1 shd_control.request.mode1 10602b553caSRafal Jaworowski #define shd_desc_type shd_control.request.desc_type 10702b553caSRafal Jaworowski #define shd_dir shd_control.request.dir 10802b553caSRafal Jaworowski #define shd_dn shd_control.request.dn 10902b553caSRafal Jaworowski #define shd_done shd_control.feedback.done 11002b553caSRafal Jaworowski #define shd_iccr0 shd_control.feedback.iccr0 11102b553caSRafal Jaworowski #define shd_iccr1 shd_control.feedback.iccr1 11202b553caSRafal Jaworowski 11302b553caSRafal Jaworowski /* SEC link table entries definition */ 11402b553caSRafal Jaworowski struct sec_hw_lt { 11502b553caSRafal Jaworowski u_int shl_length : 16; 11602b553caSRafal Jaworowski u_int __padding0 : 6; 11702b553caSRafal Jaworowski u_int shl_r : 1; 11802b553caSRafal Jaworowski u_int shl_n : 1; 11902b553caSRafal Jaworowski u_int __padding1 : 4; 12002b553caSRafal Jaworowski uint64_t shl_ptr : 36; 12102b553caSRafal Jaworowski } __packed__; 12202b553caSRafal Jaworowski 12302b553caSRafal Jaworowski struct sec_dma_mem { 12402b553caSRafal Jaworowski void *dma_vaddr; 12502b553caSRafal Jaworowski bus_addr_t dma_paddr; 12602b553caSRafal Jaworowski bus_dma_tag_t dma_tag; 12702b553caSRafal Jaworowski bus_dmamap_t dma_map; 12802b553caSRafal Jaworowski u_int dma_is_map; 12902b553caSRafal Jaworowski }; 13002b553caSRafal Jaworowski 13102b553caSRafal Jaworowski struct sec_desc { 13202b553caSRafal Jaworowski struct sec_hw_desc *sd_desc; 13302b553caSRafal Jaworowski bus_addr_t sd_desc_paddr; 13402b553caSRafal Jaworowski struct sec_dma_mem sd_ptr_dmem[SEC_POINTERS]; 13502b553caSRafal Jaworowski struct cryptop *sd_crp; 13602b553caSRafal Jaworowski u_int sd_lt_used; 13702b553caSRafal Jaworowski u_int sd_error; 13802b553caSRafal Jaworowski }; 13902b553caSRafal Jaworowski 14002b553caSRafal Jaworowski struct sec_lt { 14102b553caSRafal Jaworowski struct sec_hw_lt *sl_lt; 14202b553caSRafal Jaworowski bus_addr_t sl_lt_paddr; 14302b553caSRafal Jaworowski }; 14402b553caSRafal Jaworowski 14502b553caSRafal Jaworowski struct sec_eu_methods { 146c0341432SJohn Baldwin bool (*sem_newsession)(const struct crypto_session_params *csp); 14702b553caSRafal Jaworowski int (*sem_make_desc)(struct sec_softc *sc, 148c0341432SJohn Baldwin const struct crypto_session_params *csp, struct sec_desc *desc, 149c0341432SJohn Baldwin struct cryptop *crp); 15002b553caSRafal Jaworowski }; 15102b553caSRafal Jaworowski 15202b553caSRafal Jaworowski struct sec_session { 15302b553caSRafal Jaworowski struct sec_eu_methods *ss_eu; 15402b553caSRafal Jaworowski uint8_t ss_key[SEC_MAX_KEY_LEN]; 15502b553caSRafal Jaworowski uint8_t ss_mkey[SEC_MAX_KEY_LEN]; 156c0341432SJohn Baldwin int ss_mlen; 15702b553caSRafal Jaworowski }; 15802b553caSRafal Jaworowski 15902b553caSRafal Jaworowski struct sec_desc_map_info { 16002b553caSRafal Jaworowski struct sec_softc *sdmi_sc; 16102b553caSRafal Jaworowski bus_size_t sdmi_size; 16202b553caSRafal Jaworowski bus_size_t sdmi_offset; 16302b553caSRafal Jaworowski struct sec_lt *sdmi_lt_first; 16402b553caSRafal Jaworowski struct sec_lt *sdmi_lt_last; 16502b553caSRafal Jaworowski u_int sdmi_lt_used; 16602b553caSRafal Jaworowski }; 16702b553caSRafal Jaworowski 16802b553caSRafal Jaworowski struct sec_softc { 16902b553caSRafal Jaworowski device_t sc_dev; 17002b553caSRafal Jaworowski int32_t sc_cid; 17102b553caSRafal Jaworowski int sc_blocked; 17202b553caSRafal Jaworowski int sc_shutdown; 17302b553caSRafal Jaworowski u_int sc_version; 17402b553caSRafal Jaworowski 17502b553caSRafal Jaworowski uint64_t sc_int_error_mask; 17602b553caSRafal Jaworowski uint64_t sc_channel_idle_mask; 17702b553caSRafal Jaworowski 17802b553caSRafal Jaworowski struct mtx sc_controller_lock; 17902b553caSRafal Jaworowski struct mtx sc_descriptors_lock; 18002b553caSRafal Jaworowski 18102b553caSRafal Jaworowski struct sec_desc sc_desc[SEC_DESCRIPTORS]; 18202b553caSRafal Jaworowski u_int sc_free_desc_get_cnt; 18302b553caSRafal Jaworowski u_int sc_free_desc_put_cnt; 18402b553caSRafal Jaworowski u_int sc_ready_desc_get_cnt; 18502b553caSRafal Jaworowski u_int sc_ready_desc_put_cnt; 18602b553caSRafal Jaworowski u_int sc_queued_desc_get_cnt; 18702b553caSRafal Jaworowski u_int sc_queued_desc_put_cnt; 18802b553caSRafal Jaworowski 18902b553caSRafal Jaworowski struct sec_lt sc_lt[SEC_LT_ENTRIES + 1]; 19002b553caSRafal Jaworowski u_int sc_lt_alloc_cnt; 19102b553caSRafal Jaworowski u_int sc_lt_free_cnt; 19202b553caSRafal Jaworowski 19302b553caSRafal Jaworowski struct sec_dma_mem sc_desc_dmem; /* descriptors DMA memory */ 19402b553caSRafal Jaworowski struct sec_dma_mem sc_lt_dmem; /* link tables DMA memory */ 19502b553caSRafal Jaworowski 19602b553caSRafal Jaworowski struct resource *sc_rres; /* register resource */ 19702b553caSRafal Jaworowski int sc_rrid; /* register rid */ 19802b553caSRafal Jaworowski struct { 19902b553caSRafal Jaworowski bus_space_tag_t bst; 20002b553caSRafal Jaworowski bus_space_handle_t bsh; 20102b553caSRafal Jaworowski } sc_bas; 20202b553caSRafal Jaworowski 20302b553caSRafal Jaworowski struct resource *sc_pri_ires; /* primary irq resource */ 20402b553caSRafal Jaworowski void *sc_pri_ihand; /* primary irq handler */ 20502b553caSRafal Jaworowski int sc_pri_irid; /* primary irq resource id */ 20602b553caSRafal Jaworowski 20702b553caSRafal Jaworowski struct resource *sc_sec_ires; /* secondary irq resource */ 20802b553caSRafal Jaworowski void *sc_sec_ihand; /* secondary irq handler */ 20902b553caSRafal Jaworowski int sc_sec_irid; /* secondary irq resource id */ 21002b553caSRafal Jaworowski }; 21102b553caSRafal Jaworowski 21202b553caSRafal Jaworowski /* Locking macros */ 21302b553caSRafal Jaworowski #define SEC_LOCK(sc, what) \ 21402b553caSRafal Jaworowski mtx_lock(&(sc)->sc_ ## what ## _lock) 21502b553caSRafal Jaworowski #define SEC_UNLOCK(sc, what) \ 21602b553caSRafal Jaworowski mtx_unlock(&(sc)->sc_ ## what ## _lock) 21702b553caSRafal Jaworowski #define SEC_LOCK_ASSERT(sc, what) \ 21802b553caSRafal Jaworowski mtx_assert(&(sc)->sc_ ## what ## _lock, MA_OWNED) 21902b553caSRafal Jaworowski 22002b553caSRafal Jaworowski /* Read/Write definitions */ 22102b553caSRafal Jaworowski #define SEC_READ(sc, reg) \ 22202b553caSRafal Jaworowski bus_space_read_8((sc)->sc_bas.bst, (sc)->sc_bas.bsh, (reg)) 22302b553caSRafal Jaworowski #define SEC_WRITE(sc, reg, val) \ 22402b553caSRafal Jaworowski bus_space_write_8((sc)->sc_bas.bst, (sc)->sc_bas.bsh, (reg), (val)) 22502b553caSRafal Jaworowski 22602b553caSRafal Jaworowski /* Base allocation macros (warning: wrap must be 2^n) */ 22702b553caSRafal Jaworowski #define SEC_CNT_INIT(sc, cnt, wrap) \ 22802b553caSRafal Jaworowski (((sc)->cnt) = ((wrap) - 1)) 22902b553caSRafal Jaworowski #define SEC_ADD(sc, cnt, wrap, val) \ 23002b553caSRafal Jaworowski ((sc)->cnt = (((sc)->cnt) + (val)) & ((wrap) - 1)) 23102b553caSRafal Jaworowski #define SEC_INC(sc, cnt, wrap) \ 23202b553caSRafal Jaworowski SEC_ADD(sc, cnt, wrap, 1) 23302b553caSRafal Jaworowski #define SEC_DEC(sc, cnt, wrap) \ 23402b553caSRafal Jaworowski SEC_ADD(sc, cnt, wrap, -1) 23502b553caSRafal Jaworowski #define SEC_GET_GENERIC(sc, tab, cnt, wrap) \ 23602b553caSRafal Jaworowski ((sc)->tab[SEC_INC(sc, cnt, wrap)]) 23702b553caSRafal Jaworowski #define SEC_PUT_GENERIC(sc, tab, cnt, wrap, val) \ 23802b553caSRafal Jaworowski ((sc)->tab[SEC_INC(sc, cnt, wrap)] = val) 23902b553caSRafal Jaworowski 24002b553caSRafal Jaworowski /* Interface for descriptors */ 24102b553caSRafal Jaworowski #define SEC_GET_FREE_DESC(sc) \ 24202b553caSRafal Jaworowski &SEC_GET_GENERIC(sc, sc_desc, sc_free_desc_get_cnt, SEC_DESCRIPTORS) 24302b553caSRafal Jaworowski 24402b553caSRafal Jaworowski #define SEC_PUT_BACK_FREE_DESC(sc) \ 24502b553caSRafal Jaworowski SEC_DEC(sc, sc_free_desc_get_cnt, SEC_DESCRIPTORS) 24602b553caSRafal Jaworowski 24702b553caSRafal Jaworowski #define SEC_DESC_FREE2READY(sc) \ 24802b553caSRafal Jaworowski SEC_INC(sc, sc_ready_desc_put_cnt, SEC_DESCRIPTORS) 24902b553caSRafal Jaworowski 25002b553caSRafal Jaworowski #define SEC_GET_READY_DESC(sc) \ 25102b553caSRafal Jaworowski &SEC_GET_GENERIC(sc, sc_desc, sc_ready_desc_get_cnt, SEC_DESCRIPTORS) 25202b553caSRafal Jaworowski 25302b553caSRafal Jaworowski #define SEC_PUT_BACK_READY_DESC(sc) \ 25402b553caSRafal Jaworowski SEC_DEC(sc, sc_ready_desc_get_cnt, SEC_DESCRIPTORS) 25502b553caSRafal Jaworowski 25602b553caSRafal Jaworowski #define SEC_DESC_READY2QUEUED(sc) \ 25702b553caSRafal Jaworowski SEC_INC(sc, sc_queued_desc_put_cnt, SEC_DESCRIPTORS) 25802b553caSRafal Jaworowski 25902b553caSRafal Jaworowski #define SEC_GET_QUEUED_DESC(sc) \ 26002b553caSRafal Jaworowski &SEC_GET_GENERIC(sc, sc_desc, sc_queued_desc_get_cnt, SEC_DESCRIPTORS) 26102b553caSRafal Jaworowski 26202b553caSRafal Jaworowski #define SEC_PUT_BACK_QUEUED_DESC(sc) \ 26302b553caSRafal Jaworowski SEC_DEC(sc, sc_queued_desc_get_cnt, SEC_DESCRIPTORS) 26402b553caSRafal Jaworowski 26502b553caSRafal Jaworowski #define SEC_DESC_QUEUED2FREE(sc) \ 26602b553caSRafal Jaworowski SEC_INC(sc, sc_free_desc_put_cnt, SEC_DESCRIPTORS) 26702b553caSRafal Jaworowski 26802b553caSRafal Jaworowski #define SEC_FREE_DESC_CNT(sc) \ 26902b553caSRafal Jaworowski (((sc)->sc_free_desc_put_cnt - (sc)->sc_free_desc_get_cnt - 1) \ 27002b553caSRafal Jaworowski & (SEC_DESCRIPTORS - 1)) 27102b553caSRafal Jaworowski 27202b553caSRafal Jaworowski #define SEC_READY_DESC_CNT(sc) \ 27302b553caSRafal Jaworowski (((sc)->sc_ready_desc_put_cnt - (sc)->sc_ready_desc_get_cnt) & \ 27402b553caSRafal Jaworowski (SEC_DESCRIPTORS - 1)) 27502b553caSRafal Jaworowski 27602b553caSRafal Jaworowski #define SEC_QUEUED_DESC_CNT(sc) \ 27702b553caSRafal Jaworowski (((sc)->sc_queued_desc_put_cnt - (sc)->sc_queued_desc_get_cnt) \ 27802b553caSRafal Jaworowski & (SEC_DESCRIPTORS - 1)) 27902b553caSRafal Jaworowski 28002b553caSRafal Jaworowski #define SEC_DESC_SYNC(sc, mode) do { \ 28102b553caSRafal Jaworowski sec_sync_dma_mem(&((sc)->sc_desc_dmem), (mode)); \ 28202b553caSRafal Jaworowski sec_sync_dma_mem(&((sc)->sc_lt_dmem), (mode)); \ 28302b553caSRafal Jaworowski } while (0) 28402b553caSRafal Jaworowski 28502b553caSRafal Jaworowski #define SEC_DESC_SYNC_POINTERS(desc, mode) do { \ 28602b553caSRafal Jaworowski u_int i; \ 28702b553caSRafal Jaworowski for (i = 0; i < SEC_POINTERS; i++) \ 28802b553caSRafal Jaworowski sec_sync_dma_mem(&((desc)->sd_ptr_dmem[i]), (mode)); \ 28902b553caSRafal Jaworowski } while (0) 29002b553caSRafal Jaworowski 29102b553caSRafal Jaworowski #define SEC_DESC_FREE_POINTERS(desc) do { \ 29202b553caSRafal Jaworowski u_int i; \ 29302b553caSRafal Jaworowski for (i = 0; i < SEC_POINTERS; i++) \ 29402b553caSRafal Jaworowski sec_free_dma_mem(&(desc)->sd_ptr_dmem[i]); \ 29502b553caSRafal Jaworowski } while (0); 29602b553caSRafal Jaworowski 29702b553caSRafal Jaworowski #define SEC_DESC_PUT_BACK_LT(sc, desc) \ 29802b553caSRafal Jaworowski SEC_PUT_BACK_LT(sc, (desc)->sd_lt_used) 29902b553caSRafal Jaworowski 30002b553caSRafal Jaworowski #define SEC_DESC_FREE_LT(sc, desc) \ 30102b553caSRafal Jaworowski SEC_FREE_LT(sc, (desc)->sd_lt_used) 30202b553caSRafal Jaworowski 30302b553caSRafal Jaworowski /* Interface for link tables */ 30402b553caSRafal Jaworowski #define SEC_ALLOC_LT_ENTRY(sc) \ 30502b553caSRafal Jaworowski &SEC_GET_GENERIC(sc, sc_lt, sc_lt_alloc_cnt, SEC_LT_ENTRIES) 30602b553caSRafal Jaworowski 30702b553caSRafal Jaworowski #define SEC_PUT_BACK_LT(sc, num) \ 30802b553caSRafal Jaworowski SEC_ADD(sc, sc_lt_alloc_cnt, SEC_LT_ENTRIES, -(num)) 30902b553caSRafal Jaworowski 31002b553caSRafal Jaworowski #define SEC_FREE_LT(sc, num) \ 31102b553caSRafal Jaworowski SEC_ADD(sc, sc_lt_free_cnt, SEC_LT_ENTRIES, num) 31202b553caSRafal Jaworowski 31302b553caSRafal Jaworowski #define SEC_FREE_LT_CNT(sc) \ 31402b553caSRafal Jaworowski (((sc)->sc_lt_free_cnt - (sc)->sc_lt_alloc_cnt - 1) \ 31502b553caSRafal Jaworowski & (SEC_LT_ENTRIES - 1)) 31602b553caSRafal Jaworowski 31702b553caSRafal Jaworowski /* Size of SEC registers area */ 31802b553caSRafal Jaworowski #define SEC_IO_SIZE 0x10000 31902b553caSRafal Jaworowski 32002b553caSRafal Jaworowski /* SEC Controller registers */ 32102b553caSRafal Jaworowski #define SEC_IER 0x1008 32202b553caSRafal Jaworowski #define SEC_INT_CH_DN(n) (1ULL << (((n) * 2) + 32)) 32302b553caSRafal Jaworowski #define SEC_INT_CH_ERR(n) (1ULL << (((n) * 2) + 33)) 32402b553caSRafal Jaworowski #define SEC_INT_ITO (1ULL << 55) 32502b553caSRafal Jaworowski 32602b553caSRafal Jaworowski #define SEC_ISR 0x1010 32702b553caSRafal Jaworowski #define SEC_ICR 0x1018 32802b553caSRafal Jaworowski #define SEC_ID 0x1020 32902b553caSRafal Jaworowski 33002b553caSRafal Jaworowski #define SEC_EUASR 0x1028 33102b553caSRafal Jaworowski #define SEC_EUASR_RNGU(r) (((r) >> 0) & 0xF) 33202b553caSRafal Jaworowski #define SEC_EUASR_PKEU(r) (((r) >> 8) & 0xF) 33302b553caSRafal Jaworowski #define SEC_EUASR_KEU(r) (((r) >> 16) & 0xF) 33402b553caSRafal Jaworowski #define SEC_EUASR_CRCU(r) (((r) >> 20) & 0xF) 33502b553caSRafal Jaworowski #define SEC_EUASR_DEU(r) (((r) >> 32) & 0xF) 33602b553caSRafal Jaworowski #define SEC_EUASR_AESU(r) (((r) >> 40) & 0xF) 33702b553caSRafal Jaworowski #define SEC_EUASR_MDEU(r) (((r) >> 48) & 0xF) 33802b553caSRafal Jaworowski #define SEC_EUASR_AFEU(r) (((r) >> 56) & 0xF) 33902b553caSRafal Jaworowski 34002b553caSRafal Jaworowski #define SEC_MCR 0x1030 34102b553caSRafal Jaworowski #define SEC_MCR_SWR (1ULL << 32) 34202b553caSRafal Jaworowski 34302b553caSRafal Jaworowski /* SEC Channel registers */ 34402b553caSRafal Jaworowski #define SEC_CHAN_CCR(n) (((n) * 0x100) + 0x1108) 34502b553caSRafal Jaworowski #define SEC_CHAN_CCR_CDIE (1ULL << 1) 34602b553caSRafal Jaworowski #define SEC_CHAN_CCR_NT (1ULL << 2) 34702b553caSRafal Jaworowski #define SEC_CHAN_CCR_AWSE (1ULL << 3) 34802b553caSRafal Jaworowski #define SEC_CHAN_CCR_CDWE (1ULL << 4) 34902b553caSRafal Jaworowski #define SEC_CHAN_CCR_BS (1ULL << 8) 35002b553caSRafal Jaworowski #define SEC_CHAN_CCR_WGN (1ULL << 13) 35102b553caSRafal Jaworowski #define SEC_CHAN_CCR_R (1ULL << 32) 35202b553caSRafal Jaworowski #define SEC_CHAN_CCR_CON (1ULL << 33) 35302b553caSRafal Jaworowski 35402b553caSRafal Jaworowski #define SEC_CHAN_CSR(n) (((n) * 0x100) + 0x1110) 35502b553caSRafal Jaworowski #define SEC_CHAN_CSR2_FFLVL_M 0x1FULL 35602b553caSRafal Jaworowski #define SEC_CHAN_CSR2_FFLVL_S 56 35702b553caSRafal Jaworowski #define SEC_CHAN_CSR2_GSTATE_M 0x0FULL 35802b553caSRafal Jaworowski #define SEC_CHAN_CSR2_GSTATE_S 48 35902b553caSRafal Jaworowski #define SEC_CHAN_CSR2_PSTATE_M 0x0FULL 36002b553caSRafal Jaworowski #define SEC_CHAN_CSR2_PSTATE_S 40 36102b553caSRafal Jaworowski #define SEC_CHAN_CSR2_MSTATE_M 0x3FULL 36202b553caSRafal Jaworowski #define SEC_CHAN_CSR2_MSTATE_S 32 36302b553caSRafal Jaworowski #define SEC_CHAN_CSR3_FFLVL_M 0x1FULL 36402b553caSRafal Jaworowski #define SEC_CHAN_CSR3_FFLVL_S 24 36502b553caSRafal Jaworowski #define SEC_CHAN_CSR3_MSTATE_M 0x1FFULL 36602b553caSRafal Jaworowski #define SEC_CHAN_CSR3_MSTATE_S 32 36702b553caSRafal Jaworowski #define SEC_CHAN_CSR3_PSTATE_M 0x7FULL 36802b553caSRafal Jaworowski #define SEC_CHAN_CSR3_PSTATE_S 48 36902b553caSRafal Jaworowski #define SEC_CHAN_CSR3_GSTATE_M 0x7FULL 37002b553caSRafal Jaworowski #define SEC_CHAN_CSR3_GSTATE_S 56 37102b553caSRafal Jaworowski 37202b553caSRafal Jaworowski #define SEC_CHAN_CDPR(n) (((n) * 0x100) + 0x1140) 37302b553caSRafal Jaworowski #define SEC_CHAN_FF(n) (((n) * 0x100) + 0x1148) 37402b553caSRafal Jaworowski 37502b553caSRafal Jaworowski /* SEC Execution Units numbers */ 37602b553caSRafal Jaworowski #define SEC_EU_NONE 0x0 37702b553caSRafal Jaworowski #define SEC_EU_AFEU 0x1 37802b553caSRafal Jaworowski #define SEC_EU_DEU 0x2 37902b553caSRafal Jaworowski #define SEC_EU_MDEU_A 0x3 38002b553caSRafal Jaworowski #define SEC_EU_MDEU_B 0xB 38102b553caSRafal Jaworowski #define SEC_EU_RNGU 0x4 38202b553caSRafal Jaworowski #define SEC_EU_PKEU 0x5 38302b553caSRafal Jaworowski #define SEC_EU_AESU 0x6 38402b553caSRafal Jaworowski #define SEC_EU_KEU 0x7 38502b553caSRafal Jaworowski #define SEC_EU_CRCU 0x8 38602b553caSRafal Jaworowski 38702b553caSRafal Jaworowski /* SEC descriptor types */ 38802b553caSRafal Jaworowski #define SEC_DT_COMMON_NONSNOOP 0x02 38902b553caSRafal Jaworowski #define SEC_DT_HMAC_SNOOP 0x04 39002b553caSRafal Jaworowski 39102b553caSRafal Jaworowski /* SEC AESU declarations and definitions */ 39202b553caSRafal Jaworowski #define SEC_AESU_MODE_ED (1ULL << 0) 39302b553caSRafal Jaworowski #define SEC_AESU_MODE_CBC (1ULL << 1) 39402b553caSRafal Jaworowski 39502b553caSRafal Jaworowski /* SEC DEU declarations and definitions */ 39602b553caSRafal Jaworowski #define SEC_DEU_MODE_ED (1ULL << 0) 39702b553caSRafal Jaworowski #define SEC_DEU_MODE_TS (1ULL << 1) 39802b553caSRafal Jaworowski #define SEC_DEU_MODE_CBC (1ULL << 2) 39902b553caSRafal Jaworowski 40002b553caSRafal Jaworowski /* SEC MDEU declarations and definitions */ 40102b553caSRafal Jaworowski #define SEC_HMAC_HASH_LEN 12 40202b553caSRafal Jaworowski #define SEC_MDEU_MODE_SHA1 0x00 /* MDEU A */ 40302b553caSRafal Jaworowski #define SEC_MDEU_MODE_SHA384 0x00 /* MDEU B */ 40402b553caSRafal Jaworowski #define SEC_MDEU_MODE_SHA256 0x01 40502b553caSRafal Jaworowski #define SEC_MDEU_MODE_MD5 0x02 /* MDEU A */ 40602b553caSRafal Jaworowski #define SEC_MDEU_MODE_SHA512 0x02 /* MDEU B */ 40702b553caSRafal Jaworowski #define SEC_MDEU_MODE_SHA224 0x03 40802b553caSRafal Jaworowski #define SEC_MDEU_MODE_PD (1ULL << 2) 40902b553caSRafal Jaworowski #define SEC_MDEU_MODE_HMAC (1ULL << 3) 41002b553caSRafal Jaworowski #define SEC_MDEU_MODE_INIT (1ULL << 4) 41102b553caSRafal Jaworowski #define SEC_MDEU_MODE_SMAC (1ULL << 5) 41202b553caSRafal Jaworowski #define SEC_MDEU_MODE_CICV (1ULL << 6) 41302b553caSRafal Jaworowski #define SEC_MDEU_MODE_CONT (1ULL << 7) 41402b553caSRafal Jaworowski 41502b553caSRafal Jaworowski #endif 416