mii.h 11.2 KB
Newer Older
B
bigmagic 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
/*
 * Copyright (c) 2006-2018, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2017-08-24     chinesebear  first version
 */
#ifndef __MII_H__
#define __MII_H__
/* Generic MII registers. */

#include "synopGMAC_types.h"

#define MII_BMCR            0x00        /* Basic mode control register */
#define MII_BMSR            0x01        /* Basic mode status register  */
#define MII_PHYSID1         0x02        /* PHYS ID 1                   */
#define MII_PHYSID2         0x03        /* PHYS ID 2                   */
#define MII_ADVERTISE       0x04        /* Advertisement control reg   */
#define MII_LPA             0x05        /* Link partner ability reg    */
#define MII_EXPANSION       0x06        /* Expansion register          */
#define MII_CTRL1000        0x09        /* 1000BASE-T control          */
#define MII_STAT1000        0x0a        /* 1000BASE-T status           */
#define MII_ESTATUS         0x0f    /* Extended Status */
#define MII_DCOUNTER        0x12        /* Disconnect counter          */
#define MII_FCSCOUNTER      0x13        /* False carrier counter       */
#define MII_NWAYTEST        0x14        /* N-way auto-neg test reg     */
#define MII_RERRCOUNTER     0x15        /* Receive error counter       */
#define MII_SREVISION       0x16        /* Silicon revision            */
#define MII_RESV1           0x17        /* Reserved...                 */
#define MII_LBRERROR        0x18        /* Lpback, rx, bypass error    */
#define MII_PHYADDR         0x19        /* PHY address                 */
#define MII_RESV2           0x1a        /* Reserved...                 */
#define MII_TPISTATUS       0x1b        /* TPI status for 10mbps       */
#define MII_NCONFIG         0x1c        /* Network interface config    */

/* Basic mode control register. */
#define BMCR_RESV               0x003f  /* Unused...                   */
B
bigmagic 已提交
40
#define BMCR_SPEED1000          0x0040  /* MSB of Speed (1000)         */
B
bigmagic 已提交
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
#define BMCR_CTST               0x0080  /* Collision test              */
#define BMCR_FULLDPLX           0x0100  /* Full duplex                 */
#define BMCR_ANRESTART          0x0200  /* Auto negotiation restart    */
#define BMCR_ISOLATE            0x0400  /* Disconnect DP83840 from MII */
#define BMCR_PDOWN              0x0800  /* Powerdown the DP83840       */
#define BMCR_ANENABLE           0x1000  /* Enable auto negotiation     */
#define BMCR_SPEED100           0x2000  /* Select 100Mbps              */
#define BMCR_LOOPBACK           0x4000  /* TXD loopback bits           */
#define BMCR_RESET              0x8000  /* Reset the DP83840           */

/* Basic mode status register. */
#define BMSR_ERCAP              0x0001  /* Ext-reg capability          */
#define BMSR_JCD                0x0002  /* Jabber detected             */
#define BMSR_LSTATUS            0x0004  /* Link status                 */
#define BMSR_ANEGCAPABLE        0x0008  /* Able to do auto-negotiation */
#define BMSR_RFAULT             0x0010  /* Remote fault detected       */
#define BMSR_ANEGCOMPLETE       0x0020  /* Auto-negotiation complete   */
#define BMSR_RESV               0x00c0  /* Unused...                   */
#define BMSR_ESTATEN            0x0100    /* Extended Status in R15 */
#define BMSR_100FULL2           0x0200    /* Can do 100BASE-T2 HDX */
#define BMSR_100HALF2           0x0400    /* Can do 100BASE-T2 FDX */
#define BMSR_10HALF             0x0800  /* Can do 10mbps, half-duplex  */
#define BMSR_10FULL             0x1000  /* Can do 10mbps, full-duplex  */
#define BMSR_100HALF            0x2000  /* Can do 100mbps, half-duplex */
#define BMSR_100FULL            0x4000  /* Can do 100mbps, full-duplex */
#define BMSR_100BASE4           0x8000  /* Can do 100mbps, 4k packets  */

/* Advertisement control register. */
#define ADVERTISE_SLCT          0x001f  /* Selector bits               */
#define ADVERTISE_CSMA          0x0001  /* Only selector supported     */
#define ADVERTISE_10HALF        0x0020  /* Try for 10mbps half-duplex  */
#define ADVERTISE_1000XFULL     0x0020  /* Try for 1000BASE-X full-duplex */
#define ADVERTISE_10FULL        0x0040  /* Try for 10mbps full-duplex  */
#define ADVERTISE_1000XHALF     0x0040  /* Try for 1000BASE-X half-duplex */
#define ADVERTISE_100HALF       0x0080  /* Try for 100mbps half-duplex */
#define ADVERTISE_1000XPAUSE    0x0080  /* Try for 1000BASE-X pause    */
#define ADVERTISE_100FULL       0x0100  /* Try for 100mbps full-duplex */
#define ADVERTISE_1000XPSE_ASYM 0x0100  /* Try for 1000BASE-X asym pause */
#define ADVERTISE_100BASE4      0x0200  /* Try for 100mbps 4k packets  */
#define ADVERTISE_PAUSE_CAP     0x0400  /* Try for pause               */
#define ADVERTISE_PAUSE_ASYM    0x0800  /* Try for asymetric pause     */
#define ADVERTISE_RESV          0x1000  /* Unused...                   */
#define ADVERTISE_RFAULT        0x2000  /* Say we can detect faults    */
#define ADVERTISE_LPACK         0x4000  /* Ack link partners response  */
#define ADVERTISE_NPAGE         0x8000  /* Next page bit               */

#define ADVERTISE_FULL (ADVERTISE_100FULL | ADVERTISE_10FULL | \
            ADVERTISE_CSMA)
#define ADVERTISE_ALL (ADVERTISE_10HALF | ADVERTISE_10FULL | \
                       ADVERTISE_100HALF | ADVERTISE_100FULL)

/* Indicates what features are advertised by the interface. */
#define ADVERTISED_10baseT_Half        (1 << 0)
#define ADVERTISED_10baseT_Full        (1 << 1)
#define ADVERTISED_100baseT_Half       (1 << 2)
#define ADVERTISED_100baseT_Full       (1 << 3)
#define ADVERTISED_1000baseT_Half      (1 << 4)
#define ADVERTISED_1000baseT_Full      (1 << 5)
#define ADVERTISED_Autoneg             (1 << 6)
#define ADVERTISED_TP                  (1 << 7)
#define ADVERTISED_AUI                 (1 << 8)
#define ADVERTISED_MII                 (1 << 9)
#define ADVERTISED_FIBRE               (1 << 10)
#define ADVERTISED_BNC                 (1 << 11)
#define ADVERTISED_10000baseT_Full     (1 << 12)
#define ADVERTISED_Pause               (1 << 13)
#define ADVERTISED_Asym_Pause          (1 << 14)

/* Link partner ability register. */
#define LPA_SLCT                0x001f  /* Same as advertise selector  */
#define LPA_10HALF              0x0020  /* Can do 10mbps half-duplex   */
#define LPA_1000XFULL           0x0020  /* Can do 1000BASE-X full-duplex */
#define LPA_10FULL              0x0040  /* Can do 10mbps full-duplex   */
#define LPA_1000XHALF           0x0040  /* Can do 1000BASE-X half-duplex */
#define LPA_100HALF             0x0080  /* Can do 100mbps half-duplex  */
#define LPA_1000XPAUSE          0x0080  /* Can do 1000BASE-X pause     */
#define LPA_100FULL             0x0100  /* Can do 100mbps full-duplex  */
#define LPA_1000XPAUSE_ASYM     0x0100  /* Can do 1000BASE-X pause asym*/
#define LPA_100BASE4            0x0200  /* Can do 100mbps 4k packets   */
#define LPA_PAUSE_CAP           0x0400  /* Can pause                   */
#define LPA_PAUSE_ASYM          0x0800  /* Can pause asymetrically     */
#define LPA_RESV                0x1000  /* Unused...                   */
#define LPA_RFAULT              0x2000  /* Link partner faulted        */
#define LPA_LPACK               0x4000  /* Link partner acked us       */
#define LPA_NPAGE               0x8000  /* Next page bit               */

#define LPA_DUPLEX         (LPA_10FULL | LPA_100FULL)
#define LPA_100            (LPA_100FULL | LPA_100HALF | LPA_100BASE4)

/* Expansion register for auto-negotiation. */
#define EXPANSION_NWAY          0x0001  /* Can do N-way auto-nego      */
#define EXPANSION_LCWP          0x0002  /* Got new RX page code word   */
#define EXPANSION_ENABLENPAGE   0x0004  /* This enables npage words    */
#define EXPANSION_NPCAPABLE     0x0008  /* Link partner supports npage */
#define EXPANSION_MFAULTS       0x0010  /* Multiple faults detected    */
#define EXPANSION_RESV          0xffe0  /* Unused...                   */

B
bigmagic 已提交
138 139
#define ESTATUS_1000_TFULL      0x2000    /* Can do 1000BT Full */
#define ESTATUS_1000_THALF      0x1000    /* Can do 1000BT Half */
B
bigmagic 已提交
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172

/* N-way test register. */
#define NWAYTEST_RESV1          0x00ff  /* Unused...                   */
#define NWAYTEST_LOOPBACK       0x0100  /* Enable loopback for N-way   */
#define NWAYTEST_RESV2          0xfe00  /* Unused...                   */

/* 1000BASE-T Control register */
#define ADVERTISE_1000FULL      0x0200  /* Advertise 1000BASE-T full duplex */
#define ADVERTISE_1000HALF      0x0100  /* Advertise 1000BASE-T half duplex */

/* 1000BASE-T Status register */
#define LPA_1000LOCALRXOK       0x2000  /* Link partner local receiver status */
#define LPA_1000REMRXOK         0x1000  /* Link partner remote receiver status */
#define LPA_1000FULL            0x0800  /* Link partner 1000BASE-T full duplex */

#define SUPPORTED_10baseT_Half         (1 << 0)
#define SUPPORTED_10baseT_Full         (1 << 1)
#define SUPPORTED_100baseT_Half        (1 << 2)
#define SUPPORTED_100baseT_Full        (1 << 3)
#define SUPPORTED_1000baseT_Half       (1 << 4)
#define SUPPORTED_1000baseT_Full       (1 << 5)
#define SUPPORTED_Autoneg              (1 << 6)
#define SUPPORTED_TP                   (1 << 7)
#define SUPPORTED_AUI                  (1 << 8)
#define SUPPORTED_MII                  (1 << 9)
#define SUPPORTED_FIBRE                (1 << 10)
#define SUPPORTED_BNC                  (1 << 11)
#define SUPPORTED_10000baseT_Full      (1 << 12)
#define SUPPORTED_Pause                (1 << 13)
#define SUPPORTED_Asym_Pause           (1 << 14)


/* Which connector port. */
B
bigmagic 已提交
173 174 175 176 177
#define PORT_TP             0x00
#define PORT_AUI            0x01
#define PORT_MII            0x02 
#define PORT_FIBRE          0x03
#define PORT_BNC            0x04
B
bigmagic 已提交
178 179 180 181 182 183 184 185

/* Which transceiver to use. */
#define XCVR_INTERNAL       0x00
#define XCVR_EXTERNAL       0x01
#define XCVR_DUMMY1         0x02 
#define XCVR_DUMMY2         0x03 
#define XCVR_DUMMY3         0x04

B
bigmagic 已提交
186 187
#define AUTONEG_DISABLE     0x00
#define AUTONEG_ENABLE      0x01
B
bigmagic 已提交
188 189


B
bigmagic 已提交
190 191 192 193 194
#define SPEED_10            10
#define SPEED_100           100
#define SPEED_1000          1000
#define SPEED_2500          2500
#define SPEED_10000         10000
B
bigmagic 已提交
195

B
bigmagic 已提交
196 197
#define DUPLEX_HALF         0x00
#define DUPLEX_FULL         0x01
B
bigmagic 已提交
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229

struct ethtool_cmd {
    u32    cmd;
    u32    supported;    /* Features this interface supports */
    u32    advertising;    /* Features this interface advertises */
    u16    speed;        /* The forced speed, 10Mb, 100Mb, gigabit */
    u8     duplex;        /* Duplex, half or full */
    u8     port;        /* Which connector port */
    u8     phy_address;
    u8     transceiver;    /* Which transceiver to use */
    u8     autoneg;    /* Enable or disable autonegotiation */
    u32    maxtxpkt;    /* Tx pkts before generating tx int */
    u32    maxrxpkt;    /* Rx pkts before generating rx int */
    u32    reserved[4];
};

struct mii_if_info {
    int phy_id;
    int advertising;
    int phy_id_mask;
    int reg_num_mask;

    unsigned int full_duplex : 1;    /* is full duplex? */
    unsigned int force_media : 1;    /* is autoneg. disabled? */
    unsigned int supports_gmii : 1; /* are GMII registers supported? */

    struct synopGMACNetworkAdapter  *dev;
    int (*mdio_read) (struct synopGMACNetworkAdapter *dev, int phy_id, int location);
    void (*mdio_write) (struct synopGMACNetworkAdapter *dev, int phy_id, int location, int val);
};

#endif