diff options
| author | Haavard Skinnemoen <hskinnemoen@atmel.com> | 2006-12-17 15:46:02 +0100 | 
|---|---|---|
| committer | Haavard Skinnemoen <hskinnemoen@atmel.com> | 2007-04-14 16:14:05 +0200 | 
| commit | 91975b0fea773c9e681fea8cf3349669f27685ee (patch) | |
| tree | 8e3bc1cabbed58cba883fa3f0864ab16b9c59cc0 /include/linux/mii.h | |
| parent | 1b804b229556a4d862da93c0ec94e79419364b2c (diff) | |
| download | olio-uboot-2014.01-91975b0fea773c9e681fea8cf3349669f27685ee.tar.xz olio-uboot-2014.01-91975b0fea773c9e681fea8cf3349669f27685ee.zip | |
Import <linux/mii.h> from the Linux kernel
Instead of creating yet another set of MII register definitions
in the macb driver, here's a complete set of definitions for everyone
to use.
Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
Diffstat (limited to 'include/linux/mii.h')
| -rw-r--r-- | include/linux/mii.h | 158 | 
1 files changed, 158 insertions, 0 deletions
| diff --git a/include/linux/mii.h b/include/linux/mii.h new file mode 100644 index 000000000..5b99168c8 --- /dev/null +++ b/include/linux/mii.h @@ -0,0 +1,158 @@ +/* + * linux/mii.h: definitions for MII-compatible transceivers + * Originally drivers/net/sunhme.h. + * + * Copyright (C) 1996, 1999, 2001 David S. Miller (davem@redhat.com) + */ + +#ifndef __LINUX_MII_H__ +#define __LINUX_MII_H__ + +/* Generic MII registers. */ + +#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_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...                   */ +#define BMCR_SPEED1000		0x0040  /* MSB of Speed (1000)         */ +#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               0x07c0  /* Unused...                   */ +#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_10FULL        0x0040  /* Try for 10mbps full-duplex  */ +#define ADVERTISE_100HALF       0x0080  /* Try for 100mbps half-duplex */ +#define ADVERTISE_100FULL       0x0100  /* Try for 100mbps full-duplex */ +#define ADVERTISE_100BASE4      0x0200  /* Try for 100mbps 4k packets  */ +#define ADVERTISE_RESV          0x1c00  /* 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) + +/* Link partner ability register. */ +#define LPA_SLCT                0x001f  /* Same as advertise selector  */ +#define LPA_10HALF              0x0020  /* Can do 10mbps half-duplex   */ +#define LPA_10FULL              0x0040  /* Can do 10mbps full-duplex   */ +#define LPA_100HALF             0x0080  /* Can do 100mbps half-duplex  */ +#define LPA_100FULL             0x0100  /* Can do 100mbps full-duplex  */ +#define LPA_100BASE4            0x0200  /* Can do 100mbps 4k packets   */ +#define LPA_RESV                0x1c00  /* 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...                   */ + +/* N-way test register. */ +#define NWAYTEST_RESV1          0x00ff  /* Unused...                   */ +#define NWAYTEST_LOOPBACK       0x0100  /* Enable loopback for N-way   */ +#define NWAYTEST_RESV2          0xfe00  /* Unused...                   */ + + +/** + * mii_nway_result + * @negotiated: value of MII ANAR and'd with ANLPAR + * + * Given a set of MII abilities, check each bit and returns the + * currently supported media, in the priority order defined by + * IEEE 802.3u.  We use LPA_xxx constants but note this is not the + * value of LPA solely, as described above. + * + * The one exception to IEEE 802.3u is that 100baseT4 is placed + * between 100T-full and 100T-half.  If your phy does not support + * 100T4 this is fine.  If your phy places 100T4 elsewhere in the + * priority order, you will need to roll your own function. + */ +static inline unsigned int mii_nway_result (unsigned int negotiated) +{ +	unsigned int ret; + +	if (negotiated & LPA_100FULL) +		ret = LPA_100FULL; +	else if (negotiated & LPA_100BASE4) +		ret = LPA_100BASE4; +	else if (negotiated & LPA_100HALF) +		ret = LPA_100HALF; +	else if (negotiated & LPA_10FULL) +		ret = LPA_10FULL; +	else +		ret = LPA_10HALF; + +	return ret; +} + +/** + * mii_duplex + * @duplex_lock: Non-zero if duplex is locked at full + * @negotiated: value of MII ANAR and'd with ANLPAR + * + * A small helper function for a common case.  Returns one + * if the media is operating or locked at full duplex, and + * returns zero otherwise. + */ +static inline unsigned int mii_duplex (unsigned int duplex_lock, +				       unsigned int negotiated) +{ +	if (duplex_lock) +		return 1; +	if (mii_nway_result(negotiated) & LPA_DUPLEX) +		return 1; +	return 0; +} + + +#endif /* __LINUX_MII_H__ */ |