common/cnxk: support NIX stats
[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 lf_rx_stats;
49         uint8_t lf_tx_stats;
50         uint8_t rx_chan_cnt;
51         uint8_t rss_alg_idx;
52         uint8_t tx_chan_cnt;
53         uintptr_t lmt_base;
54         uint8_t cgx_links;
55         uint8_t lbk_links;
56         uint8_t sdp_links;
57         uint8_t tx_link;
58         uint16_t sqb_size;
59         /* Without FCS, with L2 overhead */
60         uint16_t mtu;
61         uint16_t chan_cnt;
62         uint16_t msixoff;
63         uint8_t rx_pause;
64         uint8_t tx_pause;
65         struct dev dev;
66         uint16_t cints;
67         uint16_t qints;
68         uintptr_t base;
69         bool sdp_link;
70         bool lbk_link;
71         bool ptp_en;
72         bool is_nix1;
73
74 } __plt_cache_aligned;
75
76 enum nix_err_status {
77         NIX_ERR_PARAM = -2048,
78         NIX_ERR_NO_MEM,
79         NIX_ERR_INVALID_RANGE,
80         NIX_ERR_INTERNAL,
81         NIX_ERR_OP_NOTSUP,
82         NIX_ERR_QUEUE_INVALID_RANGE,
83         NIX_ERR_AQ_READ_FAILED,
84         NIX_ERR_AQ_WRITE_FAILED,
85         NIX_ERR_NDC_SYNC,
86 };
87
88 enum nix_q_size {
89         nix_q_size_16, /* 16 entries */
90         nix_q_size_64, /* 64 entries */
91         nix_q_size_256,
92         nix_q_size_1K,
93         nix_q_size_4K,
94         nix_q_size_16K,
95         nix_q_size_64K,
96         nix_q_size_256K,
97         nix_q_size_1M, /* Million entries */
98         nix_q_size_max
99 };
100
101 static inline struct nix *
102 roc_nix_to_nix_priv(struct roc_nix *roc_nix)
103 {
104         return (struct nix *)&roc_nix->reserved[0];
105 }
106
107 static inline struct roc_nix *
108 nix_priv_to_roc_nix(struct nix *nix)
109 {
110         return (struct roc_nix *)((char *)nix -
111                                   offsetof(struct roc_nix, reserved));
112 }
113
114 /* IRQ */
115 int nix_register_irqs(struct nix *nix);
116 void nix_unregister_irqs(struct nix *nix);
117
118 #endif /* _ROC_NIX_PRIV_H_ */