2 * Copyright (c) 2016 QLogic Corporation.
6 * See LICENSE.qede_pmd for copyright and licensing details.
12 #include "qede_ethdev.h"
22 uint8_t hw_mac[ETHER_ADDR_LEN];
33 #define QED_MFW_VERSION_0_MASK 0x000000FF
34 #define QED_MFW_VERSION_0_OFFSET 0
35 #define QED_MFW_VERSION_1_MASK 0x0000FF00
36 #define QED_MFW_VERSION_1_OFFSET 8
37 #define QED_MFW_VERSION_2_MASK 0x00FF0000
38 #define QED_MFW_VERSION_2_OFFSET 16
39 #define QED_MFW_VERSION_3_MASK 0xFF000000
40 #define QED_MFW_VERSION_3_OFFSET 24
47 /* Out param for qede */
53 struct qed_dev_eth_info {
54 struct qed_dev_info common;
59 struct ether_addr port_mac;
60 uint16_t num_vlan_filters;
61 uint32_t num_mac_filters;
63 /* Legacy VF - this affects the datapath */
67 #define INIT_STRUCT_FIELD(field, value) .field = value
70 const struct qed_common_ops *common;
71 int (*fill_dev_info)(struct ecore_dev *edev,
72 struct qed_dev_eth_info *info);
75 struct qed_link_params {
78 #define QED_LINK_OVERRIDE_SPEED_AUTONEG (1 << 0)
79 #define QED_LINK_OVERRIDE_SPEED_ADV_SPEEDS (1 << 1)
80 #define QED_LINK_OVERRIDE_SPEED_FORCED_SPEED (1 << 2)
81 #define QED_LINK_OVERRIDE_PAUSE_CONFIG (1 << 3)
82 uint32_t override_flags;
85 uint32_t forced_speed;
86 #define QED_LINK_PAUSE_AUTONEG_ENABLE (1 << 0)
87 #define QED_LINK_PAUSE_RX_ENABLE (1 << 1)
88 #define QED_LINK_PAUSE_TX_ENABLE (1 << 2)
89 uint32_t pause_config;
92 struct qed_link_output {
94 uint32_t supported_caps; /* In SUPPORTED defs */
95 uint32_t advertised_caps; /* In ADVERTISED defs */
96 uint32_t lp_caps; /* In ADVERTISED defs */
97 uint32_t speed; /* In Mb/s */
98 uint32_t adv_speed; /* Speed mask */
99 uint8_t duplex; /* In DUPLEX defs */
100 uint8_t port; /* In PORT defs */
102 uint32_t pause_config;
105 struct qed_slowpath_params {
111 uint8_t name[NAME_SIZE];
114 struct qed_common_cb_ops {
115 void (*link_update)(void *dev, struct qed_link_output *link);
118 struct qed_common_ops {
119 int (*probe)(struct ecore_dev *edev,
120 struct rte_pci_device *pci_dev,
121 uint32_t dp_module, uint8_t dp_level, bool is_vf);
122 void (*set_name)(struct ecore_dev *edev, char name[]);
124 (*chain_alloc)(struct ecore_dev *edev,
125 enum ecore_chain_use_mode
127 enum ecore_chain_mode mode,
128 enum ecore_chain_cnt_type cnt_type,
130 osal_size_t elem_size,
131 struct ecore_chain *p_chain,
132 struct ecore_chain_ext_pbl *ext_pbl);
134 void (*chain_free)(struct ecore_dev *edev,
135 struct ecore_chain *p_chain);
137 void (*get_link)(struct ecore_dev *edev,
138 struct qed_link_output *if_link);
139 int (*set_link)(struct ecore_dev *edev,
140 struct qed_link_params *params);
142 int (*drain)(struct ecore_dev *edev);
144 void (*remove)(struct ecore_dev *edev);
146 int (*slowpath_stop)(struct ecore_dev *edev);
148 void (*update_pf_params)(struct ecore_dev *edev,
149 struct ecore_pf_params *params);
151 int (*slowpath_start)(struct ecore_dev *edev,
152 struct qed_slowpath_params *params);
154 int (*set_fp_int)(struct ecore_dev *edev, uint16_t cnt);
156 uint32_t (*sb_init)(struct ecore_dev *edev,
157 struct ecore_sb_info *sb_info,
159 dma_addr_t sb_phy_addr,
162 int (*get_sb_info)(struct ecore_dev *edev,
163 struct ecore_sb_info *sb, u16 qid,
164 struct ecore_sb_info_dbg *sb_dbg);
166 bool (*can_link_change)(struct ecore_dev *edev);
168 void (*update_msglvl)(struct ecore_dev *edev,
169 uint32_t dp_module, uint8_t dp_level);
171 int (*send_drv_state)(struct ecore_dev *edev, bool active);
176 const struct qed_eth_ops *qed_get_eth_ops(void);
178 #endif /* _QEDE_IF_H */