patch-2.4.0-test8 linux/drivers/net/pcmcia/smc91c92_cs.c
Next file: linux/drivers/net/pcmcia/xirc2ps_cs.c
Previous file: linux/drivers/net/pcmcia/ray_cs.c
Back to the patch index
Back to the overall index
- Lines: 135
- Date:
Sat Sep 2 00:15:37 2000
- Orig file:
v2.4.0-test7/linux/drivers/net/pcmcia/smc91c92_cs.c
- Orig date:
Thu May 11 15:30:07 2000
diff -u --recursive --new-file v2.4.0-test7/linux/drivers/net/pcmcia/smc91c92_cs.c linux/drivers/net/pcmcia/smc91c92_cs.c
@@ -6,13 +6,13 @@
Megahertz, Motorola, Ositech, and Psion Dacom ethernet/modem
multifunction cards.
- Copyright (C) 1999 David A. Hinds -- dhinds@pcmcia.sourceforge.org
+ Copyright (C) 1999 David A. Hinds -- dahinds@users.sourceforge.net
- smc91c92_cs.c 1.96 2000/05/09 02:35:58
+ smc91c92_cs.c 1.104 2000/08/31 21:25:13
This driver contains code written by Donald Becker
(becker@cesdis.gsfc.nasa.gov), Rowan Hughes (x-csrdh@jcu.edu.au),
- David Hinds (dhinds@pcmcia.sourceforge.org), and Erik Stahlman
+ David Hinds (dahinds@users.sourceforge.net), and Erik Stahlman
(erik@vt.edu). Donald wrote the SMC 91c92 code using parts of
Erik's SMC 91c94 driver. Rowan wrote a similar driver, and I've
incorporated some parts of his driver here. I (Dave) wrote most
@@ -635,11 +635,12 @@
mdelay(100);
}
-static int mot_setup(dev_link_t *link) {
+static int mot_setup(dev_link_t *link)
+{
struct smc_private *smc = link->priv;
struct net_device *dev = &smc->dev;
ioaddr_t ioaddr = dev->base_addr;
- int i, wait=0, loop;
+ int i, wait, loop;
u_int addr;
/* Read Ethernet address from Serial EEPROM */
@@ -650,7 +651,7 @@
SMC_SELECT_BANK(1);
outw((CTL_RELOAD | CTL_EE_SELECT), ioaddr + CONTROL);
- for (loop = 0; loop < 200; loop++) {
+ for (loop = wait = 0; loop < 200; loop++) {
udelay(10);
wait = ((CTL_RELOAD | CTL_STORE) & inw(ioaddr + CONTROL));
if (wait == 0) break;
@@ -751,7 +752,7 @@
struct smc_private *smc = link->priv;
struct net_device *dev = &smc->dev;
static ioaddr_t com[4] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8 };
- int i=0, j;
+ int i, j;
link->conf.Attributes |= CONF_ENABLE_SPKR;
link->conf.Status = CCSR_AUDIO_ENA;
@@ -765,7 +766,7 @@
/* Enable Hard Decode, LAN, Modem */
link->conf.ConfigIndex = 0x23;
- for (j = 0; j < 4; j++) {
+ for (i = j = 0; j < 4; j++) {
link->io.BasePort2 = com[j];
i = CardServices(RequestIO, link->handle, &link->io);
if (i == CS_SUCCESS) break;
@@ -808,15 +809,16 @@
for (i = 0; i < 6; i++)
dev->dev_addr[i] = buf[i+2];
- if (manfid != MANFID_OSITECH) return 0;
-
- if (cardid == PRODID_OSITECH_SEVEN) {
+ if (((manfid == MANFID_OSITECH) &&
+ (cardid == PRODID_OSITECH_SEVEN)) ||
+ ((manfid == MANFID_PSION) &&
+ (cardid == PRODID_PSION_NET100))) {
/* Download the Seven of Diamonds firmware */
for (i = 0; i < sizeof(__Xilinx7OD); i++) {
outb(__Xilinx7OD[i], link->io.BasePort1+2);
udelay(50);
}
- } else {
+ } else if (manfid == MANFID_OSITECH) {
/* Make sure both functions are powered up */
set_bits(0x300, link->io.BasePort1 + OSITECH_AUI_PWR);
/* Now, turn on the interrupt for both card functions */
@@ -927,7 +929,8 @@
/* Configure card */
link->state |= DEV_CONFIG;
- if (smc->manfid == MANFID_OSITECH) {
+ if ((smc->manfid == MANFID_OSITECH) &&
+ (smc->cardid != PRODID_OSITECH_SEVEN)) {
i = osi_config(link);
} else if ((smc->manfid == MANFID_MOTOROLA) ||
((smc->manfid == MANFID_MEGAHERTZ) &&
@@ -1001,7 +1004,7 @@
for (i = 0; i < 6; i++)
printk("%02X%s", dev->dev_addr[i], ((i<5) ? ":" : "\n"));
if (rev > 0) {
- u_long mir, mcr, mii;
+ u_long mir, mcr;
ioaddr_t ioaddr = dev->base_addr;
SMC_SELECT_BANK(0);
mir = inw(ioaddr + MEMINFO) & 0xff;
@@ -1014,8 +1017,14 @@
else
printk(KERN_INFO " %lu kb", mir>>10);
SMC_SELECT_BANK(1);
- mii = inw(ioaddr + CONFIG) & CFG_MII_SELECT;
- printk(" buffer, %s xcvr\n", mii ? "MII" : if_names[dev->if_port]);
+ smc->cfg = inw(ioaddr + CONFIG) & ~CFG_AUI_SELECT;
+ smc->cfg |= CFG_NO_WAIT | CFG_16BIT | CFG_STATIC;
+ if (smc->manfid == MANFID_OSITECH)
+ smc->cfg |= CFG_IRQ_SEL_1 | CFG_IRQ_SEL_0;
+ if ((rev >> 4) >= 7)
+ smc->cfg |= CFG_MII_SELECT;
+ printk(" buffer, %s xcvr\n", (smc->cfg & CFG_MII_SELECT) ?
+ "MII" : if_names[dev->if_port]);
}
return;
@@ -1321,7 +1330,7 @@
DEBUG(2, "%s: smc91c92_start_xmit(length = %d) called,"
" status %4.4x.\n", dev->name, skb->len, inw(ioaddr + 2));
-
+
if (smc->saved_skb) {
/* THIS SHOULD NEVER HAPPEN. */
smc->stats.tx_aborted_errors++;
@@ -1808,9 +1817,6 @@
Accept link errors, counter and Tx error interrupts. */
outw(CTL_AUTO_RELEASE | CTL_TE_ENABLE | CTL_CR_ENABLE,
ioaddr + CONTROL);
- smc->cfg = inw(ioaddr + CONFIG) & ~CFG_AUI_SELECT;
- smc->cfg |= CFG_NO_WAIT | CFG_16BIT | CFG_STATIC |
- (smc->manfid == MANFID_OSITECH ? (CFG_IRQ_SEL_1 | CFG_IRQ_SEL_0) : 0);
smc_set_xcvr(dev, dev->if_port);
if ((smc->manfid == MANFID_OSITECH) &&
(smc->cardid != PRODID_OSITECH_SEVEN))
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)