mii.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. /*++
  2. Copyright (c) 2014 Minoca Corp.
  3. This file is licensed under the terms of the GNU General Public License
  4. version 3. Alternative licensing terms are available. Contact
  5. info@minocacorp.com for details. See the LICENSE file at the root of this
  6. project for complete licensing information.
  7. Module Name:
  8. mii.h
  9. Abstract:
  10. This header contains definitions for the Media Independent Interface, a
  11. register set commonly used on networking PHYs.
  12. Author:
  13. Evan Green 8-Dec-2014
  14. --*/
  15. //
  16. // ------------------------------------------------------------------- Includes
  17. //
  18. //
  19. // ---------------------------------------------------------------- Definitions
  20. //
  21. #define MII_PHY_COUNT 32
  22. //
  23. // Define MII Basic Control register bits.
  24. //
  25. #define MII_BASIC_CONTROL_SPEED_1000 0x0040
  26. #define MII_BASIC_CONTROL_COLLISION_TEST 0x0080
  27. #define MII_BASIC_CONTROL_FULL_DUPLEX 0x0100
  28. #define MII_BASIC_CONTROL_RESTART_AUTONEGOTIATION 0x0200
  29. #define MII_BASIC_CONTROL_ISOLATE 0x0400
  30. #define MII_BASIC_CONTROL_POWER_DOWN 0x0800
  31. #define MII_BASIC_CONTROL_ENABLE_AUTONEGOTIATION 0x1000
  32. #define MII_BASIC_CONTROL_SPEED_100 0x2000
  33. #define MII_BASIC_CONTROL_LOOPBACK 0x4000
  34. #define MII_BASIC_CONTROL_RESET 0x8000
  35. //
  36. // Define MII Basic Status register bits.
  37. //
  38. #define MII_BASIC_STATUS_EXTENDED_CAPABILITY 0x0001
  39. #define MII_BASIC_STATUS_JABBER_DETECTED 0x0002
  40. #define MII_BASIC_STATUS_LINK_STATUS 0x0004
  41. #define MII_BASIC_STATUS_AUTONEGOTIATE_CAPABLE 0x0008
  42. #define MII_BASIC_STATUS_REMOTE_FAULT 0x0010
  43. #define MII_BASIC_STATUS_AUTONEGOTIATE_COMPLETE 0x0020
  44. #define MII_BASIC_STATUS_PREAMBLE_SUPPRESSION 0x0040
  45. //
  46. // This bit is set if there is extended status in register 0x0F.
  47. //
  48. #define MII_BASIC_STATUS_EXTENDED_STATUS 0x0100
  49. //
  50. // This bit is set if the PHY can do 100BASE-T2 half-duplex.
  51. //
  52. #define MII_BASIC_STATUS_100_HALF2 0x0200
  53. //
  54. // This bit is set if the PHY can do 100BASE-T2 full-duplex.
  55. //
  56. #define MII_BASIC_STATUS_100_FULL2 0x0400
  57. //
  58. // This bit is set if the PHY can do 10 Mbps half-duplex.
  59. //
  60. #define MII_BASIC_STATUS_10_HALF 0x0800
  61. //
  62. // This bit is set if the PHY can do 10 Mbps full-duplex.
  63. //
  64. #define MII_BASIC_STATUS_10_FULL 0x1000
  65. //
  66. // This bit is set if the PHY can do 100 Mbps, half-duplex.
  67. //
  68. #define MII_BASIC_STATUS_100_HALF 0x2000
  69. //
  70. // This bit is set if the PHY can do 100 Mbps, full-duplex.
  71. //
  72. #define MII_BASIC_STATUS_100_FULL 0x4000
  73. //
  74. // This bit is set if the PHY can do 100 Mbps with 4k packets.
  75. //
  76. #define MII_BASIC_STATUS_100_BASE4 0x8000
  77. #define MII_BASIC_STATUS_MEDIA_MASK \
  78. (MII_BASIC_STATUS_100_HALF2 | \
  79. MII_BASIC_STATUS_100_FULL2 | \
  80. MII_BASIC_STATUS_10_HALF | \
  81. MII_BASIC_STATUS_10_FULL | \
  82. MII_BASIC_STATUS_100_HALF | \
  83. MII_BASIC_STATUS_100_FULL | \
  84. MII_BASIC_STATUS_100_BASE4)
  85. //
  86. // Define MII Advertise register bits.
  87. //
  88. #define MII_ADVERTISE_SELECT_MASK 0x001F
  89. #define MII_ADVERTISE_CSMA 0x0001
  90. #define MII_ADVERTISE_10_HALF 0x0020
  91. #define MII_ADVERTISE_1000X_FULL 0x0020
  92. #define MII_ADVERTISE_10_FULL 0x0040
  93. #define MII_ADVERTISE_1000X_HALF 0x0040
  94. #define MII_ADVERTISE_100_HALF 0x0080
  95. #define MII_ADVERTISE_1000X_PAUSE 0x0080
  96. #define MII_ADVERTISE_100_FULL 0x0100
  97. #define MII_ADVERTISE_1000X_PAUSE_ASYMMETRIC 0x0100
  98. #define MII_ADVERTISE_100_BASE4 0x0200
  99. #define MII_ADVERTISE_PAUSE 0x0400
  100. #define MII_ADVERTISE_PAUSE_ASYMMETRIC 0x0800
  101. #define MII_ADVERTISE_REMOTE_FAULT 0x2000
  102. #define MII_ADVERTISE_LINK_PARTNER 0x4000
  103. #define MII_ADVERTISE_NEXT_PAGE 0x8000
  104. #define MII_ADVERTISE_FULL \
  105. (MII_ADVERTISE_100_FULL | MII_ADVERTISE_10_FULL | MII_ADVERTISE_CSMA)
  106. #define MII_ADVERTISE_ALL \
  107. (MII_ADVERTISE_10_HALF | MII_ADVERTISE_10_FULL | \
  108. MII_ADVERTISE_100_HALF | MII_ADVERTISE_100_FULL)
  109. //
  110. // Define MII Gigabit control register bits.
  111. //
  112. #define MII_GIGABIT_CONTROL_MANUAL_MASTER 0x1000
  113. #define MII_GIGABIT_CONTROL_ADVANCED_MASTER 0x0800
  114. #define MII_GIGABIT_CONTROL_ADVERTISE_1000_FULL 0x0200
  115. #define MII_GIGABIT_CONTROL_ADVERTISE_1000_HALF 0x0100
  116. //
  117. // Define MII Gigabit status register bits.
  118. //
  119. #define MII_GIGABIT_STATUS_ASYMMETRIC_PAUSE_CAPABLE 0x0200
  120. #define MII_GIGABIT_STATUS_PARTNER_1000_HALF 0x0400
  121. #define MII_GIGABIT_STATUS_PARTNER_1000_FULL 0x0800
  122. #define MII_GIGABIT_STATUS_REMOTE_RX_STATUS 0x1000
  123. #define MII_GIGABIT_STATUS_LOCAL_RX_STATUS 0x2000
  124. #define MII_GIGABIT_STATUS_MASTER 0x4000
  125. #define MII_GIGABIT_STATUS_MASTER_SLAVE_FAULT 0x8000
  126. //
  127. // ------------------------------------------------------ Data Type Definitions
  128. //
  129. typedef enum _MII_REGISTER {
  130. MiiRegisterBasicControl = 0x00, // BMCR
  131. MiiRegisterBasicStatus = 0x01, // BMSR
  132. MiiRegisterPhysicalId1 = 0x02, // PHYSID1
  133. MiiRegisterPhysicalId2 = 0x03, // PHYSID2
  134. MiiRegisterAdvertise = 0x04, // ADVERTISE
  135. MiiRegisterLinkPartnerAbility = 0x05, // LPA
  136. MiiRegisterExpansion = 0x06, // EXPANSION
  137. MiiRegisterGigabitControl = 0x09, // CTRL1000
  138. MiiRegisterGigabitStatus = 0x0A, // STAT1000
  139. MiiRegisterExtendedStatus = 0x0F, // ESTATUS
  140. MiiRegisterDisconnectCounter = 0x12, // DCOUNTER
  141. MiiRegisterFalseCarrierCounter = 0x13, // FCSCOUNTER
  142. MiiRegisterNWayTest = 0x14, // NWAYTEST
  143. MiiRegisterReceiveErrorCounter = 0x15, // RERRCOUNTER
  144. MiiRegisterSiliconRevision = 0x16, // SREVISION
  145. MiiRegisterLoopbackReceiveBypassError = 0x18, // LBRERROR
  146. MiiRegisterPhyAddress = 0x19, // PHYADDR
  147. MiiRegisterTpiStatus = 0x1B, // TPISTATUS
  148. MiiRegisterNetworkConfiguration = 0x1C, // NCONFIG
  149. } MII_REGISTER, *PMII_REGISTER;
  150. //
  151. // -------------------------------------------------------------------- Globals
  152. //
  153. //
  154. // -------------------------------------------------------- Function Prototypes
  155. //