common/cnxk: add lower bound check for SSO resources
[dpdk.git] / drivers / common / cnxk / roc_bphy_cgx.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #ifndef _ROC_BPHY_CGX_H_
6 #define _ROC_BPHY_CGX_H_
7
8 #include <pthread.h>
9
10 #include "roc_api.h"
11
12 #define MAX_LMACS_PER_CGX 4
13
14 struct roc_bphy_cgx {
15         uint64_t bar0_pa;
16         void *bar0_va;
17         uint64_t lmac_bmap;
18         unsigned int id;
19         /* serialize access to the whole structure */
20         pthread_mutex_t lock;
21 } __plt_cache_aligned;
22
23 enum roc_bphy_cgx_eth_link_speed {
24         ROC_BPHY_CGX_ETH_LINK_SPEED_NONE,
25         ROC_BPHY_CGX_ETH_LINK_SPEED_10M,
26         ROC_BPHY_CGX_ETH_LINK_SPEED_100M,
27         ROC_BPHY_CGX_ETH_LINK_SPEED_1G,
28         ROC_BPHY_CGX_ETH_LINK_SPEED_2HG,
29         ROC_BPHY_CGX_ETH_LINK_SPEED_5G,
30         ROC_BPHY_CGX_ETH_LINK_SPEED_10G,
31         ROC_BPHY_CGX_ETH_LINK_SPEED_20G,
32         ROC_BPHY_CGX_ETH_LINK_SPEED_25G,
33         ROC_BPHY_CGX_ETH_LINK_SPEED_40G,
34         ROC_BPHY_CGX_ETH_LINK_SPEED_50G,
35         ROC_BPHY_CGX_ETH_LINK_SPEED_80G,
36         ROC_BPHY_CGX_ETH_LINK_SPEED_100G,
37         __ROC_BPHY_CGX_ETH_LINK_SPEED_MAX
38 };
39
40 enum roc_bphy_cgx_eth_link_fec {
41         ROC_BPHY_CGX_ETH_LINK_FEC_NONE,
42         ROC_BPHY_CGX_ETH_LINK_FEC_BASE_R,
43         ROC_BPHY_CGX_ETH_LINK_FEC_RS,
44         __ROC_BPHY_CGX_ETH_LINK_FEC_MAX
45 };
46
47 enum roc_bphy_cgx_eth_link_mode {
48         ROC_BPHY_CGX_ETH_LINK_MODE_SGMII_BIT,
49         ROC_BPHY_CGX_ETH_LINK_MODE_1000_BASEX_BIT,
50         ROC_BPHY_CGX_ETH_LINK_MODE_QSGMII_BIT,
51         ROC_BPHY_CGX_ETH_LINK_MODE_10G_C2C_BIT,
52         ROC_BPHY_CGX_ETH_LINK_MODE_10G_C2M_BIT,
53         ROC_BPHY_CGX_ETH_LINK_MODE_10G_KR_BIT,
54         ROC_BPHY_CGX_ETH_LINK_MODE_20G_C2C_BIT,
55         ROC_BPHY_CGX_ETH_LINK_MODE_25G_C2C_BIT,
56         ROC_BPHY_CGX_ETH_LINK_MODE_25G_C2M_BIT,
57         ROC_BPHY_CGX_ETH_LINK_MODE_25G_2_C2C_BIT,
58         ROC_BPHY_CGX_ETH_LINK_MODE_25G_CR_BIT,
59         ROC_BPHY_CGX_ETH_LINK_MODE_25G_KR_BIT,
60         ROC_BPHY_CGX_ETH_LINK_MODE_40G_C2C_BIT,
61         ROC_BPHY_CGX_ETH_LINK_MODE_40G_C2M_BIT,
62         ROC_BPHY_CGX_ETH_LINK_MODE_40G_CR4_BIT,
63         ROC_BPHY_CGX_ETH_LINK_MODE_40G_KR4_BIT,
64         ROC_BPHY_CGX_ETH_LINK_MODE_40GAUI_C2C_BIT,
65         ROC_BPHY_CGX_ETH_LINK_MODE_50G_C2C_BIT,
66         ROC_BPHY_CGX_ETH_LINK_MODE_50G_C2M_BIT,
67         ROC_BPHY_CGX_ETH_LINK_MODE_50G_4_C2C_BIT,
68         ROC_BPHY_CGX_ETH_LINK_MODE_50G_CR_BIT,
69         ROC_BPHY_CGX_ETH_LINK_MODE_50G_KR_BIT,
70         ROC_BPHY_CGX_ETH_LINK_MODE_80GAUI_C2C_BIT,
71         ROC_BPHY_CGX_ETH_LINK_MODE_100G_C2C_BIT,
72         ROC_BPHY_CGX_ETH_LINK_MODE_100G_C2M_BIT,
73         ROC_BPHY_CGX_ETH_LINK_MODE_100G_CR4_BIT,
74         ROC_BPHY_CGX_ETH_LINK_MODE_100G_KR4_BIT,
75         ROC_BPHY_CGX_ETH_LINK_MODE_50GAUI_2_C2C_BIT,
76         ROC_BPHY_CGX_ETH_LINK_MODE_50GAUI_2_C2M_BIT,
77         ROC_BPHY_CGX_ETH_LINK_MODE_50GBASE_CR2_C_BIT,
78         ROC_BPHY_CGX_ETH_LINK_MODE_50GBASE_KR2_C_BIT,
79         ROC_BPHY_CGX_ETH_LINK_MODE_100GAUI_2_C2C_BIT,
80         ROC_BPHY_CGX_ETH_LINK_MODE_100GAUI_2_C2M_BIT,
81         ROC_BPHY_CGX_ETH_LINK_MODE_100GBASE_CR2_BIT,
82         ROC_BPHY_CGX_ETH_LINK_MODE_100GBASE_KR2_BIT,
83         ROC_BPHY_CGX_ETH_LINK_MODE_SFI_1G_BIT,
84         ROC_BPHY_CGX_ETH_LINK_MODE_25GBASE_CR_C_BIT,
85         ROC_BPHY_CGX_ETH_LINK_MODE_25GBASE_KR_C_BIT,
86         __ROC_BPHY_CGX_ETH_LINK_MODE_MAX
87 };
88
89 /* Supported CPRI modes */
90 enum roc_bphy_cgx_eth_mode_cpri {
91         ROC_BPHY_CGX_ETH_MODE_CPRI_2_4G_BIT,
92         ROC_BPHY_CGX_ETH_MODE_CPRI_3_1G_BIT,
93         ROC_BPHY_CGX_ETH_MODE_CPRI_4_9G_BIT,
94         ROC_BPHY_CGX_ETH_MODE_CPRI_6_1G_BIT,
95         ROC_BPHY_CGX_ETH_MODE_CPRI_9_8G_BIT,
96         ROC_BPHY_CGX_ETH_MODE_CPRI_10_1_BIT,
97         ROC_BPHY_CGX_ETH_MODE_CPRI_24_3G_BIT,
98 };
99
100 enum roc_bphy_cgx_mode_group {
101         ROC_BPHY_CGX_MODE_GROUP_ETH,
102         ROC_BPHY_CGX_MODE_GROUP_CPRI = 2,
103 };
104
105 struct roc_bphy_cgx_link_mode {
106         bool full_duplex;
107         bool an;
108         bool use_portm_idx;
109         unsigned int portm_idx;
110         enum roc_bphy_cgx_mode_group mode_group_idx;
111         enum roc_bphy_cgx_eth_link_speed speed;
112         union {
113                 enum roc_bphy_cgx_eth_link_mode mode;
114                 enum roc_bphy_cgx_eth_mode_cpri mode_cpri;
115         };
116 };
117
118 struct roc_bphy_cgx_link_info {
119         bool link_up;
120         bool full_duplex;
121         enum roc_bphy_cgx_eth_link_speed speed;
122         bool an;
123         enum roc_bphy_cgx_eth_link_fec fec;
124         enum roc_bphy_cgx_eth_link_mode mode;
125 };
126
127 struct roc_bphy_cgx_cpri_mode_change {
128         int gserc_idx;
129         int lane_idx;
130         int rate;
131         bool disable_leq;
132         bool disable_dfe;
133 };
134
135 struct roc_bphy_cgx_cpri_mode_tx_ctrl {
136         int gserc_idx;
137         int lane_idx;
138         bool enable;
139 };
140
141 struct roc_bphy_cgx_cpri_mode_misc {
142         int gserc_idx;
143         int lane_idx;
144         int flags;
145 };
146
147 __roc_api int roc_bphy_cgx_dev_init(struct roc_bphy_cgx *roc_cgx);
148 __roc_api int roc_bphy_cgx_dev_fini(struct roc_bphy_cgx *roc_cgx);
149
150 __roc_api int roc_bphy_cgx_start_rxtx(struct roc_bphy_cgx *roc_cgx,
151                                       unsigned int lmac);
152 __roc_api int roc_bphy_cgx_stop_rxtx(struct roc_bphy_cgx *roc_cgx,
153                                      unsigned int lmac);
154 __roc_api int roc_bphy_cgx_set_link_state(struct roc_bphy_cgx *roc_cgx,
155                                           unsigned int lmac, bool state);
156 __roc_api int roc_bphy_cgx_get_linkinfo(struct roc_bphy_cgx *roc_cgx,
157                                         unsigned int lmac,
158                                         struct roc_bphy_cgx_link_info *info);
159 __roc_api int roc_bphy_cgx_set_link_mode(struct roc_bphy_cgx *roc_cgx,
160                                          unsigned int lmac,
161                                          struct roc_bphy_cgx_link_mode *mode);
162 __roc_api int roc_bphy_cgx_intlbk_enable(struct roc_bphy_cgx *roc_cgx,
163                                          unsigned int lmac);
164 __roc_api int roc_bphy_cgx_intlbk_disable(struct roc_bphy_cgx *roc_cgx,
165                                           unsigned int lmac);
166 __roc_api int roc_bphy_cgx_ptp_rx_enable(struct roc_bphy_cgx *roc_cgx,
167                                          unsigned int lmac);
168 __roc_api int roc_bphy_cgx_ptp_rx_disable(struct roc_bphy_cgx *roc_cgx,
169                                           unsigned int lmac);
170 __roc_api int roc_bphy_cgx_fec_set(struct roc_bphy_cgx *roc_cgx,
171                                    unsigned int lmac,
172                                    enum roc_bphy_cgx_eth_link_fec fec);
173 __roc_api int roc_bphy_cgx_fec_supported_get(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
174                                              enum roc_bphy_cgx_eth_link_fec *fec);
175 __roc_api int roc_bphy_cgx_cpri_mode_change(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
176                                             struct roc_bphy_cgx_cpri_mode_change *mode);
177 __roc_api int roc_bphy_cgx_cpri_mode_tx_control(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
178                                                 struct roc_bphy_cgx_cpri_mode_tx_ctrl *mode);
179 __roc_api int roc_bphy_cgx_cpri_mode_misc(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
180                                           struct roc_bphy_cgx_cpri_mode_misc *mode);
181
182 #endif /* _ROC_BPHY_CGX_H_ */