dl2k: BMSR fixes

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
Al Viro 2008-01-13 14:18:05 +00:00 committed by Jeff Garzik
parent 21b645e4c2
commit 96d768517e
2 changed files with 16 additions and 38 deletions

View file

@ -1435,7 +1435,7 @@ mii_write (struct net_device *dev, int phy_addr, int reg_num, u16 data)
static int static int
mii_wait_link (struct net_device *dev, int wait) mii_wait_link (struct net_device *dev, int wait)
{ {
BMSR_t bmsr; __u16 bmsr;
int phy_addr; int phy_addr;
struct netdev_private *np; struct netdev_private *np;
@ -1443,8 +1443,8 @@ mii_wait_link (struct net_device *dev, int wait)
phy_addr = np->phy_addr; phy_addr = np->phy_addr;
do { do {
bmsr.image = mii_read (dev, phy_addr, MII_BMSR); bmsr = mii_read (dev, phy_addr, MII_BMSR);
if (bmsr.bits.link_status) if (bmsr & MII_BMSR_LINK_STATUS)
return 0; return 0;
mdelay (1); mdelay (1);
} while (--wait > 0); } while (--wait > 0);
@ -1454,7 +1454,7 @@ static int
mii_get_media (struct net_device *dev) mii_get_media (struct net_device *dev)
{ {
__u16 negotiate; __u16 negotiate;
BMSR_t bmsr; __u16 bmsr;
MSCR_t mscr; MSCR_t mscr;
MSSR_t mssr; MSSR_t mssr;
int phy_addr; int phy_addr;
@ -1463,9 +1463,9 @@ mii_get_media (struct net_device *dev)
np = netdev_priv(dev); np = netdev_priv(dev);
phy_addr = np->phy_addr; phy_addr = np->phy_addr;
bmsr.image = mii_read (dev, phy_addr, MII_BMSR); bmsr = mii_read (dev, phy_addr, MII_BMSR);
if (np->an_enable) { if (np->an_enable) {
if (!bmsr.bits.an_complete) { if (!(bmsr & MII_BMSR_AN_COMPLETE)) {
/* Auto-Negotiation not completed */ /* Auto-Negotiation not completed */
return -1; return -1;
} }
@ -1541,7 +1541,7 @@ mii_set_media (struct net_device *dev)
{ {
PHY_SCR_t pscr; PHY_SCR_t pscr;
__u16 bmcr; __u16 bmcr;
BMSR_t bmsr; __u16 bmsr;
__u16 anar; __u16 anar;
int phy_addr; int phy_addr;
struct netdev_private *np; struct netdev_private *np;
@ -1551,22 +1551,22 @@ mii_set_media (struct net_device *dev)
/* Does user set speed? */ /* Does user set speed? */
if (np->an_enable) { if (np->an_enable) {
/* Advertise capabilities */ /* Advertise capabilities */
bmsr.image = mii_read (dev, phy_addr, MII_BMSR); bmsr = mii_read (dev, phy_addr, MII_BMSR);
anar = mii_read (dev, phy_addr, MII_ANAR) & anar = mii_read (dev, phy_addr, MII_ANAR) &
~MII_ANAR_100BX_FD & ~MII_ANAR_100BX_FD &
~MII_ANAR_100BX_HD & ~MII_ANAR_100BX_HD &
~MII_ANAR_100BT4 & ~MII_ANAR_100BT4 &
~MII_ANAR_10BT_FD & ~MII_ANAR_10BT_FD &
~MII_ANAR_10BT_HD; ~MII_ANAR_10BT_HD;
if (bmsr.bits.media_100BX_FD) if (bmsr & MII_BMSR_100BX_FD)
anar |= MII_ANAR_100BX_FD; anar |= MII_ANAR_100BX_FD;
if (bmsr.bits.media_100BX_HD) if (bmsr & MII_BMSR_100BX_HD)
anar |= MII_ANAR_100BX_HD; anar |= MII_ANAR_100BX_HD;
if (bmsr.bits.media_100BT4) if (bmsr & MII_BMSR_100BT4)
anar |= MII_ANAR_100BT4; anar |= MII_ANAR_100BT4;
if (bmsr.bits.media_10BT_FD) if (bmsr & MII_BMSR_10BT_FD)
anar |= MII_ANAR_10BT_FD; anar |= MII_ANAR_10BT_FD;
if (bmsr.bits.media_10BT_HD) if (bmsr & MII_BMSR_10BT_HD)
anar |= MII_ANAR_10BT_HD; anar |= MII_ANAR_10BT_HD;
anar |= MII_ANAR_PAUSE | MII_ANAR_ASYMMETRIC; anar |= MII_ANAR_PAUSE | MII_ANAR_ASYMMETRIC;
mii_write (dev, phy_addr, MII_ANAR, anar); mii_write (dev, phy_addr, MII_ANAR, anar);
@ -1631,16 +1631,16 @@ static int
mii_get_media_pcs (struct net_device *dev) mii_get_media_pcs (struct net_device *dev)
{ {
__u16 negotiate; __u16 negotiate;
BMSR_t bmsr; __u16 bmsr;
int phy_addr; int phy_addr;
struct netdev_private *np; struct netdev_private *np;
np = netdev_priv(dev); np = netdev_priv(dev);
phy_addr = np->phy_addr; phy_addr = np->phy_addr;
bmsr.image = mii_read (dev, phy_addr, PCS_BMSR); bmsr = mii_read (dev, phy_addr, PCS_BMSR);
if (np->an_enable) { if (np->an_enable) {
if (!bmsr.bits.an_complete) { if (!(bmsr & MII_BMSR_AN_COMPLETE)) {
/* Auto-Negotiation not completed */ /* Auto-Negotiation not completed */
return -1; return -1;
} }

View file

@ -316,28 +316,6 @@ enum _mii_bmcr {
}; };
/* Basic Mode Status Register */ /* Basic Mode Status Register */
typedef union t_MII_BMSR {
u16 image;
struct {
u16 ext_capability:1; // bit 0
u16 japper_detect:1; // bit 1
u16 link_status:1; // bit 2
u16 an_ability:1; // bit 3
u16 remote_fault:1; // bit 4
u16 an_complete:1; // bit 5
u16 preamble_supp:1; // bit 6
u16 _bit_7:1; // bit 7
u16 ext_status:1; // bit 8
u16 media_100BT2_HD:1; // bit 9
u16 media_100BT2_FD:1; // bit 10
u16 media_10BT_HD:1; // bit 11
u16 media_10BT_FD:1; // bit 12
u16 media_100BX_HD:1; // bit 13
u16 media_100BX_FD:1; // bit 14
u16 media_100BT4:1; // bit 15
} bits;
} BMSR_t, *PBMSR_t;
enum _mii_bmsr { enum _mii_bmsr {
MII_BMSR_100BT4 = 0x8000, MII_BMSR_100BT4 = 0x8000,
MII_BMSR_100BX_FD = 0x4000, MII_BMSR_100BX_FD = 0x4000,