ixgbe_x550.h revision 809f0800
1/*******************************************************************************
2
3Copyright (c) 2001-2015, Intel Corporation
4All rights reserved.
5
6Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions are met:
8
9 1. Redistributions of source code must retain the above copyright notice,
10    this list of conditions and the following disclaimer.
11
12 2. Redistributions in binary form must reproduce the above copyright
13    notice, this list of conditions and the following disclaimer in the
14    documentation and/or other materials provided with the distribution.
15
16 3. Neither the name of the Intel Corporation nor the names of its
17    contributors may be used to endorse or promote products derived from
18    this software without specific prior written permission.
19
20THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30POSSIBILITY OF SUCH DAMAGE.
31
32***************************************************************************/
33
34#ifndef _IXGBE_X550_H_
35#define _IXGBE_X550_H_
36
37#include "ixgbe_type.h"
38
39/* More phy definitions */
40#define IXGBE_M88E1500_COPPER_CTRL		0x0/* Page 0 reg */
41#define IXGBE_M88E1500_COPPER_CTRL_RESET	0x8000
42#define IXGBE_M88E1500_COPPER_CTRL_AN_EN	0x1000
43#define IXGBE_M88E1500_COPPER_CTRL_RESTART_AN	0x0200
44#define IXGBE_M88E1500_COPPER_CTRL_FULL_DUPLEX	0x0100
45#define IXGBE_M88E1500_COPPER_CTRL_SPEED_MSB	0x0040
46#define IXGBE_M88E1500_1000T_CTRL		0x09 /* 1000Base-T Ctrl Reg */
47/* 1=Configure PHY as Master 0=Configure PHY as Slave */
48#define IXGBE_M88E1500_1000T_CTRL_MS_VALUE	0x0800
49/* 1=Master/Slave manual config value 0=Automatic Master/Slave config */
50#define IXGBE_M88E1500_1000T_CTRL_MS_ENABLE	0x1000
51#define IXGBE_M88E1500_1000T_STATUS		0x0A /* 1000Base-T Status Reg */
52#define IXGBE_M88E1500_AUTO_COPPER_SGMII	0x2
53#define IXGBE_M88E1500_AUTO_COPPER_BASEX	0x3
54#define IXGBE_M88E1500_STATUS_LINK		0x0004 /* Interface Link Bit */
55#define IXGBE_M88E1500_MAC_CTRL_1		0x10
56#define IXGBE_M88E1500_MAC_CTRL_1_MODE_MASK	0x0380 /* Mode Select */
57#define IXGBE_M88E1500_CFG_REG_1		0x0010
58#define IXGBE_M88E1500_CFG_REG_2		0x0011
59#define IXGBE_M88E1500_CFG_REG_3		0x0007
60#define IXGBE_M88E1500_MODE			0x0014
61#define IXGBE_M88E1500_PAGE_ADDR		0x16/* Page Offset reg */
62#define IXGBE_M88E1500_FIBER_CTRL		0x0/* Page 1 reg */
63#define IXGBE_M88E1500_FIBER_CTRL_RESET		0x8000
64#define IXGBE_M88E1500_FIBER_CTRL_SPEED_LSB	0x2000
65#define IXGBE_M88E1500_FIBER_CTRL_POWER_DOWN	0x0800
66#define IXGBE_M88E1500_FIBER_CTRL_DUPLEX_FULL	0x0100
67#define IXGBE_M88E1500_FIBER_CTRL_SPEED_MSB	0x0040
68#define IXGBE_M88E1500_EEE_CTRL_1		0x0/* Page 18 reg */
69#define IXGBE_M88E1500_EEE_CTRL_1_MS		0x0001/* EEE Master/Slave */
70#define IXGBE_M88E1500_GEN_CTRL			0x14/* Page 18 reg */
71#define IXGBE_M88E1500_GEN_CTRL_RESET		0x8000
72#define IXGBE_M88E1500_GEN_CTRL_SGMII_COPPER	0x0001/* Mode bits 0-2 */
73
74/* M88E1500 Specific Registers */
75#define IXGBE_M88E1500_PHY_SPEC_CTRL		0x10 /* PHY Specific Ctrl Reg */
76#define IXGBE_M88E1500_PHY_SPEC_STATUS		0x11 /* PHY Specific Stat Reg */
77
78#define IXGBE_M88E1500_PSCR_DOWNSHIFT_ENABLE	0x0800
79#define IXGBE_M88E1500_PSCR_DOWNSHIFT_MASK	0x7000
80#define IXGBE_M88E1500_PSCR_DOWNSHIFT_6X	0x5000
81
82s32 ixgbe_dmac_config_X550(struct ixgbe_hw *hw);
83s32 ixgbe_dmac_config_tcs_X550(struct ixgbe_hw *hw);
84s32 ixgbe_dmac_update_tcs_X550(struct ixgbe_hw *hw);
85
86s32 ixgbe_get_bus_info_X550em(struct ixgbe_hw *hw);
87s32 ixgbe_init_eeprom_params_X550(struct ixgbe_hw *hw);
88s32 ixgbe_update_eeprom_checksum_X550(struct ixgbe_hw *hw);
89s32 ixgbe_calc_eeprom_checksum_X550(struct ixgbe_hw *hw);
90s32 ixgbe_calc_checksum_X550(struct ixgbe_hw *hw, u16 *buffer, u32 buffer_size);
91s32 ixgbe_validate_eeprom_checksum_X550(struct ixgbe_hw *hw, u16 *checksum_val);
92s32 ixgbe_update_flash_X550(struct ixgbe_hw *hw);
93s32 ixgbe_write_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
94				      u16 offset, u16 words, u16 *data);
95s32 ixgbe_write_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset,
96			       u16 data);
97s32 ixgbe_read_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
98				     u16 offset, u16 words, u16 *data);
99s32 ixgbe_read_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset,
100u16				*data);
101s32 ixgbe_read_ee_hostif_data_X550(struct ixgbe_hw *hw, u16 offset,
102				   u16 *data);
103s32 ixgbe_write_ee_hostif_data_X550(struct ixgbe_hw *hw, u16 offset,
104				    u16 data);
105s32 ixgbe_set_eee_X550(struct ixgbe_hw *hw, bool enable_eee);
106s32 ixgbe_setup_eee_X550(struct ixgbe_hw *hw, bool enable_eee);
107void ixgbe_set_source_address_pruning_X550(struct ixgbe_hw *hw, bool enable,
108					   unsigned int pool);
109void ixgbe_set_ethertype_anti_spoofing_X550(struct ixgbe_hw *hw,
110					    bool enable, int vf);
111s32 ixgbe_write_iosf_sb_reg_x550(struct ixgbe_hw *hw, u32 reg_addr,
112				 u32 device_type, u32 data);
113s32 ixgbe_read_iosf_sb_reg_x550(struct ixgbe_hw *hw, u32 reg_addr,
114	u32 device_type, u32 *data);
115s32 ixgbe_get_phy_token(struct ixgbe_hw *);
116s32 ixgbe_put_phy_token(struct ixgbe_hw *);
117s32 ixgbe_write_iosf_sb_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,
118	u32 device_type, u32 data);
119s32 ixgbe_read_iosf_sb_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,
120	u32 device_type, u32 *data);
121void ixgbe_disable_mdd_X550(struct ixgbe_hw *hw);
122void ixgbe_enable_mdd_X550(struct ixgbe_hw *hw);
123void ixgbe_mdd_event_X550(struct ixgbe_hw *hw, u32 *vf_bitmap);
124void ixgbe_restore_mdd_vf_X550(struct ixgbe_hw *hw, u32 vf);
125enum ixgbe_media_type ixgbe_get_media_type_X550em(struct ixgbe_hw *hw);
126s32 ixgbe_setup_sfp_modules_X550em(struct ixgbe_hw *hw);
127s32 ixgbe_get_link_capabilities_X550em(struct ixgbe_hw *hw,
128				       ixgbe_link_speed *speed, bool *autoneg);
129void ixgbe_init_mac_link_ops_X550em(struct ixgbe_hw *hw);
130s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw);
131s32 ixgbe_init_phy_ops_X550em(struct ixgbe_hw *hw);
132s32 ixgbe_setup_kr_x550em(struct ixgbe_hw *hw);
133s32 ixgbe_init_ext_t_x550em(struct ixgbe_hw *hw);
134s32 ixgbe_setup_internal_phy_t_x550em(struct ixgbe_hw *hw);
135s32 ixgbe_setup_phy_loopback_x550em(struct ixgbe_hw *hw);
136u32 ixgbe_get_supported_physical_layer_X550em(struct ixgbe_hw *hw);
137void ixgbe_disable_rx_x550(struct ixgbe_hw *hw);
138s32 ixgbe_get_lcd_t_x550em(struct ixgbe_hw *hw, ixgbe_link_speed *lcd_speed);
139s32 ixgbe_enter_lplu_t_x550em(struct ixgbe_hw *hw);
140s32 ixgbe_acquire_swfw_sync_X550em(struct ixgbe_hw *hw, u32 mask);
141void ixgbe_release_swfw_sync_X550em(struct ixgbe_hw *hw, u32 mask);
142s32 ixgbe_setup_fc_X550em(struct ixgbe_hw *hw);
143s32 ixgbe_setup_mac_link_sfp_x550em(struct ixgbe_hw *hw,
144				    ixgbe_link_speed speed,
145				    bool autoneg_wait_to_complete);
146s32 ixgbe_setup_mac_link_sfp_x550a(struct ixgbe_hw *hw,
147				   ixgbe_link_speed speed,
148				   bool autoneg_wait_to_complete);
149s32 ixgbe_read_phy_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,
150			     u32 device_type, u16 *phy_data);
151s32 ixgbe_write_phy_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,
152			      u32 device_type, u16 phy_data);
153s32 ixgbe_setup_fc_x550a(struct ixgbe_hw *hw);
154void ixgbe_fc_autoneg_x550a(struct ixgbe_hw *hw);
155s32 ixgbe_handle_lasi_ext_t_x550em(struct ixgbe_hw *hw);
156s32 ixgbe_setup_mac_link_t_X550em(struct ixgbe_hw *hw,
157				  ixgbe_link_speed speed,
158				  bool autoneg_wait_to_complete);
159s32 ixgbe_check_link_t_X550em(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
160			      bool *link_up, bool link_up_wait_to_complete);
161s32 ixgbe_reset_phy_t_X550em(struct ixgbe_hw *hw);
162s32 ixgbe_identify_sfp_module_X550em(struct ixgbe_hw *hw);
163s32 ixgbe_led_on_t_X550em(struct ixgbe_hw *hw, u32 led_idx);
164s32 ixgbe_led_off_t_X550em(struct ixgbe_hw *hw, u32 led_idx);
165#endif /* _IXGBE_X550_H_ */
166