1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright (c) 2016 - 2018 Cavium Inc.
10 #include "qede_ethdev.h"
20 uint8_t hw_mac
[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
;
48 /* Out param for qede */
53 enum ecore_dev_type dev_type
;
56 struct qed_dev_eth_info
{
57 struct qed_dev_info common
;
62 struct ether_addr port_mac
;
63 uint16_t num_vlan_filters
;
64 uint32_t num_mac_filters
;
66 /* Legacy VF - this affects the datapath */
70 #define INIT_STRUCT_FIELD(field, value) .field = value
73 const struct qed_common_ops
*common
;
74 int (*fill_dev_info
)(struct ecore_dev
*edev
,
75 struct qed_dev_eth_info
*info
);
78 struct qed_link_params
{
81 #define QED_LINK_OVERRIDE_SPEED_AUTONEG (1 << 0)
82 #define QED_LINK_OVERRIDE_SPEED_ADV_SPEEDS (1 << 1)
83 #define QED_LINK_OVERRIDE_SPEED_FORCED_SPEED (1 << 2)
84 #define QED_LINK_OVERRIDE_PAUSE_CONFIG (1 << 3)
85 #define QED_LINK_OVERRIDE_EEE_CONFIG (1 << 5)
86 uint32_t override_flags
;
89 uint32_t forced_speed
;
90 #define QED_LINK_PAUSE_AUTONEG_ENABLE (1 << 0)
91 #define QED_LINK_PAUSE_RX_ENABLE (1 << 1)
92 #define QED_LINK_PAUSE_TX_ENABLE (1 << 2)
93 uint32_t pause_config
;
94 struct ecore_link_eee_params eee
;
97 struct qed_link_output
{
99 uint32_t supported_caps
; /* In SUPPORTED defs */
100 uint32_t advertised_caps
; /* In ADVERTISED defs */
101 uint32_t lp_caps
; /* In ADVERTISED defs */
102 uint32_t speed
; /* In Mb/s */
103 uint32_t adv_speed
; /* Speed mask */
104 uint8_t duplex
; /* In DUPLEX defs */
105 uint16_t port
; /* In PORT defs */
107 uint32_t pause_config
;
109 /* EEE - capability & param */
113 struct ecore_link_eee_params eee
;
116 struct qed_slowpath_params
{
122 uint8_t name
[NAME_SIZE
];
125 struct qed_common_cb_ops
{
126 void (*link_update
)(void *dev
, struct qed_link_output
*link
);
129 struct qed_common_ops
{
130 int (*probe
)(struct ecore_dev
*edev
,
131 struct rte_pci_device
*pci_dev
,
132 uint32_t dp_module
, uint8_t dp_level
, bool is_vf
);
133 void (*set_name
)(struct ecore_dev
*edev
, char name
[]);
135 (*chain_alloc
)(struct ecore_dev
*edev
,
136 enum ecore_chain_use_mode
138 enum ecore_chain_mode mode
,
139 enum ecore_chain_cnt_type cnt_type
,
141 osal_size_t elem_size
,
142 struct ecore_chain
*p_chain
,
143 struct ecore_chain_ext_pbl
*ext_pbl
);
145 void (*chain_free
)(struct ecore_dev
*edev
,
146 struct ecore_chain
*p_chain
);
148 void (*get_link
)(struct ecore_dev
*edev
,
149 struct qed_link_output
*if_link
);
150 int (*set_link
)(struct ecore_dev
*edev
,
151 struct qed_link_params
*params
);
153 int (*drain
)(struct ecore_dev
*edev
);
155 void (*remove
)(struct ecore_dev
*edev
);
157 int (*slowpath_stop
)(struct ecore_dev
*edev
);
159 void (*update_pf_params
)(struct ecore_dev
*edev
,
160 struct ecore_pf_params
*params
);
162 int (*slowpath_start
)(struct ecore_dev
*edev
,
163 struct qed_slowpath_params
*params
);
165 int (*set_fp_int
)(struct ecore_dev
*edev
, uint16_t cnt
);
167 uint32_t (*sb_init
)(struct ecore_dev
*edev
,
168 struct ecore_sb_info
*sb_info
,
170 dma_addr_t sb_phy_addr
,
173 int (*get_sb_info
)(struct ecore_dev
*edev
,
174 struct ecore_sb_info
*sb
, u16 qid
,
175 struct ecore_sb_info_dbg
*sb_dbg
);
177 bool (*can_link_change
)(struct ecore_dev
*edev
);
179 void (*update_msglvl
)(struct ecore_dev
*edev
,
180 uint32_t dp_module
, uint8_t dp_level
);
182 int (*send_drv_state
)(struct ecore_dev
*edev
, bool active
);
187 const struct qed_eth_ops
*qed_get_eth_ops(void);
189 #endif /* _QEDE_IF_H */