1ae06c70bSJeff Kirsher /* SPDX-License-Identifier: GPL-2.0 */
251dce24bSJeff Kirsher /* Copyright(c) 1999 - 2018 Intel Corporation. */
3dee1ad47SJeff Kirsher 
4dee1ad47SJeff Kirsher #ifndef _IXGBE_COMMON_H_
5dee1ad47SJeff Kirsher #define _IXGBE_COMMON_H_
6dee1ad47SJeff Kirsher 
7dee1ad47SJeff Kirsher #include "ixgbe_type.h"
8dee1ad47SJeff Kirsher #include "ixgbe.h"
9dee1ad47SJeff Kirsher 
1071161302SEmil Tantilov u16 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw);
11dee1ad47SJeff Kirsher s32 ixgbe_init_hw_generic(struct ixgbe_hw *hw);
12dee1ad47SJeff Kirsher s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw);
13dee1ad47SJeff Kirsher s32 ixgbe_start_hw_gen2(struct ixgbe_hw *hw);
14dee1ad47SJeff Kirsher s32 ixgbe_clear_hw_cntrs_generic(struct ixgbe_hw *hw);
15dee1ad47SJeff Kirsher s32 ixgbe_read_pba_string_generic(struct ixgbe_hw *hw, u8 *pba_num,
16dee1ad47SJeff Kirsher 				  u32 pba_num_size);
17dee1ad47SJeff Kirsher s32 ixgbe_get_mac_addr_generic(struct ixgbe_hw *hw, u8 *mac_addr);
18ef1889d5SJacob Keller enum ixgbe_bus_width ixgbe_convert_bus_width(u16 link_status);
19ef1889d5SJacob Keller enum ixgbe_bus_speed ixgbe_convert_bus_speed(u16 link_status);
20dee1ad47SJeff Kirsher s32 ixgbe_get_bus_info_generic(struct ixgbe_hw *hw);
21dee1ad47SJeff Kirsher void ixgbe_set_lan_id_multi_port_pcie(struct ixgbe_hw *hw);
22dee1ad47SJeff Kirsher s32 ixgbe_stop_adapter_generic(struct ixgbe_hw *hw);
23dee1ad47SJeff Kirsher 
24dee1ad47SJeff Kirsher s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index);
25dee1ad47SJeff Kirsher s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index);
26805cedd6SDon Skidmore s32 ixgbe_init_led_link_act_generic(struct ixgbe_hw *hw);
27dee1ad47SJeff Kirsher 
28dee1ad47SJeff Kirsher s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw);
29dee1ad47SJeff Kirsher s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data);
30dee1ad47SJeff Kirsher s32 ixgbe_write_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
31dee1ad47SJeff Kirsher 					       u16 words, u16 *data);
32dee1ad47SJeff Kirsher s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data);
33dee1ad47SJeff Kirsher s32 ixgbe_read_eerd_buffer_generic(struct ixgbe_hw *hw, u16 offset,
34dee1ad47SJeff Kirsher 				   u16 words, u16 *data);
35dee1ad47SJeff Kirsher s32 ixgbe_write_eewr_generic(struct ixgbe_hw *hw, u16 offset, u16 data);
36dee1ad47SJeff Kirsher s32 ixgbe_write_eewr_buffer_generic(struct ixgbe_hw *hw, u16 offset,
37dee1ad47SJeff Kirsher 				    u16 words, u16 *data);
38dee1ad47SJeff Kirsher s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
39dee1ad47SJeff Kirsher 				       u16 *data);
40dee1ad47SJeff Kirsher s32 ixgbe_read_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
41dee1ad47SJeff Kirsher 					      u16 words, u16 *data);
42735c35afSDon Skidmore s32 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw);
43dee1ad47SJeff Kirsher s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
44dee1ad47SJeff Kirsher 					   u16 *checksum_val);
45dee1ad47SJeff Kirsher s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw);
46dee1ad47SJeff Kirsher 
47dee1ad47SJeff Kirsher s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
48dee1ad47SJeff Kirsher 			  u32 enable_addr);
49dee1ad47SJeff Kirsher s32 ixgbe_clear_rar_generic(struct ixgbe_hw *hw, u32 index);
50dee1ad47SJeff Kirsher s32 ixgbe_init_rx_addrs_generic(struct ixgbe_hw *hw);
51dee1ad47SJeff Kirsher s32 ixgbe_update_mc_addr_list_generic(struct ixgbe_hw *hw,
52dee1ad47SJeff Kirsher 				      struct net_device *netdev);
53dee1ad47SJeff Kirsher s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw);
54dee1ad47SJeff Kirsher s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw);
55d2f5e7f3SAtita Shirwaikar s32 ixgbe_disable_rx_buff_generic(struct ixgbe_hw *hw);
56d2f5e7f3SAtita Shirwaikar s32 ixgbe_enable_rx_buff_generic(struct ixgbe_hw *hw);
57dee1ad47SJeff Kirsher s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval);
58041441d0SAlexander Duyck s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw);
59afdc71e4SMark Rustad s32 ixgbe_setup_fc_generic(struct ixgbe_hw *);
6073d80953SDon Skidmore bool ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw);
61786e9a5fSAlexander Duyck void ixgbe_fc_autoneg(struct ixgbe_hw *hw);
62dee1ad47SJeff Kirsher 
63030eaeceSDon Skidmore s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u32 mask);
64030eaeceSDon Skidmore void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u32 mask);
65dee1ad47SJeff Kirsher s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr);
66dee1ad47SJeff Kirsher s32 ixgbe_set_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
677fa7c9dcSAlexander Duyck s32 ixgbe_set_vmdq_san_mac_generic(struct ixgbe_hw *hw, u32 vmdq);
68dee1ad47SJeff Kirsher s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
69dee1ad47SJeff Kirsher s32 ixgbe_init_uta_tables_generic(struct ixgbe_hw *hw);
70dee1ad47SJeff Kirsher s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan,
71b6488b66SAlexander Duyck 			   u32 vind, bool vlan_on, bool vlvf_bypass);
72dee1ad47SJeff Kirsher s32 ixgbe_clear_vfta_generic(struct ixgbe_hw *hw);
73dee1ad47SJeff Kirsher s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw,
74dee1ad47SJeff Kirsher 				 ixgbe_link_speed *speed,
75dee1ad47SJeff Kirsher 				 bool *link_up, bool link_up_wait_to_complete);
76dee1ad47SJeff Kirsher s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
77dee1ad47SJeff Kirsher 				 u16 *wwpn_prefix);
78429d6a3bSDon Skidmore 
79429d6a3bSDon Skidmore s32 prot_autoc_read_generic(struct ixgbe_hw *hw, bool *, u32 *reg_val);
80429d6a3bSDon Skidmore s32 prot_autoc_write_generic(struct ixgbe_hw *hw, u32 reg_val, bool locked);
81429d6a3bSDon Skidmore 
82dee1ad47SJeff Kirsher s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index);
83dee1ad47SJeff Kirsher s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index);
8477f192afSEmil Tantilov void ixgbe_set_mac_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf);
85dee1ad47SJeff Kirsher void ixgbe_set_vlan_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf);
86dee1ad47SJeff Kirsher s32 ixgbe_get_device_caps_generic(struct ixgbe_hw *hw, u16 *device_caps);
87dee1ad47SJeff Kirsher s32 ixgbe_set_fw_drv_ver_generic(struct ixgbe_hw *hw, u8 maj, u8 min,
88cb8e0514STony Nguyen 				 u8 build, u8 ver, u16 len, const char *str);
89cb8e0514STony Nguyen u8 ixgbe_calculate_checksum(u8 *buffer, u32 length);
905cffde30SMark Rustad s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, void *, u32 length,
915cffde30SMark Rustad 				 u32 timeout, bool return_data);
923efa9ed2SMark Rustad s32 ixgbe_hic_unlocked(struct ixgbe_hw *hw, u32 *buffer, u32 len, u32 timeout);
9312c78ef0SMark Rustad s32 ixgbe_fw_phy_activity(struct ixgbe_hw *hw, u16 activity,
9412c78ef0SMark Rustad 			  u32 (*data)[FW_PHY_ACT_DATA_COUNT]);
95ff9d1a5aSEmil Tantilov void ixgbe_clear_tx_pending(struct ixgbe_hw *hw);
96bd8069acSDon Skidmore bool ixgbe_mng_present(struct ixgbe_hw *hw);
977155d051SDon Skidmore bool ixgbe_mng_enabled(struct ixgbe_hw *hw);
98dee1ad47SJeff Kirsher 
99dee1ad47SJeff Kirsher void ixgbe_set_rxpba_generic(struct ixgbe_hw *hw, int num_pb,
100dee1ad47SJeff Kirsher 			     u32 headroom, int strategy);
101dee1ad47SJeff Kirsher 
1029a900ecaSDon Skidmore extern const u32 ixgbe_mvals_8259X[IXGBE_MVALS_IDX_LIMIT];
1039a900ecaSDon Skidmore 
104e1ea9158SDon Skidmore #define IXGBE_I2C_THERMAL_SENSOR_ADDR	0xF8
105e1ea9158SDon Skidmore #define IXGBE_EMC_INTERNAL_DATA		0x00
106e1ea9158SDon Skidmore #define IXGBE_EMC_INTERNAL_THERM_LIMIT	0x20
107e1ea9158SDon Skidmore #define IXGBE_EMC_DIODE1_DATA		0x01
108e1ea9158SDon Skidmore #define IXGBE_EMC_DIODE1_THERM_LIMIT	0x19
109e1ea9158SDon Skidmore #define IXGBE_EMC_DIODE2_DATA		0x23
110e1ea9158SDon Skidmore #define IXGBE_EMC_DIODE2_THERM_LIMIT	0x1A
111e1ea9158SDon Skidmore #define IXGBE_EMC_DIODE3_DATA		0x2A
112e1ea9158SDon Skidmore #define IXGBE_EMC_DIODE3_THERM_LIMIT	0x30
113e1ea9158SDon Skidmore 
114e1ea9158SDon Skidmore s32 ixgbe_get_thermal_sensor_data_generic(struct ixgbe_hw *hw);
115e1ea9158SDon Skidmore s32 ixgbe_init_thermal_sensor_thresh_generic(struct ixgbe_hw *hw);
11673834aecSPaul Greenwalt void ixgbe_get_etk_id(struct ixgbe_hw *hw,
11773834aecSPaul Greenwalt 		      struct ixgbe_nvm_version *nvm_ver);
11873834aecSPaul Greenwalt void ixgbe_get_oem_prod_version(struct ixgbe_hw *hw,
11973834aecSPaul Greenwalt 				struct ixgbe_nvm_version *nvm_ver);
12073834aecSPaul Greenwalt void ixgbe_get_orom_version(struct ixgbe_hw *hw,
12173834aecSPaul Greenwalt 			    struct ixgbe_nvm_version *nvm_ver);
1221f9ac57cSDon Skidmore void ixgbe_disable_rx_generic(struct ixgbe_hw *hw);
1231f9ac57cSDon Skidmore void ixgbe_enable_rx_generic(struct ixgbe_hw *hw);
1246d373a1bSMark Rustad s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
1256d373a1bSMark Rustad 					  ixgbe_link_speed speed,
1266d373a1bSMark Rustad 					  bool autoneg_wait_to_complete);
1276d373a1bSMark Rustad void ixgbe_set_soft_rate_select_speed(struct ixgbe_hw *hw,
1286d373a1bSMark Rustad 				      ixgbe_link_speed speed);
129e1ea9158SDon Skidmore 
1301aa37845SPaul Greenwalt #define IXGBE_FAILED_READ_RETRIES 5
1312a1a091cSMark Rustad #define IXGBE_FAILED_READ_REG 0xffffffffU
13214438464SMark Rustad #define IXGBE_FAILED_READ_CFG_DWORD 0xffffffffU
13314438464SMark Rustad #define IXGBE_FAILED_READ_CFG_WORD 0xffffU
13414438464SMark Rustad 
13514438464SMark Rustad u16 ixgbe_read_pci_cfg_word(struct ixgbe_hw *hw, u32 reg);
136ed19231cSJacob Keller void ixgbe_write_pci_cfg_word(struct ixgbe_hw *hw, u32 reg, u16 value);
1372a1a091cSMark Rustad 
ixgbe_removed(void __iomem * addr)1382a1a091cSMark Rustad static inline bool ixgbe_removed(void __iomem *addr)
1392a1a091cSMark Rustad {
1402a1a091cSMark Rustad 	return unlikely(!addr);
1412a1a091cSMark Rustad }
1422a1a091cSMark Rustad 
ixgbe_write_reg(struct ixgbe_hw * hw,u32 reg,u32 value)14384227bcdSMark Rustad static inline void ixgbe_write_reg(struct ixgbe_hw *hw, u32 reg, u32 value)
14484227bcdSMark Rustad {
1456aa7de05SMark Rutland 	u8 __iomem *reg_addr = READ_ONCE(hw->hw_addr);
146b12babd4SMark Rustad 
147b12babd4SMark Rustad 	if (ixgbe_removed(reg_addr))
148b12babd4SMark Rustad 		return;
149b12babd4SMark Rustad 	writel(value, reg_addr + reg);
15084227bcdSMark Rustad }
15184227bcdSMark Rustad #define IXGBE_WRITE_REG(a, reg, value) ixgbe_write_reg((a), (reg), (value))
152dee1ad47SJeff Kirsher 
153dee1ad47SJeff Kirsher #ifndef writeq
15484227bcdSMark Rustad #define writeq writeq
writeq(u64 val,void __iomem * addr)15584227bcdSMark Rustad static inline void writeq(u64 val, void __iomem *addr)
15684227bcdSMark Rustad {
15784227bcdSMark Rustad 	writel((u32)val, addr);
15884227bcdSMark Rustad 	writel((u32)(val >> 32), addr + 4);
15984227bcdSMark Rustad }
160dee1ad47SJeff Kirsher #endif
161dee1ad47SJeff Kirsher 
ixgbe_write_reg64(struct ixgbe_hw * hw,u32 reg,u64 value)16284227bcdSMark Rustad static inline void ixgbe_write_reg64(struct ixgbe_hw *hw, u32 reg, u64 value)
16384227bcdSMark Rustad {
1646aa7de05SMark Rutland 	u8 __iomem *reg_addr = READ_ONCE(hw->hw_addr);
165b12babd4SMark Rustad 
166b12babd4SMark Rustad 	if (ixgbe_removed(reg_addr))
167b12babd4SMark Rustad 		return;
168b12babd4SMark Rustad 	writeq(value, reg_addr + reg);
16984227bcdSMark Rustad }
17084227bcdSMark Rustad #define IXGBE_WRITE_REG64(a, reg, value) ixgbe_write_reg64((a), (reg), (value))
171dee1ad47SJeff Kirsher 
172f8e2472fSMark Rustad u32 ixgbe_read_reg(struct ixgbe_hw *hw, u32 reg);
17384227bcdSMark Rustad #define IXGBE_READ_REG(a, reg) ixgbe_read_reg((a), (reg))
174dee1ad47SJeff Kirsher 
17584227bcdSMark Rustad #define IXGBE_WRITE_REG_ARRAY(a, reg, offset, value) \
17684227bcdSMark Rustad 		ixgbe_write_reg((a), (reg) + ((offset) << 2), (value))
177dee1ad47SJeff Kirsher 
17884227bcdSMark Rustad #define IXGBE_READ_REG_ARRAY(a, reg, offset) \
17984227bcdSMark Rustad 		ixgbe_read_reg((a), (reg) + ((offset) << 2))
180dee1ad47SJeff Kirsher 
18184227bcdSMark Rustad #define IXGBE_WRITE_FLUSH(a) ixgbe_read_reg((a), IXGBE_STATUS)
182dee1ad47SJeff Kirsher 
183be0c27b4SMark Rustad #define ixgbe_hw_to_netdev(hw) (((struct ixgbe_adapter *)(hw)->back)->netdev)
184be0c27b4SMark Rustad 
185dee1ad47SJeff Kirsher #define hw_dbg(hw, format, arg...) \
186be0c27b4SMark Rustad 	netdev_dbg(ixgbe_hw_to_netdev(hw), format, ## arg)
187be0c27b4SMark Rustad #define hw_err(hw, format, arg...) \
188be0c27b4SMark Rustad 	netdev_err(ixgbe_hw_to_netdev(hw), format, ## arg)
189dee1ad47SJeff Kirsher #define e_dev_info(format, arg...) \
190dee1ad47SJeff Kirsher 	dev_info(&adapter->pdev->dev, format, ## arg)
191dee1ad47SJeff Kirsher #define e_dev_warn(format, arg...) \
192dee1ad47SJeff Kirsher 	dev_warn(&adapter->pdev->dev, format, ## arg)
193dee1ad47SJeff Kirsher #define e_dev_err(format, arg...) \
194dee1ad47SJeff Kirsher 	dev_err(&adapter->pdev->dev, format, ## arg)
195dee1ad47SJeff Kirsher #define e_dev_notice(format, arg...) \
196dee1ad47SJeff Kirsher 	dev_notice(&adapter->pdev->dev, format, ## arg)
197dee1ad47SJeff Kirsher #define e_info(msglvl, format, arg...) \
198dee1ad47SJeff Kirsher 	netif_info(adapter, msglvl, adapter->netdev, format, ## arg)
199dee1ad47SJeff Kirsher #define e_err(msglvl, format, arg...) \
200dee1ad47SJeff Kirsher 	netif_err(adapter, msglvl, adapter->netdev, format, ## arg)
201dee1ad47SJeff Kirsher #define e_warn(msglvl, format, arg...) \
202dee1ad47SJeff Kirsher 	netif_warn(adapter, msglvl, adapter->netdev, format, ## arg)
203dee1ad47SJeff Kirsher #define e_crit(msglvl, format, arg...) \
204dee1ad47SJeff Kirsher 	netif_crit(adapter, msglvl, adapter->netdev, format, ## arg)
205dee1ad47SJeff Kirsher #endif /* IXGBE_COMMON */
206