Imported Upstream version 16.07-rc1
[deb_dpdk.git] / drivers / net / ixgbe / base / ixgbe_x550.h
1 /*******************************************************************************
2
3 Copyright (c) 2001-2015, Intel Corporation
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, 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
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY 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
82 s32 ixgbe_dmac_config_X550(struct ixgbe_hw *hw);
83 s32 ixgbe_dmac_config_tcs_X550(struct ixgbe_hw *hw);
84 s32 ixgbe_dmac_update_tcs_X550(struct ixgbe_hw *hw);
85
86 s32 ixgbe_get_bus_info_X550em(struct ixgbe_hw *hw);
87 s32 ixgbe_init_eeprom_params_X550(struct ixgbe_hw *hw);
88 s32 ixgbe_update_eeprom_checksum_X550(struct ixgbe_hw *hw);
89 s32 ixgbe_calc_eeprom_checksum_X550(struct ixgbe_hw *hw);
90 s32 ixgbe_calc_checksum_X550(struct ixgbe_hw *hw, u16 *buffer, u32 buffer_size);
91 s32 ixgbe_validate_eeprom_checksum_X550(struct ixgbe_hw *hw, u16 *checksum_val);
92 s32 ixgbe_update_flash_X550(struct ixgbe_hw *hw);
93 s32 ixgbe_write_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
94                                       u16 offset, u16 words, u16 *data);
95 s32 ixgbe_write_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset,
96                                u16 data);
97 s32 ixgbe_read_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
98                                      u16 offset, u16 words, u16 *data);
99 s32 ixgbe_read_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset,
100 u16                             *data);
101 s32 ixgbe_read_ee_hostif_data_X550(struct ixgbe_hw *hw, u16 offset,
102                                    u16 *data);
103 s32 ixgbe_write_ee_hostif_data_X550(struct ixgbe_hw *hw, u16 offset,
104                                     u16 data);
105 s32 ixgbe_set_eee_X550(struct ixgbe_hw *hw, bool enable_eee);
106 s32 ixgbe_setup_eee_X550(struct ixgbe_hw *hw, bool enable_eee);
107 void ixgbe_set_source_address_pruning_X550(struct ixgbe_hw *hw, bool enable,
108                                            unsigned int pool);
109 void ixgbe_set_ethertype_anti_spoofing_X550(struct ixgbe_hw *hw,
110                                             bool enable, int vf);
111 s32 ixgbe_write_iosf_sb_reg_x550(struct ixgbe_hw *hw, u32 reg_addr,
112                                  u32 device_type, u32 data);
113 s32 ixgbe_read_iosf_sb_reg_x550(struct ixgbe_hw *hw, u32 reg_addr,
114         u32 device_type, u32 *data);
115 s32 ixgbe_get_phy_token(struct ixgbe_hw *);
116 s32 ixgbe_put_phy_token(struct ixgbe_hw *);
117 s32 ixgbe_write_iosf_sb_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,
118         u32 device_type, u32 data);
119 s32 ixgbe_read_iosf_sb_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,
120         u32 device_type, u32 *data);
121 void ixgbe_disable_mdd_X550(struct ixgbe_hw *hw);
122 void ixgbe_enable_mdd_X550(struct ixgbe_hw *hw);
123 void ixgbe_mdd_event_X550(struct ixgbe_hw *hw, u32 *vf_bitmap);
124 void ixgbe_restore_mdd_vf_X550(struct ixgbe_hw *hw, u32 vf);
125 enum ixgbe_media_type ixgbe_get_media_type_X550em(struct ixgbe_hw *hw);
126 s32 ixgbe_setup_sfp_modules_X550em(struct ixgbe_hw *hw);
127 s32 ixgbe_get_link_capabilities_X550em(struct ixgbe_hw *hw,
128                                        ixgbe_link_speed *speed, bool *autoneg);
129 void ixgbe_init_mac_link_ops_X550em(struct ixgbe_hw *hw);
130 s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw);
131 s32 ixgbe_init_phy_ops_X550em(struct ixgbe_hw *hw);
132 s32 ixgbe_setup_kr_x550em(struct ixgbe_hw *hw);
133 s32 ixgbe_init_ext_t_x550em(struct ixgbe_hw *hw);
134 s32 ixgbe_setup_internal_phy_t_x550em(struct ixgbe_hw *hw);
135 s32 ixgbe_setup_phy_loopback_x550em(struct ixgbe_hw *hw);
136 u32 ixgbe_get_supported_physical_layer_X550em(struct ixgbe_hw *hw);
137 void ixgbe_disable_rx_x550(struct ixgbe_hw *hw);
138 s32 ixgbe_get_lcd_t_x550em(struct ixgbe_hw *hw, ixgbe_link_speed *lcd_speed);
139 s32 ixgbe_enter_lplu_t_x550em(struct ixgbe_hw *hw);
140 s32 ixgbe_acquire_swfw_sync_X550em(struct ixgbe_hw *hw, u32 mask);
141 void ixgbe_release_swfw_sync_X550em(struct ixgbe_hw *hw, u32 mask);
142 s32 ixgbe_setup_fc_X550em(struct ixgbe_hw *hw);
143 s32 ixgbe_setup_mac_link_sfp_x550em(struct ixgbe_hw *hw,
144                                     ixgbe_link_speed speed,
145                                     bool autoneg_wait_to_complete);
146 s32 ixgbe_setup_mac_link_sfp_x550a(struct ixgbe_hw *hw,
147                                    ixgbe_link_speed speed,
148                                    bool autoneg_wait_to_complete);
149 s32 ixgbe_read_phy_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,
150                              u32 device_type, u16 *phy_data);
151 s32 ixgbe_write_phy_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,
152                               u32 device_type, u16 phy_data);
153 s32 ixgbe_setup_fc_x550a(struct ixgbe_hw *hw);
154 void ixgbe_fc_autoneg_x550a(struct ixgbe_hw *hw);
155 s32 ixgbe_handle_lasi_ext_t_x550em(struct ixgbe_hw *hw);
156 s32 ixgbe_setup_mac_link_t_X550em(struct ixgbe_hw *hw,
157                                   ixgbe_link_speed speed,
158                                   bool autoneg_wait_to_complete);
159 s32 ixgbe_check_link_t_X550em(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
160                               bool *link_up, bool link_up_wait_to_complete);
161 s32 ixgbe_reset_phy_t_X550em(struct ixgbe_hw *hw);
162 s32 ixgbe_identify_sfp_module_X550em(struct ixgbe_hw *hw);
163 s32 ixgbe_led_on_t_X550em(struct ixgbe_hw *hw, u32 led_idx);
164 s32 ixgbe_led_off_t_X550em(struct ixgbe_hw *hw, u32 led_idx);
165 #endif /* _IXGBE_X550_H_ */