162306a36Sopenharmony_ci/* SPDX-License-Identifier: LGPL-2.1 WITH Linux-syscall-note */ 262306a36Sopenharmony_ci/* Copyright(c) 2019 Intel Corporation. All rights rsvd. */ 362306a36Sopenharmony_ci#ifndef _USR_IDXD_H_ 462306a36Sopenharmony_ci#define _USR_IDXD_H_ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifdef __KERNEL__ 762306a36Sopenharmony_ci#include <linux/types.h> 862306a36Sopenharmony_ci#else 962306a36Sopenharmony_ci#include <stdint.h> 1062306a36Sopenharmony_ci#endif 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* Driver command error status */ 1362306a36Sopenharmony_cienum idxd_scmd_stat { 1462306a36Sopenharmony_ci IDXD_SCMD_DEV_ENABLED = 0x80000010, 1562306a36Sopenharmony_ci IDXD_SCMD_DEV_NOT_ENABLED = 0x80000020, 1662306a36Sopenharmony_ci IDXD_SCMD_WQ_ENABLED = 0x80000021, 1762306a36Sopenharmony_ci IDXD_SCMD_DEV_DMA_ERR = 0x80020000, 1862306a36Sopenharmony_ci IDXD_SCMD_WQ_NO_GRP = 0x80030000, 1962306a36Sopenharmony_ci IDXD_SCMD_WQ_NO_NAME = 0x80040000, 2062306a36Sopenharmony_ci IDXD_SCMD_WQ_NO_SVM = 0x80050000, 2162306a36Sopenharmony_ci IDXD_SCMD_WQ_NO_THRESH = 0x80060000, 2262306a36Sopenharmony_ci IDXD_SCMD_WQ_PORTAL_ERR = 0x80070000, 2362306a36Sopenharmony_ci IDXD_SCMD_WQ_RES_ALLOC_ERR = 0x80080000, 2462306a36Sopenharmony_ci IDXD_SCMD_PERCPU_ERR = 0x80090000, 2562306a36Sopenharmony_ci IDXD_SCMD_DMA_CHAN_ERR = 0x800a0000, 2662306a36Sopenharmony_ci IDXD_SCMD_CDEV_ERR = 0x800b0000, 2762306a36Sopenharmony_ci IDXD_SCMD_WQ_NO_SWQ_SUPPORT = 0x800c0000, 2862306a36Sopenharmony_ci IDXD_SCMD_WQ_NONE_CONFIGURED = 0x800d0000, 2962306a36Sopenharmony_ci IDXD_SCMD_WQ_NO_SIZE = 0x800e0000, 3062306a36Sopenharmony_ci IDXD_SCMD_WQ_NO_PRIV = 0x800f0000, 3162306a36Sopenharmony_ci IDXD_SCMD_WQ_IRQ_ERR = 0x80100000, 3262306a36Sopenharmony_ci IDXD_SCMD_WQ_USER_NO_IOMMU = 0x80110000, 3362306a36Sopenharmony_ci IDXD_SCMD_DEV_EVL_ERR = 0x80120000, 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#define IDXD_SCMD_SOFTERR_MASK 0x80000000 3762306a36Sopenharmony_ci#define IDXD_SCMD_SOFTERR_SHIFT 16 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci/* Descriptor flags */ 4062306a36Sopenharmony_ci#define IDXD_OP_FLAG_FENCE 0x0001 4162306a36Sopenharmony_ci#define IDXD_OP_FLAG_BOF 0x0002 4262306a36Sopenharmony_ci#define IDXD_OP_FLAG_CRAV 0x0004 4362306a36Sopenharmony_ci#define IDXD_OP_FLAG_RCR 0x0008 4462306a36Sopenharmony_ci#define IDXD_OP_FLAG_RCI 0x0010 4562306a36Sopenharmony_ci#define IDXD_OP_FLAG_CRSTS 0x0020 4662306a36Sopenharmony_ci#define IDXD_OP_FLAG_CR 0x0080 4762306a36Sopenharmony_ci#define IDXD_OP_FLAG_CC 0x0100 4862306a36Sopenharmony_ci#define IDXD_OP_FLAG_ADDR1_TCS 0x0200 4962306a36Sopenharmony_ci#define IDXD_OP_FLAG_ADDR2_TCS 0x0400 5062306a36Sopenharmony_ci#define IDXD_OP_FLAG_ADDR3_TCS 0x0800 5162306a36Sopenharmony_ci#define IDXD_OP_FLAG_CR_TCS 0x1000 5262306a36Sopenharmony_ci#define IDXD_OP_FLAG_STORD 0x2000 5362306a36Sopenharmony_ci#define IDXD_OP_FLAG_DRDBK 0x4000 5462306a36Sopenharmony_ci#define IDXD_OP_FLAG_DSTS 0x8000 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci/* IAX */ 5762306a36Sopenharmony_ci#define IDXD_OP_FLAG_RD_SRC2_AECS 0x010000 5862306a36Sopenharmony_ci#define IDXD_OP_FLAG_RD_SRC2_2ND 0x020000 5962306a36Sopenharmony_ci#define IDXD_OP_FLAG_WR_SRC2_AECS_COMP 0x040000 6062306a36Sopenharmony_ci#define IDXD_OP_FLAG_WR_SRC2_AECS_OVFL 0x080000 6162306a36Sopenharmony_ci#define IDXD_OP_FLAG_SRC2_STS 0x100000 6262306a36Sopenharmony_ci#define IDXD_OP_FLAG_CRC_RFC3720 0x200000 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci/* Opcode */ 6562306a36Sopenharmony_cienum dsa_opcode { 6662306a36Sopenharmony_ci DSA_OPCODE_NOOP = 0, 6762306a36Sopenharmony_ci DSA_OPCODE_BATCH, 6862306a36Sopenharmony_ci DSA_OPCODE_DRAIN, 6962306a36Sopenharmony_ci DSA_OPCODE_MEMMOVE, 7062306a36Sopenharmony_ci DSA_OPCODE_MEMFILL, 7162306a36Sopenharmony_ci DSA_OPCODE_COMPARE, 7262306a36Sopenharmony_ci DSA_OPCODE_COMPVAL, 7362306a36Sopenharmony_ci DSA_OPCODE_CR_DELTA, 7462306a36Sopenharmony_ci DSA_OPCODE_AP_DELTA, 7562306a36Sopenharmony_ci DSA_OPCODE_DUALCAST, 7662306a36Sopenharmony_ci DSA_OPCODE_TRANSL_FETCH, 7762306a36Sopenharmony_ci DSA_OPCODE_CRCGEN = 0x10, 7862306a36Sopenharmony_ci DSA_OPCODE_COPY_CRC, 7962306a36Sopenharmony_ci DSA_OPCODE_DIF_CHECK, 8062306a36Sopenharmony_ci DSA_OPCODE_DIF_INS, 8162306a36Sopenharmony_ci DSA_OPCODE_DIF_STRP, 8262306a36Sopenharmony_ci DSA_OPCODE_DIF_UPDT, 8362306a36Sopenharmony_ci DSA_OPCODE_DIX_GEN = 0x17, 8462306a36Sopenharmony_ci DSA_OPCODE_CFLUSH = 0x20, 8562306a36Sopenharmony_ci}; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_cienum iax_opcode { 8862306a36Sopenharmony_ci IAX_OPCODE_NOOP = 0, 8962306a36Sopenharmony_ci IAX_OPCODE_DRAIN = 2, 9062306a36Sopenharmony_ci IAX_OPCODE_MEMMOVE, 9162306a36Sopenharmony_ci IAX_OPCODE_DECOMPRESS = 0x42, 9262306a36Sopenharmony_ci IAX_OPCODE_COMPRESS, 9362306a36Sopenharmony_ci IAX_OPCODE_CRC64, 9462306a36Sopenharmony_ci IAX_OPCODE_ZERO_DECOMP_32 = 0x48, 9562306a36Sopenharmony_ci IAX_OPCODE_ZERO_DECOMP_16, 9662306a36Sopenharmony_ci IAX_OPCODE_ZERO_COMP_32 = 0x4c, 9762306a36Sopenharmony_ci IAX_OPCODE_ZERO_COMP_16, 9862306a36Sopenharmony_ci IAX_OPCODE_SCAN = 0x50, 9962306a36Sopenharmony_ci IAX_OPCODE_SET_MEMBER, 10062306a36Sopenharmony_ci IAX_OPCODE_EXTRACT, 10162306a36Sopenharmony_ci IAX_OPCODE_SELECT, 10262306a36Sopenharmony_ci IAX_OPCODE_RLE_BURST, 10362306a36Sopenharmony_ci IAX_OPCODE_FIND_UNIQUE, 10462306a36Sopenharmony_ci IAX_OPCODE_EXPAND, 10562306a36Sopenharmony_ci}; 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci/* Completion record status */ 10862306a36Sopenharmony_cienum dsa_completion_status { 10962306a36Sopenharmony_ci DSA_COMP_NONE = 0, 11062306a36Sopenharmony_ci DSA_COMP_SUCCESS, 11162306a36Sopenharmony_ci DSA_COMP_SUCCESS_PRED, 11262306a36Sopenharmony_ci DSA_COMP_PAGE_FAULT_NOBOF, 11362306a36Sopenharmony_ci DSA_COMP_PAGE_FAULT_IR, 11462306a36Sopenharmony_ci DSA_COMP_BATCH_FAIL, 11562306a36Sopenharmony_ci DSA_COMP_BATCH_PAGE_FAULT, 11662306a36Sopenharmony_ci DSA_COMP_DR_OFFSET_NOINC, 11762306a36Sopenharmony_ci DSA_COMP_DR_OFFSET_ERANGE, 11862306a36Sopenharmony_ci DSA_COMP_DIF_ERR, 11962306a36Sopenharmony_ci DSA_COMP_BAD_OPCODE = 0x10, 12062306a36Sopenharmony_ci DSA_COMP_INVALID_FLAGS, 12162306a36Sopenharmony_ci DSA_COMP_NOZERO_RESERVE, 12262306a36Sopenharmony_ci DSA_COMP_XFER_ERANGE, 12362306a36Sopenharmony_ci DSA_COMP_DESC_CNT_ERANGE, 12462306a36Sopenharmony_ci DSA_COMP_DR_ERANGE, 12562306a36Sopenharmony_ci DSA_COMP_OVERLAP_BUFFERS, 12662306a36Sopenharmony_ci DSA_COMP_DCAST_ERR, 12762306a36Sopenharmony_ci DSA_COMP_DESCLIST_ALIGN, 12862306a36Sopenharmony_ci DSA_COMP_INT_HANDLE_INVAL, 12962306a36Sopenharmony_ci DSA_COMP_CRA_XLAT, 13062306a36Sopenharmony_ci DSA_COMP_CRA_ALIGN, 13162306a36Sopenharmony_ci DSA_COMP_ADDR_ALIGN, 13262306a36Sopenharmony_ci DSA_COMP_PRIV_BAD, 13362306a36Sopenharmony_ci DSA_COMP_TRAFFIC_CLASS_CONF, 13462306a36Sopenharmony_ci DSA_COMP_PFAULT_RDBA, 13562306a36Sopenharmony_ci DSA_COMP_HW_ERR1, 13662306a36Sopenharmony_ci DSA_COMP_HW_ERR_DRB, 13762306a36Sopenharmony_ci DSA_COMP_TRANSLATION_FAIL, 13862306a36Sopenharmony_ci DSA_COMP_DRAIN_EVL = 0x26, 13962306a36Sopenharmony_ci DSA_COMP_BATCH_EVL_ERR, 14062306a36Sopenharmony_ci}; 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_cienum iax_completion_status { 14362306a36Sopenharmony_ci IAX_COMP_NONE = 0, 14462306a36Sopenharmony_ci IAX_COMP_SUCCESS, 14562306a36Sopenharmony_ci IAX_COMP_PAGE_FAULT_IR = 0x04, 14662306a36Sopenharmony_ci IAX_COMP_ANALYTICS_ERROR = 0x0a, 14762306a36Sopenharmony_ci IAX_COMP_OUTBUF_OVERFLOW, 14862306a36Sopenharmony_ci IAX_COMP_BAD_OPCODE = 0x10, 14962306a36Sopenharmony_ci IAX_COMP_INVALID_FLAGS, 15062306a36Sopenharmony_ci IAX_COMP_NOZERO_RESERVE, 15162306a36Sopenharmony_ci IAX_COMP_INVALID_SIZE, 15262306a36Sopenharmony_ci IAX_COMP_OVERLAP_BUFFERS = 0x16, 15362306a36Sopenharmony_ci IAX_COMP_INT_HANDLE_INVAL = 0x19, 15462306a36Sopenharmony_ci IAX_COMP_CRA_XLAT, 15562306a36Sopenharmony_ci IAX_COMP_CRA_ALIGN, 15662306a36Sopenharmony_ci IAX_COMP_ADDR_ALIGN, 15762306a36Sopenharmony_ci IAX_COMP_PRIV_BAD, 15862306a36Sopenharmony_ci IAX_COMP_TRAFFIC_CLASS_CONF, 15962306a36Sopenharmony_ci IAX_COMP_PFAULT_RDBA, 16062306a36Sopenharmony_ci IAX_COMP_HW_ERR1, 16162306a36Sopenharmony_ci IAX_COMP_HW_ERR_DRB, 16262306a36Sopenharmony_ci IAX_COMP_TRANSLATION_FAIL, 16362306a36Sopenharmony_ci IAX_COMP_PRS_TIMEOUT, 16462306a36Sopenharmony_ci IAX_COMP_WATCHDOG, 16562306a36Sopenharmony_ci IAX_COMP_INVALID_COMP_FLAG = 0x30, 16662306a36Sopenharmony_ci IAX_COMP_INVALID_FILTER_FLAG, 16762306a36Sopenharmony_ci IAX_COMP_INVALID_INPUT_SIZE, 16862306a36Sopenharmony_ci IAX_COMP_INVALID_NUM_ELEMS, 16962306a36Sopenharmony_ci IAX_COMP_INVALID_SRC1_WIDTH, 17062306a36Sopenharmony_ci IAX_COMP_INVALID_INVERT_OUT, 17162306a36Sopenharmony_ci}; 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci#define DSA_COMP_STATUS_MASK 0x7f 17462306a36Sopenharmony_ci#define DSA_COMP_STATUS_WRITE 0x80 17562306a36Sopenharmony_ci#define DSA_COMP_STATUS(status) ((status) & DSA_COMP_STATUS_MASK) 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_cistruct dsa_hw_desc { 17862306a36Sopenharmony_ci uint32_t pasid:20; 17962306a36Sopenharmony_ci uint32_t rsvd:11; 18062306a36Sopenharmony_ci uint32_t priv:1; 18162306a36Sopenharmony_ci uint32_t flags:24; 18262306a36Sopenharmony_ci uint32_t opcode:8; 18362306a36Sopenharmony_ci uint64_t completion_addr; 18462306a36Sopenharmony_ci union { 18562306a36Sopenharmony_ci uint64_t src_addr; 18662306a36Sopenharmony_ci uint64_t rdback_addr; 18762306a36Sopenharmony_ci uint64_t pattern; 18862306a36Sopenharmony_ci uint64_t desc_list_addr; 18962306a36Sopenharmony_ci uint64_t pattern_lower; 19062306a36Sopenharmony_ci uint64_t transl_fetch_addr; 19162306a36Sopenharmony_ci }; 19262306a36Sopenharmony_ci union { 19362306a36Sopenharmony_ci uint64_t dst_addr; 19462306a36Sopenharmony_ci uint64_t rdback_addr2; 19562306a36Sopenharmony_ci uint64_t src2_addr; 19662306a36Sopenharmony_ci uint64_t comp_pattern; 19762306a36Sopenharmony_ci }; 19862306a36Sopenharmony_ci union { 19962306a36Sopenharmony_ci uint32_t xfer_size; 20062306a36Sopenharmony_ci uint32_t desc_count; 20162306a36Sopenharmony_ci uint32_t region_size; 20262306a36Sopenharmony_ci }; 20362306a36Sopenharmony_ci uint16_t int_handle; 20462306a36Sopenharmony_ci uint16_t rsvd1; 20562306a36Sopenharmony_ci union { 20662306a36Sopenharmony_ci uint8_t expected_res; 20762306a36Sopenharmony_ci /* create delta record */ 20862306a36Sopenharmony_ci struct { 20962306a36Sopenharmony_ci uint64_t delta_addr; 21062306a36Sopenharmony_ci uint32_t max_delta_size; 21162306a36Sopenharmony_ci uint32_t delt_rsvd; 21262306a36Sopenharmony_ci uint8_t expected_res_mask; 21362306a36Sopenharmony_ci }; 21462306a36Sopenharmony_ci uint32_t delta_rec_size; 21562306a36Sopenharmony_ci uint64_t dest2; 21662306a36Sopenharmony_ci /* CRC */ 21762306a36Sopenharmony_ci struct { 21862306a36Sopenharmony_ci uint32_t crc_seed; 21962306a36Sopenharmony_ci uint32_t crc_rsvd; 22062306a36Sopenharmony_ci uint64_t seed_addr; 22162306a36Sopenharmony_ci }; 22262306a36Sopenharmony_ci /* DIF check or strip */ 22362306a36Sopenharmony_ci struct { 22462306a36Sopenharmony_ci uint8_t src_dif_flags; 22562306a36Sopenharmony_ci uint8_t dif_chk_res; 22662306a36Sopenharmony_ci uint8_t dif_chk_flags; 22762306a36Sopenharmony_ci uint8_t dif_chk_res2[5]; 22862306a36Sopenharmony_ci uint32_t chk_ref_tag_seed; 22962306a36Sopenharmony_ci uint16_t chk_app_tag_mask; 23062306a36Sopenharmony_ci uint16_t chk_app_tag_seed; 23162306a36Sopenharmony_ci }; 23262306a36Sopenharmony_ci /* DIF insert */ 23362306a36Sopenharmony_ci struct { 23462306a36Sopenharmony_ci uint8_t dif_ins_res; 23562306a36Sopenharmony_ci uint8_t dest_dif_flag; 23662306a36Sopenharmony_ci uint8_t dif_ins_flags; 23762306a36Sopenharmony_ci uint8_t dif_ins_res2[13]; 23862306a36Sopenharmony_ci uint32_t ins_ref_tag_seed; 23962306a36Sopenharmony_ci uint16_t ins_app_tag_mask; 24062306a36Sopenharmony_ci uint16_t ins_app_tag_seed; 24162306a36Sopenharmony_ci }; 24262306a36Sopenharmony_ci /* DIF update */ 24362306a36Sopenharmony_ci struct { 24462306a36Sopenharmony_ci uint8_t src_upd_flags; 24562306a36Sopenharmony_ci uint8_t upd_dest_flags; 24662306a36Sopenharmony_ci uint8_t dif_upd_flags; 24762306a36Sopenharmony_ci uint8_t dif_upd_res[5]; 24862306a36Sopenharmony_ci uint32_t src_ref_tag_seed; 24962306a36Sopenharmony_ci uint16_t src_app_tag_mask; 25062306a36Sopenharmony_ci uint16_t src_app_tag_seed; 25162306a36Sopenharmony_ci uint32_t dest_ref_tag_seed; 25262306a36Sopenharmony_ci uint16_t dest_app_tag_mask; 25362306a36Sopenharmony_ci uint16_t dest_app_tag_seed; 25462306a36Sopenharmony_ci }; 25562306a36Sopenharmony_ci 25662306a36Sopenharmony_ci /* Fill */ 25762306a36Sopenharmony_ci uint64_t pattern_upper; 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci /* Translation fetch */ 26062306a36Sopenharmony_ci struct { 26162306a36Sopenharmony_ci uint64_t transl_fetch_res; 26262306a36Sopenharmony_ci uint32_t region_stride; 26362306a36Sopenharmony_ci }; 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ci /* DIX generate */ 26662306a36Sopenharmony_ci struct { 26762306a36Sopenharmony_ci uint8_t dix_gen_res; 26862306a36Sopenharmony_ci uint8_t dest_dif_flags; 26962306a36Sopenharmony_ci uint8_t dif_flags; 27062306a36Sopenharmony_ci uint8_t dix_gen_res2[13]; 27162306a36Sopenharmony_ci uint32_t ref_tag_seed; 27262306a36Sopenharmony_ci uint16_t app_tag_mask; 27362306a36Sopenharmony_ci uint16_t app_tag_seed; 27462306a36Sopenharmony_ci }; 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ci uint8_t op_specific[24]; 27762306a36Sopenharmony_ci }; 27862306a36Sopenharmony_ci} __attribute__((packed)); 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_cistruct iax_hw_desc { 28162306a36Sopenharmony_ci uint32_t pasid:20; 28262306a36Sopenharmony_ci uint32_t rsvd:11; 28362306a36Sopenharmony_ci uint32_t priv:1; 28462306a36Sopenharmony_ci uint32_t flags:24; 28562306a36Sopenharmony_ci uint32_t opcode:8; 28662306a36Sopenharmony_ci uint64_t completion_addr; 28762306a36Sopenharmony_ci uint64_t src1_addr; 28862306a36Sopenharmony_ci uint64_t dst_addr; 28962306a36Sopenharmony_ci uint32_t src1_size; 29062306a36Sopenharmony_ci uint16_t int_handle; 29162306a36Sopenharmony_ci union { 29262306a36Sopenharmony_ci uint16_t compr_flags; 29362306a36Sopenharmony_ci uint16_t decompr_flags; 29462306a36Sopenharmony_ci }; 29562306a36Sopenharmony_ci uint64_t src2_addr; 29662306a36Sopenharmony_ci uint32_t max_dst_size; 29762306a36Sopenharmony_ci uint32_t src2_size; 29862306a36Sopenharmony_ci uint32_t filter_flags; 29962306a36Sopenharmony_ci uint32_t num_inputs; 30062306a36Sopenharmony_ci} __attribute__((packed)); 30162306a36Sopenharmony_ci 30262306a36Sopenharmony_cistruct dsa_raw_desc { 30362306a36Sopenharmony_ci uint64_t field[8]; 30462306a36Sopenharmony_ci} __attribute__((packed)); 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci/* 30762306a36Sopenharmony_ci * The status field will be modified by hardware, therefore it should be 30862306a36Sopenharmony_ci * volatile and prevent the compiler from optimize the read. 30962306a36Sopenharmony_ci */ 31062306a36Sopenharmony_cistruct dsa_completion_record { 31162306a36Sopenharmony_ci volatile uint8_t status; 31262306a36Sopenharmony_ci union { 31362306a36Sopenharmony_ci uint8_t result; 31462306a36Sopenharmony_ci uint8_t dif_status; 31562306a36Sopenharmony_ci }; 31662306a36Sopenharmony_ci uint8_t fault_info; 31762306a36Sopenharmony_ci uint8_t rsvd; 31862306a36Sopenharmony_ci union { 31962306a36Sopenharmony_ci uint32_t bytes_completed; 32062306a36Sopenharmony_ci uint32_t descs_completed; 32162306a36Sopenharmony_ci }; 32262306a36Sopenharmony_ci uint64_t fault_addr; 32362306a36Sopenharmony_ci union { 32462306a36Sopenharmony_ci /* common record */ 32562306a36Sopenharmony_ci struct { 32662306a36Sopenharmony_ci uint32_t invalid_flags:24; 32762306a36Sopenharmony_ci uint32_t rsvd2:8; 32862306a36Sopenharmony_ci }; 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ci uint32_t delta_rec_size; 33162306a36Sopenharmony_ci uint64_t crc_val; 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ci /* DIF check & strip */ 33462306a36Sopenharmony_ci struct { 33562306a36Sopenharmony_ci uint32_t dif_chk_ref_tag; 33662306a36Sopenharmony_ci uint16_t dif_chk_app_tag_mask; 33762306a36Sopenharmony_ci uint16_t dif_chk_app_tag; 33862306a36Sopenharmony_ci }; 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_ci /* DIF insert */ 34162306a36Sopenharmony_ci struct { 34262306a36Sopenharmony_ci uint64_t dif_ins_res; 34362306a36Sopenharmony_ci uint32_t dif_ins_ref_tag; 34462306a36Sopenharmony_ci uint16_t dif_ins_app_tag_mask; 34562306a36Sopenharmony_ci uint16_t dif_ins_app_tag; 34662306a36Sopenharmony_ci }; 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ci /* DIF update */ 34962306a36Sopenharmony_ci struct { 35062306a36Sopenharmony_ci uint32_t dif_upd_src_ref_tag; 35162306a36Sopenharmony_ci uint16_t dif_upd_src_app_tag_mask; 35262306a36Sopenharmony_ci uint16_t dif_upd_src_app_tag; 35362306a36Sopenharmony_ci uint32_t dif_upd_dest_ref_tag; 35462306a36Sopenharmony_ci uint16_t dif_upd_dest_app_tag_mask; 35562306a36Sopenharmony_ci uint16_t dif_upd_dest_app_tag; 35662306a36Sopenharmony_ci }; 35762306a36Sopenharmony_ci 35862306a36Sopenharmony_ci /* DIX generate */ 35962306a36Sopenharmony_ci struct { 36062306a36Sopenharmony_ci uint64_t dix_gen_res; 36162306a36Sopenharmony_ci uint32_t dix_ref_tag; 36262306a36Sopenharmony_ci uint16_t dix_app_tag_mask; 36362306a36Sopenharmony_ci uint16_t dix_app_tag; 36462306a36Sopenharmony_ci }; 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_ci uint8_t op_specific[16]; 36762306a36Sopenharmony_ci }; 36862306a36Sopenharmony_ci} __attribute__((packed)); 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_cistruct dsa_raw_completion_record { 37162306a36Sopenharmony_ci uint64_t field[4]; 37262306a36Sopenharmony_ci} __attribute__((packed)); 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_cistruct iax_completion_record { 37562306a36Sopenharmony_ci volatile uint8_t status; 37662306a36Sopenharmony_ci uint8_t error_code; 37762306a36Sopenharmony_ci uint8_t fault_info; 37862306a36Sopenharmony_ci uint8_t rsvd; 37962306a36Sopenharmony_ci uint32_t bytes_completed; 38062306a36Sopenharmony_ci uint64_t fault_addr; 38162306a36Sopenharmony_ci uint32_t invalid_flags; 38262306a36Sopenharmony_ci uint32_t rsvd2; 38362306a36Sopenharmony_ci uint32_t output_size; 38462306a36Sopenharmony_ci uint8_t output_bits; 38562306a36Sopenharmony_ci uint8_t rsvd3; 38662306a36Sopenharmony_ci uint16_t xor_csum; 38762306a36Sopenharmony_ci uint32_t crc; 38862306a36Sopenharmony_ci uint32_t min; 38962306a36Sopenharmony_ci uint32_t max; 39062306a36Sopenharmony_ci uint32_t sum; 39162306a36Sopenharmony_ci uint64_t rsvd4[2]; 39262306a36Sopenharmony_ci} __attribute__((packed)); 39362306a36Sopenharmony_ci 39462306a36Sopenharmony_cistruct iax_raw_completion_record { 39562306a36Sopenharmony_ci uint64_t field[8]; 39662306a36Sopenharmony_ci} __attribute__((packed)); 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ci#endif 399