xref: /dpdk/drivers/baseband/fpga_5gnr_fec/vc_5gnr_pmd.h (revision e77506397fc8005c5129e22e9e2d15d5876790fd)
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