1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright (c) 2016 - 2018 Cavium Inc.
10 #include "qede_ethdev.h"
20 uint8_t hw_mac[RTE_ETHER_ADDR_LEN];
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
42 bool b_inter_pf_switch;
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
57 /* Out param for qede */
62 enum ecore_dev_type dev_type;
65 struct qed_dev_eth_info {
66 struct qed_dev_info common;
71 struct rte_ether_addr port_mac;
72 uint16_t num_vlan_filters;
73 uint32_t num_mac_filters;
75 /* Legacy VF - this affects the datapath */
79 #define INIT_STRUCT_FIELD(field, value) .field = value
82 const struct qed_common_ops *common;
83 int (*fill_dev_info)(struct ecore_dev *edev,
84 struct qed_dev_eth_info *info);
87 struct qed_link_params {
90 #define QED_LINK_OVERRIDE_SPEED_AUTONEG (1 << 0)
91 #define QED_LINK_OVERRIDE_SPEED_ADV_SPEEDS (1 << 1)
92 #define QED_LINK_OVERRIDE_SPEED_FORCED_SPEED (1 << 2)
93 #define QED_LINK_OVERRIDE_PAUSE_CONFIG (1 << 3)
94 #define QED_LINK_OVERRIDE_EEE_CONFIG (1 << 5)
95 uint32_t override_flags;
98 uint32_t forced_speed;
99 #define QED_LINK_PAUSE_AUTONEG_ENABLE (1 << 0)
100 #define QED_LINK_PAUSE_RX_ENABLE (1 << 1)
101 #define QED_LINK_PAUSE_TX_ENABLE (1 << 2)
102 uint32_t pause_config;
103 struct ecore_link_eee_params eee;
106 struct qed_link_output {
108 uint32_t supported_caps; /* In SUPPORTED defs */
109 uint32_t advertised_caps; /* In ADVERTISED defs */
110 uint32_t lp_caps; /* In ADVERTISED defs */
111 uint32_t speed; /* In Mb/s */
112 uint32_t adv_speed; /* Speed mask */
113 uint8_t duplex; /* In DUPLEX defs */
114 uint16_t port; /* In PORT defs */
116 uint32_t pause_config;
118 /* EEE - capability & param */
122 struct ecore_link_eee_params eee;
125 struct qed_slowpath_params {
131 uint8_t name[NAME_SIZE];
134 struct qed_common_cb_ops {
135 void (*link_update)(void *dev, struct qed_link_output *link);
138 struct qed_common_ops {
139 int (*probe)(struct ecore_dev *edev,
140 struct rte_pci_device *pci_dev,
141 uint32_t dp_module, uint8_t dp_level, bool is_vf);
142 void (*set_name)(struct ecore_dev *edev, char name[]);
144 (*chain_alloc)(struct ecore_dev *edev,
145 enum ecore_chain_use_mode
147 enum ecore_chain_mode mode,
148 enum ecore_chain_cnt_type cnt_type,
150 osal_size_t elem_size,
151 struct ecore_chain *p_chain,
152 struct ecore_chain_ext_pbl *ext_pbl);
154 void (*chain_free)(struct ecore_dev *edev,
155 struct ecore_chain *p_chain);
157 void (*get_link)(struct ecore_dev *edev,
158 struct qed_link_output *if_link);
159 int (*set_link)(struct ecore_dev *edev,
160 struct qed_link_params *params);
162 int (*drain)(struct ecore_dev *edev);
164 void (*remove)(struct ecore_dev *edev);
166 int (*slowpath_stop)(struct ecore_dev *edev);
168 void (*update_pf_params)(struct ecore_dev *edev,
169 struct ecore_pf_params *params);
171 int (*slowpath_start)(struct ecore_dev *edev,
172 struct qed_slowpath_params *params);
174 int (*set_fp_int)(struct ecore_dev *edev, uint16_t cnt);
176 uint32_t (*sb_init)(struct ecore_dev *edev,
177 struct ecore_sb_info *sb_info,
179 dma_addr_t sb_phy_addr,
182 int (*get_sb_info)(struct ecore_dev *edev,
183 struct ecore_sb_info *sb, u16 qid,
184 struct ecore_sb_info_dbg *sb_dbg);
186 bool (*can_link_change)(struct ecore_dev *edev);
188 void (*update_msglvl)(struct ecore_dev *edev,
189 uint32_t dp_module, uint8_t dp_level);
191 int (*send_drv_state)(struct ecore_dev *edev, bool active);
193 /* ############### DEBUG *************************/
195 int (*dbg_grc)(struct ecore_dev *edev,
197 u32 *num_dumped_bytes);
198 int (*dbg_grc_size)(struct ecore_dev *edev);
200 int (*dbg_idle_chk)(struct ecore_dev *edev,
202 u32 *num_dumped_bytes);
203 int (*dbg_idle_chk_size)(struct ecore_dev *edev);
205 int (*dbg_reg_fifo)(struct ecore_dev *edev,
207 u32 *num_dumped_bytes);
208 int (*dbg_reg_fifo_size)(struct ecore_dev *edev);
210 int (*dbg_mcp_trace)(struct ecore_dev *edev,
212 u32 *num_dumped_bytes);
213 int (*dbg_mcp_trace_size)(struct ecore_dev *edev);
215 int (*dbg_protection_override)(struct ecore_dev *edev, void *buffer,
216 u32 *num_dumped_bytes);
217 int (*dbg_protection_override_size)(struct ecore_dev *edev);
219 int (*dbg_igu_fifo_size)(struct ecore_dev *edev);
220 int (*dbg_igu_fifo)(struct ecore_dev *edev, void *buffer,
221 u32 *num_dumped_bytes);
223 int (*dbg_fw_asserts)(struct ecore_dev *edev, void *buffer,
224 u32 *num_dumped_bytes);
226 int (*dbg_fw_asserts_size)(struct ecore_dev *edev);
228 int (*dbg_ilt)(struct ecore_dev *edev, void *buffer,
229 u32 *num_dumped_bytes);
231 int (*dbg_ilt_size)(struct ecore_dev *edev);
233 u8 (*dbg_get_debug_engine)(struct ecore_dev *edev);
234 void (*dbg_set_debug_engine)(struct ecore_dev *edev,
241 const struct qed_eth_ops *qed_get_eth_ops(void);
243 #endif /* _QEDE_IF_H */