1 1.3 andvar /* $NetBSD: qatvar.h,v 1.3 2022/07/06 12:33:42 andvar Exp $ */ 2 1.1 hikaru 3 1.1 hikaru /* 4 1.1 hikaru * Copyright (c) 2019 Internet Initiative Japan, Inc. 5 1.1 hikaru * All rights reserved. 6 1.1 hikaru * 7 1.1 hikaru * Redistribution and use in source and binary forms, with or without 8 1.1 hikaru * modification, are permitted provided that the following conditions 9 1.1 hikaru * are met: 10 1.1 hikaru * 1. Redistributions of source code must retain the above copyright 11 1.1 hikaru * notice, this list of conditions and the following disclaimer. 12 1.1 hikaru * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 hikaru * notice, this list of conditions and the following disclaimer in the 14 1.1 hikaru * documentation and/or other materials provided with the distribution. 15 1.1 hikaru * 16 1.1 hikaru * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 17 1.1 hikaru * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18 1.1 hikaru * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 1.1 hikaru * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 20 1.1 hikaru * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 1.1 hikaru * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 1.1 hikaru * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 1.1 hikaru * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 1.1 hikaru * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 1.1 hikaru * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 1.1 hikaru * POSSIBILITY OF SUCH DAMAGE. 27 1.1 hikaru */ 28 1.1 hikaru 29 1.1 hikaru /* 30 1.1 hikaru * Copyright(c) 2007-2019 Intel Corporation. All rights reserved. 31 1.1 hikaru * 32 1.1 hikaru * Redistribution and use in source and binary forms, with or without 33 1.1 hikaru * modification, are permitted provided that the following conditions 34 1.1 hikaru * are met: 35 1.1 hikaru * 36 1.1 hikaru * * Redistributions of source code must retain the above copyright 37 1.1 hikaru * notice, this list of conditions and the following disclaimer. 38 1.1 hikaru * * Redistributions in binary form must reproduce the above copyright 39 1.1 hikaru * notice, this list of conditions and the following disclaimer in 40 1.1 hikaru * the documentation and/or other materials provided with the 41 1.1 hikaru * distribution. 42 1.1 hikaru * * Neither the name of Intel Corporation nor the names of its 43 1.1 hikaru * contributors may be used to endorse or promote products derived 44 1.1 hikaru * from this software without specific prior written permission. 45 1.1 hikaru * 46 1.1 hikaru * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 47 1.1 hikaru * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 48 1.1 hikaru * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 49 1.1 hikaru * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 50 1.1 hikaru * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 51 1.1 hikaru * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 52 1.1 hikaru * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 53 1.1 hikaru * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 54 1.1 hikaru * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 55 1.1 hikaru * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 56 1.1 hikaru * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 57 1.1 hikaru */ 58 1.1 hikaru 59 1.1 hikaru #ifndef _DEV_PCI_QATVAR_H_ 60 1.1 hikaru #define _DEV_PCI_QATVAR_H_ 61 1.1 hikaru 62 1.1 hikaru #include <sys/malloc.h> /* for cryptodev.h */ 63 1.1 hikaru #include <opencrypto/cryptodev.h> 64 1.1 hikaru 65 1.1 hikaru #define QAT_NSYMREQ 256 66 1.1 hikaru #define QAT_NSYMCOOKIE ((QAT_NSYMREQ * 2 + 1) * 2) /* XXX why? */ 67 1.1 hikaru #define QAT_NASYMREQ 64 68 1.1 hikaru #define QAT_BATCH_SUBMIT_FREE_SPACE 2 69 1.1 hikaru #define QAT_NSESSION 16384 70 1.1 hikaru 71 1.1 hikaru #define QAT_EV_NAME_SIZE 32 72 1.1 hikaru #define QAT_RING_NAME_SIZE 32 73 1.1 hikaru 74 1.1 hikaru #define QAT_MAXSEG 32 /* max segments for sg dma */ 75 1.1 hikaru #define QAT_MAXLEN 65535 /* IP_MAXPACKET */ 76 1.1 hikaru 77 1.1 hikaru #define QAT_HB_INTERVAL 500 /* heartbeat msec */ 78 1.1 hikaru #define QAT_SSM_WDT 100 79 1.1 hikaru 80 1.1 hikaru #if !defined(SET) 81 1.1 hikaru #define SET(t, f) ((t) |= (f)) 82 1.1 hikaru #define ISSET(t, f) ((t) & (f)) 83 1.1 hikaru #define CLR(t, f) ((t) &= ~(f)) 84 1.1 hikaru #endif 85 1.1 hikaru 86 1.1 hikaru #define QAT_EVENT_COUNTERS 87 1.1 hikaru 88 1.1 hikaru #ifdef QAT_EVENT_COUNTERS 89 1.1 hikaru #define QAT_EVCNT_ATTACH(sc, ev, type, name, fmt, args...) \ 90 1.1 hikaru do { \ 91 1.1 hikaru snprintf((name), sizeof((name)), fmt, ##args); \ 92 1.1 hikaru evcnt_attach_dynamic((ev), (type), NULL, \ 93 1.1 hikaru device_xname((sc)->sc_dev), (name)); \ 94 1.1 hikaru } while (0) 95 1.1 hikaru #define QAT_EVCNT_INCR(ev) (ev)->ev_count++ 96 1.1 hikaru #else 97 1.1 hikaru #define QAT_EVCNT_ATTACH(sc, ev, type, name, fmt, args...) /* nothing */ 98 1.1 hikaru #define QAT_EVCNT_INCR(ev) /* nothing */ 99 1.1 hikaru #endif 100 1.1 hikaru 101 1.1 hikaru enum qat_chip_type { 102 1.1 hikaru QAT_CHIP_C2XXX = 0, /* NanoQAT: Atom C2000 */ 103 1.1 hikaru QAT_CHIP_C2XXX_IOV, 104 1.1 hikaru QAT_CHIP_C3XXX, /* Atom C3000 */ 105 1.1 hikaru QAT_CHIP_C3XXX_IOV, 106 1.1 hikaru QAT_CHIP_C62X, 107 1.1 hikaru QAT_CHIP_C62X_IOV, 108 1.1 hikaru QAT_CHIP_D15XX, 109 1.1 hikaru QAT_CHIP_D15XX_IOV, 110 1.1 hikaru }; 111 1.1 hikaru 112 1.1 hikaru enum qat_sku { 113 1.1 hikaru QAT_SKU_UNKNOWN = 0, 114 1.1 hikaru QAT_SKU_1, 115 1.1 hikaru QAT_SKU_2, 116 1.1 hikaru QAT_SKU_3, 117 1.1 hikaru QAT_SKU_4, 118 1.1 hikaru QAT_SKU_VF, 119 1.1 hikaru }; 120 1.1 hikaru 121 1.1 hikaru enum qat_ae_status { 122 1.1 hikaru QAT_AE_ENABLED = 1, 123 1.1 hikaru QAT_AE_ACTIVE, 124 1.1 hikaru QAT_AE_DISABLED 125 1.1 hikaru }; 126 1.1 hikaru 127 1.1 hikaru #define TIMEOUT_AE_RESET 100 128 1.1 hikaru #define TIMEOUT_AE_CHECK 10000 129 1.1 hikaru #define TIMEOUT_AE_CSR 500 130 1.1 hikaru #define AE_EXEC_CYCLE 20 131 1.1 hikaru 132 1.1 hikaru #define QAT_UOF_MAX_PAGE 1 133 1.1 hikaru #define QAT_UOF_MAX_PAGE_REGION 1 134 1.1 hikaru 135 1.1 hikaru struct qat_dmamem { 136 1.1 hikaru bus_dmamap_t qdm_dma_map; 137 1.1 hikaru bus_size_t qdm_dma_size; 138 1.1 hikaru bus_dma_segment_t qdm_dma_seg; 139 1.1 hikaru void *qdm_dma_vaddr; 140 1.1 hikaru }; 141 1.1 hikaru 142 1.1 hikaru /* Valid internal ring size values */ 143 1.1 hikaru #define QAT_RING_SIZE_128 0x01 144 1.1 hikaru #define QAT_RING_SIZE_256 0x02 145 1.1 hikaru #define QAT_RING_SIZE_512 0x03 146 1.1 hikaru #define QAT_RING_SIZE_4K 0x06 147 1.1 hikaru #define QAT_RING_SIZE_16K 0x08 148 1.1 hikaru #define QAT_RING_SIZE_4M 0x10 149 1.1 hikaru #define QAT_MIN_RING_SIZE QAT_RING_SIZE_128 150 1.1 hikaru #define QAT_MAX_RING_SIZE QAT_RING_SIZE_4M 151 1.1 hikaru #define QAT_DEFAULT_RING_SIZE QAT_RING_SIZE_16K 152 1.1 hikaru 153 1.1 hikaru /* Valid internal msg size values */ 154 1.1 hikaru #define QAT_MSG_SIZE_32 0x01 155 1.1 hikaru #define QAT_MSG_SIZE_64 0x02 156 1.1 hikaru #define QAT_MSG_SIZE_128 0x04 157 1.1 hikaru #define QAT_MIN_MSG_SIZE QAT_MSG_SIZE_32 158 1.1 hikaru #define QAT_MAX_MSG_SIZE QAT_MSG_SIZE_128 159 1.1 hikaru 160 1.1 hikaru /* Size to bytes conversion macros for ring and msg size values */ 161 1.1 hikaru #define QAT_MSG_SIZE_TO_BYTES(SIZE) (SIZE << 5) 162 1.1 hikaru #define QAT_BYTES_TO_MSG_SIZE(SIZE) (SIZE >> 5) 163 1.1 hikaru #define QAT_SIZE_TO_RING_SIZE_IN_BYTES(SIZE) ((1 << (SIZE - 1)) << 7) 164 1.1 hikaru #define QAT_RING_SIZE_IN_BYTES_TO_SIZE(SIZE) ((1 << (SIZE - 1)) >> 7) 165 1.1 hikaru 166 1.3 andvar /* Minimum ring buffer size for memory allocation */ 167 1.1 hikaru #define QAT_RING_SIZE_BYTES_MIN(SIZE) \ 168 1.1 hikaru ((SIZE < QAT_SIZE_TO_RING_SIZE_IN_BYTES(QAT_RING_SIZE_4K)) ? \ 169 1.1 hikaru QAT_SIZE_TO_RING_SIZE_IN_BYTES(QAT_RING_SIZE_4K) : SIZE) 170 1.1 hikaru #define QAT_RING_SIZE_MODULO(SIZE) (SIZE + 0x6) 171 1.1 hikaru #define QAT_SIZE_TO_POW(SIZE) ((((SIZE & 0x4) >> 1) | ((SIZE & 0x4) >> 2) | \ 172 1.1 hikaru SIZE) & ~0x4) 173 1.1 hikaru /* Max outstanding requests */ 174 1.1 hikaru #define QAT_MAX_INFLIGHTS(RING_SIZE, MSG_SIZE) \ 175 1.1 hikaru ((((1 << (RING_SIZE - 1)) << 3) >> QAT_SIZE_TO_POW(MSG_SIZE)) - 1) 176 1.1 hikaru 177 1.1 hikaru #define QAT_RING_PATTERN 0x7f 178 1.1 hikaru 179 1.1 hikaru struct qat_softc; 180 1.1 hikaru 181 1.1 hikaru typedef int (*qat_cb_t)(struct qat_softc *, void *, void *); 182 1.1 hikaru 183 1.1 hikaru struct qat_ring { 184 1.1 hikaru struct qat_dmamem qr_dma; 185 1.1 hikaru bus_addr_t qr_ring_paddr; 186 1.1 hikaru void *qr_ring_vaddr; 187 1.1 hikaru uint32_t * volatile qr_inflight; /* tx/rx shared */ 188 1.1 hikaru uint32_t qr_head; 189 1.1 hikaru uint32_t qr_tail; 190 1.1 hikaru uint8_t qr_msg_size; 191 1.1 hikaru uint8_t qr_ring_size; 192 1.1 hikaru uint32_t qr_ring; /* ring number in bank */ 193 1.1 hikaru uint32_t qr_bank; /* bank number in device */ 194 1.1 hikaru uint32_t qr_ring_id; 195 1.1 hikaru uint32_t qr_ring_mask; 196 1.1 hikaru qat_cb_t qr_cb; 197 1.1 hikaru void *qr_cb_arg; 198 1.1 hikaru 199 1.1 hikaru const char *qr_name; 200 1.1 hikaru kmutex_t qr_ring_mtx; /* Lock per ring */ 201 1.1 hikaru 202 1.1 hikaru #ifdef QAT_EVENT_COUNTERS 203 1.1 hikaru char qr_ev_rxintr_name[QAT_EV_NAME_SIZE]; 204 1.1 hikaru struct evcnt qr_ev_rxintr; 205 1.1 hikaru char qr_ev_rxmsg_name[QAT_EV_NAME_SIZE]; 206 1.1 hikaru struct evcnt qr_ev_rxmsg; 207 1.1 hikaru char qr_ev_txmsg_name[QAT_EV_NAME_SIZE]; 208 1.1 hikaru struct evcnt qr_ev_txmsg; 209 1.1 hikaru char qr_ev_txfull_name[QAT_EV_NAME_SIZE]; 210 1.1 hikaru struct evcnt qr_ev_txfull; 211 1.1 hikaru #endif 212 1.1 hikaru }; 213 1.1 hikaru 214 1.1 hikaru struct qat_bank { 215 1.1 hikaru struct qat_softc *qb_sc; /* back pointer to softc */ 216 1.1 hikaru uint32_t qb_intr_mask; /* current interrupt mask */ 217 1.3 andvar uint32_t qb_allocated_rings; /* current allocated ring bitfield */ 218 1.1 hikaru uint32_t qb_coalescing_time; /* timer in nano sec, 0: disabled */ 219 1.1 hikaru #define COALESCING_TIME_INTERVAL_DEFAULT 10000 220 1.1 hikaru #define COALESCING_TIME_INTERVAL_MIN 500 221 1.1 hikaru #define COALESCING_TIME_INTERVAL_MAX 0xfffff 222 1.1 hikaru uint32_t qb_bank; /* bank index */ 223 1.1 hikaru kmutex_t qb_bank_mtx; 224 1.1 hikaru void *qb_ih_cookie; 225 1.1 hikaru 226 1.1 hikaru #ifdef QAT_EVENT_COUNTERS 227 1.1 hikaru char qb_ev_rxintr_name[QAT_EV_NAME_SIZE]; 228 1.1 hikaru struct evcnt qb_ev_rxintr; 229 1.1 hikaru #endif 230 1.1 hikaru 231 1.1 hikaru struct qat_ring qb_et_rings[MAX_RING_PER_BANK]; 232 1.1 hikaru 233 1.1 hikaru }; 234 1.1 hikaru 235 1.1 hikaru struct qat_ap_bank { 236 1.1 hikaru uint32_t qab_nf_mask; 237 1.1 hikaru uint32_t qab_nf_dest; 238 1.1 hikaru uint32_t qab_ne_mask; 239 1.1 hikaru uint32_t qab_ne_dest; 240 1.1 hikaru }; 241 1.1 hikaru 242 1.1 hikaru struct qat_ae_page { 243 1.1 hikaru struct qat_ae_page *qap_next; 244 1.1 hikaru struct qat_uof_page *qap_page; 245 1.1 hikaru struct qat_ae_region *qap_region; 246 1.1 hikaru u_int qap_flags; 247 1.1 hikaru }; 248 1.1 hikaru 249 1.1 hikaru #define QAT_AE_PAGA_FLAG_WAITING (1 << 0) 250 1.1 hikaru 251 1.1 hikaru struct qat_ae_region { 252 1.1 hikaru struct qat_ae_page *qar_loaded_page; 253 1.1 hikaru SIMPLEQ_HEAD(, qat_ae_page) qar_waiting_pages; 254 1.1 hikaru }; 255 1.1 hikaru 256 1.1 hikaru struct qat_ae_slice { 257 1.1 hikaru u_int qas_assigned_ctx_mask; 258 1.1 hikaru struct qat_ae_region qas_regions[QAT_UOF_MAX_PAGE_REGION]; 259 1.1 hikaru struct qat_ae_page qas_pages[QAT_UOF_MAX_PAGE]; 260 1.1 hikaru struct qat_ae_page *qas_cur_pages[MAX_AE_CTX]; 261 1.1 hikaru struct qat_uof_image *qas_image; 262 1.1 hikaru }; 263 1.1 hikaru 264 1.1 hikaru #define QAT_AE(sc, ae) \ 265 1.1 hikaru ((sc)->sc_ae[ae]) 266 1.1 hikaru 267 1.1 hikaru struct qat_ae { 268 1.1 hikaru u_int qae_state; /* AE state */ 269 1.1 hikaru u_int qae_ustore_size; /* free micro-store address */ 270 1.1 hikaru u_int qae_free_addr; /* free micro-store address */ 271 1.1 hikaru u_int qae_free_size; /* free micro-store size */ 272 1.1 hikaru u_int qae_live_ctx_mask; /* live context mask */ 273 1.3 andvar u_int qae_ustore_dram_addr; /* micro-store DRAM address */ 274 1.1 hikaru u_int qae_reload_size; /* reloadable code size */ 275 1.1 hikaru 276 1.1 hikaru /* aefw */ 277 1.1 hikaru u_int qae_num_slices; 278 1.1 hikaru struct qat_ae_slice qae_slices[MAX_AE_CTX]; 279 1.1 hikaru u_int qae_reloc_ustore_dram; /* reloadable ustore-dram address */ 280 1.1 hikaru u_int qae_effect_ustore_size; /* effective AE ustore size */ 281 1.1 hikaru u_int qae_shareable_ustore; 282 1.1 hikaru }; 283 1.1 hikaru 284 1.1 hikaru struct qat_mof { 285 1.1 hikaru void *qmf_sym; /* SYM_OBJS in sc_fw_mof */ 286 1.1 hikaru size_t qmf_sym_size; 287 1.1 hikaru void *qmf_uof_objs; /* UOF_OBJS in sc_fw_mof */ 288 1.1 hikaru size_t qmf_uof_objs_size; 289 1.1 hikaru void *qmf_suof_objs; /* SUOF_OBJS in sc_fw_mof */ 290 1.1 hikaru size_t qmf_suof_objs_size; 291 1.1 hikaru }; 292 1.1 hikaru 293 1.1 hikaru struct qat_ae_batch_init { 294 1.1 hikaru u_int qabi_ae; 295 1.1 hikaru u_int qabi_addr; 296 1.1 hikaru u_int *qabi_value; 297 1.1 hikaru u_int qabi_size; 298 1.1 hikaru SIMPLEQ_ENTRY(qat_ae_batch_init) qabi_next; 299 1.1 hikaru }; 300 1.1 hikaru 301 1.1 hikaru SIMPLEQ_HEAD(qat_ae_batch_init_list, qat_ae_batch_init); 302 1.1 hikaru 303 1.1 hikaru /* overwritten struct uof_uword_block */ 304 1.1 hikaru struct qat_uof_uword_block { 305 1.1 hikaru u_int quub_start_addr; /* start address */ 306 1.1 hikaru u_int quub_num_words; /* number of microwords */ 307 1.1 hikaru uint64_t quub_micro_words; /* pointer to the uwords */ 308 1.1 hikaru }; 309 1.1 hikaru 310 1.1 hikaru struct qat_uof_page { 311 1.1 hikaru u_int qup_page_num; /* page number */ 312 1.1 hikaru u_int qup_def_page; /* default page */ 313 1.1 hikaru u_int qup_page_region; /* region of page */ 314 1.1 hikaru u_int qup_beg_vaddr; /* begin virtual address */ 315 1.1 hikaru u_int qup_beg_paddr; /* begin physical address */ 316 1.1 hikaru 317 1.1 hikaru u_int qup_num_uc_var; /* num of uC var in array */ 318 1.1 hikaru struct uof_uword_fixup *qup_uc_var; 319 1.1 hikaru /* array of import variables */ 320 1.1 hikaru u_int qup_num_imp_var; /* num of import var in array */ 321 1.1 hikaru struct uof_import_var *qup_imp_var; 322 1.1 hikaru /* array of import variables */ 323 1.1 hikaru u_int qup_num_imp_expr; /* num of import expr in array */ 324 1.1 hikaru struct uof_uword_fixup *qup_imp_expr; 325 1.1 hikaru /* array of import expressions */ 326 1.1 hikaru u_int qup_num_neigh_reg; /* num of neigh-reg in array */ 327 1.1 hikaru struct uof_uword_fixup *qup_neigh_reg; 328 1.1 hikaru /* array of neigh-reg assignments */ 329 1.1 hikaru u_int qup_num_micro_words; /* number of microwords in the seg */ 330 1.1 hikaru 331 1.1 hikaru u_int qup_num_uw_blocks; /* number of uword blocks */ 332 1.1 hikaru struct qat_uof_uword_block *qup_uw_blocks; 333 1.1 hikaru /* array of uword blocks */ 334 1.1 hikaru }; 335 1.1 hikaru 336 1.1 hikaru struct qat_uof_image { 337 1.1 hikaru struct uof_image *qui_image; /* image pointer */ 338 1.1 hikaru struct qat_uof_page qui_pages[QAT_UOF_MAX_PAGE]; 339 1.1 hikaru /* array of pages */ 340 1.1 hikaru 341 1.1 hikaru u_int qui_num_ae_reg; /* num of registers */ 342 1.1 hikaru struct uof_ae_reg *qui_ae_reg; /* array of registers */ 343 1.1 hikaru 344 1.1 hikaru u_int qui_num_init_reg_sym; /* num of reg/sym init values */ 345 1.1 hikaru struct uof_init_reg_sym *qui_init_reg_sym; 346 1.1 hikaru /* array of reg/sym init values */ 347 1.1 hikaru 348 1.1 hikaru u_int qui_num_sbreak; /* num of sbreak values */ 349 1.1 hikaru struct qui_sbreak *qui_sbreak; /* array of sbreak values */ 350 1.1 hikaru 351 1.1 hikaru u_int qui_num_uwords_used; 352 1.1 hikaru /* highest uword addressreferenced + 1 */ 353 1.1 hikaru }; 354 1.1 hikaru 355 1.1 hikaru struct qat_aefw_uof { 356 1.1 hikaru size_t qafu_size; /* uof size */ 357 1.1 hikaru struct uof_obj_hdr *qafu_obj_hdr; /* UOF_OBJS */ 358 1.1 hikaru 359 1.1 hikaru void *qafu_str_tab; 360 1.1 hikaru size_t qafu_str_tab_size; 361 1.1 hikaru 362 1.1 hikaru u_int qafu_num_init_mem; 363 1.1 hikaru struct uof_init_mem *qafu_init_mem; 364 1.1 hikaru size_t qafu_init_mem_size; 365 1.1 hikaru 366 1.1 hikaru struct uof_var_mem_seg *qafu_var_mem_seg; 367 1.1 hikaru 368 1.1 hikaru struct qat_ae_batch_init_list qafu_lm_init[MAX_AE]; 369 1.1 hikaru size_t qafu_num_lm_init[MAX_AE]; 370 1.1 hikaru size_t qafu_num_lm_init_inst[MAX_AE]; 371 1.1 hikaru 372 1.1 hikaru u_int qafu_num_imgs; /* number of uof image */ 373 1.1 hikaru struct qat_uof_image qafu_imgs[MAX_NUM_AE * MAX_AE_CTX]; 374 1.1 hikaru /* uof images */ 375 1.1 hikaru }; 376 1.1 hikaru 377 1.1 hikaru #define QAT_SERVICE_CRYPTO_A (1 << 0) 378 1.1 hikaru #define QAT_SERVICE_CRYPTO_B (1 << 1) 379 1.1 hikaru 380 1.1 hikaru struct qat_admin_rings { 381 1.1 hikaru uint32_t qadr_active_aes_per_accel; 382 1.1 hikaru uint8_t qadr_srv_mask[MAX_AE_PER_ACCEL]; 383 1.1 hikaru 384 1.1 hikaru struct qat_dmamem qadr_dma; 385 1.1 hikaru struct fw_init_ring_table *qadr_master_ring_tbl; 386 1.1 hikaru struct fw_init_ring_table *qadr_cya_ring_tbl; 387 1.1 hikaru struct fw_init_ring_table *qadr_cyb_ring_tbl; 388 1.1 hikaru 389 1.1 hikaru struct qat_ring *qadr_admin_tx; 390 1.1 hikaru struct qat_ring *qadr_admin_rx; 391 1.1 hikaru }; 392 1.1 hikaru 393 1.1 hikaru struct qat_accel_init_cb { 394 1.1 hikaru int qaic_status; 395 1.1 hikaru }; 396 1.1 hikaru 397 1.1 hikaru struct qat_admin_comms { 398 1.1 hikaru struct qat_dmamem qadc_dma; 399 1.1 hikaru struct qat_dmamem qadc_const_tbl_dma; 400 1.1 hikaru struct qat_dmamem qadc_hb_dma; 401 1.1 hikaru }; 402 1.1 hikaru 403 1.1 hikaru #define QAT_PID_MINOR_REV 0xf 404 1.1 hikaru #define QAT_PID_MAJOR_REV (0xf << 4) 405 1.1 hikaru 406 1.1 hikaru struct qat_suof_image { 407 1.1 hikaru char *qsi_simg_buf; 408 1.1 hikaru u_long qsi_simg_len; 409 1.1 hikaru char *qsi_css_header; 410 1.1 hikaru char *qsi_css_key; 411 1.1 hikaru char *qsi_css_signature; 412 1.1 hikaru char *qsi_css_simg; 413 1.1 hikaru u_long qsi_simg_size; 414 1.1 hikaru u_int qsi_ae_num; 415 1.1 hikaru u_int qsi_ae_mask; 416 1.1 hikaru u_int qsi_fw_type; 417 1.1 hikaru u_long qsi_simg_name; 418 1.1 hikaru u_long qsi_appmeta_data; 419 1.1 hikaru struct qat_dmamem qsi_dma; 420 1.1 hikaru }; 421 1.1 hikaru 422 1.1 hikaru struct qat_aefw_suof { 423 1.1 hikaru u_int qafs_file_id; 424 1.1 hikaru u_int qafs_check_sum; 425 1.1 hikaru char qafs_min_ver; 426 1.1 hikaru char qafs_maj_ver; 427 1.1 hikaru char qafs_fw_type; 428 1.1 hikaru char *qafs_suof_buf; 429 1.1 hikaru u_int qafs_suof_size; 430 1.1 hikaru char *qafs_sym_str; 431 1.1 hikaru u_int qafs_sym_size; 432 1.1 hikaru u_int qafs_num_simgs; 433 1.1 hikaru struct qat_suof_image *qafs_simg; 434 1.1 hikaru }; 435 1.1 hikaru 436 1.1 hikaru enum qat_sym_hash_algorithm { 437 1.1 hikaru QAT_SYM_HASH_NONE = 0, 438 1.1 hikaru QAT_SYM_HASH_MD5, 439 1.1 hikaru QAT_SYM_HASH_SHA1, 440 1.1 hikaru QAT_SYM_HASH_SHA224, 441 1.1 hikaru QAT_SYM_HASH_SHA256, 442 1.1 hikaru QAT_SYM_HASH_SHA384, 443 1.1 hikaru QAT_SYM_HASH_SHA512, 444 1.1 hikaru QAT_SYM_HASH_AES_XCBC, 445 1.1 hikaru QAT_SYM_HASH_AES_CCM, 446 1.1 hikaru QAT_SYM_HASH_AES_GCM, 447 1.1 hikaru QAT_SYM_HASH_KASUMI_F9, 448 1.1 hikaru QAT_SYM_HASH_SNOW3G_UIA2, 449 1.1 hikaru QAT_SYM_HASH_AES_CMAC, 450 1.1 hikaru QAT_SYM_HASH_AES_GMAC, 451 1.1 hikaru QAT_SYM_HASH_AES_CBC_MAC 452 1.1 hikaru }; 453 1.1 hikaru 454 1.1 hikaru #define QAT_HASH_MD5_BLOCK_SIZE 64 455 1.1 hikaru #define QAT_HASH_MD5_DIGEST_SIZE 16 456 1.1 hikaru #define QAT_HASH_MD5_STATE_SIZE 16 457 1.1 hikaru #define QAT_HASH_SHA1_BLOCK_SIZE 64 458 1.1 hikaru #define QAT_HASH_SHA1_DIGEST_SIZE 20 459 1.1 hikaru #define QAT_HASH_SHA1_STATE_SIZE 20 460 1.1 hikaru #define QAT_HASH_SHA224_BLOCK_SIZE 64 461 1.1 hikaru #define QAT_HASH_SHA224_DIGEST_SIZE 28 462 1.1 hikaru #define QAT_HASH_SHA224_STATE_SIZE 32 463 1.1 hikaru #define QAT_HASH_SHA256_BLOCK_SIZE 64 464 1.1 hikaru #define QAT_HASH_SHA256_DIGEST_SIZE 32 465 1.1 hikaru #define QAT_HASH_SHA256_STATE_SIZE 32 466 1.1 hikaru #define QAT_HASH_SHA384_BLOCK_SIZE 128 467 1.1 hikaru #define QAT_HASH_SHA384_DIGEST_SIZE 48 468 1.1 hikaru #define QAT_HASH_SHA384_STATE_SIZE 64 469 1.1 hikaru #define QAT_HASH_SHA512_BLOCK_SIZE 128 470 1.1 hikaru #define QAT_HASH_SHA512_DIGEST_SIZE 64 471 1.1 hikaru #define QAT_HASH_SHA512_STATE_SIZE 64 472 1.1 hikaru #define QAT_HASH_XCBC_PRECOMP_KEY_NUM 3 473 1.1 hikaru #define QAT_HASH_XCBC_MAC_BLOCK_SIZE 16 474 1.1 hikaru #define QAT_HASH_XCBC_MAC_128_DIGEST_SIZE 16 475 1.1 hikaru #define QAT_HASH_CMAC_BLOCK_SIZE 16 476 1.1 hikaru #define QAT_HASH_CMAC_128_DIGEST_SIZE 16 477 1.1 hikaru #define QAT_HASH_AES_CCM_BLOCK_SIZE 16 478 1.1 hikaru #define QAT_HASH_AES_CCM_DIGEST_SIZE 16 479 1.1 hikaru #define QAT_HASH_AES_GCM_BLOCK_SIZE 16 480 1.1 hikaru #define QAT_HASH_AES_GCM_DIGEST_SIZE 16 481 1.1 hikaru #define QAT_HASH_KASUMI_F9_BLOCK_SIZE 8 482 1.1 hikaru #define QAT_HASH_KASUMI_F9_DIGEST_SIZE 4 483 1.1 hikaru #define QAT_HASH_SNOW3G_UIA2_BLOCK_SIZE 8 484 1.1 hikaru #define QAT_HASH_SNOW3G_UIA2_DIGEST_SIZE 4 485 1.1 hikaru #define QAT_HASH_AES_CBC_MAC_BLOCK_SIZE 16 486 1.1 hikaru #define QAT_HASH_AES_CBC_MAC_DIGEST_SIZE 16 487 1.1 hikaru #define QAT_HASH_AES_GCM_ICV_SIZE_8 8 488 1.1 hikaru #define QAT_HASH_AES_GCM_ICV_SIZE_12 12 489 1.1 hikaru #define QAT_HASH_AES_GCM_ICV_SIZE_16 16 490 1.1 hikaru #define QAT_HASH_AES_CCM_ICV_SIZE_MIN 4 491 1.1 hikaru #define QAT_HASH_AES_CCM_ICV_SIZE_MAX 16 492 1.1 hikaru #define QAT_HASH_IPAD_BYTE 0x36 493 1.1 hikaru #define QAT_HASH_OPAD_BYTE 0x5c 494 1.1 hikaru #define QAT_HASH_IPAD_4_BYTES 0x36363636 495 1.1 hikaru #define QAT_HASH_OPAD_4_BYTES 0x5c5c5c5c 496 1.1 hikaru #define QAT_HASH_KASUMI_F9_KEY_MODIFIER_4_BYTES 0xAAAAAAAA 497 1.1 hikaru 498 1.1 hikaru #define QAT_SYM_XCBC_STATE_SIZE ((QAT_HASH_XCBC_MAC_BLOCK_SIZE) * 3) 499 1.1 hikaru #define QAT_SYM_CMAC_STATE_SIZE ((QAT_HASH_CMAC_BLOCK_SIZE) * 3) 500 1.1 hikaru 501 1.1 hikaru struct qat_sym_hash_alg_info { 502 1.1 hikaru uint32_t qshai_digest_len; /* Digest length in bytes */ 503 1.1 hikaru uint32_t qshai_block_len; /* Block length in bytes */ 504 1.1 hikaru const uint8_t *qshai_init_state; /* Initialiser state for hash 505 1.1 hikaru * algorithm */ 506 1.1 hikaru uint32_t qshai_state_size; /* size of above state in bytes */ 507 1.1 hikaru 508 1.1 hikaru const struct swcr_auth_hash *qshai_sah; /* software auth hash */ 509 1.1 hikaru uint32_t qshai_state_offset; /* offset to state in *_CTX */ 510 1.1 hikaru uint32_t qshai_state_word; 511 1.1 hikaru }; 512 1.1 hikaru 513 1.1 hikaru struct qat_sym_hash_qat_info { 514 1.1 hikaru uint32_t qshqi_algo_enc; /* QAT Algorithm encoding */ 515 1.1 hikaru uint32_t qshqi_auth_counter; /* Counter value for Auth */ 516 1.1 hikaru uint32_t qshqi_state1_len; /* QAT state1 length in bytes */ 517 1.1 hikaru uint32_t qshqi_state2_len; /* QAT state2 length in bytes */ 518 1.1 hikaru }; 519 1.1 hikaru 520 1.1 hikaru struct qat_sym_hash_def { 521 1.1 hikaru const struct qat_sym_hash_alg_info *qshd_alg; 522 1.1 hikaru const struct qat_sym_hash_qat_info *qshd_qat; 523 1.1 hikaru }; 524 1.1 hikaru 525 1.1 hikaru #define QAT_SYM_REQ_PARAMS_SIZE_MAX (24 + 32) 526 1.1 hikaru /* Reserve enough space for cipher and authentication request params */ 527 1.1 hikaru /* Basis of values are guaranteed in qat_hw*var.h with CTASSERT */ 528 1.1 hikaru 529 1.1 hikaru #define QAT_SYM_REQ_PARAMS_SIZE_PADDED \ 530 1.1 hikaru roundup(QAT_SYM_REQ_PARAMS_SIZE_MAX, QAT_OPTIMAL_ALIGN) 531 1.1 hikaru /* Pad out to 64-byte multiple to ensure optimal alignment of next field */ 532 1.1 hikaru 533 1.1 hikaru #define QAT_SYM_KEY_TLS_PREFIX_SIZE (128) 534 1.1 hikaru /* Hash Prefix size in bytes for TLS (128 = MAX = SHA2 (384, 512)*/ 535 1.1 hikaru 536 1.1 hikaru #define QAT_SYM_KEY_MAX_HASH_STATE_BUFFER \ 537 1.1 hikaru (QAT_SYM_KEY_TLS_PREFIX_SIZE * 2) 538 1.1 hikaru /* hash state prefix buffer structure that holds the maximum sized secret */ 539 1.1 hikaru 540 1.1 hikaru #define QAT_SYM_HASH_BUFFER_LEN QAT_HASH_SHA512_STATE_SIZE 541 1.1 hikaru /* Buffer length to hold 16 byte MD5 key and 20 byte SHA1 key */ 542 1.1 hikaru 543 1.1 hikaru struct qat_sym_bulk_cookie { 544 1.1 hikaru uint8_t qsbc_req_params_buf[QAT_SYM_REQ_PARAMS_SIZE_PADDED]; 545 1.1 hikaru /* memory block reserved for request params 546 1.1 hikaru * NOTE: Field must be correctly aligned in memory for access by QAT 547 1.1 hikaru * engine */ 548 1.1 hikaru struct qat_crypto *qsbc_crypto; 549 1.1 hikaru struct qat_session *qsbc_session; 550 1.1 hikaru /* Session context */ 551 1.1 hikaru void *qsbc_cb_tag; 552 1.1 hikaru /* correlator supplied by the client */ 553 1.1 hikaru uint8_t qsbc_msg[QAT_MSG_SIZE_TO_BYTES(QAT_MAX_MSG_SIZE)]; 554 1.1 hikaru /* QAT request message */ 555 1.1 hikaru } __aligned(QAT_OPTIMAL_ALIGN); 556 1.1 hikaru 557 1.1 hikaru struct qat_sym_cookie { 558 1.1 hikaru union qat_sym_cookie_u { 559 1.1 hikaru /* should be 64byte aligned */ 560 1.1 hikaru struct qat_sym_bulk_cookie qsc_bulk_cookie; 561 1.1 hikaru /* symmetric bulk cookie */ 562 1.1 hikaru #ifdef notyet 563 1.1 hikaru struct qat_sym_key_cookie qsc_key_cookie; 564 1.1 hikaru /* symmetric key cookie */ 565 1.1 hikaru struct qat_sym_nrbg_cookie qsc_nrbg_cookie; 566 1.1 hikaru /* symmetric NRBG cookie */ 567 1.1 hikaru #endif 568 1.1 hikaru } u; 569 1.1 hikaru 570 1.1 hikaru /* should be 64-byte aligned */ 571 1.1 hikaru struct buffer_list_desc qsc_buf_list; 572 1.1 hikaru struct flat_buffer_desc qsc_flat_bufs[QAT_MAXSEG]; /* should be here */ 573 1.1 hikaru 574 1.1 hikaru bus_dmamap_t *qsc_self_dmamap; /* self DMA mapping and 575 1.1 hikaru end of DMA region */ 576 1.1 hikaru 577 1.1 hikaru uint8_t qsc_iv_buf[EALG_MAX_BLOCK_LEN]; 578 1.1 hikaru 579 1.1 hikaru bus_dmamap_t qsc_buf_dmamap; /* qsc_flat_bufs DMA mapping */ 580 1.1 hikaru void *qsc_buf; 581 1.1 hikaru 582 1.1 hikaru bus_addr_t qsc_bulk_req_params_buf_paddr; 583 1.1 hikaru bus_addr_t qsc_buffer_list_desc_paddr; 584 1.1 hikaru bus_addr_t qsc_iv_buf_paddr; 585 1.1 hikaru 586 1.1 hikaru #ifdef notyet 587 1.1 hikaru uint64_t qsc_key_content_desc_paddr; 588 1.1 hikaru uint64_t qsc_key_hash_state_buf_paddr; 589 1.1 hikaru uint64_t qsc_key_ssl_key_in_paddr; 590 1.1 hikaru uint64_t qsc_key_tls_key_in_paddr; 591 1.1 hikaru #endif 592 1.1 hikaru }; 593 1.1 hikaru 594 1.1 hikaru CTASSERT(offsetof(struct qat_sym_cookie, 595 1.1 hikaru u.qsc_bulk_cookie.qsbc_req_params_buf) % QAT_OPTIMAL_ALIGN == 0); 596 1.1 hikaru CTASSERT(offsetof(struct qat_sym_cookie, qsc_buf_list) % QAT_OPTIMAL_ALIGN == 0); 597 1.1 hikaru CTASSERT(sizeof(struct buffer_list_desc) == 16); 598 1.1 hikaru 599 1.1 hikaru #define MAX_CIPHER_SETUP_BLK_SZ \ 600 1.1 hikaru (sizeof(struct hw_cipher_config) + \ 601 1.1 hikaru 2 * HW_KASUMI_KEY_SZ + 2 * HW_KASUMI_BLK_SZ) 602 1.1 hikaru #define MAX_HASH_SETUP_BLK_SZ sizeof(union hw_auth_algo_blk) 603 1.1 hikaru 604 1.1 hikaru /* Basis of values are guaranteed in qat_hw*var.h with CTASSERT */ 605 1.1 hikaru #define HASH_CONTENT_DESC_SIZE 176 606 1.1 hikaru #define CIPHER_CONTENT_DESC_SIZE 64 607 1.1 hikaru 608 1.1 hikaru #define CONTENT_DESC_MAX_SIZE roundup( \ 609 1.1 hikaru HASH_CONTENT_DESC_SIZE + CIPHER_CONTENT_DESC_SIZE, \ 610 1.1 hikaru QAT_OPTIMAL_ALIGN) 611 1.1 hikaru 612 1.1 hikaru #define QAT_MAX_AAD_SIZE_BYTES 256 613 1.1 hikaru 614 1.1 hikaru struct qat_crypto_desc { 615 1.1 hikaru uint8_t qcd_content_desc[CONTENT_DESC_MAX_SIZE]; 616 1.1 hikaru /* using only for qat 1.5 */ 617 1.1 hikaru uint8_t qcd_hash_state_prefix_buf[QAT_MAX_AAD_SIZE_BYTES]; 618 1.1 hikaru 619 1.1 hikaru enum fw_slice qcd_slices[MAX_FW_SLICE]; 620 1.1 hikaru enum fw_la_cmd_id qcd_cmd_id; 621 1.1 hikaru enum hw_cipher_dir qcd_cipher_dir; 622 1.1 hikaru 623 1.1 hikaru bus_addr_t qcd_desc_paddr; 624 1.1 hikaru bus_addr_t qcd_hash_state_paddr; 625 1.1 hikaru 626 1.1 hikaru /* content desc info */ 627 1.1 hikaru uint8_t qcd_hdr_sz; /* in quad words */ 628 1.1 hikaru uint8_t qcd_hw_blk_sz; /* in quad words */ 629 1.1 hikaru /* hash info */ 630 1.1 hikaru uint8_t qcd_state_storage_sz; /* in quad words */ 631 1.1 hikaru /* cipher info */ 632 1.1 hikaru uint16_t qcd_cipher_blk_sz; /* in bytes */ 633 1.1 hikaru uint16_t qcd_auth_sz; /* in bytes */ 634 1.1 hikaru 635 1.1 hikaru uint8_t qcd_req_cache[QAT_MSG_SIZE_TO_BYTES(QAT_MAX_MSG_SIZE)]; 636 1.1 hikaru } __aligned(QAT_OPTIMAL_ALIGN); 637 1.1 hikaru 638 1.1 hikaru /* should be aligned to 64bytes */ 639 1.1 hikaru struct qat_session { 640 1.1 hikaru struct qat_crypto_desc qs_dec_desc; /* should be at top of struct*/ 641 1.1 hikaru /* decrypt or auth then decrypt or auth */ 642 1.1 hikaru 643 1.1 hikaru struct qat_crypto_desc qs_enc_desc; 644 1.1 hikaru /* encrypt or encrypt then auth */ 645 1.1 hikaru 646 1.1 hikaru uint32_t qs_lid; 647 1.1 hikaru uint32_t qs_status; 648 1.1 hikaru #define QAT_SESSION_STATUS_ACTIVE (1 << 0) 649 1.1 hikaru #define QAT_SESSION_STATUS_FREEING (1 << 1) 650 1.1 hikaru uint32_t qs_inflight; 651 1.1 hikaru 652 1.1 hikaru kmutex_t qs_session_mtx; 653 1.1 hikaru }; 654 1.1 hikaru 655 1.1 hikaru CTASSERT(offsetof(struct qat_session, qs_dec_desc) % QAT_OPTIMAL_ALIGN == 0); 656 1.1 hikaru CTASSERT(offsetof(struct qat_session, qs_enc_desc) % QAT_OPTIMAL_ALIGN == 0); 657 1.1 hikaru 658 1.1 hikaru struct qat_crypto_bank { 659 1.1 hikaru uint16_t qcb_bank; 660 1.1 hikaru 661 1.1 hikaru struct qat_ring *qcb_sym_tx; 662 1.1 hikaru struct qat_ring *qcb_sym_rx; 663 1.1 hikaru 664 1.1 hikaru struct qat_dmamem qcb_symck_dmamems[QAT_NSYMCOOKIE]; 665 1.1 hikaru struct qat_sym_cookie *qcb_symck_free[QAT_NSYMCOOKIE]; 666 1.1 hikaru uint32_t qcb_symck_free_count; 667 1.1 hikaru 668 1.1 hikaru kmutex_t qcb_bank_mtx; 669 1.1 hikaru 670 1.1 hikaru struct qat_crypto *qcb_crypto; 671 1.1 hikaru 672 1.1 hikaru char qcb_ring_names[2][QAT_RING_NAME_SIZE]; /* sym tx,rx */ 673 1.1 hikaru #ifdef QAT_EVENT_COUNTERS 674 1.1 hikaru char qcb_ev_no_symck_name[QAT_EV_NAME_SIZE]; 675 1.1 hikaru struct evcnt qcb_ev_no_symck; 676 1.1 hikaru #endif 677 1.1 hikaru }; 678 1.1 hikaru 679 1.1 hikaru 680 1.1 hikaru struct qat_crypto { 681 1.1 hikaru struct qat_softc *qcy_sc; 682 1.1 hikaru uint32_t qcy_bank_mask; 683 1.1 hikaru uint16_t qcy_num_banks; 684 1.1 hikaru 685 1.1 hikaru int32_t qcy_cid; /* OpenCrypto driver ID */ 686 1.1 hikaru 687 1.1 hikaru struct qat_crypto_bank *qcy_banks; /* array of qat_crypto_bank */ 688 1.1 hikaru 689 1.1 hikaru struct qat_dmamem qcy_session_dmamems[QAT_NSESSION]; 690 1.1 hikaru struct qat_session *qcy_sessions[QAT_NSESSION]; 691 1.1 hikaru struct qat_session *qcy_session_free[QAT_NSESSION]; 692 1.1 hikaru uint32_t qcy_session_free_count; 693 1.1 hikaru 694 1.1 hikaru kmutex_t qcy_crypto_mtx; 695 1.1 hikaru 696 1.1 hikaru #ifdef QAT_EVENT_COUNTERS 697 1.1 hikaru char qcy_ev_new_sess_name[QAT_EV_NAME_SIZE]; 698 1.1 hikaru struct evcnt qcy_ev_new_sess; 699 1.1 hikaru char qcy_ev_free_sess_name[QAT_EV_NAME_SIZE]; 700 1.1 hikaru struct evcnt qcy_ev_free_sess; 701 1.1 hikaru char qcy_ev_no_sess_name[QAT_EV_NAME_SIZE]; 702 1.1 hikaru struct evcnt qcy_ev_no_sess; 703 1.1 hikaru #endif 704 1.1 hikaru }; 705 1.1 hikaru 706 1.1 hikaru struct qat_hw { 707 1.1 hikaru int8_t qhw_sram_bar_id; 708 1.1 hikaru int8_t qhw_misc_bar_id; 709 1.1 hikaru int8_t qhw_etr_bar_id; 710 1.1 hikaru 711 1.1 hikaru bus_size_t qhw_cap_global_offset; 712 1.1 hikaru bus_size_t qhw_ae_offset; 713 1.1 hikaru bus_size_t qhw_ae_local_offset; 714 1.1 hikaru bus_size_t qhw_etr_bundle_size; 715 1.1 hikaru 716 1.1 hikaru /* crypto processing callbacks */ 717 1.1 hikaru size_t qhw_crypto_opaque_offset; 718 1.1 hikaru void (*qhw_crypto_setup_req_params)(struct qat_crypto_bank *, 719 1.1 hikaru struct qat_session *, struct qat_crypto_desc const *, 720 1.1 hikaru struct qat_sym_cookie *, struct cryptodesc *, struct cryptodesc *, 721 1.1 hikaru bus_addr_t); 722 1.1 hikaru void (*qhw_crypto_setup_desc)(struct qat_crypto *, struct qat_session *, 723 1.1 hikaru struct qat_crypto_desc *, struct cryptoini *, struct cryptoini *); 724 1.1 hikaru 725 1.1 hikaru uint8_t qhw_num_banks; /* max number of banks */ 726 1.1 hikaru uint8_t qhw_num_ap_banks; /* max number of AutoPush banks */ 727 1.1 hikaru uint8_t qhw_num_rings_per_bank; /* rings per bank */ 728 1.1 hikaru uint8_t qhw_num_accel; /* max number of accelerators */ 729 1.1 hikaru uint8_t qhw_num_engines; /* max number of accelerator engines */ 730 1.1 hikaru uint8_t qhw_tx_rx_gap; 731 1.1 hikaru uint32_t qhw_tx_rings_mask; 732 1.1 hikaru uint32_t qhw_clock_per_sec; 733 1.1 hikaru bool qhw_fw_auth; 734 1.1 hikaru uint32_t qhw_fw_req_size; 735 1.1 hikaru uint32_t qhw_fw_resp_size; 736 1.1 hikaru 737 1.1 hikaru uint8_t qhw_ring_sym_tx; 738 1.1 hikaru uint8_t qhw_ring_sym_rx; 739 1.1 hikaru uint8_t qhw_ring_asym_tx; 740 1.1 hikaru uint8_t qhw_ring_asym_rx; 741 1.1 hikaru 742 1.1 hikaru /* MSIx */ 743 1.1 hikaru uint32_t qhw_msix_ae_vec_gap; /* gap to ae vec from bank */ 744 1.1 hikaru 745 1.1 hikaru const char *qhw_mof_fwname; 746 1.1 hikaru const char *qhw_mmp_fwname; 747 1.1 hikaru 748 1.1 hikaru uint32_t qhw_prod_type; /* cpu type */ 749 1.1 hikaru 750 1.1 hikaru /* setup callbacks */ 751 1.1 hikaru uint32_t (*qhw_get_accel_mask)(struct qat_softc *); 752 1.1 hikaru uint32_t (*qhw_get_ae_mask)(struct qat_softc *); 753 1.1 hikaru enum qat_sku (*qhw_get_sku)(struct qat_softc *); 754 1.1 hikaru uint32_t (*qhw_get_accel_cap)(struct qat_softc *); 755 1.1 hikaru const char *(*qhw_get_fw_uof_name)(struct qat_softc *); 756 1.1 hikaru void (*qhw_enable_intr)(struct qat_softc *); 757 1.1 hikaru void (*qhw_init_etr_intr)(struct qat_softc *, int); 758 1.1 hikaru int (*qhw_init_admin_comms)(struct qat_softc *); 759 1.1 hikaru int (*qhw_send_admin_init)(struct qat_softc *); 760 1.1 hikaru int (*qhw_init_arb)(struct qat_softc *); 761 1.1 hikaru void (*qhw_get_arb_mapping)(struct qat_softc *, const uint32_t **); 762 1.1 hikaru void (*qhw_enable_error_correction)(struct qat_softc *); 763 1.1 hikaru int (*qhw_check_uncorrectable_error)(struct qat_softc *); 764 1.1 hikaru void (*qhw_print_err_registers)(struct qat_softc *); 765 1.1 hikaru void (*qhw_disable_error_interrupts)(struct qat_softc *); 766 1.1 hikaru int (*qhw_check_slice_hang)(struct qat_softc *); 767 1.1 hikaru int (*qhw_set_ssm_wdtimer)(struct qat_softc *); 768 1.1 hikaru }; 769 1.1 hikaru 770 1.1 hikaru 771 1.1 hikaru /* sc_flags */ 772 1.1 hikaru #define QAT_FLAG_ESRAM_ENABLE_AUTO_INIT (1 << 0) 773 1.1 hikaru #define QAT_FLAG_SHRAM_WAIT_READY (1 << 1) 774 1.1 hikaru 775 1.1 hikaru /* sc_accel_cap */ 776 1.1 hikaru #define QAT_ACCEL_CAP_CRYPTO_SYMMETRIC (1 << 0) 777 1.1 hikaru #define QAT_ACCEL_CAP_CRYPTO_ASYMMETRIC (1 << 1) 778 1.1 hikaru #define QAT_ACCEL_CAP_CIPHER (1 << 2) 779 1.1 hikaru #define QAT_ACCEL_CAP_AUTHENTICATION (1 << 3) 780 1.1 hikaru #define QAT_ACCEL_CAP_REGEX (1 << 4) 781 1.1 hikaru #define QAT_ACCEL_CAP_COMPRESSION (1 << 5) 782 1.1 hikaru #define QAT_ACCEL_CAP_LZS_COMPRESSION (1 << 6) 783 1.1 hikaru #define QAT_ACCEL_CAP_RANDOM_NUMBER (1 << 7) 784 1.1 hikaru #define QAT_ACCEL_CAP_ZUC (1 << 8) 785 1.1 hikaru #define QAT_ACCEL_CAP_SHA3 (1 << 9) 786 1.1 hikaru #define QAT_ACCEL_CAP_KPT (1 << 10) 787 1.1 hikaru 788 1.1 hikaru #define QAT_ACCEL_CAP_BITS \ 789 1.1 hikaru "\177\020" \ 790 1.1 hikaru "b\x0a" "KPT\0" \ 791 1.1 hikaru "b\x09" "SHA3\0" \ 792 1.1 hikaru "b\x08" "ZUC\0" \ 793 1.1 hikaru "b\x07" "RANDOM_NUMBER\0" \ 794 1.1 hikaru "b\x06" "LZS_COMPRESSION\0" \ 795 1.1 hikaru "b\x05" "COMPRESSION\0" \ 796 1.1 hikaru "b\x04" "REGEX\0" \ 797 1.1 hikaru "b\x03" "AUTHENTICATION\0" \ 798 1.1 hikaru "b\x02" "CIPHER\0" \ 799 1.1 hikaru "b\x01" "CRYPTO_ASYMMETRIC\0" \ 800 1.1 hikaru "b\x00" "CRYPTO_SYMMETRIC\0" 801 1.1 hikaru 802 1.1 hikaru #define QAT_HI_PRIO_RING_WEIGHT 0xfc 803 1.1 hikaru #define QAT_LO_PRIO_RING_WEIGHT 0xfe 804 1.1 hikaru #define QAT_DEFAULT_RING_WEIGHT 0xff 805 1.1 hikaru #define QAT_DEFAULT_PVL 0 806 1.1 hikaru 807 1.1 hikaru struct qat_softc { 808 1.1 hikaru struct device *sc_dev; 809 1.1 hikaru 810 1.1 hikaru pci_chipset_tag_t sc_pc; 811 1.1 hikaru pcitag_t sc_pcitag; 812 1.1 hikaru 813 1.1 hikaru bus_space_tag_t sc_csrt[MAX_BARS]; 814 1.1 hikaru bus_space_handle_t sc_csrh[MAX_BARS]; 815 1.1 hikaru bus_size_t sc_csrs[MAX_BARS]; 816 1.1 hikaru 817 1.1 hikaru bus_dma_tag_t sc_dmat; 818 1.1 hikaru 819 1.1 hikaru uint32_t sc_ae_num; 820 1.1 hikaru uint32_t sc_ae_mask; 821 1.1 hikaru 822 1.1 hikaru struct qat_crypto sc_crypto; /* crypto services */ 823 1.1 hikaru 824 1.1 hikaru struct qat_hw sc_hw; 825 1.1 hikaru 826 1.1 hikaru uint8_t sc_rev; 827 1.1 hikaru enum qat_sku sc_sku; 828 1.1 hikaru uint32_t sc_flags; 829 1.1 hikaru 830 1.1 hikaru uint32_t sc_accel_num; 831 1.1 hikaru uint32_t sc_accel_mask; 832 1.1 hikaru uint32_t sc_accel_cap; 833 1.1 hikaru 834 1.1 hikaru struct qat_admin_rings sc_admin_rings; /* use only for qat 1.5 */ 835 1.1 hikaru struct qat_admin_comms sc_admin_comms; /* use only for qat 1.7 */ 836 1.1 hikaru 837 1.1 hikaru /* ETR */ 838 1.1 hikaru struct qat_bank *sc_etr_banks; /* array of etr banks */ 839 1.1 hikaru struct qat_ap_bank *sc_etr_ap_banks; /* array of etr auto push banks */ 840 1.1 hikaru 841 1.1 hikaru /* AE */ 842 1.1 hikaru struct qat_ae sc_ae[MAX_NUM_AE]; 843 1.1 hikaru 844 1.1 hikaru /* Interrupt */ 845 1.1 hikaru pci_intr_handle_t *sc_ih; /* banks and ae cluster ih */ 846 1.1 hikaru void *sc_ae_ih_cookie; /* ae cluster ih cookie */ 847 1.1 hikaru 848 1.1 hikaru /* Firmware */ 849 1.1 hikaru void *sc_fw_mof; /* mof via firmload(9) */ 850 1.1 hikaru size_t sc_fw_mof_size; /* mof size */ 851 1.1 hikaru struct qat_mof sc_mof; /* mof sections */ 852 1.1 hikaru 853 1.1 hikaru const char *sc_fw_uof_name; /* uof/suof name in mof */ 854 1.1 hikaru 855 1.1 hikaru void *sc_fw_uof; /* uof head */ 856 1.1 hikaru size_t sc_fw_uof_size; /* uof size */ 857 1.1 hikaru struct qat_aefw_uof sc_aefw_uof; /* UOF_OBJS in uof */ 858 1.1 hikaru 859 1.1 hikaru void *sc_fw_suof; /* suof head */ 860 1.1 hikaru size_t sc_fw_suof_size; /* suof size */ 861 1.1 hikaru struct qat_aefw_suof sc_aefw_suof; /* suof context */ 862 1.1 hikaru 863 1.1 hikaru void *sc_fw_mmp; /* mmp via firmload(9) */ 864 1.1 hikaru size_t sc_fw_mmp_size; /* mmp size */ 865 1.1 hikaru }; 866 1.1 hikaru 867 1.1 hikaru #define QAT_DUMP_DESC __BIT(0) 868 1.1 hikaru #define QAT_DUMP_RING __BIT(1) 869 1.1 hikaru #define QAT_DUMP_RING_MSG __BIT(2) 870 1.1 hikaru #define QAT_DUMP_PCI __BIT(3) 871 1.1 hikaru #define QAT_DUMP_AEFW __BIT(4) 872 1.1 hikaru 873 1.1 hikaru //#define QAT_DUMP (__BITS(0, 4)) 874 1.1 hikaru 875 1.1 hikaru #ifdef QAT_DUMP 876 1.1 hikaru 877 1.1 hikaru #include <sys/endian.h> 878 1.1 hikaru 879 1.1 hikaru #ifdef DDB 880 1.1 hikaru #include <machine/db_machdep.h> 881 1.1 hikaru #include <ddb/db_sym.h> 882 1.1 hikaru #endif 883 1.1 hikaru 884 1.1 hikaru /* 885 1.1 hikaru * To avoid spinout detection in mutex_enter, 886 1.1 hikaru * yield cpu to other threads if QAT_DUMP is defined. 887 1.1 hikaru * 888 1.1 hikaru * Since printf of QAT_DUMP_PCI takes a lot of cpu time, 889 1.1 hikaru * and the configroot threads, which is running for qat_init(), 890 1.1 hikaru * takes kernel_lock and the uvm_scheduler is not working at that point. 891 1.1 hikaru */ 892 1.2 ad #define QAT_YIELD() preempt_point() 893 1.1 hikaru 894 1.1 hikaru extern int qat_dump; 895 1.1 hikaru 896 1.1 hikaru void qat_dump_raw(int, const char *, void *, size_t); 897 1.1 hikaru void qat_dump_ring(int, int); 898 1.1 hikaru void qat_dump_mbuf(struct mbuf *, int, int); 899 1.1 hikaru 900 1.1 hikaru static inline void 901 1.1 hikaru qat_print_sym(uintptr_t pc) 902 1.1 hikaru { 903 1.1 hikaru #ifdef DDB 904 1.1 hikaru const char *name; 905 1.1 hikaru db_expr_t offset; 906 1.1 hikaru 907 1.1 hikaru db_find_sym_and_offset((db_expr_t)pc, &name, &offset); 908 1.1 hikaru 909 1.1 hikaru if (name != NULL) { 910 1.1 hikaru printf("%zx (%s+%zx)", (size_t)pc, name, (size_t)offset); 911 1.1 hikaru return; 912 1.1 hikaru } 913 1.1 hikaru #endif 914 1.1 hikaru printf("%zx", (size_t)pc); 915 1.1 hikaru } 916 1.1 hikaru 917 1.1 hikaru static inline void 918 1.1 hikaru qat_dump_bar_write_4(struct qat_softc *sc, int baroff, bus_size_t offset, 919 1.1 hikaru int value) 920 1.1 hikaru { 921 1.1 hikaru pc: 922 1.1 hikaru if ((qat_dump & QAT_DUMP_PCI) == 0) 923 1.1 hikaru return; 924 1.1 hikaru printf("[qat_pci]: w %02x+%04zx %08x ", baroff, (size_t)offset, value); 925 1.1 hikaru qat_print_sym((uintptr_t)&&pc); 926 1.1 hikaru printf("\n"); 927 1.1 hikaru } 928 1.1 hikaru 929 1.1 hikaru #else /* QAT_DUMP */ 930 1.1 hikaru #define QAT_YIELD() 931 1.1 hikaru #endif /* QAT_DUMP */ 932 1.1 hikaru 933 1.1 hikaru static inline void 934 1.1 hikaru qat_bar_write_4(struct qat_softc *sc, int baroff, bus_size_t offset, 935 1.1 hikaru uint32_t value) 936 1.1 hikaru { 937 1.1 hikaru 938 1.1 hikaru KASSERT(baroff >= 0 && baroff < MAX_BARS); 939 1.1 hikaru 940 1.1 hikaru bus_space_write_4(sc->sc_csrt[baroff], 941 1.1 hikaru sc->sc_csrh[baroff], offset, value); 942 1.1 hikaru #ifdef QAT_DUMP 943 1.1 hikaru qat_dump_bar_write_4(sc, baroff, offset, value); 944 1.1 hikaru #endif 945 1.1 hikaru } 946 1.1 hikaru 947 1.1 hikaru static inline uint32_t 948 1.1 hikaru qat_bar_read_4(struct qat_softc *sc, int baroff, bus_size_t offset) 949 1.1 hikaru { 950 1.1 hikaru 951 1.1 hikaru KASSERT(baroff >= 0 && baroff < MAX_BARS); 952 1.1 hikaru 953 1.1 hikaru return bus_space_read_4(sc->sc_csrt[baroff], 954 1.1 hikaru sc->sc_csrh[baroff], offset); 955 1.1 hikaru } 956 1.1 hikaru 957 1.1 hikaru static inline void 958 1.1 hikaru qat_misc_write_4(struct qat_softc *sc, bus_size_t offset, uint32_t value) 959 1.1 hikaru { 960 1.1 hikaru 961 1.1 hikaru qat_bar_write_4(sc, sc->sc_hw.qhw_misc_bar_id, offset, value); 962 1.1 hikaru } 963 1.1 hikaru 964 1.1 hikaru static inline uint32_t 965 1.1 hikaru qat_misc_read_4(struct qat_softc *sc, bus_size_t offset) 966 1.1 hikaru { 967 1.1 hikaru 968 1.1 hikaru return qat_bar_read_4(sc, sc->sc_hw.qhw_misc_bar_id, offset); 969 1.1 hikaru } 970 1.1 hikaru 971 1.1 hikaru static inline void 972 1.1 hikaru qat_misc_read_write_or_4(struct qat_softc *sc, bus_size_t offset, 973 1.1 hikaru uint32_t value) 974 1.1 hikaru { 975 1.1 hikaru uint32_t reg; 976 1.1 hikaru 977 1.1 hikaru reg = qat_misc_read_4(sc, offset); 978 1.1 hikaru reg |= value; 979 1.1 hikaru qat_misc_write_4(sc, offset, reg); 980 1.1 hikaru } 981 1.1 hikaru 982 1.1 hikaru static inline void 983 1.1 hikaru qat_misc_read_write_and_4(struct qat_softc *sc, bus_size_t offset, 984 1.1 hikaru uint32_t mask) 985 1.1 hikaru { 986 1.1 hikaru uint32_t reg; 987 1.1 hikaru 988 1.1 hikaru reg = qat_misc_read_4(sc, offset); 989 1.1 hikaru reg &= mask; 990 1.1 hikaru qat_misc_write_4(sc, offset, reg); 991 1.1 hikaru } 992 1.1 hikaru 993 1.1 hikaru static inline void 994 1.1 hikaru qat_etr_write_4(struct qat_softc *sc, bus_size_t offset, uint32_t value) 995 1.1 hikaru { 996 1.1 hikaru 997 1.1 hikaru qat_bar_write_4(sc, sc->sc_hw.qhw_etr_bar_id, offset, value); 998 1.1 hikaru } 999 1.1 hikaru 1000 1.1 hikaru static inline uint32_t 1001 1.1 hikaru qat_etr_read_4(struct qat_softc *sc, bus_size_t offset) 1002 1.1 hikaru { 1003 1.1 hikaru 1004 1.1 hikaru return qat_bar_read_4(sc, sc->sc_hw.qhw_etr_bar_id, offset); 1005 1.1 hikaru } 1006 1.1 hikaru 1007 1.1 hikaru static inline void 1008 1.1 hikaru qat_ae_local_write_4(struct qat_softc *sc, u_char ae, bus_size_t offset, 1009 1.1 hikaru uint32_t value) 1010 1.1 hikaru { 1011 1.1 hikaru 1012 1.1 hikaru offset = __SHIFTIN(ae & sc->sc_ae_mask, AE_LOCAL_AE_MASK) | 1013 1.1 hikaru (offset & AE_LOCAL_CSR_MASK); 1014 1.1 hikaru 1015 1.1 hikaru qat_misc_write_4(sc, sc->sc_hw.qhw_ae_local_offset + offset, 1016 1.1 hikaru value); 1017 1.1 hikaru } 1018 1.1 hikaru 1019 1.1 hikaru static inline uint32_t 1020 1.1 hikaru qat_ae_local_read_4(struct qat_softc *sc, u_char ae, bus_size_t offset) 1021 1.1 hikaru { 1022 1.1 hikaru 1023 1.1 hikaru offset = __SHIFTIN(ae & sc->sc_ae_mask, AE_LOCAL_AE_MASK) | 1024 1.1 hikaru (offset & AE_LOCAL_CSR_MASK); 1025 1.1 hikaru 1026 1.1 hikaru return qat_misc_read_4(sc, sc->sc_hw.qhw_ae_local_offset + offset); 1027 1.1 hikaru } 1028 1.1 hikaru 1029 1.1 hikaru static inline void 1030 1.1 hikaru qat_ae_xfer_write_4(struct qat_softc *sc, u_char ae, bus_size_t offset, 1031 1.1 hikaru uint32_t value) 1032 1.1 hikaru { 1033 1.1 hikaru offset = __SHIFTIN(ae & sc->sc_ae_mask, AE_XFER_AE_MASK) | 1034 1.1 hikaru __SHIFTIN(offset, AE_XFER_CSR_MASK); 1035 1.1 hikaru 1036 1.1 hikaru qat_misc_write_4(sc, sc->sc_hw.qhw_ae_offset + offset, value); 1037 1.1 hikaru } 1038 1.1 hikaru 1039 1.1 hikaru static inline void 1040 1.1 hikaru qat_cap_global_write_4(struct qat_softc *sc, bus_size_t offset, uint32_t value) 1041 1.1 hikaru { 1042 1.1 hikaru 1043 1.1 hikaru qat_misc_write_4(sc, sc->sc_hw.qhw_cap_global_offset + offset, value); 1044 1.1 hikaru } 1045 1.1 hikaru 1046 1.1 hikaru static inline uint32_t 1047 1.1 hikaru qat_cap_global_read_4(struct qat_softc *sc, bus_size_t offset) 1048 1.1 hikaru { 1049 1.1 hikaru 1050 1.1 hikaru return qat_misc_read_4(sc, sc->sc_hw.qhw_cap_global_offset + offset); 1051 1.1 hikaru } 1052 1.1 hikaru 1053 1.1 hikaru 1054 1.1 hikaru static inline void 1055 1.1 hikaru qat_etr_bank_write_4(struct qat_softc *sc, int bank, 1056 1.1 hikaru bus_size_t offset, uint32_t value) 1057 1.1 hikaru { 1058 1.1 hikaru 1059 1.1 hikaru qat_etr_write_4(sc, sc->sc_hw.qhw_etr_bundle_size * bank + offset, 1060 1.1 hikaru value); 1061 1.1 hikaru } 1062 1.1 hikaru 1063 1.1 hikaru static inline uint32_t 1064 1.1 hikaru qat_etr_bank_read_4(struct qat_softc *sc, int bank, 1065 1.1 hikaru bus_size_t offset) 1066 1.1 hikaru { 1067 1.1 hikaru 1068 1.1 hikaru return qat_etr_read_4(sc, 1069 1.1 hikaru sc->sc_hw.qhw_etr_bundle_size * bank + offset); 1070 1.1 hikaru } 1071 1.1 hikaru 1072 1.1 hikaru static inline void 1073 1.1 hikaru qat_etr_ap_bank_write_4(struct qat_softc *sc, int ap_bank, 1074 1.1 hikaru bus_size_t offset, uint32_t value) 1075 1.1 hikaru { 1076 1.1 hikaru 1077 1.1 hikaru qat_etr_write_4(sc, ETR_AP_BANK_OFFSET * ap_bank + offset, value); 1078 1.1 hikaru } 1079 1.1 hikaru 1080 1.1 hikaru static inline uint32_t 1081 1.1 hikaru qat_etr_ap_bank_read_4(struct qat_softc *sc, int ap_bank, 1082 1.1 hikaru bus_size_t offset) 1083 1.1 hikaru { 1084 1.1 hikaru 1085 1.1 hikaru return qat_etr_read_4(sc, ETR_AP_BANK_OFFSET * ap_bank + offset); 1086 1.1 hikaru } 1087 1.1 hikaru 1088 1.1 hikaru 1089 1.1 hikaru static inline void 1090 1.1 hikaru qat_etr_bank_ring_write_4(struct qat_softc *sc, int bank, int ring, 1091 1.1 hikaru bus_size_t offset, uint32_t value) 1092 1.1 hikaru { 1093 1.1 hikaru 1094 1.1 hikaru qat_etr_bank_write_4(sc, bank, (ring << 2) + offset, value); 1095 1.1 hikaru } 1096 1.1 hikaru 1097 1.1 hikaru static inline uint32_t 1098 1.1 hikaru qat_etr_bank_ring_read_4(struct qat_softc *sc, int bank, int ring, 1099 1.1 hikaru bus_size_t offset) 1100 1.1 hikaru { 1101 1.1 hikaru 1102 1.1 hikaru return qat_etr_bank_read_4(sc, bank, (ring << 2) * offset); 1103 1.1 hikaru } 1104 1.1 hikaru 1105 1.1 hikaru static inline void 1106 1.1 hikaru qat_etr_bank_ring_base_write_8(struct qat_softc *sc, int bank, int ring, 1107 1.1 hikaru uint64_t value) 1108 1.1 hikaru { 1109 1.1 hikaru uint32_t lo, hi; 1110 1.1 hikaru 1111 1.1 hikaru lo = (uint32_t)(value & 0xffffffff); 1112 1.1 hikaru hi = (uint32_t)((value & 0xffffffff00000000ULL) >> 32); 1113 1.1 hikaru qat_etr_bank_ring_write_4(sc, bank, ring, ETR_RING_LBASE, lo); 1114 1.1 hikaru qat_etr_bank_ring_write_4(sc, bank, ring, ETR_RING_UBASE, hi); 1115 1.1 hikaru } 1116 1.1 hikaru 1117 1.1 hikaru static inline void 1118 1.1 hikaru qat_arb_ringsrvarben_write_4(struct qat_softc *sc, int index, uint32_t value) 1119 1.1 hikaru { 1120 1.1 hikaru 1121 1.1 hikaru qat_etr_write_4(sc, ARB_RINGSRVARBEN_OFFSET + 1122 1.1 hikaru (ARB_REG_SLOT * index), value); 1123 1.1 hikaru } 1124 1.1 hikaru 1125 1.1 hikaru static inline void 1126 1.1 hikaru qat_arb_sarconfig_write_4(struct qat_softc *sc, int index, uint32_t value) 1127 1.1 hikaru { 1128 1.1 hikaru 1129 1.1 hikaru qat_etr_write_4(sc, ARB_OFFSET + 1130 1.1 hikaru (ARB_REG_SIZE * index), value); 1131 1.1 hikaru } 1132 1.1 hikaru 1133 1.1 hikaru static inline void 1134 1.1 hikaru qat_arb_wrk_2_ser_map_write_4(struct qat_softc *sc, int index, uint32_t value) 1135 1.1 hikaru { 1136 1.1 hikaru 1137 1.1 hikaru qat_etr_write_4(sc, ARB_OFFSET + ARB_WRK_2_SER_MAP_OFFSET + 1138 1.1 hikaru (ARB_REG_SIZE * index), value); 1139 1.1 hikaru } 1140 1.1 hikaru 1141 1.1 hikaru void * qat_alloc_mem(size_t); 1142 1.1 hikaru void qat_free_mem(void *); 1143 1.1 hikaru void qat_free_dmamem(struct qat_softc *, struct qat_dmamem *); 1144 1.1 hikaru int qat_alloc_dmamem(struct qat_softc *, struct qat_dmamem *, 1145 1.1 hikaru bus_size_t, bus_size_t); 1146 1.1 hikaru 1147 1.1 hikaru int qat_etr_setup_ring(struct qat_softc *, int, uint32_t, uint32_t, 1148 1.1 hikaru uint32_t, qat_cb_t, void *, const char *, 1149 1.1 hikaru struct qat_ring **); 1150 1.1 hikaru int qat_etr_put_msg(struct qat_softc *, struct qat_ring *, 1151 1.1 hikaru uint32_t *); 1152 1.1 hikaru 1153 1.1 hikaru void qat_memcpy_htobe64(void *, const void *, size_t); 1154 1.1 hikaru void qat_memcpy_htobe32(void *, const void *, size_t); 1155 1.1 hikaru void qat_memcpy_htobe(void *, const void *, size_t, uint32_t); 1156 1.1 hikaru void qat_crypto_hmac_precompute(struct qat_crypto_desc *, 1157 1.1 hikaru struct cryptoini *cria, struct qat_sym_hash_def const *, 1158 1.1 hikaru uint8_t *, uint8_t *); 1159 1.1 hikaru uint16_t qat_crypto_load_cipher_cryptoini( 1160 1.1 hikaru struct qat_crypto_desc *, struct cryptoini *); 1161 1.1 hikaru uint16_t qat_crypto_load_auth_cryptoini( 1162 1.1 hikaru struct qat_crypto_desc *, struct cryptoini *, 1163 1.1 hikaru struct qat_sym_hash_def const **); 1164 1.1 hikaru 1165 1.1 hikaru #endif 1166