Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 /*
0003  * linux/mii.h: definitions for MII-compatible transceivers
0004  * Originally drivers/net/sunhme.h.
0005  *
0006  * Copyright (C) 1996, 1999, 2001 David S. Miller (davem@redhat.com)
0007  */
0008 
0009 #ifndef _UAPI__LINUX_MII_H__
0010 #define _UAPI__LINUX_MII_H__
0011 
0012 #include <linux/types.h>
0013 #include <linux/ethtool.h>
0014 
0015 /* Generic MII registers. */
0016 #define MII_BMCR        0x00    /* Basic mode control register */
0017 #define MII_BMSR        0x01    /* Basic mode status register  */
0018 #define MII_PHYSID1     0x02    /* PHYS ID 1                   */
0019 #define MII_PHYSID2     0x03    /* PHYS ID 2                   */
0020 #define MII_ADVERTISE       0x04    /* Advertisement control reg   */
0021 #define MII_LPA         0x05    /* Link partner ability reg    */
0022 #define MII_EXPANSION       0x06    /* Expansion register          */
0023 #define MII_CTRL1000        0x09    /* 1000BASE-T control          */
0024 #define MII_STAT1000        0x0a    /* 1000BASE-T status           */
0025 #define MII_MMD_CTRL        0x0d    /* MMD Access Control Register */
0026 #define MII_MMD_DATA        0x0e    /* MMD Access Data Register */
0027 #define MII_ESTATUS     0x0f    /* Extended Status             */
0028 #define MII_DCOUNTER        0x12    /* Disconnect counter          */
0029 #define MII_FCSCOUNTER      0x13    /* False carrier counter       */
0030 #define MII_NWAYTEST        0x14    /* N-way auto-neg test reg     */
0031 #define MII_RERRCOUNTER     0x15    /* Receive error counter       */
0032 #define MII_SREVISION       0x16    /* Silicon revision            */
0033 #define MII_RESV1       0x17    /* Reserved...                 */
0034 #define MII_LBRERROR        0x18    /* Lpback, rx, bypass error    */
0035 #define MII_PHYADDR     0x19    /* PHY address                 */
0036 #define MII_RESV2       0x1a    /* Reserved...                 */
0037 #define MII_TPISTATUS       0x1b    /* TPI status for 10mbps       */
0038 #define MII_NCONFIG     0x1c    /* Network interface config    */
0039 
0040 /* Basic mode control register. */
0041 #define BMCR_RESV       0x003f  /* Unused...                   */
0042 #define BMCR_SPEED1000      0x0040  /* MSB of Speed (1000)         */
0043 #define BMCR_CTST       0x0080  /* Collision test              */
0044 #define BMCR_FULLDPLX       0x0100  /* Full duplex                 */
0045 #define BMCR_ANRESTART      0x0200  /* Auto negotiation restart    */
0046 #define BMCR_ISOLATE        0x0400  /* Isolate data paths from MII */
0047 #define BMCR_PDOWN      0x0800  /* Enable low power state      */
0048 #define BMCR_ANENABLE       0x1000  /* Enable auto negotiation     */
0049 #define BMCR_SPEED100       0x2000  /* Select 100Mbps              */
0050 #define BMCR_LOOPBACK       0x4000  /* TXD loopback bits           */
0051 #define BMCR_RESET      0x8000  /* Reset to default state      */
0052 #define BMCR_SPEED10        0x0000  /* Select 10Mbps               */
0053 
0054 /* Basic mode status register. */
0055 #define BMSR_ERCAP      0x0001  /* Ext-reg capability          */
0056 #define BMSR_JCD        0x0002  /* Jabber detected             */
0057 #define BMSR_LSTATUS        0x0004  /* Link status                 */
0058 #define BMSR_ANEGCAPABLE    0x0008  /* Able to do auto-negotiation */
0059 #define BMSR_RFAULT     0x0010  /* Remote fault detected       */
0060 #define BMSR_ANEGCOMPLETE   0x0020  /* Auto-negotiation complete   */
0061 #define BMSR_RESV       0x00c0  /* Unused...                   */
0062 #define BMSR_ESTATEN        0x0100  /* Extended Status in R15      */
0063 #define BMSR_100HALF2       0x0200  /* Can do 100BASE-T2 HDX       */
0064 #define BMSR_100FULL2       0x0400  /* Can do 100BASE-T2 FDX       */
0065 #define BMSR_10HALF     0x0800  /* Can do 10mbps, half-duplex  */
0066 #define BMSR_10FULL     0x1000  /* Can do 10mbps, full-duplex  */
0067 #define BMSR_100HALF        0x2000  /* Can do 100mbps, half-duplex */
0068 #define BMSR_100FULL        0x4000  /* Can do 100mbps, full-duplex */
0069 #define BMSR_100BASE4       0x8000  /* Can do 100mbps, 4k packets  */
0070 
0071 /* Advertisement control register. */
0072 #define ADVERTISE_SLCT      0x001f  /* Selector bits               */
0073 #define ADVERTISE_CSMA      0x0001  /* Only selector supported     */
0074 #define ADVERTISE_10HALF    0x0020  /* Try for 10mbps half-duplex  */
0075 #define ADVERTISE_1000XFULL 0x0020  /* Try for 1000BASE-X full-duplex */
0076 #define ADVERTISE_10FULL    0x0040  /* Try for 10mbps full-duplex  */
0077 #define ADVERTISE_1000XHALF 0x0040  /* Try for 1000BASE-X half-duplex */
0078 #define ADVERTISE_100HALF   0x0080  /* Try for 100mbps half-duplex */
0079 #define ADVERTISE_1000XPAUSE    0x0080  /* Try for 1000BASE-X pause    */
0080 #define ADVERTISE_100FULL   0x0100  /* Try for 100mbps full-duplex */
0081 #define ADVERTISE_1000XPSE_ASYM 0x0100  /* Try for 1000BASE-X asym pause */
0082 #define ADVERTISE_100BASE4  0x0200  /* Try for 100mbps 4k packets  */
0083 #define ADVERTISE_PAUSE_CAP 0x0400  /* Try for pause               */
0084 #define ADVERTISE_PAUSE_ASYM    0x0800  /* Try for asymetric pause     */
0085 #define ADVERTISE_RESV      0x1000  /* Unused...                   */
0086 #define ADVERTISE_RFAULT    0x2000  /* Say we can detect faults    */
0087 #define ADVERTISE_LPACK     0x4000  /* Ack link partners response  */
0088 #define ADVERTISE_NPAGE     0x8000  /* Next page bit               */
0089 
0090 #define ADVERTISE_FULL      (ADVERTISE_100FULL | ADVERTISE_10FULL | \
0091                   ADVERTISE_CSMA)
0092 #define ADVERTISE_ALL       (ADVERTISE_10HALF | ADVERTISE_10FULL | \
0093                   ADVERTISE_100HALF | ADVERTISE_100FULL)
0094 
0095 /* Link partner ability register. */
0096 #define LPA_SLCT        0x001f  /* Same as advertise selector  */
0097 #define LPA_10HALF      0x0020  /* Can do 10mbps half-duplex   */
0098 #define LPA_1000XFULL       0x0020  /* Can do 1000BASE-X full-duplex */
0099 #define LPA_10FULL      0x0040  /* Can do 10mbps full-duplex   */
0100 #define LPA_1000XHALF       0x0040  /* Can do 1000BASE-X half-duplex */
0101 #define LPA_100HALF     0x0080  /* Can do 100mbps half-duplex  */
0102 #define LPA_1000XPAUSE      0x0080  /* Can do 1000BASE-X pause     */
0103 #define LPA_100FULL     0x0100  /* Can do 100mbps full-duplex  */
0104 #define LPA_1000XPAUSE_ASYM 0x0100  /* Can do 1000BASE-X pause asym*/
0105 #define LPA_100BASE4        0x0200  /* Can do 100mbps 4k packets   */
0106 #define LPA_PAUSE_CAP       0x0400  /* Can pause                   */
0107 #define LPA_PAUSE_ASYM      0x0800  /* Can pause asymetrically     */
0108 #define LPA_RESV        0x1000  /* Unused...                   */
0109 #define LPA_RFAULT      0x2000  /* Link partner faulted        */
0110 #define LPA_LPACK       0x4000  /* Link partner acked us       */
0111 #define LPA_NPAGE       0x8000  /* Next page bit               */
0112 
0113 #define LPA_DUPLEX      (LPA_10FULL | LPA_100FULL)
0114 #define LPA_100         (LPA_100FULL | LPA_100HALF | LPA_100BASE4)
0115 
0116 /* Expansion register for auto-negotiation. */
0117 #define EXPANSION_NWAY      0x0001  /* Can do N-way auto-nego      */
0118 #define EXPANSION_LCWP      0x0002  /* Got new RX page code word   */
0119 #define EXPANSION_ENABLENPAGE   0x0004  /* This enables npage words    */
0120 #define EXPANSION_NPCAPABLE 0x0008  /* Link partner supports npage */
0121 #define EXPANSION_MFAULTS   0x0010  /* Multiple faults detected    */
0122 #define EXPANSION_RESV      0xffe0  /* Unused...                   */
0123 
0124 #define ESTATUS_1000_XFULL  0x8000  /* Can do 1000BaseX Full       */
0125 #define ESTATUS_1000_XHALF  0x4000  /* Can do 1000BaseX Half       */
0126 #define ESTATUS_1000_TFULL  0x2000  /* Can do 1000BT Full          */
0127 #define ESTATUS_1000_THALF  0x1000  /* Can do 1000BT Half          */
0128 
0129 /* N-way test register. */
0130 #define NWAYTEST_RESV1      0x00ff  /* Unused...                   */
0131 #define NWAYTEST_LOOPBACK   0x0100  /* Enable loopback for N-way   */
0132 #define NWAYTEST_RESV2      0xfe00  /* Unused...                   */
0133 
0134 /* MAC and PHY tx_config_Reg[15:0] for SGMII in-band auto-negotiation.*/
0135 #define ADVERTISE_SGMII     0x0001  /* MAC can do SGMII            */
0136 #define LPA_SGMII       0x0001  /* PHY can do SGMII            */
0137 #define LPA_SGMII_SPD_MASK  0x0c00  /* SGMII speed mask            */
0138 #define LPA_SGMII_FULL_DUPLEX   0x1000  /* SGMII full duplex           */
0139 #define LPA_SGMII_DPX_SPD_MASK  0x1C00  /* SGMII duplex and speed bits */
0140 #define LPA_SGMII_10        0x0000  /* 10Mbps                      */
0141 #define LPA_SGMII_10HALF    0x0000  /* Can do 10mbps half-duplex   */
0142 #define LPA_SGMII_10FULL    0x1000  /* Can do 10mbps full-duplex   */
0143 #define LPA_SGMII_100       0x0400  /* 100Mbps                     */
0144 #define LPA_SGMII_100HALF   0x0400  /* Can do 100mbps half-duplex  */
0145 #define LPA_SGMII_100FULL   0x1400  /* Can do 100mbps full-duplex  */
0146 #define LPA_SGMII_1000      0x0800  /* 1000Mbps                    */
0147 #define LPA_SGMII_1000HALF  0x0800  /* Can do 1000mbps half-duplex */
0148 #define LPA_SGMII_1000FULL  0x1800  /* Can do 1000mbps full-duplex */
0149 #define LPA_SGMII_LINK      0x8000  /* PHY link with copper-side partner */
0150 
0151 /* 1000BASE-T Control register */
0152 #define ADVERTISE_1000FULL  0x0200  /* Advertise 1000BASE-T full duplex */
0153 #define ADVERTISE_1000HALF  0x0100  /* Advertise 1000BASE-T half duplex */
0154 #define CTL1000_PREFER_MASTER   0x0400  /* prefer to operate as master */
0155 #define CTL1000_AS_MASTER   0x0800
0156 #define CTL1000_ENABLE_MASTER   0x1000
0157 
0158 /* 1000BASE-T Status register */
0159 #define LPA_1000MSFAIL      0x8000  /* Master/Slave resolution failure */
0160 #define LPA_1000MSRES       0x4000  /* Master/Slave resolution status */
0161 #define LPA_1000LOCALRXOK   0x2000  /* Link partner local receiver status */
0162 #define LPA_1000REMRXOK     0x1000  /* Link partner remote receiver status */
0163 #define LPA_1000FULL        0x0800  /* Link partner 1000BASE-T full duplex */
0164 #define LPA_1000HALF        0x0400  /* Link partner 1000BASE-T half duplex */
0165 
0166 /* Flow control flags */
0167 #define FLOW_CTRL_TX        0x01
0168 #define FLOW_CTRL_RX        0x02
0169 
0170 /* MMD Access Control register fields */
0171 #define MII_MMD_CTRL_DEVAD_MASK 0x1f    /* Mask MMD DEVAD*/
0172 #define MII_MMD_CTRL_ADDR   0x0000  /* Address */
0173 #define MII_MMD_CTRL_NOINCR 0x4000  /* no post increment */
0174 #define MII_MMD_CTRL_INCR_RDWT  0x8000  /* post increment on reads & writes */
0175 #define MII_MMD_CTRL_INCR_ON_WT 0xC000  /* post increment on writes only */
0176 
0177 /* This structure is used in all SIOCxMIIxxx ioctl calls */
0178 struct mii_ioctl_data {
0179     __u16       phy_id;
0180     __u16       reg_num;
0181     __u16       val_in;
0182     __u16       val_out;
0183 };
0184 
0185 #endif /* _UAPI__LINUX_MII_H__ */