115ee34dbef2c66c630b69c199e2d8480122802d
[dpdk.git] / drivers / common / cnxk / roc_nix_priv.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #ifndef _ROC_NIX_PRIV_H_
6 #define _ROC_NIX_PRIV_H_
7
8 /* Constants */
9 #define NIX_CQ_ENTRY_SZ      128
10 #define NIX_CQ_ENTRY64_SZ    512
11 #define NIX_CQ_ALIGN         ((uint16_t)512)
12 #define NIX_MAX_SQB          ((uint16_t)512)
13 #define NIX_DEF_SQB          ((uint16_t)16)
14 #define NIX_MIN_SQB          ((uint16_t)8)
15 #define NIX_SQB_LIST_SPACE   ((uint16_t)2)
16 #define NIX_SQB_LOWER_THRESH ((uint16_t)70)
17
18 /* Apply BP/DROP when CQ is 95% full */
19 #define NIX_CQ_THRESH_LEVEL (5 * 256 / 100)
20
21 /* IRQ triggered when NIX_LF_CINTX_CNT[QCOUNT] crosses this value */
22 #define CQ_CQE_THRESH_DEFAULT   0x1ULL
23 #define CQ_TIMER_THRESH_DEFAULT 0xAULL /* ~1usec i.e (0xA * 100nsec) */
24 #define CQ_TIMER_THRESH_MAX     255
25
26 struct nix_qint {
27         struct nix *nix;
28         uint8_t qintx;
29 };
30
31 struct nix {
32         uint16_t reta[ROC_NIX_RSS_GRPS][ROC_NIX_RSS_RETA_MAX];
33         enum roc_nix_rss_reta_sz reta_sz;
34         struct plt_pci_device *pci_dev;
35         uint16_t bpid[NIX_MAX_CHAN];
36         struct nix_qint *qints_mem;
37         struct nix_qint *cints_mem;
38         uint8_t configured_qints;
39         uint8_t configured_cints;
40         struct roc_nix_sq **sqs;
41         uint16_t vwqe_interval;
42         uint16_t tx_chan_base;
43         uint16_t rx_chan_base;
44         uint16_t nb_rx_queues;
45         uint16_t nb_tx_queues;
46         uint8_t lso_tsov6_idx;
47         uint8_t lso_tsov4_idx;
48         uint8_t lso_udp_tun_idx[ROC_NIX_LSO_TUN_MAX];
49         uint8_t lso_tun_idx[ROC_NIX_LSO_TUN_MAX];
50         uint8_t lf_rx_stats;
51         uint8_t lf_tx_stats;
52         uint8_t rx_chan_cnt;
53         uint8_t rss_alg_idx;
54         uint8_t tx_chan_cnt;
55         uintptr_t lmt_base;
56         uint8_t cgx_links;
57         uint8_t lbk_links;
58         uint8_t sdp_links;
59         uint8_t tx_link;
60         uint16_t sqb_size;
61         /* Without FCS, with L2 overhead */
62         uint16_t mtu;
63         uint16_t chan_cnt;
64         uint16_t msixoff;
65         uint8_t rx_pause;
66         uint8_t tx_pause;
67         struct dev dev;
68         uint16_t cints;
69         uint16_t qints;
70         uintptr_t base;
71         bool sdp_link;
72         bool lbk_link;
73         bool ptp_en;
74         bool is_nix1;
75
76 } __plt_cache_aligned;
77
78 enum nix_err_status {
79         NIX_ERR_PARAM = -2048,
80         NIX_ERR_NO_MEM,
81         NIX_ERR_INVALID_RANGE,
82         NIX_ERR_INTERNAL,
83         NIX_ERR_OP_NOTSUP,
84         NIX_ERR_QUEUE_INVALID_RANGE,
85         NIX_ERR_AQ_READ_FAILED,
86         NIX_ERR_AQ_WRITE_FAILED,
87         NIX_ERR_NDC_SYNC,
88 };
89
90 enum nix_q_size {
91         nix_q_size_16, /* 16 entries */
92         nix_q_size_64, /* 64 entries */
93         nix_q_size_256,
94         nix_q_size_1K,
95         nix_q_size_4K,
96         nix_q_size_16K,
97         nix_q_size_64K,
98         nix_q_size_256K,
99         nix_q_size_1M, /* Million entries */
100         nix_q_size_max
101 };
102
103 static inline struct nix *
104 roc_nix_to_nix_priv(struct roc_nix *roc_nix)
105 {
106         return (struct nix *)&roc_nix->reserved[0];
107 }
108
109 static inline struct roc_nix *
110 nix_priv_to_roc_nix(struct nix *nix)
111 {
112         return (struct roc_nix *)((char *)nix -
113                                   offsetof(struct roc_nix, reserved));
114 }
115
116 /* IRQ */
117 int nix_register_irqs(struct nix *nix);
118 void nix_unregister_irqs(struct nix *nix);
119
120 #endif /* _ROC_NIX_PRIV_H_ */