1
2
3
4
5
6
7#ifndef _QEDE_IF_H
8#define _QEDE_IF_H
9
10#include "qede_ethdev.h"
11
12
13struct ecore_dev;
14struct qed_sb_info;
15struct qed_pf_params;
16enum ecore_int_mode;
17
18struct qed_dev_info {
19 uint8_t num_hwfns;
20 uint8_t hw_mac[RTE_ETHER_ADDR_LEN];
21 bool is_mf_default;
22
23
24 uint16_t fw_major;
25 uint16_t fw_minor;
26 uint16_t fw_rev;
27 uint16_t fw_eng;
28
29
30 uint32_t mfw_rev;
31#define QED_MFW_VERSION_0_MASK 0x000000FF
32#define QED_MFW_VERSION_0_OFFSET 0
33#define QED_MFW_VERSION_1_MASK 0x0000FF00
34#define QED_MFW_VERSION_1_OFFSET 8
35#define QED_MFW_VERSION_2_MASK 0x00FF0000
36#define QED_MFW_VERSION_2_OFFSET 16
37#define QED_MFW_VERSION_3_MASK 0xFF000000
38#define QED_MFW_VERSION_3_OFFSET 24
39
40 uint32_t flash_size;
41 bool b_arfs_capable;
42 bool b_inter_pf_switch;
43 bool tx_switching;
44 u16 mtu;
45
46 bool smart_an;
47
48
49 uint32_t mbi_version;
50#define QED_MBI_VERSION_0_MASK 0x000000FF
51#define QED_MBI_VERSION_0_OFFSET 0
52#define QED_MBI_VERSION_1_MASK 0x0000FF00
53#define QED_MBI_VERSION_1_OFFSET 8
54#define QED_MBI_VERSION_2_MASK 0x00FF0000
55#define QED_MBI_VERSION_2_OFFSET 16
56
57
58 bool vxlan_enable;
59 bool gre_enable;
60 bool geneve_enable;
61
62 enum ecore_dev_type dev_type;
63};
64
65struct qed_dev_eth_info {
66 struct qed_dev_info common;
67
68 uint8_t num_queues;
69 uint8_t num_tc;
70
71 struct rte_ether_addr port_mac;
72 uint16_t num_vlan_filters;
73 uint32_t num_mac_filters;
74
75
76 bool is_legacy;
77};
78
79#define INIT_STRUCT_FIELD(field, value) .field = value
80
81struct qed_eth_ops {
82 const struct qed_common_ops *common;
83 int (*fill_dev_info)(struct ecore_dev *edev,
84 struct qed_dev_eth_info *info);
85 void (*sriov_configure)(struct ecore_dev *edev, int num_vfs);
86};
87
88struct qed_link_params {
89 bool link_up;
90
91#define QED_LINK_OVERRIDE_SPEED_AUTONEG (1 << 0)
92#define QED_LINK_OVERRIDE_SPEED_ADV_SPEEDS (1 << 1)
93#define QED_LINK_OVERRIDE_SPEED_FORCED_SPEED (1 << 2)
94#define QED_LINK_OVERRIDE_PAUSE_CONFIG (1 << 3)
95#define QED_LINK_OVERRIDE_EEE_CONFIG (1 << 5)
96 uint32_t override_flags;
97 bool autoneg;
98 uint32_t adv_speeds;
99 uint32_t forced_speed;
100#define QED_LINK_PAUSE_AUTONEG_ENABLE (1 << 0)
101#define QED_LINK_PAUSE_RX_ENABLE (1 << 1)
102#define QED_LINK_PAUSE_TX_ENABLE (1 << 2)
103 uint32_t pause_config;
104 struct ecore_link_eee_params eee;
105};
106
107struct qed_link_output {
108 bool link_up;
109 uint32_t supported_caps;
110 uint32_t advertised_caps;
111 uint32_t lp_caps;
112 uint32_t speed;
113 uint32_t adv_speed;
114 uint8_t duplex;
115 uint16_t port;
116 bool autoneg;
117 uint32_t pause_config;
118
119
120 bool eee_supported;
121 bool eee_active;
122 u8 sup_caps;
123 struct ecore_link_eee_params eee;
124};
125
126struct qed_slowpath_params {
127 uint32_t int_mode;
128 uint8_t drv_major;
129 uint8_t drv_minor;
130 uint8_t drv_rev;
131 uint8_t drv_eng;
132 uint8_t name[NAME_SIZE];
133};
134
135struct qed_common_cb_ops {
136 void (*link_update)(void *dev, struct qed_link_output *link);
137};
138
139struct qed_common_ops {
140 int (*probe)(struct ecore_dev *edev,
141 struct rte_pci_device *pci_dev,
142 uint32_t dp_module, uint8_t dp_level, bool is_vf);
143 void (*set_name)(struct ecore_dev *edev, char name[]);
144 enum _ecore_status_t
145 (*chain_alloc)(struct ecore_dev *edev,
146 enum ecore_chain_use_mode
147 intended_use,
148 enum ecore_chain_mode mode,
149 enum ecore_chain_cnt_type cnt_type,
150 uint32_t num_elems,
151 osal_size_t elem_size,
152 struct ecore_chain *p_chain,
153 struct ecore_chain_ext_pbl *ext_pbl);
154
155 void (*chain_free)(struct ecore_dev *edev,
156 struct ecore_chain *p_chain);
157
158 void (*get_link)(struct ecore_dev *edev,
159 struct qed_link_output *if_link);
160 int (*set_link)(struct ecore_dev *edev,
161 struct qed_link_params *params);
162
163 int (*drain)(struct ecore_dev *edev);
164
165 void (*remove)(struct ecore_dev *edev);
166
167 int (*slowpath_stop)(struct ecore_dev *edev);
168
169 void (*update_pf_params)(struct ecore_dev *edev,
170 struct ecore_pf_params *params);
171
172 int (*slowpath_start)(struct ecore_dev *edev,
173 struct qed_slowpath_params *params);
174
175 int (*set_fp_int)(struct ecore_dev *edev, uint16_t cnt);
176
177 uint32_t (*sb_init)(struct ecore_dev *edev,
178 struct ecore_sb_info *sb_info,
179 void *sb_virt_addr,
180 dma_addr_t sb_phy_addr,
181 uint16_t sb_id);
182
183 int (*get_sb_info)(struct ecore_dev *edev,
184 struct ecore_sb_info *sb, u16 qid,
185 struct ecore_sb_info_dbg *sb_dbg);
186
187 bool (*can_link_change)(struct ecore_dev *edev);
188
189 void (*update_msglvl)(struct ecore_dev *edev,
190 uint32_t dp_module, uint8_t dp_level);
191
192 int (*send_drv_state)(struct ecore_dev *edev, bool active);
193
194
195
196 int (*dbg_grc)(struct ecore_dev *edev,
197 void *buffer,
198 u32 *num_dumped_bytes);
199 int (*dbg_grc_size)(struct ecore_dev *edev);
200
201 int (*dbg_idle_chk)(struct ecore_dev *edev,
202 void *buffer,
203 u32 *num_dumped_bytes);
204 int (*dbg_idle_chk_size)(struct ecore_dev *edev);
205
206 int (*dbg_reg_fifo)(struct ecore_dev *edev,
207 void *buffer,
208 u32 *num_dumped_bytes);
209 int (*dbg_reg_fifo_size)(struct ecore_dev *edev);
210
211 int (*dbg_mcp_trace)(struct ecore_dev *edev,
212 void *buffer,
213 u32 *num_dumped_bytes);
214 int (*dbg_mcp_trace_size)(struct ecore_dev *edev);
215
216 int (*dbg_protection_override)(struct ecore_dev *edev, void *buffer,
217 u32 *num_dumped_bytes);
218 int (*dbg_protection_override_size)(struct ecore_dev *edev);
219
220 int (*dbg_igu_fifo_size)(struct ecore_dev *edev);
221 int (*dbg_igu_fifo)(struct ecore_dev *edev, void *buffer,
222 u32 *num_dumped_bytes);
223
224 int (*dbg_fw_asserts)(struct ecore_dev *edev, void *buffer,
225 u32 *num_dumped_bytes);
226
227 int (*dbg_fw_asserts_size)(struct ecore_dev *edev);
228
229 int (*dbg_ilt)(struct ecore_dev *edev, void *buffer,
230 u32 *num_dumped_bytes);
231
232 int (*dbg_ilt_size)(struct ecore_dev *edev);
233
234 u8 (*dbg_get_debug_engine)(struct ecore_dev *edev);
235 void (*dbg_set_debug_engine)(struct ecore_dev *edev,
236 int engine_number);
237
238};
239
240
241
242const struct qed_eth_ops *qed_get_eth_ops(void);
243
244#endif
245