blob: 8d1998f7cec93eb8f451f0312e5c9f8b804df058 [file] [log] [blame]
/*
* Copyright 2023 NXP
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @brief Definitions for IEEE 802.3 management interface
*/
#ifndef ZEPHYR_INCLUDE_NET_MDIO_H_
#define ZEPHYR_INCLUDE_NET_MDIO_H_
/**
* @brief Definitions for IEEE 802.3 management interface
* @defgroup ethernet_mdio IEEE 802.3 management interface
* @ingroup ethernet
* @{
*/
#ifdef __cplusplus
extern "C" {
#endif
/** MDIO transaction operation code */
enum mdio_opcode {
/** IEEE 802.3 22.2.4.5.4 write operation */
MDIO_OP_C22_WRITE = 1,
/** IEEE 802.3 22.2.4.5.4 read operation */
MDIO_OP_C22_READ = 2,
/** IEEE 802.3 45.3.4 address operation */
MDIO_OP_C45_ADDRESS = 0,
/** IEEE 802.3 45.3.4 write operation */
MDIO_OP_C45_WRITE = 1,
/** IEEE 802.3 45.3.4 post-read-increment-address operation */
MDIO_OP_C45_READ_INC = 2,
/** IEEE 802.3 45.3.4 read operation */
MDIO_OP_C45_READ = 3
};
/* MDIO Manageable Device addresses */
/** Physical Medium Attachment / Physical Medium Dependent */
#define MDIO_MMD_PMAPMD 0x01U
/** WAN Interface Sublayer */
#define MDIO_MMD_WIS 0x02U
/** Physical Coding Sublayer */
#define MDIO_MMD_PCS 0x03U
/** PHY Extender Sublayer */
#define MDIO_MMD_PHYXS 0x04U
/** DTE Extender Sublayer */
#define MDIO_MMD_DTEXS 0x05U
/** Transmission Convergence */
#define MDIO_MMD_TC 0x06U
/** Auto-negotiation */
#define MDIO_MMD_AN 0x07U
/** Separated PMA (1) */
#define MDIO_MMD_SEPARATED_PMA1 0x08U
/** Separated PMA (2) */
#define MDIO_MMD_SEPARATED_PMA2 0x09U
/** Separated PMA (3) */
#define MDIO_MMD_SEPARATED_PMA3 0x0AU
/** Separated PMA (4) */
#define MDIO_MMD_SEPARATED_PMA4 0x0BU
/** Clause 22 extension */
#define MDIO_MMD_C22EXT 0x1DU
/** Vendor Specific 1 */
#define MDIO_MMD_VENDOR_SPECIFIC1 0x1EU
/** Vendor Specific 2 */
#define MDIO_MMD_VENDOR_SPECIFIC2 0x1FU
/* MDIO generic registers */
/** Control 1 */
#define MDIO_CTRL1 0x0000U
/** Status 1 */
#define MDIO_STAT1 0x0001U
/** Device identifier (1) */
#define MDIO_DEVID1 0x0002U
/** Device identifier (2) */
#define MDIO_DEVID2 0x0003U
/** Speed ability */
#define MDIO_SPEED 0x0004U
/** Devices in package (1) */
#define MDIO_DEVS1 0x0005U
/** Devices in package (2) */
#define MDIO_DEVS2 0x0006U
/** Control 2 */
#define MDIO_CTRL2 0x0007U
/** Status 2 */
#define MDIO_STAT2 0x0008U
/** Package identifier (1) */
#define MDIO_PKGID1 0x000EU
/** Package identifier (2) */
#define MDIO_PKGID2 0x000FU
/* BASE-T1 registers */
/** BASE-T1 Auto-negotiation control */
#define MDIO_AN_T1_CTRL 0x0200U
/** BASE-T1 Auto-negotiation status */
#define MDIO_AN_T1_STAT 0x0201U
/** BASE-T1 Auto-negotiation advertisement register [15:0] */
#define MDIO_AN_T1_ADV_L 0x0202U
/** BASE-T1 Auto-negotiation advertisement register [31:16] */
#define MDIO_AN_T1_ADV_M 0x0203U
/** BASE-T1 Auto-negotiation advertisement register [47:32] */
#define MDIO_AN_T1_ADV_H 0x0204U
/* BASE-T1 PMA/PMD control register */
#define MDIO_PMA_PMD_BT1_CTRL 0x0834U
/* BASE-T1 Auto-negotiation Control register */
/** Auto-negotiation Restart */
#define MDIO_AN_T1_CTRL_RESTART BIT(9)
/** Auto-negotiation Enable */
#define MDIO_AN_T1_CTRL_EN BIT(12)
/* BASE-T1 Auto-negotiation Status register */
/** Link Status */
#define MDIO_AN_T1_STAT_LINK_STATUS BIT(2)
/** Auto-negotiation Ability */
#define MDIO_AN_T1_STAT_ABLE BIT(3)
/** Auto-negotiation Remote Fault */
#define MDIO_AN_T1_STAT_REMOTE_FAULT BIT(4)
/** Auto-negotiation Complete */
#define MDIO_AN_T1_STAT_COMPLETE BIT(5)
/** Page Received */
#define MDIO_AN_T1_STAT_PAGE_RX BIT(6)
/* BASE-T1 Auto-negotiation Advertisement register [15:0] */
/** Pause Ability */
#define MDIO_AN_T1_ADV_L_PAUSE_CAP BIT(10)
/** Pause Ability */
#define MDIO_AN_T1_ADV_L_PAUSE_ASYM BIT(11)
/** Force Master/Slave Configuration */
#define MDIO_AN_T1_ADV_L_FORCE_MS BIT(12)
/** Remote Fault */
#define MDIO_AN_T1_ADV_L_REMOTE_FAULT BIT(13)
/** Acknowledge (ACK) */
#define MDIO_AN_T1_ADV_L_ACK BIT(14)
/** Next Page Request */
#define MDIO_AN_T1_ADV_L_NEXT_PAGE_REQ BIT(15)
/* BASE-T1 Auto-negotiation Advertisement register [31:16] */
/** 10BASE-T1L Ability */
#define MDIO_AN_T1_ADV_M_B10L BIT(14)
/** Master/slave Configuration */
#define MDIO_AN_T1_ADV_M_MST BIT(4)
/* BASE-T1 Auto-negotiation Advertisement register [47:32] */
/* 10BASE-T1L High Level Transmit Operating Mode Request */
#define MDIO_AN_T1_ADV_H_10L_TX_HI_REQ BIT(12)
/* 10BASE-T1L High Level Transmit Operating Mode Ability */
#define MDIO_AN_T1_ADV_H_10L_TX_HI BIT(13)
/* BASE-T1 PMA/PMD control register */
/** BASE-T1 master/slave configuration */
#define MDIO_PMA_PMD_BT1_CTRL_CFG_MST BIT(14)
/* 10BASE-T1L registers */
/** 10BASE-T1L PMA control */
#define MDIO_PMA_B10L_CTRL 0x08F6U
/** 10BASE-T1L PMA status */
#define MDIO_PMA_B10L_STAT 0x08F7U
/** 10BASE-T1L PMA link status*/
#define MDIO_PMA_B10L_LINK_STAT 0x8302U
/** 10BASE-T1L PCS control */
#define MDIO_PCS_B10L_CTRL 0x08E6U
/** 10BASE-T1L PCS status */
#define MDIO_PCS_B10L_STAT 0x08E7U
/* 10BASE-T1L PMA control register */
/** 10BASE-T1L Transmit Disable Mode */
#define MDIO_PMA_B10L_CTRL_TX_DIS_MODE_EN BIT(14)
/** 10BASE-T1L Transmit Voltage Amplitude Control */
#define MDIO_PMA_B10L_CTRL_TX_LVL_HI BIT(12)
/** 10BASE-T1L EEE Enable */
#define MDIO_PMA_B10L_CTRL_EEE BIT(10)
/** 10BASE-T1L PMA Loopback */
#define MDIO_PMA_B10L_CTRL_LB_PMA_LOC_EN BIT(0)
/* 10BASE-T1L PMA status register */
/** 10BASE-T1L PMA receive link up */
#define MDIO_PMA_B10L_STAT_LINK BIT(0)
/** 10BASE-T1L Fault condition detected */
#define MDIO_PMA_B10L_STAT_FAULT BIT(1)
/** 10BASE-T1L Receive polarity is reversed */
#define MDIO_PMA_B10L_STAT_POLARITY BIT(2)
/** 10BASE-T1L Able to detect fault on receive path */
#define MDIO_PMA_B10L_STAT_RECV_FAULT BIT(9)
/** 10BASE-T1L PHY has EEE ability */
#define MDIO_PMA_B10L_STAT_EEE BIT(10)
/** 10BASE-T1L PMA has low-power ability */
#define MDIO_PMA_B10L_STAT_LOW_POWER BIT(11)
/** 10BASE-T1L PHY has 2.4 Vpp operating mode ability */
#define MDIO_PMA_B10L_STAT_2V4_ABLE BIT(12)
/** 10BASE-T1L PHY has loopback ability */
#define MDIO_PMA_B10L_STAT_LB_ABLE BIT(13)
/* 10BASE-T1L PMA link status*/
/** 10BASE-T1L Remote Receiver Status OK Latch Low */
#define MDIO_PMA_B10L_LINK_STAT_REM_RCVR_STAT_OK_LL BIT(9)
/** 10BASE-T1L Remote Receiver Status OK */
#define MDIO_PMA_B10L_LINK_STAT_REM_RCVR_STAT_OK BIT(8)
/** 10BASE-T1L Local Receiver Status OK */
#define MDIO_PMA_B10L_LINK_STAT_LOC_RCVR_STAT_OK_LL BIT(7)
/** 10BASE-T1L Local Receiver Status OK */
#define MDIO_PMA_B10L_LINK_STAT_LOC_RCVR_STAT_OK BIT(6)
/** 10BASE-T1L Descrambler Status OK Latch Low */
#define MDIO_PMA_B10L_LINK_STAT_DSCR_STAT_OK_LL BIT(5)
/** 10BASE-T1L Descrambler Status OK */
#define MDIO_PMA_B10L_LINK_STAT_DSCR_STAT_OK BIT(4)
/** 10BASE-T1L Link Status OK Latch Low */
#define MDIO_PMA_B10L_LINK_STAT_LINK_STAT_OK_LL BIT(1)
/** 10BASE-T1L Link Status OK */
#define MDIO_PMA_B10L_LINK_STAT_LINK_STAT_OK BIT(0)
/* 10BASE-T1L PCS control */
/** 10BASE-T1L PCS Loopback Enable */
#define MDIO_PCS_B10L_CTRL_LB_PCS_EN BIT(14)
/* 10BASE-T1L PCS status */
/** 10BASE-T1L PCS Descrambler Status */
#define MDIO_PCS_B10L_STAT_DSCR_STAT_OK_LL BIT(2)
#ifdef __cplusplus
}
#endif
/**
* @}
*/
#endif /* ZEPHYR_INCLUDE_NET_MDIO_H_ */