1c750d277SHernan Vargas /* SPDX-License-Identifier: BSD-3-Clause 2c750d277SHernan Vargas * Copyright(c) 2022 Intel Corporation 3c750d277SHernan Vargas */ 4c750d277SHernan Vargas 5c750d277SHernan Vargas #ifndef _VC_5GNR_PMD_H_ 6c750d277SHernan Vargas #define _VC_5GNR_PMD_H_ 7c750d277SHernan Vargas 8c750d277SHernan Vargas #include <stdint.h> 9c750d277SHernan Vargas #include <stdbool.h> 10c750d277SHernan Vargas 11c750d277SHernan Vargas /* VC 5GNR FPGA FEC PCI vendor & device IDs. */ 12c750d277SHernan Vargas #define VC_5GNR_VENDOR_ID (0x8086) 13c750d277SHernan Vargas #define VC_5GNR_PF_DEVICE_ID (0x0D8F) 14c750d277SHernan Vargas #define VC_5GNR_VF_DEVICE_ID (0x0D90) 15c750d277SHernan Vargas 16c750d277SHernan Vargas #define VC_5GNR_NUM_UL_QUEUES (32) 17c750d277SHernan Vargas #define VC_5GNR_NUM_DL_QUEUES (32) 18c750d277SHernan Vargas #define VC_5GNR_TOTAL_NUM_QUEUES (VC_5GNR_NUM_UL_QUEUES + VC_5GNR_NUM_DL_QUEUES) 19c750d277SHernan Vargas 20c750d277SHernan Vargas /* VC 5GNR Ring size is in 256 bits (32 bytes) units. */ 21c750d277SHernan Vargas #define VC_5GNR_RING_DESC_LEN_UNIT_BYTES (32) 22c750d277SHernan Vargas 23c750d277SHernan Vargas /* Align DMA descriptors to 256 bytes - cache-aligned. */ 24c750d277SHernan Vargas #define VC_5GNR_RING_DESC_ENTRY_LENGTH (8) 25c750d277SHernan Vargas 26c750d277SHernan Vargas /* VC 5GNR FPGA Register mapping on BAR0. */ 27c750d277SHernan Vargas enum { 28c750d277SHernan Vargas VC_5GNR_CONFIGURATION = 0x00000004, /* len: 2B. */ 29c750d277SHernan Vargas VC_5GNR_QUEUE_MAP = 0x00000040 /* len: 256B. */ 30c750d277SHernan Vargas }; 31c750d277SHernan Vargas 32c750d277SHernan Vargas /* VC 5GNR FPGA FEC DESCRIPTOR ERROR. */ 33c750d277SHernan Vargas enum { 34c750d277SHernan Vargas VC_5GNR_DESC_ERR_NO_ERR = 0x0, 35c750d277SHernan Vargas VC_5GNR_DESC_ERR_K_P_OUT_OF_RANGE = 0x1, 36c750d277SHernan Vargas VC_5GNR_DESC_ERR_Z_C_NOT_LEGAL = 0x2, 37c750d277SHernan Vargas VC_5GNR_DESC_ERR_DESC_OFFSET_ERR = 0x3, 38c750d277SHernan Vargas VC_5GNR_DESC_ERR_DESC_READ_FAIL = 0x8, 39c750d277SHernan Vargas VC_5GNR_DESC_ERR_DESC_READ_TIMEOUT = 0x9, 40c750d277SHernan Vargas VC_5GNR_DESC_ERR_DESC_READ_TLP_POISONED = 0xA, 41c750d277SHernan Vargas VC_5GNR_DESC_ERR_HARQ_INPUT_LEN = 0xB, 42c750d277SHernan Vargas VC_5GNR_DESC_ERR_CB_READ_FAIL = 0xC, 43c750d277SHernan Vargas VC_5GNR_DESC_ERR_CB_READ_TIMEOUT = 0xD, 44c750d277SHernan Vargas VC_5GNR_DESC_ERR_CB_READ_TLP_POISONED = 0xE, 45c750d277SHernan Vargas VC_5GNR_DESC_ERR_HBSTORE_ERR = 0xF 46c750d277SHernan Vargas }; 47c750d277SHernan Vargas 48c750d277SHernan Vargas /* VC 5GNR FPGA FEC DMA Encoding Request Descriptor. */ 49*e7750639SAndre Muezerie struct __rte_packed_begin vc_5gnr_dma_enc_desc { 50c750d277SHernan Vargas uint32_t done:1, 51c750d277SHernan Vargas rsrvd0:7, 52c750d277SHernan Vargas error:4, 53c750d277SHernan Vargas rsrvd1:4, 54c750d277SHernan Vargas num_null:10, 55c750d277SHernan Vargas rsrvd2:6; 56c750d277SHernan Vargas uint32_t ncb:15, 57c750d277SHernan Vargas rsrvd3:1, 58c750d277SHernan Vargas k0:16; 59c750d277SHernan Vargas uint32_t irq_en:1, 60c750d277SHernan Vargas crc_en:1, 61c750d277SHernan Vargas rsrvd4:1, 62c750d277SHernan Vargas qm_idx:3, 63c750d277SHernan Vargas bg_idx:1, 64c750d277SHernan Vargas zc:9, 65c750d277SHernan Vargas desc_idx:10, 66c750d277SHernan Vargas rsrvd5:6; 67c750d277SHernan Vargas uint16_t rm_e; 68c750d277SHernan Vargas uint16_t k_; 69c750d277SHernan Vargas uint32_t out_addr_lw; 70c750d277SHernan Vargas uint32_t out_addr_hi; 71c750d277SHernan Vargas uint32_t in_addr_lw; 72c750d277SHernan Vargas uint32_t in_addr_hi; 73c750d277SHernan Vargas 74c750d277SHernan Vargas union { 75c750d277SHernan Vargas struct { 76c750d277SHernan Vargas /** Virtual addresses used to retrieve SW context info. */ 77c750d277SHernan Vargas void *op_addr; 78c750d277SHernan Vargas /** Stores information about total number of Code Blocks 79c750d277SHernan Vargas * in currently processed Transport Block. 80c750d277SHernan Vargas */ 81c750d277SHernan Vargas uint64_t cbs_in_op; 82c750d277SHernan Vargas }; 83c750d277SHernan Vargas 84c750d277SHernan Vargas uint8_t sw_ctxt[VC_5GNR_RING_DESC_LEN_UNIT_BYTES * 85c750d277SHernan Vargas (VC_5GNR_RING_DESC_ENTRY_LENGTH - 1)]; 86c750d277SHernan Vargas }; 87*e7750639SAndre Muezerie } __rte_packed_end; 88c750d277SHernan Vargas 89c750d277SHernan Vargas /* VC 5GNR FPGA DPC FEC DMA Decoding Request Descriptor. */ 90*e7750639SAndre Muezerie struct __rte_packed_begin vc_5gnr_dma_dec_desc { 91c750d277SHernan Vargas uint32_t done:1, 92c750d277SHernan Vargas iter:5, 93c750d277SHernan Vargas et_pass:1, 94c750d277SHernan Vargas crcb_pass:1, 95c750d277SHernan Vargas error:4, 96c750d277SHernan Vargas qm_idx:3, 97c750d277SHernan Vargas max_iter:5, 98c750d277SHernan Vargas bg_idx:1, 99c750d277SHernan Vargas rsrvd0:1, 100c750d277SHernan Vargas harqin_en:1, 101c750d277SHernan Vargas zc:9; 102c750d277SHernan Vargas uint32_t hbstroe_offset:22, 103c750d277SHernan Vargas num_null:10; 104c750d277SHernan Vargas uint32_t irq_en:1, 105c750d277SHernan Vargas ncb:15, 106c750d277SHernan Vargas desc_idx:10, 107c750d277SHernan Vargas drop_crc24b:1, 108c750d277SHernan Vargas crc24b_ind:1, 109c750d277SHernan Vargas rv:2, 110c750d277SHernan Vargas et_dis:1, 111c750d277SHernan Vargas rsrvd2:1; 112c750d277SHernan Vargas uint32_t harq_input_length:16, 113c750d277SHernan Vargas rm_e:16; /**< the inbound data byte length. */ 114c750d277SHernan Vargas uint32_t out_addr_lw; 115c750d277SHernan Vargas uint32_t out_addr_hi; 116c750d277SHernan Vargas uint32_t in_addr_lw; 117c750d277SHernan Vargas uint32_t in_addr_hi; 118c750d277SHernan Vargas 119c750d277SHernan Vargas union { 120c750d277SHernan Vargas struct { 121c750d277SHernan Vargas /** Virtual addresses used to retrieve SW context info. */ 122c750d277SHernan Vargas void *op_addr; 123c750d277SHernan Vargas /** Stores information about total number of Code Blocks 124c750d277SHernan Vargas * in currently processed Transport Block. 125c750d277SHernan Vargas */ 126c750d277SHernan Vargas uint8_t cbs_in_op; 127c750d277SHernan Vargas }; 128c750d277SHernan Vargas 129c750d277SHernan Vargas uint32_t sw_ctxt[8 * (VC_5GNR_RING_DESC_ENTRY_LENGTH - 1)]; 130c750d277SHernan Vargas }; 131*e7750639SAndre Muezerie } __rte_packed_end; 132c750d277SHernan Vargas 133c750d277SHernan Vargas /* Vista Creek 5GNR DMA Descriptor. */ 134c750d277SHernan Vargas union vc_5gnr_dma_desc { 135c750d277SHernan Vargas struct vc_5gnr_dma_enc_desc enc_req; 136c750d277SHernan Vargas struct vc_5gnr_dma_dec_desc dec_req; 137c750d277SHernan Vargas }; 138c750d277SHernan Vargas 139c750d277SHernan Vargas #endif /* _VC_5GNR_PMD_H_ */ 140