Line data Source code
1 1 : /* 2 : * Copyright 2023 NXP 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : /** 8 : * @file 9 : * @brief Definitions for IEEE 802.3 management interface 10 : */ 11 : 12 : #ifndef ZEPHYR_INCLUDE_NET_MDIO_H_ 13 : #define ZEPHYR_INCLUDE_NET_MDIO_H_ 14 : 15 : /** 16 : * @brief Definitions for IEEE 802.3 management interface 17 : * @defgroup ethernet_mdio IEEE 802.3 management interface 18 : * @since 3.5 19 : * @version 0.8.0 20 : * @ingroup ethernet 21 : * @{ 22 : */ 23 : 24 : #ifdef __cplusplus 25 : extern "C" { 26 : #endif 27 : 28 : /** MDIO transaction operation code */ 29 1 : enum mdio_opcode { 30 : /** IEEE 802.3 22.2.4.5.4 write operation */ 31 : MDIO_OP_C22_WRITE = 1, 32 : 33 : /** IEEE 802.3 22.2.4.5.4 read operation */ 34 : MDIO_OP_C22_READ = 2, 35 : 36 : /** IEEE 802.3 45.3.4 address operation */ 37 : MDIO_OP_C45_ADDRESS = 0, 38 : 39 : /** IEEE 802.3 45.3.4 write operation */ 40 : MDIO_OP_C45_WRITE = 1, 41 : 42 : /** IEEE 802.3 45.3.4 post-read-increment-address operation */ 43 : MDIO_OP_C45_READ_INC = 2, 44 : 45 : /** IEEE 802.3 45.3.4 read operation */ 46 : MDIO_OP_C45_READ = 3 47 : }; 48 : 49 : /* MDIO Manageable Device addresses */ 50 : /** Physical Medium Attachment / Physical Medium Dependent */ 51 1 : #define MDIO_MMD_PMAPMD 0x01U 52 : /** WAN Interface Sublayer */ 53 1 : #define MDIO_MMD_WIS 0x02U 54 : /** Physical Coding Sublayer */ 55 1 : #define MDIO_MMD_PCS 0x03U 56 : /** PHY Extender Sublayer */ 57 1 : #define MDIO_MMD_PHYXS 0x04U 58 : /** DTE Extender Sublayer */ 59 1 : #define MDIO_MMD_DTEXS 0x05U 60 : /** Transmission Convergence */ 61 1 : #define MDIO_MMD_TC 0x06U 62 : /** Auto-negotiation */ 63 1 : #define MDIO_MMD_AN 0x07U 64 : /** Separated PMA (1) */ 65 1 : #define MDIO_MMD_SEPARATED_PMA1 0x08U 66 : /** Separated PMA (2) */ 67 1 : #define MDIO_MMD_SEPARATED_PMA2 0x09U 68 : /** Separated PMA (3) */ 69 1 : #define MDIO_MMD_SEPARATED_PMA3 0x0AU 70 : /** Separated PMA (4) */ 71 1 : #define MDIO_MMD_SEPARATED_PMA4 0x0BU 72 : /** Clause 22 extension */ 73 1 : #define MDIO_MMD_C22EXT 0x1DU 74 : /** Vendor Specific 1 */ 75 1 : #define MDIO_MMD_VENDOR_SPECIFIC1 0x1EU 76 : /** Vendor Specific 2 */ 77 1 : #define MDIO_MMD_VENDOR_SPECIFIC2 0x1FU 78 : 79 : /* MDIO generic registers */ 80 : /** Control 1 */ 81 1 : #define MDIO_CTRL1 0x0000U 82 : /** Status 1 */ 83 1 : #define MDIO_STAT1 0x0001U 84 : /** Device identifier (1) */ 85 1 : #define MDIO_DEVID1 0x0002U 86 : /** Device identifier (2) */ 87 1 : #define MDIO_DEVID2 0x0003U 88 : /** Speed ability */ 89 1 : #define MDIO_SPEED 0x0004U 90 : /** Devices in package (1) */ 91 1 : #define MDIO_DEVS1 0x0005U 92 : /** Devices in package (2) */ 93 1 : #define MDIO_DEVS2 0x0006U 94 : /** Control 2 */ 95 1 : #define MDIO_CTRL2 0x0007U 96 : /** Status 2 */ 97 1 : #define MDIO_STAT2 0x0008U 98 : /** Package identifier (1) */ 99 1 : #define MDIO_PKGID1 0x000EU 100 : /** Package identifier (2) */ 101 1 : #define MDIO_PKGID2 0x000FU 102 : /* PCS Register: EEE capability Register */ 103 0 : #define MDIO_PCS_EEE_CAP 0x0014U 104 : /* Auto-negotiation Register: EEE advertisement Register */ 105 0 : #define MDIO_AN_EEE_ADV 0x003CU 106 : 107 : 108 : /* BASE-T1 registers */ 109 : /** BASE-T1 Auto-negotiation control */ 110 1 : #define MDIO_AN_T1_CTRL 0x0200U 111 : /** BASE-T1 Auto-negotiation status */ 112 1 : #define MDIO_AN_T1_STAT 0x0201U 113 : /** BASE-T1 Auto-negotiation advertisement register [15:0] */ 114 1 : #define MDIO_AN_T1_ADV_L 0x0202U 115 : /** BASE-T1 Auto-negotiation advertisement register [31:16] */ 116 1 : #define MDIO_AN_T1_ADV_M 0x0203U 117 : /** BASE-T1 Auto-negotiation advertisement register [47:32] */ 118 1 : #define MDIO_AN_T1_ADV_H 0x0204U 119 : /** BASE-T1 PMA/PMD control register */ 120 1 : #define MDIO_PMA_PMD_BT1_CTRL 0x0834U 121 : 122 : /* BASE-T1 Auto-negotiation Control register */ 123 : /** Auto-negotiation Restart */ 124 1 : #define MDIO_AN_T1_CTRL_RESTART BIT(9) 125 : /** Auto-negotiation Enable */ 126 1 : #define MDIO_AN_T1_CTRL_EN BIT(12) 127 : 128 : /* BASE-T1 Auto-negotiation Status register */ 129 : /** Link Status */ 130 1 : #define MDIO_AN_T1_STAT_LINK_STATUS BIT(2) 131 : /** Auto-negotiation Ability */ 132 1 : #define MDIO_AN_T1_STAT_ABLE BIT(3) 133 : /** Auto-negotiation Remote Fault */ 134 1 : #define MDIO_AN_T1_STAT_REMOTE_FAULT BIT(4) 135 : /** Auto-negotiation Complete */ 136 1 : #define MDIO_AN_T1_STAT_COMPLETE BIT(5) 137 : /** Page Received */ 138 1 : #define MDIO_AN_T1_STAT_PAGE_RX BIT(6) 139 : 140 : /* BASE-T1 Auto-negotiation Advertisement register [15:0] */ 141 : /** Pause Ability */ 142 1 : #define MDIO_AN_T1_ADV_L_PAUSE_CAP BIT(10) 143 : /** Pause Ability */ 144 1 : #define MDIO_AN_T1_ADV_L_PAUSE_ASYM BIT(11) 145 : /** Force Master/Slave Configuration */ 146 1 : #define MDIO_AN_T1_ADV_L_FORCE_MS BIT(12) 147 : /** Remote Fault */ 148 1 : #define MDIO_AN_T1_ADV_L_REMOTE_FAULT BIT(13) 149 : /** Acknowledge (ACK) */ 150 1 : #define MDIO_AN_T1_ADV_L_ACK BIT(14) 151 : /** Next Page Request */ 152 1 : #define MDIO_AN_T1_ADV_L_NEXT_PAGE_REQ BIT(15) 153 : 154 : /* BASE-T1 Auto-negotiation Advertisement register [31:16] */ 155 : /** 10BASE-T1L Ability */ 156 1 : #define MDIO_AN_T1_ADV_M_B10L BIT(14) 157 : /** Master/slave Configuration */ 158 1 : #define MDIO_AN_T1_ADV_M_MST BIT(4) 159 : 160 : /* BASE-T1 Auto-negotiation Advertisement register [47:32] */ 161 : /** 10BASE-T1L High Level Transmit Operating Mode Request */ 162 1 : #define MDIO_AN_T1_ADV_H_10L_TX_HI_REQ BIT(12) 163 : /** 10BASE-T1L High Level Transmit Operating Mode Ability */ 164 1 : #define MDIO_AN_T1_ADV_H_10L_TX_HI BIT(13) 165 : 166 : /* BASE-T1 PMA/PMD control register */ 167 : /** BASE-T1 master/slave configuration */ 168 1 : #define MDIO_PMA_PMD_BT1_CTRL_CFG_MST BIT(14) 169 : 170 : 171 : /* 10BASE-T1L registers */ 172 : /** 10BASE-T1L PMA control */ 173 1 : #define MDIO_PMA_B10L_CTRL 0x08F6U 174 : /** 10BASE-T1L PMA status */ 175 1 : #define MDIO_PMA_B10L_STAT 0x08F7U 176 : /** 10BASE-T1L PMA link status*/ 177 1 : #define MDIO_PMA_B10L_LINK_STAT 0x8302U 178 : /** 10BASE-T1L PCS control */ 179 1 : #define MDIO_PCS_B10L_CTRL 0x08E6U 180 : /** 10BASE-T1L PCS status */ 181 1 : #define MDIO_PCS_B10L_STAT 0x08E7U 182 : 183 : /* 10BASE-T1L PMA control register */ 184 : /** 10BASE-T1L Transmit Disable Mode */ 185 1 : #define MDIO_PMA_B10L_CTRL_TX_DIS_MODE_EN BIT(14) 186 : /** 10BASE-T1L Transmit Voltage Amplitude Control */ 187 1 : #define MDIO_PMA_B10L_CTRL_TX_LVL_HI BIT(12) 188 : /** 10BASE-T1L EEE Enable */ 189 1 : #define MDIO_PMA_B10L_CTRL_EEE BIT(10) 190 : /** 10BASE-T1L PMA Loopback */ 191 1 : #define MDIO_PMA_B10L_CTRL_LB_PMA_LOC_EN BIT(0) 192 : 193 : /* 10BASE-T1L PMA status register */ 194 : /** 10BASE-T1L PMA receive link up */ 195 1 : #define MDIO_PMA_B10L_STAT_LINK BIT(0) 196 : /** 10BASE-T1L Fault condition detected */ 197 1 : #define MDIO_PMA_B10L_STAT_FAULT BIT(1) 198 : /** 10BASE-T1L Receive polarity is reversed */ 199 1 : #define MDIO_PMA_B10L_STAT_POLARITY BIT(2) 200 : /** 10BASE-T1L Able to detect fault on receive path */ 201 1 : #define MDIO_PMA_B10L_STAT_RECV_FAULT BIT(9) 202 : /** 10BASE-T1L PHY has EEE ability */ 203 1 : #define MDIO_PMA_B10L_STAT_EEE BIT(10) 204 : /** 10BASE-T1L PMA has low-power ability */ 205 1 : #define MDIO_PMA_B10L_STAT_LOW_POWER BIT(11) 206 : /** 10BASE-T1L PHY has 2.4 Vpp operating mode ability */ 207 1 : #define MDIO_PMA_B10L_STAT_2V4_ABLE BIT(12) 208 : /** 10BASE-T1L PHY has loopback ability */ 209 1 : #define MDIO_PMA_B10L_STAT_LB_ABLE BIT(13) 210 : 211 : /* 10BASE-T1L PMA link status*/ 212 : /** 10BASE-T1L Remote Receiver Status OK Latch Low */ 213 1 : #define MDIO_PMA_B10L_LINK_STAT_REM_RCVR_STAT_OK_LL BIT(9) 214 : /** 10BASE-T1L Remote Receiver Status OK */ 215 1 : #define MDIO_PMA_B10L_LINK_STAT_REM_RCVR_STAT_OK BIT(8) 216 : /** 10BASE-T1L Local Receiver Status OK */ 217 1 : #define MDIO_PMA_B10L_LINK_STAT_LOC_RCVR_STAT_OK_LL BIT(7) 218 : /** 10BASE-T1L Local Receiver Status OK */ 219 1 : #define MDIO_PMA_B10L_LINK_STAT_LOC_RCVR_STAT_OK BIT(6) 220 : /** 10BASE-T1L Descrambler Status OK Latch Low */ 221 1 : #define MDIO_PMA_B10L_LINK_STAT_DSCR_STAT_OK_LL BIT(5) 222 : /** 10BASE-T1L Descrambler Status OK */ 223 1 : #define MDIO_PMA_B10L_LINK_STAT_DSCR_STAT_OK BIT(4) 224 : /** 10BASE-T1L Link Status OK Latch Low */ 225 1 : #define MDIO_PMA_B10L_LINK_STAT_LINK_STAT_OK_LL BIT(1) 226 : /** 10BASE-T1L Link Status OK */ 227 1 : #define MDIO_PMA_B10L_LINK_STAT_LINK_STAT_OK BIT(0) 228 : 229 : /* 10BASE-T1L PCS control */ 230 : /** 10BASE-T1L PCS Loopback Enable */ 231 1 : #define MDIO_PCS_B10L_CTRL_LB_PCS_EN BIT(14) 232 : 233 : /* 10BASE-T1L PCS status */ 234 : /** 10BASE-T1L PCS Descrambler Status */ 235 1 : #define MDIO_PCS_B10L_STAT_DSCR_STAT_OK_LL BIT(2) 236 : 237 : /* Auto-negotiation Register: EEE advertisement Register */ 238 : /** Advertise 1000T capability */ 239 1 : #define MDIO_AN_EEE_ADV_1000T BIT(2) 240 : /** Advertise 100TX capability */ 241 1 : #define MDIO_AN_EEE_ADV_100TX BIT(1) 242 : 243 : #ifdef __cplusplus 244 : } 245 : #endif 246 : 247 : /** 248 : * @} 249 : */ 250 : 251 : #endif /* ZEPHYR_INCLUDE_NET_MDIO_H_ */