net/iavf: fix pointer of meta data
[dpdk.git] / drivers / net / octeontx_ep / otx_ep_common.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4 #ifndef _OTX_EP_COMMON_H_
5 #define _OTX_EP_COMMON_H_
6
7
8 #define OTX_EP_NW_PKT_OP               0x1220
9 #define OTX_EP_NW_CMD_OP               0x1221
10
11 #define OTX_EP_MAX_RINGS_PER_VF        (8)
12 #define OTX_EP_CFG_IO_QUEUES        OTX_EP_MAX_RINGS_PER_VF
13 #define OTX_EP_64BYTE_INSTR         (64)
14 #define OTX_EP_MIN_IQ_DESCRIPTORS   (128)
15 #define OTX_EP_MIN_OQ_DESCRIPTORS   (128)
16 #define OTX_EP_MAX_IQ_DESCRIPTORS   (8192)
17 #define OTX_EP_MAX_OQ_DESCRIPTORS   (8192)
18 #define OTX_EP_OQ_BUF_SIZE          (2048)
19 #define OTX_EP_MIN_RX_BUF_SIZE      (64)
20
21 #define OTX_EP_OQ_INFOPTR_MODE      (0)
22 #define OTX_EP_OQ_REFIL_THRESHOLD   (16)
23
24 /* IQ instruction req types */
25 #define OTX_EP_REQTYPE_NONE             (0)
26 #define OTX_EP_REQTYPE_NORESP_INSTR     (1)
27 #define OTX_EP_REQTYPE_NORESP_NET_DIRECT       (2)
28 #define OTX_EP_REQTYPE_NORESP_NET       OTX_EP_REQTYPE_NORESP_NET_DIRECT
29 #define OTX_EP_REQTYPE_NORESP_GATHER    (3)
30 #define OTX_EP_NORESP_OHSM_SEND     (4)
31 #define OTX_EP_NORESP_LAST          (4)
32 #define OTX_EP_PCI_RING_ALIGN   65536
33 #define SDP_PKIND 40
34 #define SDP_OTX2_PKIND 57
35
36 #define      ORDERED_TAG 0
37 #define      ATOMIC_TAG  1
38 #define      NULL_TAG  2
39 #define      NULL_NULL_TAG  3
40
41 #define OTX_EP_BUSY_LOOP_COUNT      (10000)
42 #define OTX_EP_MAX_IOQS_PER_VF 8
43 #define OTX_CUST_DATA_LEN 0
44
45 #define otx_ep_info(fmt, args...)                               \
46         rte_log(RTE_LOG_INFO, otx_net_ep_logtype,               \
47                 "%s():%u " fmt "\n",                            \
48                 __func__, __LINE__, ##args)
49
50 #define otx_ep_err(fmt, args...)                                \
51         rte_log(RTE_LOG_ERR, otx_net_ep_logtype,                \
52                 "%s():%u " fmt "\n",                            \
53                 __func__, __LINE__, ##args)
54
55 #define otx_ep_dbg(fmt, args...)                                \
56         rte_log(RTE_LOG_DEBUG, otx_net_ep_logtype,              \
57                 "%s():%u " fmt "\n",                            \
58                 __func__, __LINE__, ##args)
59
60 /* Input Request Header format */
61 union otx_ep_instr_irh {
62         uint64_t u64;
63         struct {
64                 /* Request ID  */
65                 uint64_t rid:16;
66
67                 /* PCIe port to use for response */
68                 uint64_t pcie_port:3;
69
70                 /* Scatter indicator  1=scatter */
71                 uint64_t scatter:1;
72
73                 /* Size of Expected result OR no. of entries in scatter list */
74                 uint64_t rlenssz:14;
75
76                 /* Desired destination port for result */
77                 uint64_t dport:6;
78
79                 /* Opcode Specific parameters */
80                 uint64_t param:8;
81
82                 /* Opcode for the return packet  */
83                 uint64_t opcode:16;
84         } s;
85 };
86
87 #define otx_ep_write64(value, base_addr, reg_off) \
88         {\
89         typeof(value) val = (value); \
90         typeof(reg_off) off = (reg_off); \
91         otx_ep_dbg("octeon_write_csr64: reg: 0x%08lx val: 0x%016llx\n", \
92                    (unsigned long)off, (unsigned long long)val); \
93         rte_write64(val, ((base_addr) + off)); \
94         }
95
96 /* Instruction Header - for OCTEON-TX models */
97 typedef union otx_ep_instr_ih {
98         uint64_t u64;
99         struct {
100           /** Data Len */
101                 uint64_t tlen:16;
102
103           /** Reserved */
104                 uint64_t rsvd:20;
105
106           /** PKIND for OTX_EP */
107                 uint64_t pkind:6;
108
109           /** Front Data size */
110                 uint64_t fsz:6;
111
112           /** No. of entries in gather list */
113                 uint64_t gsz:14;
114
115           /** Gather indicator 1=gather*/
116                 uint64_t gather:1;
117
118           /** Reserved3 */
119                 uint64_t reserved3:1;
120         } s;
121 } otx_ep_instr_ih_t;
122
123 /* OTX_EP IQ request list */
124 struct otx_ep_instr_list {
125         void *buf;
126         uint32_t reqtype;
127 };
128 #define OTX_EP_IQREQ_LIST_SIZE  (sizeof(struct otx_ep_instr_list))
129
130 /* Input Queue statistics. Each input queue has four stats fields. */
131 struct otx_ep_iq_stats {
132         uint64_t instr_posted; /* Instructions posted to this queue. */
133         uint64_t instr_processed; /* Instructions processed in this queue. */
134         uint64_t instr_dropped; /* Instructions that could not be processed */
135         uint64_t tx_pkts;
136         uint64_t tx_bytes;
137 };
138
139 /* Structure to define the configuration attributes for each Input queue. */
140 struct otx_ep_iq_config {
141         /* Max number of IQs available */
142         uint16_t max_iqs;
143
144         /* Command size - 32 or 64 bytes */
145         uint16_t instr_type;
146
147         /* Pending list size, usually set to the sum of the size of all IQs */
148         uint32_t pending_list_size;
149 };
150
151 /** The instruction (input) queue.
152  *  The input queue is used to post raw (instruction) mode data or packet data
153  *  to OCTEON TX2 device from the host. Each IQ of a OTX_EP EP VF device has one
154  *  such structure to represent it.
155  */
156 struct otx_ep_instr_queue {
157         struct otx_ep_device *otx_ep_dev;
158
159         uint32_t q_no;
160         uint32_t pkt_in_done;
161
162         /* Flag for 64 byte commands. */
163         uint32_t iqcmd_64B:1;
164         uint32_t rsvd:17;
165         uint32_t status:8;
166
167         /* Number of  descriptors in this ring. */
168         uint32_t nb_desc;
169
170         /* Input ring index, where the driver should write the next packet */
171         uint32_t host_write_index;
172
173         /* Input ring index, where the OCTEON TX2 should read the next packet */
174         uint32_t otx_read_index;
175
176         uint32_t reset_instr_cnt;
177
178         /** This index aids in finding the window in the queue where OCTEON TX2
179          *  has read the commands.
180          */
181         uint32_t flush_index;
182
183         /* This keeps track of the instructions pending in this queue. */
184         uint64_t instr_pending;
185
186         /* Pointer to the Virtual Base addr of the input ring. */
187         uint8_t *base_addr;
188
189         /* This IQ request list */
190         struct otx_ep_instr_list *req_list;
191
192         /* OTX_EP doorbell register for the ring. */
193         void *doorbell_reg;
194
195         /* OTX_EP instruction count register for this ring. */
196         void *inst_cnt_reg;
197
198         /* Number of instructions pending to be posted to OCTEON TX2. */
199         uint32_t fill_cnt;
200
201         /* Statistics for this input queue. */
202         struct otx_ep_iq_stats stats;
203
204         /* DMA mapped base address of the input descriptor ring. */
205         uint64_t base_addr_dma;
206
207         /* Memory zone */
208         const struct rte_memzone *iq_mz;
209 };
210
211 /** Descriptor format.
212  *  The descriptor ring is made of descriptors which have 2 64-bit values:
213  *  -# Physical (bus) address of the data buffer.
214  *  -# Physical (bus) address of a otx_ep_droq_info structure.
215  *  The device DMA's incoming packets and its information at the address
216  *  given by these descriptor fields.
217  */
218 struct otx_ep_droq_desc {
219         /* The buffer pointer */
220         uint64_t buffer_ptr;
221
222         /* The Info pointer */
223         uint64_t info_ptr;
224 };
225 #define OTX_EP_DROQ_DESC_SIZE   (sizeof(struct otx_ep_droq_desc))
226
227 /* Receive Header */
228 union otx_ep_rh {
229         uint64_t rh64;
230 };
231 #define OTX_EP_RH_SIZE (sizeof(union otx_ep_rh))
232
233 /** Information about packet DMA'ed by OCTEON TX2.
234  *  The format of the information available at Info Pointer after OCTEON TX2
235  *  has posted a packet. Not all descriptors have valid information. Only
236  *  the Info field of the first descriptor for a packet has information
237  *  about the packet.
238  */
239 struct otx_ep_droq_info {
240         /* The Length of the packet. */
241         uint64_t length;
242
243         /* The Output Receive Header. */
244         union otx_ep_rh rh;
245 };
246 #define OTX_EP_DROQ_INFO_SIZE   (sizeof(struct otx_ep_droq_info))
247
248 /* DROQ statistics. Each output queue has four stats fields. */
249 struct otx_ep_droq_stats {
250         /* Number of packets received in this queue. */
251         uint64_t pkts_received;
252
253         /* Bytes received by this queue. */
254         uint64_t bytes_received;
255
256         /* Num of failures of rte_pktmbuf_alloc() */
257         uint64_t rx_alloc_failure;
258
259         /* Rx error */
260         uint64_t rx_err;
261
262         /* packets with data got ready after interrupt arrived */
263         uint64_t pkts_delayed_data;
264
265         /* packets dropped due to zero length */
266         uint64_t dropped_zlp;
267 };
268
269 /* Structure to define the configuration attributes for each Output queue. */
270 struct otx_ep_oq_config {
271         /* Max number of OQs available */
272         uint16_t max_oqs;
273
274         /* If set, the Output queue uses info-pointer mode. (Default: 1 ) */
275         uint16_t info_ptr;
276
277         /** The number of buffers that were consumed during packet processing by
278          *  the driver on this Output queue before the driver attempts to
279          *  replenish the descriptor ring with new buffers.
280          */
281         uint32_t refill_threshold;
282 };
283
284 /* The Descriptor Ring Output Queue(DROQ) structure. */
285 struct otx_ep_droq {
286         struct otx_ep_device *otx_ep_dev;
287         /* The 8B aligned descriptor ring starts at this address. */
288         struct otx_ep_droq_desc *desc_ring;
289
290         uint32_t q_no;
291         uint64_t last_pkt_count;
292
293         struct rte_mempool *mpool;
294
295         /* Driver should read the next packet at this index */
296         uint32_t read_idx;
297
298         /* OCTEON TX2 will write the next packet at this index */
299         uint32_t write_idx;
300
301         /* At this index, the driver will refill the descriptor's buffer */
302         uint32_t refill_idx;
303
304         /* Packets pending to be processed */
305         uint64_t pkts_pending;
306
307         /* Number of descriptors in this ring. */
308         uint32_t nb_desc;
309
310         /* The number of descriptors pending to refill. */
311         uint32_t refill_count;
312
313         uint32_t refill_threshold;
314
315         /* The 8B aligned info ptrs begin from this address. */
316         struct otx_ep_droq_info *info_list;
317
318         /* receive buffer list contains mbuf ptr list */
319         struct rte_mbuf **recv_buf_list;
320
321         /* The size of each buffer pointed by the buffer pointer. */
322         uint32_t buffer_size;
323
324         /** Pointer to the mapped packet credit register.
325          *  Host writes number of info/buffer ptrs available to this register
326          */
327         void *pkts_credit_reg;
328
329         /** Pointer to the mapped packet sent register. OCTEON TX2 writes the
330          *  number of packets DMA'ed to host memory in this register.
331          */
332         void *pkts_sent_reg;
333
334         /* Statistics for this DROQ. */
335         struct otx_ep_droq_stats stats;
336
337         /* DMA mapped address of the DROQ descriptor ring. */
338         size_t desc_ring_dma;
339
340         /* Info_ptr list is allocated at this virtual address. */
341         size_t info_base_addr;
342
343         /* DMA mapped address of the info list */
344         size_t info_list_dma;
345
346         /* Allocated size of info list. */
347         uint32_t info_alloc_size;
348
349         /* Memory zone **/
350         const struct rte_memzone *desc_ring_mz;
351
352         const struct rte_memzone *info_mz;
353 };
354 #define OTX_EP_DROQ_SIZE                (sizeof(struct otx_ep_droq))
355
356 /* IQ/OQ mask */
357 struct otx_ep_io_enable {
358         uint64_t iq;
359         uint64_t oq;
360         uint64_t iq64B;
361 };
362
363 /* Structure to define the configuration. */
364 struct otx_ep_config {
365         /* Input Queue attributes. */
366         struct otx_ep_iq_config iq;
367
368         /* Output Queue attributes. */
369         struct otx_ep_oq_config oq;
370
371         /* Num of desc for IQ rings */
372         uint32_t num_iqdef_descs;
373
374         /* Num of desc for OQ rings */
375         uint32_t num_oqdef_descs;
376
377         /* OQ buffer size */
378         uint32_t oqdef_buf_size;
379 };
380
381 /* SRIOV information */
382 struct otx_ep_sriov_info {
383         /* Number of rings assigned to VF */
384         uint32_t rings_per_vf;
385
386         /* Number of VF devices enabled */
387         uint32_t num_vfs;
388 };
389
390 /* Required functions for each VF device */
391 struct otx_ep_fn_list {
392         void (*setup_iq_regs)(struct otx_ep_device *otx_ep, uint32_t q_no);
393
394         void (*setup_oq_regs)(struct otx_ep_device *otx_ep, uint32_t q_no);
395
396         void (*setup_device_regs)(struct otx_ep_device *otx_ep);
397
398         int (*enable_io_queues)(struct otx_ep_device *otx_ep);
399         void (*disable_io_queues)(struct otx_ep_device *otx_ep);
400
401         int (*enable_iq)(struct otx_ep_device *otx_ep, uint32_t q_no);
402         void (*disable_iq)(struct otx_ep_device *otx_ep, uint32_t q_no);
403
404         int (*enable_oq)(struct otx_ep_device *otx_ep, uint32_t q_no);
405         void (*disable_oq)(struct otx_ep_device *otx_ep, uint32_t q_no);
406 };
407
408 /* OTX_EP EP VF device data structure */
409 struct otx_ep_device {
410         /* PCI device pointer */
411         struct rte_pci_device *pdev;
412
413         uint16_t chip_id;
414
415         uint32_t pkind;
416
417         struct rte_eth_dev *eth_dev;
418
419         int port_id;
420
421         /* Memory mapped h/w address */
422         uint8_t *hw_addr;
423
424         struct otx_ep_fn_list fn_list;
425
426         uint32_t max_tx_queues;
427
428         uint32_t max_rx_queues;
429
430         /* Num IQs */
431         uint32_t nb_tx_queues;
432
433         /* The input instruction queues */
434         struct otx_ep_instr_queue *instr_queue[OTX_EP_MAX_IOQS_PER_VF];
435
436         /* Num OQs */
437         uint32_t nb_rx_queues;
438
439         /* The DROQ output queues  */
440         struct otx_ep_droq *droq[OTX_EP_MAX_IOQS_PER_VF];
441
442         /* IOQ mask */
443         struct otx_ep_io_enable io_qmask;
444
445         /* SR-IOV info */
446         struct otx_ep_sriov_info sriov_info;
447
448         /* Device configuration */
449         const struct otx_ep_config *conf;
450
451         uint64_t rx_offloads;
452
453         uint64_t tx_offloads;
454 };
455
456 int otx_ep_setup_iqs(struct otx_ep_device *otx_ep, uint32_t iq_no,
457                      int num_descs, unsigned int socket_id);
458 int otx_ep_delete_iqs(struct otx_ep_device *otx_ep, uint32_t iq_no);
459
460 int otx_ep_setup_oqs(struct otx_ep_device *otx_ep, int oq_no, int num_descs,
461                      int desc_size, struct rte_mempool *mpool,
462                      unsigned int socket_id);
463 int otx_ep_delete_oqs(struct otx_ep_device *otx_ep, uint32_t oq_no);
464
465 struct otx_ep_sg_entry {
466         /** The first 64 bit gives the size of data in each dptr. */
467         union {
468                 uint16_t size[4];
469                 uint64_t size64;
470         } u;
471
472         /** The 4 dptr pointers for this entry. */
473         uint64_t ptr[4];
474 };
475
476 #define OTX_EP_SG_ENTRY_SIZE    (sizeof(struct otx_ep_sg_entry))
477
478 /** Structure of a node in list of gather components maintained by
479  *  driver for each network device.
480  */
481 struct otx_ep_gather {
482         /** number of gather entries. */
483         int num_sg;
484
485         /** Gather component that can accommodate max sized fragment list
486          *  received from the IP layer.
487          */
488         struct otx_ep_sg_entry *sg;
489 };
490
491 struct otx_ep_buf_free_info {
492         struct rte_mbuf *mbuf;
493         struct otx_ep_gather g;
494 };
495
496 #define OTX_EP_MAX_PKT_SZ 64000U
497 #define OTX_EP_MAX_MAC_ADDRS 1
498 #define OTX_EP_SG_ALIGN 8
499 #define OTX_EP_CLEAR_ISIZE_BSIZE 0x7FFFFFULL
500 #define OTX_EP_CLEAR_OUT_INT_LVLS 0x3FFFFFFFFFFFFFULL
501 #define OTX_EP_CLEAR_IN_INT_LVLS 0xFFFFFFFF
502 #define OTX_EP_CLEAR_SDP_IN_INT_LVLS 0x3FFFFFFFFFFFFFUL
503 #define OTX_EP_DROQ_BUFSZ_MASK 0xFFFF
504 #define OTX_EP_CLEAR_SLIST_DBELL 0xFFFFFFFF
505 #define OTX_EP_CLEAR_SDP_OUT_PKT_CNT 0xFFFFFFFFF
506
507 /* PCI IDs */
508 #define PCI_VENDOR_ID_CAVIUM                    0x177D
509
510 extern int otx_net_ep_logtype;
511 #endif  /* _OTX_EP_COMMON_H_ */