e1000_phy.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. /*******************************************************************************
  2. Intel(R) Gigabit Ethernet Linux driver
  3. Copyright(c) 2007-2013 Intel Corporation.
  4. This program is free software; you can redistribute it and/or modify it
  5. under the terms and conditions of the GNU General Public License,
  6. version 2, as published by the Free Software Foundation.
  7. This program is distributed in the hope it will be useful, but WITHOUT
  8. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  9. FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  10. more details.
  11. You should have received a copy of the GNU General Public License along with
  12. this program; if not, write to the Free Software Foundation, Inc.,
  13. 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  14. The full GNU General Public License is included in this distribution in
  15. the file called "COPYING".
  16. Contact Information:
  17. e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
  18. Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  19. *******************************************************************************/
  20. #ifndef _E1000_PHY_H_
  21. #define _E1000_PHY_H_
  22. enum e1000_ms_type {
  23. e1000_ms_hw_default = 0,
  24. e1000_ms_force_master,
  25. e1000_ms_force_slave,
  26. e1000_ms_auto
  27. };
  28. enum e1000_smart_speed {
  29. e1000_smart_speed_default = 0,
  30. e1000_smart_speed_on,
  31. e1000_smart_speed_off
  32. };
  33. s32 igb_check_downshift(struct e1000_hw *hw);
  34. s32 igb_check_reset_block(struct e1000_hw *hw);
  35. s32 igb_copper_link_setup_igp(struct e1000_hw *hw);
  36. s32 igb_copper_link_setup_m88(struct e1000_hw *hw);
  37. s32 igb_copper_link_setup_m88_gen2(struct e1000_hw *hw);
  38. s32 igb_phy_force_speed_duplex_igp(struct e1000_hw *hw);
  39. s32 igb_phy_force_speed_duplex_m88(struct e1000_hw *hw);
  40. s32 igb_get_cable_length_m88(struct e1000_hw *hw);
  41. s32 igb_get_cable_length_m88_gen2(struct e1000_hw *hw);
  42. s32 igb_get_cable_length_igp_2(struct e1000_hw *hw);
  43. s32 igb_get_phy_id(struct e1000_hw *hw);
  44. s32 igb_get_phy_info_igp(struct e1000_hw *hw);
  45. s32 igb_get_phy_info_m88(struct e1000_hw *hw);
  46. s32 igb_phy_sw_reset(struct e1000_hw *hw);
  47. s32 igb_phy_hw_reset(struct e1000_hw *hw);
  48. s32 igb_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data);
  49. s32 igb_set_d3_lplu_state(struct e1000_hw *hw, bool active);
  50. s32 igb_setup_copper_link(struct e1000_hw *hw);
  51. s32 igb_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data);
  52. s32 igb_phy_has_link(struct e1000_hw *hw, u32 iterations,
  53. u32 usec_interval, bool *success);
  54. void igb_power_up_phy_copper(struct e1000_hw *hw);
  55. void igb_power_down_phy_copper(struct e1000_hw *hw);
  56. s32 igb_phy_init_script_igp3(struct e1000_hw *hw);
  57. s32 igb_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data);
  58. s32 igb_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data);
  59. s32 igb_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data);
  60. s32 igb_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data);
  61. s32 igb_copper_link_setup_82580(struct e1000_hw *hw);
  62. s32 igb_get_phy_info_82580(struct e1000_hw *hw);
  63. s32 igb_phy_force_speed_duplex_82580(struct e1000_hw *hw);
  64. s32 igb_get_cable_length_82580(struct e1000_hw *hw);
  65. s32 igb_read_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 *data);
  66. s32 igb_write_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 data);
  67. s32 igb_check_polarity_m88(struct e1000_hw *hw);
  68. /* IGP01E1000 Specific Registers */
  69. #define IGP01E1000_PHY_PORT_CONFIG 0x10 /* Port Config */
  70. #define IGP01E1000_PHY_PORT_STATUS 0x11 /* Status */
  71. #define IGP01E1000_PHY_PORT_CTRL 0x12 /* Control */
  72. #define IGP01E1000_PHY_LINK_HEALTH 0x13 /* PHY Link Health */
  73. #define IGP02E1000_PHY_POWER_MGMT 0x19 /* Power Management */
  74. #define IGP01E1000_PHY_PAGE_SELECT 0x1F /* Page Select */
  75. #define IGP01E1000_PHY_PCS_INIT_REG 0x00B4
  76. #define IGP01E1000_PHY_POLARITY_MASK 0x0078
  77. #define IGP01E1000_PSCR_AUTO_MDIX 0x1000
  78. #define IGP01E1000_PSCR_FORCE_MDI_MDIX 0x2000 /* 0=MDI, 1=MDIX */
  79. #define IGP01E1000_PSCFR_SMART_SPEED 0x0080
  80. #define I82580_ADDR_REG 16
  81. #define I82580_CFG_REG 22
  82. #define I82580_CFG_ASSERT_CRS_ON_TX (1 << 15)
  83. #define I82580_CFG_ENABLE_DOWNSHIFT (3 << 10) /* auto downshift 100/10 */
  84. #define I82580_CTRL_REG 23
  85. #define I82580_CTRL_DOWNSHIFT_MASK (7 << 10)
  86. /* 82580 specific PHY registers */
  87. #define I82580_PHY_CTRL_2 18
  88. #define I82580_PHY_LBK_CTRL 19
  89. #define I82580_PHY_STATUS_2 26
  90. #define I82580_PHY_DIAG_STATUS 31
  91. /* I82580 PHY Status 2 */
  92. #define I82580_PHY_STATUS2_REV_POLARITY 0x0400
  93. #define I82580_PHY_STATUS2_MDIX 0x0800
  94. #define I82580_PHY_STATUS2_SPEED_MASK 0x0300
  95. #define I82580_PHY_STATUS2_SPEED_1000MBPS 0x0200
  96. #define I82580_PHY_STATUS2_SPEED_100MBPS 0x0100
  97. /* I82580 PHY Control 2 */
  98. #define I82580_PHY_CTRL2_MANUAL_MDIX 0x0200
  99. #define I82580_PHY_CTRL2_AUTO_MDI_MDIX 0x0400
  100. #define I82580_PHY_CTRL2_MDIX_CFG_MASK 0x0600
  101. /* I82580 PHY Diagnostics Status */
  102. #define I82580_DSTATUS_CABLE_LENGTH 0x03FC
  103. #define I82580_DSTATUS_CABLE_LENGTH_SHIFT 2
  104. /* 82580 PHY Power Management */
  105. #define E1000_82580_PHY_POWER_MGMT 0xE14
  106. #define E1000_82580_PM_SPD 0x0001 /* Smart Power Down */
  107. #define E1000_82580_PM_D0_LPLU 0x0002 /* For D0a states */
  108. #define E1000_82580_PM_D3_LPLU 0x0004 /* For all other states */
  109. #define E1000_82580_PM_GO_LINKD 0x0020 /* Go Link Disconnect */
  110. /* Enable flexible speed on link-up */
  111. #define IGP02E1000_PM_D0_LPLU 0x0002 /* For D0a states */
  112. #define IGP02E1000_PM_D3_LPLU 0x0004 /* For all other states */
  113. #define IGP01E1000_PLHR_SS_DOWNGRADE 0x8000
  114. #define IGP01E1000_PSSR_POLARITY_REVERSED 0x0002
  115. #define IGP01E1000_PSSR_MDIX 0x0800
  116. #define IGP01E1000_PSSR_SPEED_MASK 0xC000
  117. #define IGP01E1000_PSSR_SPEED_1000MBPS 0xC000
  118. #define IGP02E1000_PHY_CHANNEL_NUM 4
  119. #define IGP02E1000_PHY_AGC_A 0x11B1
  120. #define IGP02E1000_PHY_AGC_B 0x12B1
  121. #define IGP02E1000_PHY_AGC_C 0x14B1
  122. #define IGP02E1000_PHY_AGC_D 0x18B1
  123. #define IGP02E1000_AGC_LENGTH_SHIFT 9 /* Course - 15:13, Fine - 12:9 */
  124. #define IGP02E1000_AGC_LENGTH_MASK 0x7F
  125. #define IGP02E1000_AGC_RANGE 15
  126. #define E1000_CABLE_LENGTH_UNDEFINED 0xFF
  127. /* GS40G - I210 PHY defines */
  128. #define GS40G_PAGE_SELECT 0x16
  129. #define GS40G_PAGE_SHIFT 16
  130. #define GS40G_OFFSET_MASK 0xFFFF
  131. #define GS40G_PAGE_2 0x20000
  132. #define GS40G_MAC_REG2 0x15
  133. #define GS40G_MAC_LB 0x4140
  134. #define GS40G_MAC_SPEED_1G 0X0006
  135. #define GS40G_COPPER_SPEC 0x0010
  136. #define GS40G_CS_POWER_DOWN 0x0002
  137. #define GS40G_LINE_LB 0x4000
  138. #endif