// Copyright (c) 2021 Vladimir Chistyakov // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. #pragma once typedef enum { KSZ8851_CCR = 0x08, ///< Chip Configuration Register KSZ8851_MARL = 0x10, ///< Host MAC Address Register Low KSZ8851_MARM = 0x12, ///< Host MAC Address Register Middle KSZ8851_MARH = 0x14, ///< Host MAC Address Register High KSZ8851_OBCR = 0x20, ///< On-Chip Bus Control Register KSZ8851_EEPCR = 0x22, ///< EEPROM Control Register KSZ8851_MBIR = 0x24, ///< Memory Built-In Self-Test (BIST) Info Register KSZ8851_GRR = 0x26, ///< Global Reset Register KSZ8851_WFCR = 0x2A, ///< Wakeup Frame Control Register KSZ8851_WF0CRC0 = 0x30, ///< Wakeup Frame 0 CRC0 Register (lower 16 bits) KSZ8851_WF0CRC1 = 0x32, ///< Wakeup Frame 0 CRC1 Register (upper 16 bits) KSZ8851_WF0BM0 = 0x34, ///< Wakeup Frame 0 Byte Mask 0 Register (0-15) KSZ8851_WF0BM1 = 0x36, ///< Wakeup Frame 0 Byte Mask 1 Register (16-31) KSZ8851_WF0BM2 = 0x38, ///< Wakeup Frame 0 Byte Mask 2 Register (32-47) KSZ8851_WF0BM3 = 0x3A, ///< Wakeup Frame 0 Byte Mask 3 Register (48-63) KSZ8851_WF1CRC0 = 0x40, ///< Wakeup Frame 1 CRC0 Register (lower 16 bits) KSZ8851_WF1CRC1 = 0x42, ///< Wakeup Frame 1 CRC1 Register (upper 16 bits) KSZ8851_WF1BM0 = 0x44, ///< Wakeup Frame 1 Byte Mask 0 Register (0-15) KSZ8851_WF1BM1 = 0x46, ///< Wakeup Frame 1 Byte Mask 1 Register (16-31) KSZ8851_WF1BM2 = 0x48, ///< Wakeup Frame 1 Byte Mask 2 Register (32-47) KSZ8851_WF1BM3 = 0x4A, ///< Wakeup Frame 1 Byte Mask 3 Register (48-63) KSZ8851_WF2CRC0 = 0x50, ///< Wakeup Frame 2 CRC0 Register (lower 16 bits) KSZ8851_WF2CRC1 = 0x52, ///< Wakeup Frame 2 CRC1 Register (upper 16 bits) KSZ8851_WF2BM0 = 0x54, ///< Wakeup Frame 2 Byte Mask 0 Register (0-15) KSZ8851_WF2BM1 = 0x56, ///< Wakeup Frame 2 Byte Mask 1 Register (16-31) KSZ8851_WF2BM2 = 0x58, ///< Wakeup Frame 2 Byte Mask 2 Register (32-47) KSZ8851_WF2BM3 = 0x5A, ///< Wakeup Frame 2 Byte Mask 3 Register (48-63) KSZ8851_WF3CRC0 = 0x60, ///< Wakeup Frame 3 CRC0 Register (lower 16 bits) KSZ8851_WF3CRC1 = 0x62, ///< Wakeup Frame 3 CRC1 Register (upper 16 bits) KSZ8851_WF3BM0 = 0x64, ///< Wakeup Frame 3 Byte Mask 0 Register (0-15) KSZ8851_WF3BM1 = 0x66, ///< Wakeup Frame 3 Byte Mask 1 Register (16-31) KSZ8851_WF3BM2 = 0x68, ///< Wakeup Frame 3 Byte Mask 2 Register (32-47) KSZ8851_WF3BM3 = 0x6A, ///< Wakeup Frame 3 Byte Mask 3 Register (48-63) KSZ8851_TXCR = 0x70, ///< Transmit Control Register KSZ8851_TXSR = 0x72, ///< Transmit Status Register KSZ8851_RXCR1 = 0x74, ///< Receive Control Register 1 KSZ8851_RXCR2 = 0x76, ///< Receive Control Register 2 KSZ8851_TXMIR = 0x78, ///< TXQ Memory Information Register KSZ8851_RXFHSR = 0x7C, ///< Receive Frame Header Status Register KSZ8851_RXFHBCR = 0x7E, ///< Receive Frame Header Byte Count Register KSZ8851_TXQCR = 0x80, ///< TXQ Command Register KSZ8851_RXQCR = 0x82, ///< RXQ Command Register KSZ8851_TXFDPR = 0x84, ///< TX Frame Data Pointer Register KSZ8851_RXFDPR = 0x86, ///< RX Frame Data Pointer Register KSZ8851_RXDTTR = 0x8C, ///< RX Duration Timer Threshold Register KSZ8851_RXDBCTR = 0x8E, ///< RX Data Byte Count Threshold Register KSZ8851_IER = 0x90, ///< Interrupt Enable Register KSZ8851_ISR = 0x92, ///< Interrupt Status Register KSZ8851_RXFCTR = 0x9C, ///< RX Frame Count & Threshold Register KSZ8851_TXNTFSR = 0x9E, ///< TX Next Total Frames Size Register KSZ8851_MAHTR0 = 0xA0, ///< MAC Address Hash Table Register 0 KSZ8851_MAHTR1 = 0xA2, ///< MAC Address Hash Table Register 1 KSZ8851_MAHTR2 = 0xA4, ///< MAC Address Hash Table Register 2 KSZ8851_MAHTR3 = 0xA6, ///< MAC Address Hash Table Register 3 KSZ8851_FCLWR = 0xB0, ///< Flow Control Low Watermark Register KSZ8851_FCHWR = 0xB2, ///< Flow Control High Watermark Register KSZ8851_FCOWR = 0xB4, ///< Flow Control Overrun Watermark Register KSZ8851_CIDER = 0xC0, ///< Chip ID and Enable Register KSZ8851_CGCR = 0xC6, ///< Chip Global Control Register KSZ8851_IACR = 0xC8, ///< Indirect Access Control Register KSZ8851_IADLR = 0xD0, ///< Indirect Access Data Low Register KSZ8851_IADHR = 0xD2, ///< Indirect Access Data High Register KSZ8851_PMECR = 0xD4, ///< Power Management Event Control Register KSZ8851_GSWUTR = 0xD6, ///< Go-Sleep & Wake-Up Time Register KSZ8851_PHYRR = 0xD8, ///< PHY Reset Register KSZ8851_P1MBCR = 0xE4, ///< PHY 1 MII-Register Basic Control Register KSZ8851_P1MBSR = 0xE6, ///< PHY 1 MII-Register Basic Status Register KSZ8851_PHY1ILR = 0xE8, ///< PHY 1 PHY ID Low Register KSZ8851_PHY1IHR = 0xEA, ///< PHY 1 PHY ID High Register KSZ8851_P1ANAR = 0xEC, ///< PHY 1 Auto-Negotiation Advertisement Register KSZ8851_P1ANLPR = 0xEE, ///< PHY 1 Auto-Negotiation Link Partner Ability Register KSZ8851_P1SCLMD = 0xF4, ///< Port 1 PHY Special Control/Status, LinkMD KSZ8851_P1CR = 0xF6, ///< Port 1 Control Register KSZ8851_P1SR = 0xF8, ///< Port 1 Status Register KSZ8851_VALID_ADDRESS_MASK = 0xFE, ///< All register addresses are under this mask } ksz8851_registers_t; typedef enum { CCR_EEPROM_PRESENCE = 0x0200U, ///< RO EEPROM presence CCR_SPI_BUS_MODE = 0x0100U, ///< RO SPI bus mode CCR_32PIN_CHIP_PACKAGE = 0x0001U, ///< RO 32-Pin Chip Package OBCR_OUTPUT_PIN_DRIVE_STRENGTH = 0x0040U, ///< RW Output Pin Drive Strength: 8mA (0) or 16mA (1) OBCR_ONCHIP_BUS_CLOCK_SELECTION = 0X0004U, ///< RW On-Chip Bus Clock Selection: 125MHz (0) OBCR_ONCHIP_BUS_CLOCK_DIVIDE_BY_1 = 0x0000U, ///< RW On-Chip Bus Clock Divider Selection OBCR_ONCHIP_BUS_CLCOK_DIVIDE_BY_2 = 0x0001U, ///< Rw On-Chip Bus Clock Divider Selection OBCR_ONCHIP_BUS_CLCOK_DIVIDE_BY_3 = 0x0002U, ///< RW On-Chip Bus Clock Divider Selection EEPCR_EESRWA = 0x0020U, ///< RW EEPROM Software Read (0) or Write (1) Access EEPCR_EESA = 0x0010U, ///< RW EEPROM Software Access EEPCR_EESB = 0x0008U, ///< RO EEPROM Data receive EEPCR_EECB2 = 0x0004U, ///< RW EEPROM Data transmit EEPCR_EECB1 = 0x0002U, ///< RW EEPROM Serial clock EEPCR_EECB0 = 0x0001U, ///< RW EEPROM Chip select MBIR_TXMBF = 0x1000U, ///< RO TX Memory BIST Test Finish MBIR_TXMBFA = 0x0800U, ///< RO TX Memory BIST Test Fail MBIR_TXMBFC_SHIFT = 8U, ///< RO TX Memory BIST Test Fail Count Shift MBIR_TXMBFC_MASK = 0x7 << MBIR_TXMBFC_SHIFT, ///< RO TX Memory BIST Test Fail Count Mask MBIR_RXMBF = 0x0010U, ///< RO RX Memory Bist Finish MBIR_RXMBFA = 0x0008U, ///< RO RX Memory Bist Fail MBIR_RXMBFC = 0x7U, ///< RO RX Memory BIST Test Fail Count GRR_QMU_MODULE_SOFT_RESET = 0x0002U, ///< RW QMU Module Soft Reset GRR_GLOBAL_SOFT_RESET = 0x0001U, ///< Rw Global Soft Reset WFCR_MPRXE = 0x0080U, ///< RW Magic Packet RX Enable WFCR_WF3E = 0x0008U, ///< RW Wake up Frame 3 Enable WFCR_WF2E = 0x0004U, ///< RW Wake up Frame 2 Enable WFCR_WF1E = 0x0002U, ///< RW Wake up Frame 1 Enable WFCR_WF0E = 0x0001U, ///< RW Wake up Frame 0 Enable TXCR_TCGICMP = 0x0100U, ///< RW Transmit Checksum Generation for ICMP TXCR_TCGTCP = 0x0040U, ///< RW Transmit Checksum Generation for TCP TXCR_TCGIP = 0x0020U, ///< RW Transmit Checksum Generation for IP TXCR_FTXQ = 0x0010U, ///< RW Flush Transmit Queue TXCR_TXFCE = 0x0008U, ///< RW Transmit Flow Control Enable TXCR_TXPE = 0x0004U, ///< RW Transmit Padding Enable TXCR_TXCE = 0x0002U, ///< RW Transmit CRC Enable TXCR_TXE = 0x0001U, ///< RW Transmit Enable TXSR_TXLC = 0x2000U, ///< RO Transmit Late Collision TXSR_TXMC = 0x1000U, ///< RO Transmit Maximum Collision TXSR_TXFID_MASK = 0x003FU, ///< RO Transmit Frame ID Mask RXCR1_FRXQ = 0x8000U, ///< RW Flush Receive Queue RXCR1_RXUDPFCC = 0x4000U, ///< RW Receive UDP Frame Checksum Check Enable RXCR1_RXTCPFCC = 0x2000U, ///< RW Receive TCP Frame Checksum Check Enable RXCR1_RXIPFCC = 0x1000U, ///< RW Receive IP Frame Checksum Check Enable RXCR1_RXPAFMA = 0x0800U, ///< RW Receive Physical Address Filtering with MAC Address Enable RXCR1_RXFCE = 0x0400U, ///< RW Receive Flow Control Enable RXCR1_RXEFE = 0x0200U, ///< RW Receive Error Frame Enable RXCR1_RXMAFMA = 0x0100U, ///< RW Receive Multicast Address Filtering with MAC Address Enable RXCR1_RXBE = 0x0080U, ///< RW Receive Broadcast Enable RXCR1_RXME = 0x0040U, ///< RW Receive Multicast Enable RXCR1_RXUE = 0x0020U, ///< RW Receive Unicast Enable RXCR1_RXAE = 0x0010U, ///< RW Receive All Enable RXCR1_RXINVF = 0x0002U, ///< RW Receive Inverse Filtering RXCR1_RXE = 0x0001U, ///< RW Receive Enable RXCR2_SRDBL_SHIFT = 5U, ///< WO SPI Receive Data Burst Length: 4/8/16/32/frame (0-4) RXCR2_IUFFP = 0x0010U, ///< RW IPv4/IPv6/UDP Fragment Frame Pass RXCR2_RXIUFCEZ = 0x0008U, ///< RW Receive IPv4/IPv6/UDP Frame Checksum Equal Zero RXCR2_UDPLFE = 0x0004U, ///< RW Lite Frame Enable RXCR2_RXICMPFCC = 0x0002U, ///< RW Receive ICMP Frame Checksum Check Enable RXCR2_RXSAF = 0x0001U, ///< RW Receive Source Address Filtering TXMIR_TXMA_MASK = 0x1FFFU, ///< RO Transmit Memory Available Mask RXFHSR_RXFV = 0x8000U, ///< RO Receive Frame Valid RXFHSR_RXICMPFCS = 0x2000U, ///< RO Receive ICMP Frame Checksum Status RXFHSR_RXIPFCS = 0x1000U, ///< RO Receive IP Frame Checksum Status RXFHSR_RXTCPFCS = 0x0800U, ///< RO Receive TCP Frame Checksum Status RXFHSR_RXUDPFCS = 0x0400U, ///< RO Receive UDP Frame Checksum Status RXFHSR_RXBF = 0x0080U, ///< RO Receive Broadcast Frame RXFHSR_RXMF = 0x0040U, ///< RO Receive Multicast Frame RXFHSR_RXUF = 0x0020U, ///< RO Receive Unicast Frame RXFHSR_RXMR = 0x0010U, ///< RO Receive MII Error RXFHSR_RXFT = 0x0008U, ///< RO Receive Frame Type RXFHSR_RXFTL = 0x0004U, ///< RO Receive Frame Too Long RXFHSR_RXRF = 0x0002U, ///< RO Receive Runt Frame RXFHSR_RXCE = 0x0001U, ///< RO Receive CRC Error RXFHBCR_RXBC_MASK = 0x0FFFU, ///< RO Receive Byte Count Mask TXQCR_AETFE = 0x0004U, ///< RW Auto-Enqueue TXQ Frame Enable TXQCR_TXQMAM = 0x0002U, ///< RW TXQ Memory Available Monitor TXQCR_METFE = 0x0001U, ///< RW (SC) Manual Enqueue TXQ Frame Enable RXQCR_RXDTTS = 0x1000U, ///< RO RX Duration Timer Threshold Status RXQCR_RXDBCTS = 0x0800U, ///< RO RX Data Byte Count Threshold Status RXQCR_RXFCTS = 0x0400U, ///< RO RX Frame Count Threshold Status RXQCR_RXIPHTOE = 0x0200U, ///< RW RX IP Header Two-Byte Offset Enable RXQCR_RXDTTE = 0x0080U, ///< RW RX Duration Timer Threshold Enable RXQCR_RXDBCTE = 0x0040U, ///< RW RX Data Byte Count Threshold Enable RXQCR_RXFCTE = 0x0020U, ///< RW RX Frame Count Threshold Enable RXQCR_ADRFE = 0x0010U, ///< RW Auto-Dequeue RXQ Frame Enable RXQCR_SDA = 0x0008U, ///< WO Start DMA Access RXQCR_RRXEF = 0x0001U, ///< RW Release RX Error Frame TXFDPR_TXFPAI = 0x4000U, ///< RW TX Frame Data Pointer Auto Increment TXFDPR_TXFP_MASK = 0x07FFU, ///< RO TX Frame Pointer Mask RXFDPR_RXFPAI = 0x4000U, ///< RW RX Frame Pointer Auto Increment RXFDPR_RXFP_MASK = 0x07FFU, ///< WO RX Frame Pointer Mask IER_LCIE = 0x8000U, ///< RW Link Change Interrupt Enable IER_TXIE = 0x4000U, ///< RW Transmit Interrupt Enable IER_RXIE = 0x2000U, ///< RW Receive Interrupt Enable IER_RXOIE = 0x0800U, ///< RW Receive Overrun Interrupt Enable IER_TXPSIE = 0x0200U, ///< RW Transmit Process Stopped Interrupt Enable IER_RXPSIE = 0x0100U, ///< RW Receive Process Stopped Interrupt Enable IER_TXSAIE = 0x0040U, ///< RW Transmit Space Available Interrupt Enable IER_RXWFDIE = 0x0020U, ///< RW Receive Wake-up Frame Detect Interrupt Enable IER_RXMPDIE = 0x0010U, ///< RW Receive Magic Packet Detect Interrupt Enable IER_LDIE = 0x0008U, ///< RW Linkup Detect Interrupt Enable IER_EDIE = 0x0004U, ///< RW Energy Detect Interrupt Enable IER_SPIBEIE = 0x0002U, ///< RW SPI Bus Error Interrupt Enable IER_DEDIE = 0x0001U, ///< RW Delay Energy Detect Interrupt Enable ISR_LCIS = 0x8000U, ///< RO (W1C) Link Change Interrupt Status ISR_TXIS = 0x4000U, ///< RO (W1C) Transmit Interrupt Status ISR_RXIS = 0x2000U, ///< RO (W1C) Receive Interrupt Status ISR_RXOIS = 0x0800U, ///< RO (W1C) Receive Overrun Interrupt Status ISR_TXPSIS = 0x0200U, ///< RO (W1C) Transmit Process Stopped Interrupt Status ISR_RXPSIS = 0x0100U, ///< RO (W1C) Receive Process Stopped Interrupt Status ISR_TXSAIS = 0x0040U, ///< RO (W1C) Transmit Space Available Interrupt Status ISR_RXWFDIS = 0x0020U, ///< RO (W1C) Receive Wakeup Frame Detect Interrupt Status ISR_RXMPDIS = 0x0010U, ///< RO (W1C) Receive Magic Packet Detect Interrupt Status ISR_LDIS = 0x0008U, ///< RO (W1C) Linkup Detect Interrupt Status ISR_EDIS = 0x0004U, ///< RO (W1C) Energy Detect Interrupt Status ISR_SPIBEIS = 0x0002U, ///< RO (W1C) SPI Bus Error Interrupt Status ISR_ALL = 0xFFFFU, ///< WO Clear register value RXFCTR_RXFC_SHIFT = 8U, ///< RO RX Frame Count Shift RXFCTR_RXFC_MASK = 0xFF << RXFCTR_RXFC_SHIFT, ///< RO RX Frame Count Mask RXFCTR_RXFCT_MASK = 0xFFU, ///< RW Receive Frame Count Threshold FCLWR_MASK = 0x0FFFU, ///< RW Flow Control Low Watermark Configuration Mask FCHWR_MASK = 0x0FFFU, ///< RW Flow Control High Watermark Configuration Mask FCOWR_MASK = 0x0FFFU, ///< RW Flow Control Overrun Watermark Configuration Mask CIDER_KSZ8851SNL_FAMILY_ID = 0x88U, ///< KSZ8851SNL Family ID CIDER_KSZ8851SNL_CHIP_ID = 0x7U, ///< KSZ8851SNL Chip ID CIDER_FAMILY_ID_SHIFT = 8U, ///< RO Family ID Shift CIDER_FAMILY_ID_MASK = 0xFF << CIDER_FAMILY_ID_SHIFT, ///< RO Family ID Mask CIDER_CHIP_ID_SHIFT = 4U, ///< RO Chip ID Shift CIDER_CHIP_ID_MASK = 0xF << CIDER_CHIP_ID_SHIFT, ///< RO Chip ID Mask CIDER_REVISION_ID_SHIFT = 1U, ///< RO Revision ID Shift CIDER_REVISION_ID_MASK = 0x7 << CIDER_REVISION_ID_SHIFT, ///< RO Revision ID Mask CGCR_LEDSEL0 = 0x0200U, ///< RW PHY LED Mode: 0 - 100BT + LINK/ACTU, 1 - ACT + LINK IACR_READ_ENABLE = 0x1000U, ///< RW Read Enable IACR_MIB_COUNTER_SELECT = 0x0C00U, ///< RW Table Select IACR_INDIRECT_ADDRESS_MASK = 0x001FU, ///< RW Indirect Address Mask PMECR_PME_DELAY_ENABLE = 0x4000U, ///< RW PME Delay Enable PMECR_PME_OUTPUT_POLARITY = 0x1000U, ///< RW PME Output Polarity PMECR_WUP_FRAME_EN = 0x0800U, ///< RW Wake-on-LAN to PME Output Enable receive wake-up frame PMECR_MAGIC_PACKET = 0x0400U, ///< RW Wake-on-LAN to PME Output Enable receive magic packet PMECR_LINK_CHANGE_TO_UP = 0x0200U, ///< RW Wake-on-LAN to PME Output Enable link change to up PMECR_SIGNAL_ENERGY_DETECTED = 0x0100U, ///< RW Wake-on-LAN to PME Output Enable energy detected PMECR_AUTO_WAKEUP_ENABLE = 0x0080U, ///< RW Auto Wake-Up Enable PMECR_WAKEUP_TO_NORMAL = 0x0040U, ///< RW Wake-Up to Normal Operation Mode PMECR_WAKEUP_FRAME_EVENT = 0x0020U, ///< RO (W1C) Wake-Up Event Indication wakeup frame event detected PMECR_WAKEUP_MAGIC_PACKET = 0x0010U, ///< RO (W1C) Wake-Up Event Indication magic packet event detected PMECR_WAKEUP_LINK = 0x0008U, ///< RO (W1C) Wake-Up Event Indication link up event detected PMECR_WAKEUP_ENERGY = 0x0004U, ///< RO (W1C) Wake-Up Event Indication energy event detected PMECR_PME_MODE_MASK = 0x0003U, ///< RW Power Management Mode Mask PMECR_PME_MODE_NORMAL = 0x0000U, ///< RW Normal Operation Mode PMECR_PME_MODE_ENERGY_DETECT = 0x0001U, ///< RW Energy Detect Mode PMECR_PME_MODE_SOFT_POWER_DOWN = 0x0002U, ///< RW Soft Power Down Mode PMECR_PME_MODE_POWER_SAVING = 0x0003U, ///< RW Power Saving Mode GSWUTR_WAKE_UP_TIME_SHIFT = 8U, ///< RW Wake-up Time Shift GSWUTR_WAKE_UP_TIME_MASK = 0xFF << GSWUTR_WAKE_UP_TIME_SHIFT, ///< RW Wake-up Time Mask GSWUTR_GO_SLEEP_TIME_MASK = 0x0003U, ///< RW Go-sleep Time Mask PHYRR_PHY_RESET = 0x0001U, ///< WO (SC) PHY Reset Bit P1MBCR_LOCAL_LOOPBACK = 0x4000U, ///< RW Local (far-end) loopback (llb) P1MBCR_FORCE100 = 0x2000U, ///< RW Force 100 P1MBCR_AN_ENABLE = 0x1000U, ///< RW AN Enable P1MBCR_RESTART_AN = 0x0200U, ///< RW Restart AN P1MBCR_FORCE_FULL_DUPLEX = 0x0100U, ///< RW Force Full-Duplex P1MBCR_HP_MDIX = 0x0020U, ///< RW HP Auto MDI-X mode P1MBCR_FORCE_MDIX = 0x0010U, ///< RWForce MDI-X P1MBCR_DISABLE_MDIX = 0x0008U, ///< RW Disable MDI-X P1MBCR_DISABLE_TRANSMIT = 0x0002U, ///< RW Disable Transmit P1MBCR_DISABLE_LED = 0x0001U, ///< RW Disable LED P1MBSR_T4_CAPABLE = 0x8000U, ///< RO T4 Capable P1MBSR_100_FULL_CAPABLE = 0x4000U, ///< RO 100 Full Capable P1MBSR_100_HALF_CAPABLE = 0x2000U, ///< RO 100 Half Capable P1MBSR_10_FULL_CAPABLE = 0x1000U, ///< RO 10 Full Capable P1MBSR_10_HALF_CAPABLE = 0x0800U, ///< RO 10 Half Capable P1MBSR_PREAMBLE_SUPPRESSED = 0x0040U, ///< RO Preamble suppressed (not supported) P1MBSR_AN_COMPLETE = 0x0020U, ///< RO AN Complete P1MBSR_AN_CAPABLE = 0x0008U, ///< RO AN Capable P1MBSR_LINK_STATUS = 0x0004U, ///< RO Link Status P1MBSR_JABBER_TEST = 0x0002U, ///< RO Jabber test (not supported) P1MBSR_EXTENDED_CAPABLE = 0x0001U, ///< RO Extended Capable P1ANAR_NEXT_PAGE = 0x8000U, ///< RO Next page (not supported) P1ANAR_REMOTE_FAULT = 0x2000U, ///< RO Remote fault (not supported) P1ANAR_PAUSE = 0x0400U, ///< RW Pause (flow control capability) P1ANAR_ADV_100_FULL = 0x0100U, ///< RW Adv 100 Full P1ANAR_ADV_100_HALF = 0x0080U, ///< RW Adv 100 Half P1ANAR_ADV_10_FULL = 0x0040U, ///< RW Adv 10 Full P1ANAR_ADV_10_HALF = 0x0020U, ///< RW Adv 10 Half P1ANLPR_NEXT_PAGE = 0x8000U, ///< RO Next page (not supported) P1ANLPR_LP_ACK = 0x4000U, ///< RO LP ACK (not suppported) P1ANLPR_REMOTE_FAULT = 0x2000U, ///< RO Remote fault (not supported) P1ANLPR_PAUSE = 0x0400U, ///< RO Pause P1ANLPR_ADV_100_FULL = 0x0100U, ///< RO Adv 100 Full P1ANLPR_ADV_100_HALF = 0x0080U, ///< RO Adv 100 Half P1ANLPR_ADV_10_FULL = 0x0040U, ///< RO Adv 10 Full P1ANLPR_ADV_10_HALF = 0x0020U, ///< RO Adv 10 Half P1SCLMD_VCT_RESULT_SHIFT = 13U, ///< RO VCT result Shift P1SCLMD_VCT_RESULT_MASK = 0x3 << P1SCLMD_VCT_RESULT_SHIFT, ///< RO VCT result Mask P1SCLMD_VCT_RESULT_NORMAL = 0x0U, ///< RO VCT result normal condition P1SCLMD_VCT_RESULT_OPEN = 0x1U, ///< RO VCT result open cable condition P1SCLMD_VCT_RESULT_SHORT = 0x2U, ///< RO VCT result short cable condition P1SCLMD_VCT_RESULT_TEST_FAILED = 0x3U, ///< RO VCT result test failed P1SCLMD_VCT_ENABLE = 0x1000U, ///< RW (SC) VCT Enable P1SCLMD_FORCE_LINK = 0x0800U, ///< RW Force link P1SCLMD_REMOTE_LOOPBACK = 0x0200U, ///< RW Remote (Near-end) loopback (rlb) P1SCLMD_VCT_FAULT_COUNT_MASK = 0x1FU, ///< RO Distance to the fault * 0.4m P1CR_LED_OFF = 0x8000U, ///< RW Turn off all of the port 1 LEDs P1CR_TXIDS = 0x4000U, ///< RW Disable the port’s transmitter. P1CR_RESTART_AN = 0x2000U, ///< RW Restart AN P1CR_DISABLE_AUTO_MDI_MDIX = 0x0400U, ///< RW Disable auto MDI/MDI-X P1CR_FORCE_MDIX = 0x0200U, ///< RW Force MDI-X P1CR_AUTO_NEGOTIATION_ENABLE = 0x0080U, ///< RW Auto Negotiation Enable P1CR_FORCE_SPEED = 0x0040U, ///< RW Force Speed 100 P1CR_FORCE_DUPLEX = 0x0020U, ///< RW Force Full Duplex P1CR_ADVERTISED_FLOW_CONTROL_CAPABILITY = 0x0010U, ///< RW Advertise flow control capability P1CR_ADVERTISED_100BT_FULL_DUPLEX_CAPABILITY = 0x0008U, ///< RW Advertise 100BT full-duplex capability P1CR_ADVERTISED_100BT_HALF_DUPLEX_CAPABILITY = 0x0004U, ///< RW Advertise 100BT half-duplex capability P1CR_ADVERTISED_10BT_FULL_DUPLEX_CAPABILITY = 0x0002U, ///< RW Advertise 10BT full-duplex capability P1CR_ADVERTISED_10BT_HALF_DUPLEX_CAPABILITY = 0x0001U, ///< RW Advertise 10BT half-duplex capability P1SR_HP_MDIX = 0x8000U, ///< RW HP Auto MDI-X mode P1SR_POLARITY_REVERSE = 0x2000U, ///< RO Polarity Reverse P1SR_OPERATION_SPEED = 0x0400U, ///< RO Operation Speed 100 P1SR_OPERATION_DUPLEX = 0x0200U, ///< RO Operation Duplex Full P1SR_MDIX_STATUS = 0x0080U, ///< RO MDI status P1SR_AN_DONE = 0x0040U, ///< RO AN Done P1SR_LINK_GOOD = 0x0020U, ///< RO Link Good P1SR_PARTNER_FLOW_CONTROL_CAPABILITY = 0x0010U, ///< RO Partner flow control capability P1SR_PARTNER_100BT_FULL_DUPLEX_CAPABILITY = 0x0008U, ///< RO Partner 100BT full-duplex capability P1SR_PARTNER_100BT_HALF_DUPLEX_CAPABILITY = 0x0004U, ///< RO Partner 100BT half-duplex capability P1SR_PARTNER_10BT_FULL_DUPLEX_CAPABILITY = 0x0002U, ///< RO Partner 10BT full-duplex capability P1SR_PARTNER_10BT_HALF_DUPLEX_CAPABILITY = 0x0001U, ///< RO Partner 10BT half-duplex capability } ksz8851_register_bits_t;