ice_ethtool.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /* Copyright (C) 2023 Intel Corporation */
  3. #ifndef _ICE_ETHTOOL_H_
  4. #define _ICE_ETHTOOL_H_
  5. struct ice_phy_type_to_ethtool {
  6. u64 aq_link_speed;
  7. u8 link_mode;
  8. };
  9. struct ice_serdes_equalization_to_ethtool {
  10. int rx_equ_pre2;
  11. int rx_equ_pre1;
  12. int rx_equ_post1;
  13. int rx_equ_bflf;
  14. int rx_equ_bfhf;
  15. int rx_equ_ctle_gainhf;
  16. int rx_equ_ctle_gainlf;
  17. int rx_equ_ctle_gaindc;
  18. int rx_equ_ctle_bw;
  19. int rx_equ_dfe_gain;
  20. int rx_equ_dfe_gain_2;
  21. int rx_equ_dfe_2;
  22. int rx_equ_dfe_3;
  23. int rx_equ_dfe_4;
  24. int rx_equ_dfe_5;
  25. int rx_equ_dfe_6;
  26. int rx_equ_dfe_7;
  27. int rx_equ_dfe_8;
  28. int rx_equ_dfe_9;
  29. int rx_equ_dfe_10;
  30. int rx_equ_dfe_11;
  31. int rx_equ_dfe_12;
  32. int tx_equ_pre1;
  33. int tx_equ_pre3;
  34. int tx_equ_atten;
  35. int tx_equ_post1;
  36. int tx_equ_pre2;
  37. };
  38. struct ice_regdump_to_ethtool {
  39. /* A multilane port can have max 4 serdes */
  40. struct ice_serdes_equalization_to_ethtool equalization[4];
  41. };
  42. /* Port topology from lport i.e.
  43. * serdes mapping, pcsquad, macport, cage etc...
  44. */
  45. struct ice_port_topology {
  46. u16 pcs_port;
  47. u16 primary_serdes_lane;
  48. u16 serdes_lane_count;
  49. u16 pcs_quad_select;
  50. };
  51. /* Macro to make PHY type to Ethtool link mode table entry.
  52. * The index is the PHY type.
  53. */
  54. #define ICE_PHY_TYPE(LINK_SPEED, ETHTOOL_LINK_MODE) {\
  55. .aq_link_speed = ICE_AQ_LINK_SPEED_##LINK_SPEED, \
  56. .link_mode = ETHTOOL_LINK_MODE_##ETHTOOL_LINK_MODE##_BIT, \
  57. }
  58. /* Lookup table mapping PHY type low to link speed and Ethtool link modes.
  59. * Array index corresponds to HW PHY type bit, see
  60. * ice_adminq_cmd.h:ICE_PHY_TYPE_LOW_*.
  61. */
  62. static const struct ice_phy_type_to_ethtool
  63. phy_type_low_lkup[] = {
  64. [0] = ICE_PHY_TYPE(100MB, 100baseT_Full),
  65. [1] = ICE_PHY_TYPE(100MB, 100baseT_Full),
  66. [2] = ICE_PHY_TYPE(1000MB, 1000baseT_Full),
  67. [3] = ICE_PHY_TYPE(1000MB, 1000baseX_Full),
  68. [4] = ICE_PHY_TYPE(1000MB, 1000baseX_Full),
  69. [5] = ICE_PHY_TYPE(1000MB, 1000baseKX_Full),
  70. [6] = ICE_PHY_TYPE(1000MB, 1000baseT_Full),
  71. [7] = ICE_PHY_TYPE(2500MB, 2500baseT_Full),
  72. [8] = ICE_PHY_TYPE(2500MB, 2500baseX_Full),
  73. [9] = ICE_PHY_TYPE(2500MB, 2500baseX_Full),
  74. [10] = ICE_PHY_TYPE(5GB, 5000baseT_Full),
  75. [11] = ICE_PHY_TYPE(5GB, 5000baseT_Full),
  76. [12] = ICE_PHY_TYPE(10GB, 10000baseT_Full),
  77. [13] = ICE_PHY_TYPE(10GB, 10000baseCR_Full),
  78. [14] = ICE_PHY_TYPE(10GB, 10000baseSR_Full),
  79. [15] = ICE_PHY_TYPE(10GB, 10000baseLR_Full),
  80. [16] = ICE_PHY_TYPE(10GB, 10000baseKR_Full),
  81. [17] = ICE_PHY_TYPE(10GB, 10000baseCR_Full),
  82. [18] = ICE_PHY_TYPE(10GB, 10000baseKR_Full),
  83. [19] = ICE_PHY_TYPE(25GB, 25000baseCR_Full),
  84. [20] = ICE_PHY_TYPE(25GB, 25000baseCR_Full),
  85. [21] = ICE_PHY_TYPE(25GB, 25000baseCR_Full),
  86. [22] = ICE_PHY_TYPE(25GB, 25000baseCR_Full),
  87. [23] = ICE_PHY_TYPE(25GB, 25000baseSR_Full),
  88. [24] = ICE_PHY_TYPE(25GB, 25000baseSR_Full),
  89. [25] = ICE_PHY_TYPE(25GB, 25000baseKR_Full),
  90. [26] = ICE_PHY_TYPE(25GB, 25000baseKR_Full),
  91. [27] = ICE_PHY_TYPE(25GB, 25000baseKR_Full),
  92. [28] = ICE_PHY_TYPE(25GB, 25000baseSR_Full),
  93. [29] = ICE_PHY_TYPE(25GB, 25000baseCR_Full),
  94. [30] = ICE_PHY_TYPE(40GB, 40000baseCR4_Full),
  95. [31] = ICE_PHY_TYPE(40GB, 40000baseSR4_Full),
  96. [32] = ICE_PHY_TYPE(40GB, 40000baseLR4_Full),
  97. [33] = ICE_PHY_TYPE(40GB, 40000baseKR4_Full),
  98. [34] = ICE_PHY_TYPE(40GB, 40000baseSR4_Full),
  99. [35] = ICE_PHY_TYPE(40GB, 40000baseCR4_Full),
  100. [36] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full),
  101. [37] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full),
  102. [38] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full),
  103. [39] = ICE_PHY_TYPE(50GB, 50000baseKR2_Full),
  104. [40] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full),
  105. [41] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full),
  106. [42] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full),
  107. [43] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full),
  108. [44] = ICE_PHY_TYPE(50GB, 50000baseCR_Full),
  109. [45] = ICE_PHY_TYPE(50GB, 50000baseSR_Full),
  110. [46] = ICE_PHY_TYPE(50GB, 50000baseLR_ER_FR_Full),
  111. [47] = ICE_PHY_TYPE(50GB, 50000baseLR_ER_FR_Full),
  112. [48] = ICE_PHY_TYPE(50GB, 50000baseKR_Full),
  113. [49] = ICE_PHY_TYPE(50GB, 50000baseSR_Full),
  114. [50] = ICE_PHY_TYPE(50GB, 50000baseCR_Full),
  115. [51] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full),
  116. [52] = ICE_PHY_TYPE(100GB, 100000baseSR4_Full),
  117. [53] = ICE_PHY_TYPE(100GB, 100000baseLR4_ER4_Full),
  118. [54] = ICE_PHY_TYPE(100GB, 100000baseKR4_Full),
  119. [55] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full),
  120. [56] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full),
  121. [57] = ICE_PHY_TYPE(100GB, 100000baseSR4_Full),
  122. [58] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full),
  123. [59] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full),
  124. [60] = ICE_PHY_TYPE(100GB, 100000baseKR4_Full),
  125. [61] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full),
  126. [62] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full),
  127. [63] = ICE_PHY_TYPE(100GB, 100000baseLR4_ER4_Full),
  128. };
  129. /* Lookup table mapping PHY type high to link speed and Ethtool link modes.
  130. * Array index corresponds to HW PHY type bit, see
  131. * ice_adminq_cmd.h:ICE_PHY_TYPE_HIGH_*
  132. */
  133. static const struct ice_phy_type_to_ethtool
  134. phy_type_high_lkup[] = {
  135. [0] = ICE_PHY_TYPE(100GB, 100000baseKR2_Full),
  136. [1] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full),
  137. [2] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full),
  138. [3] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full),
  139. [4] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full),
  140. [5] = ICE_PHY_TYPE(200GB, 200000baseCR4_Full),
  141. [6] = ICE_PHY_TYPE(200GB, 200000baseSR4_Full),
  142. [7] = ICE_PHY_TYPE(200GB, 200000baseLR4_ER4_FR4_Full),
  143. [8] = ICE_PHY_TYPE(200GB, 200000baseLR4_ER4_FR4_Full),
  144. [9] = ICE_PHY_TYPE(200GB, 200000baseDR4_Full),
  145. [10] = ICE_PHY_TYPE(200GB, 200000baseKR4_Full),
  146. [11] = ICE_PHY_TYPE(200GB, 200000baseSR4_Full),
  147. [12] = ICE_PHY_TYPE(200GB, 200000baseCR4_Full),
  148. };
  149. #endif /* !_ICE_ETHTOOL_H_ */