0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #define pr_fmt(fmt) "tulip: " fmt
0013
0014 #define DRV_NAME "tulip"
0015
0016 #include <linux/module.h>
0017 #include <linux/pci.h>
0018 #include <linux/slab.h>
0019 #include "tulip.h"
0020 #include <linux/init.h>
0021 #include <linux/interrupt.h>
0022 #include <linux/etherdevice.h>
0023 #include <linux/delay.h>
0024 #include <linux/mii.h>
0025 #include <linux/crc32.h>
0026 #include <asm/unaligned.h>
0027 #include <linux/uaccess.h>
0028
0029 #ifdef CONFIG_SPARC
0030 #include <asm/prom.h>
0031 #endif
0032
0033
0034
0035
0036 static unsigned int max_interrupt_work = 25;
0037
0038 #define MAX_UNITS 8
0039
0040 static int full_duplex[MAX_UNITS];
0041 static int options[MAX_UNITS];
0042 static int mtu[MAX_UNITS];
0043
0044
0045 const char * const medianame[32] = {
0046 "10baseT", "10base2", "AUI", "100baseTx",
0047 "10baseT-FDX", "100baseTx-FDX", "100baseT4", "100baseFx",
0048 "100baseFx-FDX", "MII 10baseT", "MII 10baseT-FDX", "MII",
0049 "10baseT(forced)", "MII 100baseTx", "MII 100baseTx-FDX", "MII 100baseT4",
0050 "MII 100baseFx-HDX", "MII 100baseFx-FDX", "Home-PNA 1Mbps", "Invalid-19",
0051 "","","","", "","","","", "","","","Transceiver reset",
0052 };
0053
0054
0055 #if defined(__alpha__) || defined(__arm__) || defined(__hppa__) || \
0056 defined(CONFIG_SPARC) || defined(__ia64__) || \
0057 defined(__sh__) || defined(__mips__)
0058 static int rx_copybreak = 1518;
0059 #else
0060 static int rx_copybreak = 100;
0061 #endif
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076 #if defined(__alpha__) || defined(__ia64__)
0077 static int csr0 = 0x01A00000 | 0xE000;
0078 #elif defined(__i386__) || defined(__powerpc__) || defined(__x86_64__)
0079 static int csr0 = 0x01A00000 | 0x8000;
0080 #elif defined(CONFIG_SPARC) || defined(__hppa__)
0081
0082
0083
0084
0085 static int csr0 = 0x01A00000 | 0x9000;
0086 #elif defined(__arm__) || defined(__sh__)
0087 static int csr0 = 0x01A00000 | 0x4800;
0088 #elif defined(__mips__)
0089 static int csr0 = 0x00200000 | 0x4000;
0090 #else
0091 static int csr0;
0092 #endif
0093
0094
0095
0096 #define TX_TIMEOUT (4*HZ)
0097
0098
0099 MODULE_AUTHOR("The Linux Kernel Team");
0100 MODULE_DESCRIPTION("Digital 21*4* Tulip ethernet driver");
0101 MODULE_LICENSE("GPL");
0102 module_param(tulip_debug, int, 0);
0103 module_param(max_interrupt_work, int, 0);
0104 module_param(rx_copybreak, int, 0);
0105 module_param(csr0, int, 0);
0106 module_param_array(options, int, NULL, 0);
0107 module_param_array(full_duplex, int, NULL, 0);
0108
0109 #ifdef TULIP_DEBUG
0110 int tulip_debug = TULIP_DEBUG;
0111 #else
0112 int tulip_debug = 1;
0113 #endif
0114
0115 static void tulip_timer(struct timer_list *t)
0116 {
0117 struct tulip_private *tp = from_timer(tp, t, timer);
0118 struct net_device *dev = tp->dev;
0119
0120 if (netif_running(dev))
0121 schedule_work(&tp->media_work);
0122 }
0123
0124
0125
0126
0127
0128
0129
0130 const struct tulip_chip_table tulip_tbl[] = {
0131 { },
0132 { },
0133
0134
0135 { "Digital DS21140 Tulip", 128, 0x0001ebef,
0136 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_PCI_MWI, tulip_timer,
0137 tulip_media_task },
0138
0139
0140 { "Digital DS21142/43 Tulip", 128, 0x0801fbff,
0141 HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII | HAS_ACPI | HAS_NWAY
0142 | HAS_INTR_MITIGATION | HAS_PCI_MWI, tulip_timer, t21142_media_task },
0143
0144
0145 { "Lite-On 82c168 PNIC", 256, 0x0001fbef,
0146 HAS_MII | HAS_PNICNWAY, pnic_timer, },
0147
0148
0149 { "Macronix 98713 PMAC", 128, 0x0001ebef,
0150 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM, mxic_timer, },
0151
0152
0153 { "Macronix 98715 PMAC", 256, 0x0001ebef,
0154 HAS_MEDIA_TABLE, mxic_timer, },
0155
0156
0157 { "Macronix 98725 PMAC", 256, 0x0001ebef,
0158 HAS_MEDIA_TABLE, mxic_timer, },
0159
0160
0161 { "ASIX AX88140", 128, 0x0001fbff,
0162 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | MC_HASH_ONLY
0163 | IS_ASIX, tulip_timer, tulip_media_task },
0164
0165
0166 { "Lite-On PNIC-II", 256, 0x0801fbff,
0167 HAS_MII | HAS_NWAY | HAS_8023X | HAS_PCI_MWI, pnic2_timer, },
0168
0169
0170 { "ADMtek Comet", 256, 0x0001abef,
0171 HAS_MII | MC_HASH_ONLY | COMET_MAC_ADDR, comet_timer, },
0172
0173
0174 { "Compex 9881 PMAC", 128, 0x0001ebef,
0175 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM, mxic_timer, },
0176
0177
0178 { "Intel DS21145 Tulip", 128, 0x0801fbff,
0179 HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII | HAS_ACPI
0180 | HAS_NWAY | HAS_PCI_MWI, tulip_timer, tulip_media_task },
0181
0182
0183 #ifdef CONFIG_TULIP_DM910X
0184 { "Davicom DM9102/DM9102A", 128, 0x0001ebef,
0185 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_ACPI,
0186 tulip_timer, tulip_media_task },
0187 #else
0188 { NULL },
0189 #endif
0190
0191
0192 { "Conexant LANfinity", 256, 0x0001ebef,
0193 HAS_MII | HAS_ACPI, tulip_timer, tulip_media_task },
0194
0195 };
0196
0197
0198 static const struct pci_device_id tulip_pci_tbl[] = {
0199 { 0x1011, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21140 },
0200 { 0x1011, 0x0019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21143 },
0201 { 0x11AD, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, LC82C168 },
0202 { 0x10d9, 0x0512, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98713 },
0203 { 0x10d9, 0x0531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 },
0204
0205 { 0x125B, 0x1400, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AX88140 },
0206 { 0x11AD, 0xc115, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PNIC2 },
0207 { 0x1317, 0x0981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0208 { 0x1317, 0x0985, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0209 { 0x1317, 0x1985, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0210 { 0x1317, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0211 { 0x13D1, 0xAB02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0212 { 0x13D1, 0xAB03, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0213 { 0x13D1, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0214 { 0x104A, 0x0981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0215 { 0x104A, 0x2774, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0216 { 0x1259, 0xa120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0217 { 0x11F6, 0x9881, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMPEX9881 },
0218 { 0x8086, 0x0039, PCI_ANY_ID, PCI_ANY_ID, 0, 0, I21145 },
0219 #ifdef CONFIG_TULIP_DM910X
0220 { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X },
0221 { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X },
0222 #endif
0223 { 0x1113, 0x1216, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0224 { 0x1113, 0x1217, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 },
0225 { 0x1113, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0226 { 0x1186, 0x1541, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0227 { 0x1186, 0x1561, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0228 { 0x1186, 0x1591, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0229 { 0x14f1, 0x1803, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CONEXANT },
0230 { 0x1626, 0x8410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0231 { 0x1737, 0xAB09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0232 { 0x1737, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0233 { 0x17B3, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0234 { 0x10b7, 0x9300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0235 { 0x14ea, 0xab08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0236 { 0x1414, 0x0001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0237 { 0x1414, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0238 { }
0239 };
0240 MODULE_DEVICE_TABLE(pci, tulip_pci_tbl);
0241
0242
0243
0244 const char tulip_media_cap[32] =
0245 {0,0,0,16, 3,19,16,24, 27,4,7,5, 0,20,23,20, 28,31,0,0, };
0246
0247 static void tulip_tx_timeout(struct net_device *dev, unsigned int txqueue);
0248 static void tulip_init_ring(struct net_device *dev);
0249 static void tulip_free_ring(struct net_device *dev);
0250 static netdev_tx_t tulip_start_xmit(struct sk_buff *skb,
0251 struct net_device *dev);
0252 static int tulip_open(struct net_device *dev);
0253 static int tulip_close(struct net_device *dev);
0254 static void tulip_up(struct net_device *dev);
0255 static void tulip_down(struct net_device *dev);
0256 static struct net_device_stats *tulip_get_stats(struct net_device *dev);
0257 static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
0258 static void set_rx_mode(struct net_device *dev);
0259 static void tulip_set_wolopts(struct pci_dev *pdev, u32 wolopts);
0260 #ifdef CONFIG_NET_POLL_CONTROLLER
0261 static void poll_tulip(struct net_device *dev);
0262 #endif
0263
0264 static void tulip_set_power_state (struct tulip_private *tp,
0265 int sleep, int snooze)
0266 {
0267 if (tp->flags & HAS_ACPI) {
0268 u32 tmp, newtmp;
0269 pci_read_config_dword (tp->pdev, CFDD, &tmp);
0270 newtmp = tmp & ~(CFDD_Sleep | CFDD_Snooze);
0271 if (sleep)
0272 newtmp |= CFDD_Sleep;
0273 else if (snooze)
0274 newtmp |= CFDD_Snooze;
0275 if (tmp != newtmp)
0276 pci_write_config_dword (tp->pdev, CFDD, newtmp);
0277 }
0278
0279 }
0280
0281
0282 static void tulip_up(struct net_device *dev)
0283 {
0284 struct tulip_private *tp = netdev_priv(dev);
0285 void __iomem *ioaddr = tp->base_addr;
0286 int next_tick = 3*HZ;
0287 u32 reg;
0288 int i;
0289
0290 #ifdef CONFIG_TULIP_NAPI
0291 napi_enable(&tp->napi);
0292 #endif
0293
0294
0295 tulip_set_power_state (tp, 0, 0);
0296
0297
0298 pci_enable_wake(tp->pdev, PCI_D3hot, 0);
0299 pci_enable_wake(tp->pdev, PCI_D3cold, 0);
0300 tulip_set_wolopts(tp->pdev, 0);
0301
0302
0303 if (tp->mii_cnt || (tp->mtable && tp->mtable->has_mii))
0304 iowrite32(0x00040000, ioaddr + CSR6);
0305
0306
0307 iowrite32(0x00000001, ioaddr + CSR0);
0308 pci_read_config_dword(tp->pdev, PCI_COMMAND, ®);
0309 udelay(100);
0310
0311
0312
0313
0314 iowrite32(tp->csr0, ioaddr + CSR0);
0315 pci_read_config_dword(tp->pdev, PCI_COMMAND, ®);
0316 udelay(100);
0317
0318 if (tulip_debug > 1)
0319 netdev_dbg(dev, "tulip_up(), irq==%d\n", tp->pdev->irq);
0320
0321 iowrite32(tp->rx_ring_dma, ioaddr + CSR3);
0322 iowrite32(tp->tx_ring_dma, ioaddr + CSR4);
0323 tp->cur_rx = tp->cur_tx = 0;
0324 tp->dirty_rx = tp->dirty_tx = 0;
0325
0326 if (tp->flags & MC_HASH_ONLY) {
0327 u32 addr_low = get_unaligned_le32(dev->dev_addr);
0328 u32 addr_high = get_unaligned_le16(dev->dev_addr + 4);
0329 if (tp->chip_id == AX88140) {
0330 iowrite32(0, ioaddr + CSR13);
0331 iowrite32(addr_low, ioaddr + CSR14);
0332 iowrite32(1, ioaddr + CSR13);
0333 iowrite32(addr_high, ioaddr + CSR14);
0334 } else if (tp->flags & COMET_MAC_ADDR) {
0335 iowrite32(addr_low, ioaddr + 0xA4);
0336 iowrite32(addr_high, ioaddr + 0xA8);
0337 iowrite32(0, ioaddr + CSR27);
0338 iowrite32(0, ioaddr + CSR28);
0339 }
0340 } else {
0341
0342 const u16 *eaddrs = (const u16 *)dev->dev_addr;
0343 u16 *setup_frm = &tp->setup_frame[15*6];
0344 dma_addr_t mapping;
0345
0346
0347 memset(tp->setup_frame, 0xff, sizeof(tp->setup_frame));
0348
0349 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
0350 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
0351 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
0352
0353 mapping = dma_map_single(&tp->pdev->dev, tp->setup_frame,
0354 sizeof(tp->setup_frame),
0355 DMA_TO_DEVICE);
0356 tp->tx_buffers[tp->cur_tx].skb = NULL;
0357 tp->tx_buffers[tp->cur_tx].mapping = mapping;
0358
0359
0360 tp->tx_ring[tp->cur_tx].length = cpu_to_le32(0x08000000 | 192);
0361 tp->tx_ring[tp->cur_tx].buffer1 = cpu_to_le32(mapping);
0362 tp->tx_ring[tp->cur_tx].status = cpu_to_le32(DescOwned);
0363
0364 tp->cur_tx++;
0365 }
0366
0367 tp->saved_if_port = dev->if_port;
0368 if (dev->if_port == 0)
0369 dev->if_port = tp->default_port;
0370
0371
0372 i = 0;
0373 if (tp->mtable == NULL)
0374 goto media_picked;
0375 if (dev->if_port) {
0376 int looking_for = tulip_media_cap[dev->if_port] & MediaIsMII ? 11 :
0377 (dev->if_port == 12 ? 0 : dev->if_port);
0378 for (i = 0; i < tp->mtable->leafcount; i++)
0379 if (tp->mtable->mleaf[i].media == looking_for) {
0380 dev_info(&dev->dev,
0381 "Using user-specified media %s\n",
0382 medianame[dev->if_port]);
0383 goto media_picked;
0384 }
0385 }
0386 if ((tp->mtable->defaultmedia & 0x0800) == 0) {
0387 int looking_for = tp->mtable->defaultmedia & MEDIA_MASK;
0388 for (i = 0; i < tp->mtable->leafcount; i++)
0389 if (tp->mtable->mleaf[i].media == looking_for) {
0390 dev_info(&dev->dev,
0391 "Using EEPROM-set media %s\n",
0392 medianame[looking_for]);
0393 goto media_picked;
0394 }
0395 }
0396
0397 for (i = tp->mtable->leafcount - 1;
0398 (tulip_media_cap[tp->mtable->mleaf[i].media] & MediaAlwaysFD) && i > 0; i--)
0399 ;
0400 media_picked:
0401
0402 tp->csr6 = 0;
0403 tp->cur_index = i;
0404 tp->nwayset = 0;
0405
0406 if (dev->if_port) {
0407 if (tp->chip_id == DC21143 &&
0408 (tulip_media_cap[dev->if_port] & MediaIsMII)) {
0409
0410 iowrite32(0x0000, ioaddr + CSR13);
0411 iowrite32(0x0000, ioaddr + CSR14);
0412 iowrite32(0x0008, ioaddr + CSR15);
0413 }
0414 tulip_select_media(dev, 1);
0415 } else if (tp->chip_id == DC21142) {
0416 if (tp->mii_cnt) {
0417 tulip_select_media(dev, 1);
0418 if (tulip_debug > 1)
0419 dev_info(&dev->dev,
0420 "Using MII transceiver %d, status %04x\n",
0421 tp->phys[0],
0422 tulip_mdio_read(dev, tp->phys[0], 1));
0423 iowrite32(csr6_mask_defstate, ioaddr + CSR6);
0424 tp->csr6 = csr6_mask_hdcap;
0425 dev->if_port = 11;
0426 iowrite32(0x0000, ioaddr + CSR13);
0427 iowrite32(0x0000, ioaddr + CSR14);
0428 } else
0429 t21142_start_nway(dev);
0430 } else if (tp->chip_id == PNIC2) {
0431
0432 tp->sym_advertise = 0x01E0;
0433
0434 iowrite32(ioread32(ioaddr+CSR5)| 0x00008010, ioaddr + CSR5);
0435 iowrite32(ioread32(ioaddr+CSR7)| 0x00008010, ioaddr + CSR7);
0436 pnic2_start_nway(dev);
0437 } else if (tp->chip_id == LC82C168 && ! tp->medialock) {
0438 if (tp->mii_cnt) {
0439 dev->if_port = 11;
0440 tp->csr6 = 0x814C0000 | (tp->full_duplex ? 0x0200 : 0);
0441 iowrite32(0x0001, ioaddr + CSR15);
0442 } else if (ioread32(ioaddr + CSR5) & TPLnkPass)
0443 pnic_do_nway(dev);
0444 else {
0445
0446 iowrite32(0x32, ioaddr + CSR12);
0447 tp->csr6 = 0x00420000;
0448 iowrite32(0x0001B078, ioaddr + 0xB8);
0449 iowrite32(0x0201B078, ioaddr + 0xB8);
0450 next_tick = 1*HZ;
0451 }
0452 } else if ((tp->chip_id == MX98713 || tp->chip_id == COMPEX9881) &&
0453 ! tp->medialock) {
0454 dev->if_port = 0;
0455 tp->csr6 = 0x01880000 | (tp->full_duplex ? 0x0200 : 0);
0456 iowrite32(0x0f370000 | ioread16(ioaddr + 0x80), ioaddr + 0x80);
0457 } else if (tp->chip_id == MX98715 || tp->chip_id == MX98725) {
0458
0459 dev->if_port = 0;
0460 tp->csr6 = 0x01a80200;
0461 iowrite32(0x0f370000 | ioread16(ioaddr + 0x80), ioaddr + 0x80);
0462 iowrite32(0x11000 | ioread16(ioaddr + 0xa0), ioaddr + 0xa0);
0463 } else if (tp->chip_id == COMET || tp->chip_id == CONEXANT) {
0464
0465 iowrite32(ioread32(ioaddr + 0x88) | 1, ioaddr + 0x88);
0466 dev->if_port = tp->mii_cnt ? 11 : 0;
0467 tp->csr6 = 0x00040000;
0468 } else if (tp->chip_id == AX88140) {
0469 tp->csr6 = tp->mii_cnt ? 0x00040100 : 0x00000100;
0470 } else
0471 tulip_select_media(dev, 1);
0472
0473
0474 tulip_stop_rxtx(tp);
0475 barrier();
0476 udelay(5);
0477 iowrite32(tp->csr6 | TxOn, ioaddr + CSR6);
0478
0479
0480 iowrite32(tulip_tbl[tp->chip_id].valid_intrs, ioaddr + CSR5);
0481 iowrite32(tulip_tbl[tp->chip_id].valid_intrs, ioaddr + CSR7);
0482 tulip_start_rxtx(tp);
0483 iowrite32(0, ioaddr + CSR2);
0484
0485 if (tulip_debug > 2) {
0486 netdev_dbg(dev, "Done tulip_up(), CSR0 %08x, CSR5 %08x CSR6 %08x\n",
0487 ioread32(ioaddr + CSR0),
0488 ioread32(ioaddr + CSR5),
0489 ioread32(ioaddr + CSR6));
0490 }
0491
0492
0493
0494 tp->timer.expires = RUN_AT(next_tick);
0495 add_timer(&tp->timer);
0496 #ifdef CONFIG_TULIP_NAPI
0497 timer_setup(&tp->oom_timer, oom_timer, 0);
0498 #endif
0499 }
0500
0501 static int
0502 tulip_open(struct net_device *dev)
0503 {
0504 struct tulip_private *tp = netdev_priv(dev);
0505 int retval;
0506
0507 tulip_init_ring (dev);
0508
0509 retval = request_irq(tp->pdev->irq, tulip_interrupt, IRQF_SHARED,
0510 dev->name, dev);
0511 if (retval)
0512 goto free_ring;
0513
0514 tulip_up (dev);
0515
0516 netif_start_queue (dev);
0517
0518 return 0;
0519
0520 free_ring:
0521 tulip_free_ring (dev);
0522 return retval;
0523 }
0524
0525
0526 static void tulip_tx_timeout(struct net_device *dev, unsigned int txqueue)
0527 {
0528 struct tulip_private *tp = netdev_priv(dev);
0529 void __iomem *ioaddr = tp->base_addr;
0530 unsigned long flags;
0531
0532 spin_lock_irqsave (&tp->lock, flags);
0533
0534 if (tulip_media_cap[dev->if_port] & MediaIsMII) {
0535
0536 if (tulip_debug > 1)
0537 dev_warn(&dev->dev,
0538 "Transmit timeout using MII device\n");
0539 } else if (tp->chip_id == DC21140 || tp->chip_id == DC21142 ||
0540 tp->chip_id == MX98713 || tp->chip_id == COMPEX9881 ||
0541 tp->chip_id == DM910X) {
0542 dev_warn(&dev->dev,
0543 "21140 transmit timed out, status %08x, SIA %08x %08x %08x %08x, resetting...\n",
0544 ioread32(ioaddr + CSR5), ioread32(ioaddr + CSR12),
0545 ioread32(ioaddr + CSR13), ioread32(ioaddr + CSR14),
0546 ioread32(ioaddr + CSR15));
0547 tp->timeout_recovery = 1;
0548 schedule_work(&tp->media_work);
0549 goto out_unlock;
0550 } else if (tp->chip_id == PNIC2) {
0551 dev_warn(&dev->dev,
0552 "PNIC2 transmit timed out, status %08x, CSR6/7 %08x / %08x CSR12 %08x, resetting...\n",
0553 (int)ioread32(ioaddr + CSR5),
0554 (int)ioread32(ioaddr + CSR6),
0555 (int)ioread32(ioaddr + CSR7),
0556 (int)ioread32(ioaddr + CSR12));
0557 } else {
0558 dev_warn(&dev->dev,
0559 "Transmit timed out, status %08x, CSR12 %08x, resetting...\n",
0560 ioread32(ioaddr + CSR5), ioread32(ioaddr + CSR12));
0561 dev->if_port = 0;
0562 }
0563
0564 #if defined(way_too_many_messages)
0565 if (tulip_debug > 3) {
0566 int i;
0567 for (i = 0; i < RX_RING_SIZE; i++) {
0568 u8 *buf = (u8 *)(tp->rx_ring[i].buffer1);
0569 int j;
0570 printk(KERN_DEBUG
0571 "%2d: %08x %08x %08x %08x %02x %02x %02x\n",
0572 i,
0573 (unsigned int)tp->rx_ring[i].status,
0574 (unsigned int)tp->rx_ring[i].length,
0575 (unsigned int)tp->rx_ring[i].buffer1,
0576 (unsigned int)tp->rx_ring[i].buffer2,
0577 buf[0], buf[1], buf[2]);
0578 for (j = 0; ((j < 1600) && buf[j] != 0xee); j++)
0579 if (j < 100)
0580 pr_cont(" %02x", buf[j]);
0581 pr_cont(" j=%d\n", j);
0582 }
0583 printk(KERN_DEBUG " Rx ring %p: ", tp->rx_ring);
0584 for (i = 0; i < RX_RING_SIZE; i++)
0585 pr_cont(" %08x", (unsigned int)tp->rx_ring[i].status);
0586 printk(KERN_DEBUG " Tx ring %p: ", tp->tx_ring);
0587 for (i = 0; i < TX_RING_SIZE; i++)
0588 pr_cont(" %08x", (unsigned int)tp->tx_ring[i].status);
0589 pr_cont("\n");
0590 }
0591 #endif
0592
0593 tulip_tx_timeout_complete(tp, ioaddr);
0594
0595 out_unlock:
0596 spin_unlock_irqrestore (&tp->lock, flags);
0597 netif_trans_update(dev);
0598 netif_wake_queue (dev);
0599 }
0600
0601
0602
0603 static void tulip_init_ring(struct net_device *dev)
0604 {
0605 struct tulip_private *tp = netdev_priv(dev);
0606 int i;
0607
0608 tp->susp_rx = 0;
0609 tp->ttimer = 0;
0610 tp->nir = 0;
0611
0612 for (i = 0; i < RX_RING_SIZE; i++) {
0613 tp->rx_ring[i].status = 0x00000000;
0614 tp->rx_ring[i].length = cpu_to_le32(PKT_BUF_SZ);
0615 tp->rx_ring[i].buffer2 = cpu_to_le32(tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * (i + 1));
0616 tp->rx_buffers[i].skb = NULL;
0617 tp->rx_buffers[i].mapping = 0;
0618 }
0619
0620 tp->rx_ring[i-1].length = cpu_to_le32(PKT_BUF_SZ | DESC_RING_WRAP);
0621 tp->rx_ring[i-1].buffer2 = cpu_to_le32(tp->rx_ring_dma);
0622
0623 for (i = 0; i < RX_RING_SIZE; i++) {
0624 dma_addr_t mapping;
0625
0626
0627
0628
0629 struct sk_buff *skb = netdev_alloc_skb(dev, PKT_BUF_SZ);
0630 tp->rx_buffers[i].skb = skb;
0631 if (skb == NULL)
0632 break;
0633 mapping = dma_map_single(&tp->pdev->dev, skb->data,
0634 PKT_BUF_SZ, DMA_FROM_DEVICE);
0635 tp->rx_buffers[i].mapping = mapping;
0636 tp->rx_ring[i].status = cpu_to_le32(DescOwned);
0637 tp->rx_ring[i].buffer1 = cpu_to_le32(mapping);
0638 }
0639 tp->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
0640
0641
0642
0643 for (i = 0; i < TX_RING_SIZE; i++) {
0644 tp->tx_buffers[i].skb = NULL;
0645 tp->tx_buffers[i].mapping = 0;
0646 tp->tx_ring[i].status = 0x00000000;
0647 tp->tx_ring[i].buffer2 = cpu_to_le32(tp->tx_ring_dma + sizeof(struct tulip_tx_desc) * (i + 1));
0648 }
0649 tp->tx_ring[i-1].buffer2 = cpu_to_le32(tp->tx_ring_dma);
0650 }
0651
0652 static netdev_tx_t
0653 tulip_start_xmit(struct sk_buff *skb, struct net_device *dev)
0654 {
0655 struct tulip_private *tp = netdev_priv(dev);
0656 int entry;
0657 u32 flag;
0658 dma_addr_t mapping;
0659 unsigned long flags;
0660
0661 spin_lock_irqsave(&tp->lock, flags);
0662
0663
0664 entry = tp->cur_tx % TX_RING_SIZE;
0665
0666 tp->tx_buffers[entry].skb = skb;
0667 mapping = dma_map_single(&tp->pdev->dev, skb->data, skb->len,
0668 DMA_TO_DEVICE);
0669 tp->tx_buffers[entry].mapping = mapping;
0670 tp->tx_ring[entry].buffer1 = cpu_to_le32(mapping);
0671
0672 if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE/2) {
0673 flag = 0x60000000;
0674 } else if (tp->cur_tx - tp->dirty_tx == TX_RING_SIZE/2) {
0675 flag = 0xe0000000;
0676 } else if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE - 2) {
0677 flag = 0x60000000;
0678 } else {
0679 flag = 0xe0000000;
0680 netif_stop_queue(dev);
0681 }
0682 if (entry == TX_RING_SIZE-1)
0683 flag = 0xe0000000 | DESC_RING_WRAP;
0684
0685 tp->tx_ring[entry].length = cpu_to_le32(skb->len | flag);
0686
0687
0688 tp->tx_ring[entry].status = cpu_to_le32(DescOwned);
0689 wmb();
0690
0691 tp->cur_tx++;
0692
0693
0694 iowrite32(0, tp->base_addr + CSR1);
0695
0696 spin_unlock_irqrestore(&tp->lock, flags);
0697
0698 return NETDEV_TX_OK;
0699 }
0700
0701 static void tulip_clean_tx_ring(struct tulip_private *tp)
0702 {
0703 unsigned int dirty_tx;
0704
0705 for (dirty_tx = tp->dirty_tx ; tp->cur_tx - dirty_tx > 0;
0706 dirty_tx++) {
0707 int entry = dirty_tx % TX_RING_SIZE;
0708 int status = le32_to_cpu(tp->tx_ring[entry].status);
0709
0710 if (status < 0) {
0711 tp->dev->stats.tx_errors++;
0712 tp->tx_ring[entry].status = 0;
0713 }
0714
0715
0716 if (tp->tx_buffers[entry].skb == NULL) {
0717
0718 if (tp->tx_buffers[entry].mapping)
0719 dma_unmap_single(&tp->pdev->dev,
0720 tp->tx_buffers[entry].mapping,
0721 sizeof(tp->setup_frame),
0722 DMA_TO_DEVICE);
0723 continue;
0724 }
0725
0726 dma_unmap_single(&tp->pdev->dev,
0727 tp->tx_buffers[entry].mapping,
0728 tp->tx_buffers[entry].skb->len,
0729 DMA_TO_DEVICE);
0730
0731
0732 dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
0733 tp->tx_buffers[entry].skb = NULL;
0734 tp->tx_buffers[entry].mapping = 0;
0735 }
0736 }
0737
0738 static void tulip_down (struct net_device *dev)
0739 {
0740 struct tulip_private *tp = netdev_priv(dev);
0741 void __iomem *ioaddr = tp->base_addr;
0742 unsigned long flags;
0743
0744 cancel_work_sync(&tp->media_work);
0745
0746 #ifdef CONFIG_TULIP_NAPI
0747 napi_disable(&tp->napi);
0748 #endif
0749
0750 del_timer_sync (&tp->timer);
0751 #ifdef CONFIG_TULIP_NAPI
0752 del_timer_sync (&tp->oom_timer);
0753 #endif
0754 spin_lock_irqsave (&tp->lock, flags);
0755
0756
0757 iowrite32 (0x00000000, ioaddr + CSR7);
0758
0759
0760 tulip_stop_rxtx(tp);
0761
0762
0763 tulip_refill_rx(dev);
0764
0765
0766 tulip_clean_tx_ring(tp);
0767
0768 if (ioread32(ioaddr + CSR6) != 0xffffffff)
0769 dev->stats.rx_missed_errors += ioread32(ioaddr + CSR8) & 0xffff;
0770
0771 spin_unlock_irqrestore (&tp->lock, flags);
0772
0773 timer_setup(&tp->timer, tulip_tbl[tp->chip_id].media_timer, 0);
0774
0775 dev->if_port = tp->saved_if_port;
0776
0777
0778 tulip_set_power_state (tp, 0, 1);
0779 }
0780
0781 static void tulip_free_ring (struct net_device *dev)
0782 {
0783 struct tulip_private *tp = netdev_priv(dev);
0784 int i;
0785
0786
0787 for (i = 0; i < RX_RING_SIZE; i++) {
0788 struct sk_buff *skb = tp->rx_buffers[i].skb;
0789 dma_addr_t mapping = tp->rx_buffers[i].mapping;
0790
0791 tp->rx_buffers[i].skb = NULL;
0792 tp->rx_buffers[i].mapping = 0;
0793
0794 tp->rx_ring[i].status = 0;
0795 tp->rx_ring[i].length = 0;
0796
0797 tp->rx_ring[i].buffer1 = cpu_to_le32(0xBADF00D0);
0798 if (skb) {
0799 dma_unmap_single(&tp->pdev->dev, mapping, PKT_BUF_SZ,
0800 DMA_FROM_DEVICE);
0801 dev_kfree_skb (skb);
0802 }
0803 }
0804
0805 for (i = 0; i < TX_RING_SIZE; i++) {
0806 struct sk_buff *skb = tp->tx_buffers[i].skb;
0807
0808 if (skb != NULL) {
0809 dma_unmap_single(&tp->pdev->dev,
0810 tp->tx_buffers[i].mapping, skb->len,
0811 DMA_TO_DEVICE);
0812 dev_kfree_skb (skb);
0813 }
0814 tp->tx_buffers[i].skb = NULL;
0815 tp->tx_buffers[i].mapping = 0;
0816 }
0817 }
0818
0819 static int tulip_close (struct net_device *dev)
0820 {
0821 struct tulip_private *tp = netdev_priv(dev);
0822 void __iomem *ioaddr = tp->base_addr;
0823
0824 netif_stop_queue (dev);
0825
0826 tulip_down (dev);
0827
0828 if (tulip_debug > 1)
0829 netdev_dbg(dev, "Shutting down ethercard, status was %02x\n",
0830 ioread32 (ioaddr + CSR5));
0831
0832 free_irq (tp->pdev->irq, dev);
0833
0834 tulip_free_ring (dev);
0835
0836 return 0;
0837 }
0838
0839 static struct net_device_stats *tulip_get_stats(struct net_device *dev)
0840 {
0841 struct tulip_private *tp = netdev_priv(dev);
0842 void __iomem *ioaddr = tp->base_addr;
0843
0844 if (netif_running(dev)) {
0845 unsigned long flags;
0846
0847 spin_lock_irqsave (&tp->lock, flags);
0848
0849 dev->stats.rx_missed_errors += ioread32(ioaddr + CSR8) & 0xffff;
0850
0851 spin_unlock_irqrestore(&tp->lock, flags);
0852 }
0853
0854 return &dev->stats;
0855 }
0856
0857
0858 static void tulip_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
0859 {
0860 struct tulip_private *np = netdev_priv(dev);
0861 strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
0862 strlcpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info));
0863 }
0864
0865
0866 static int tulip_ethtool_set_wol(struct net_device *dev,
0867 struct ethtool_wolinfo *wolinfo)
0868 {
0869 struct tulip_private *tp = netdev_priv(dev);
0870
0871 if (wolinfo->wolopts & (~tp->wolinfo.supported))
0872 return -EOPNOTSUPP;
0873
0874 tp->wolinfo.wolopts = wolinfo->wolopts;
0875 device_set_wakeup_enable(&tp->pdev->dev, tp->wolinfo.wolopts);
0876 return 0;
0877 }
0878
0879 static void tulip_ethtool_get_wol(struct net_device *dev,
0880 struct ethtool_wolinfo *wolinfo)
0881 {
0882 struct tulip_private *tp = netdev_priv(dev);
0883
0884 wolinfo->supported = tp->wolinfo.supported;
0885 wolinfo->wolopts = tp->wolinfo.wolopts;
0886 return;
0887 }
0888
0889
0890 static const struct ethtool_ops ops = {
0891 .get_drvinfo = tulip_get_drvinfo,
0892 .set_wol = tulip_ethtool_set_wol,
0893 .get_wol = tulip_ethtool_get_wol,
0894 };
0895
0896
0897 static int private_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
0898 {
0899 struct tulip_private *tp = netdev_priv(dev);
0900 void __iomem *ioaddr = tp->base_addr;
0901 struct mii_ioctl_data *data = if_mii(rq);
0902 const unsigned int phy_idx = 0;
0903 int phy = tp->phys[phy_idx] & 0x1f;
0904 unsigned int regnum = data->reg_num;
0905
0906 switch (cmd) {
0907 case SIOCGMIIPHY:
0908 if (tp->mii_cnt)
0909 data->phy_id = phy;
0910 else if (tp->flags & HAS_NWAY)
0911 data->phy_id = 32;
0912 else if (tp->chip_id == COMET)
0913 data->phy_id = 1;
0914 else
0915 return -ENODEV;
0916 fallthrough;
0917
0918 case SIOCGMIIREG:
0919 if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) {
0920 int csr12 = ioread32 (ioaddr + CSR12);
0921 int csr14 = ioread32 (ioaddr + CSR14);
0922 switch (regnum) {
0923 case 0:
0924 if (((csr14<<5) & 0x1000) ||
0925 (dev->if_port == 5 && tp->nwayset))
0926 data->val_out = 0x1000;
0927 else
0928 data->val_out = (tulip_media_cap[dev->if_port]&MediaIs100 ? 0x2000 : 0)
0929 | (tulip_media_cap[dev->if_port]&MediaIsFD ? 0x0100 : 0);
0930 break;
0931 case 1:
0932 data->val_out =
0933 0x1848 +
0934 ((csr12&0x7000) == 0x5000 ? 0x20 : 0) +
0935 ((csr12&0x06) == 6 ? 0 : 4);
0936 data->val_out |= 0x6048;
0937 break;
0938 case 4:
0939
0940 data->val_out =
0941 ((ioread32(ioaddr + CSR6) >> 3) & 0x0040) +
0942 ((csr14 >> 1) & 0x20) + 1;
0943 data->val_out |= ((csr14 >> 9) & 0x03C0);
0944 break;
0945 case 5: data->val_out = tp->lpar; break;
0946 default: data->val_out = 0; break;
0947 }
0948 } else {
0949 data->val_out = tulip_mdio_read (dev, data->phy_id & 0x1f, regnum);
0950 }
0951 return 0;
0952
0953 case SIOCSMIIREG:
0954 if (regnum & ~0x1f)
0955 return -EINVAL;
0956 if (data->phy_id == phy) {
0957 u16 value = data->val_in;
0958 switch (regnum) {
0959 case 0:
0960 tp->full_duplex_lock = (value & 0x9000) ? 0 : 1;
0961 if (tp->full_duplex_lock)
0962 tp->full_duplex = (value & 0x0100) ? 1 : 0;
0963 break;
0964 case 4:
0965 tp->advertising[phy_idx] =
0966 tp->mii_advertise = data->val_in;
0967 break;
0968 }
0969 }
0970 if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) {
0971 u16 value = data->val_in;
0972 if (regnum == 0) {
0973 if ((value & 0x1200) == 0x1200) {
0974 if (tp->chip_id == PNIC2) {
0975 pnic2_start_nway (dev);
0976 } else {
0977 t21142_start_nway (dev);
0978 }
0979 }
0980 } else if (regnum == 4)
0981 tp->sym_advertise = value;
0982 } else {
0983 tulip_mdio_write (dev, data->phy_id & 0x1f, regnum, data->val_in);
0984 }
0985 return 0;
0986 default:
0987 return -EOPNOTSUPP;
0988 }
0989
0990 return -EOPNOTSUPP;
0991 }
0992
0993
0994
0995
0996
0997
0998
0999 static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
1000 {
1001 struct tulip_private *tp = netdev_priv(dev);
1002 u16 hash_table[32];
1003 struct netdev_hw_addr *ha;
1004 const u16 *eaddrs;
1005 int i;
1006
1007 memset(hash_table, 0, sizeof(hash_table));
1008 __set_bit_le(255, hash_table);
1009
1010 netdev_for_each_mc_addr(ha, dev) {
1011 int index = ether_crc_le(ETH_ALEN, ha->addr) & 0x1ff;
1012
1013 __set_bit_le(index, hash_table);
1014 }
1015 for (i = 0; i < 32; i++) {
1016 *setup_frm++ = hash_table[i];
1017 *setup_frm++ = hash_table[i];
1018 }
1019 setup_frm = &tp->setup_frame[13*6];
1020
1021
1022 eaddrs = (const u16 *)dev->dev_addr;
1023 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
1024 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
1025 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
1026 }
1027
1028 static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
1029 {
1030 struct tulip_private *tp = netdev_priv(dev);
1031 struct netdev_hw_addr *ha;
1032 const u16 *eaddrs;
1033
1034
1035
1036 netdev_for_each_mc_addr(ha, dev) {
1037 eaddrs = (u16 *) ha->addr;
1038 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1039 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1040 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1041 }
1042
1043 memset(setup_frm, 0xff, (15 - netdev_mc_count(dev)) * 12);
1044 setup_frm = &tp->setup_frame[15*6];
1045
1046
1047 eaddrs = (const u16 *)dev->dev_addr;
1048 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
1049 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
1050 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
1051 }
1052
1053
1054 static void set_rx_mode(struct net_device *dev)
1055 {
1056 struct tulip_private *tp = netdev_priv(dev);
1057 void __iomem *ioaddr = tp->base_addr;
1058 int csr6;
1059
1060 csr6 = ioread32(ioaddr + CSR6) & ~0x00D5;
1061
1062 tp->csr6 &= ~0x00D5;
1063 if (dev->flags & IFF_PROMISC) {
1064 tp->csr6 |= AcceptAllMulticast | AcceptAllPhys;
1065 csr6 |= AcceptAllMulticast | AcceptAllPhys;
1066 } else if ((netdev_mc_count(dev) > 1000) ||
1067 (dev->flags & IFF_ALLMULTI)) {
1068
1069 tp->csr6 |= AcceptAllMulticast;
1070 csr6 |= AcceptAllMulticast;
1071 } else if (tp->flags & MC_HASH_ONLY) {
1072
1073
1074 struct netdev_hw_addr *ha;
1075 if (netdev_mc_count(dev) > 64) {
1076
1077 tp->csr6 |= AcceptAllMulticast;
1078 csr6 |= AcceptAllMulticast;
1079 } else {
1080 u32 mc_filter[2] = {0, 0};
1081 int filterbit;
1082 netdev_for_each_mc_addr(ha, dev) {
1083 if (tp->flags & COMET_MAC_ADDR)
1084 filterbit = ether_crc_le(ETH_ALEN,
1085 ha->addr);
1086 else
1087 filterbit = ether_crc(ETH_ALEN,
1088 ha->addr) >> 26;
1089 filterbit &= 0x3f;
1090 mc_filter[filterbit >> 5] |= 1 << (filterbit & 31);
1091 if (tulip_debug > 2)
1092 dev_info(&dev->dev,
1093 "Added filter for %pM %08x bit %d\n",
1094 ha->addr,
1095 ether_crc(ETH_ALEN, ha->addr),
1096 filterbit);
1097 }
1098 if (mc_filter[0] == tp->mc_filter[0] &&
1099 mc_filter[1] == tp->mc_filter[1])
1100 ;
1101 else if (tp->flags & IS_ASIX) {
1102 iowrite32(2, ioaddr + CSR13);
1103 iowrite32(mc_filter[0], ioaddr + CSR14);
1104 iowrite32(3, ioaddr + CSR13);
1105 iowrite32(mc_filter[1], ioaddr + CSR14);
1106 } else if (tp->flags & COMET_MAC_ADDR) {
1107 iowrite32(mc_filter[0], ioaddr + CSR27);
1108 iowrite32(mc_filter[1], ioaddr + CSR28);
1109 }
1110 tp->mc_filter[0] = mc_filter[0];
1111 tp->mc_filter[1] = mc_filter[1];
1112 }
1113 } else {
1114 unsigned long flags;
1115 u32 tx_flags = 0x08000000 | 192;
1116
1117
1118
1119 if (netdev_mc_count(dev) > 14) {
1120
1121 build_setup_frame_hash(tp->setup_frame, dev);
1122 tx_flags = 0x08400000 | 192;
1123 } else {
1124 build_setup_frame_perfect(tp->setup_frame, dev);
1125 }
1126
1127 spin_lock_irqsave(&tp->lock, flags);
1128
1129 if (tp->cur_tx - tp->dirty_tx > TX_RING_SIZE - 2) {
1130
1131 } else {
1132 unsigned int entry;
1133 int dummy = -1;
1134
1135
1136
1137 entry = tp->cur_tx++ % TX_RING_SIZE;
1138
1139 if (entry != 0) {
1140
1141 tp->tx_buffers[entry].skb = NULL;
1142 tp->tx_buffers[entry].mapping = 0;
1143 tp->tx_ring[entry].length =
1144 (entry == TX_RING_SIZE-1) ? cpu_to_le32(DESC_RING_WRAP) : 0;
1145 tp->tx_ring[entry].buffer1 = 0;
1146
1147 dummy = entry;
1148 entry = tp->cur_tx++ % TX_RING_SIZE;
1149
1150 }
1151
1152 tp->tx_buffers[entry].skb = NULL;
1153 tp->tx_buffers[entry].mapping =
1154 dma_map_single(&tp->pdev->dev,
1155 tp->setup_frame,
1156 sizeof(tp->setup_frame),
1157 DMA_TO_DEVICE);
1158
1159 if (entry == TX_RING_SIZE-1)
1160 tx_flags |= DESC_RING_WRAP;
1161 tp->tx_ring[entry].length = cpu_to_le32(tx_flags);
1162 tp->tx_ring[entry].buffer1 =
1163 cpu_to_le32(tp->tx_buffers[entry].mapping);
1164 tp->tx_ring[entry].status = cpu_to_le32(DescOwned);
1165 if (dummy >= 0)
1166 tp->tx_ring[dummy].status = cpu_to_le32(DescOwned);
1167 if (tp->cur_tx - tp->dirty_tx >= TX_RING_SIZE - 2)
1168 netif_stop_queue(dev);
1169
1170
1171 iowrite32(0, ioaddr + CSR1);
1172 }
1173
1174 spin_unlock_irqrestore(&tp->lock, flags);
1175 }
1176
1177 iowrite32(csr6, ioaddr + CSR6);
1178 }
1179
1180 #ifdef CONFIG_TULIP_MWI
1181 static void tulip_mwi_config(struct pci_dev *pdev, struct net_device *dev)
1182 {
1183 struct tulip_private *tp = netdev_priv(dev);
1184 u8 cache;
1185 u16 pci_command;
1186 u32 csr0;
1187
1188 if (tulip_debug > 3)
1189 netdev_dbg(dev, "tulip_mwi_config()\n");
1190
1191 tp->csr0 = csr0 = 0;
1192
1193
1194 csr0 |= MRM | MWI;
1195
1196
1197
1198
1199 pci_try_set_mwi(pdev);
1200
1201
1202 pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
1203 if ((csr0 & MWI) && (!(pci_command & PCI_COMMAND_INVALIDATE)))
1204 csr0 &= ~MWI;
1205
1206
1207 pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &cache);
1208 if ((csr0 & MWI) && (cache == 0)) {
1209 csr0 &= ~MWI;
1210 pci_clear_mwi(pdev);
1211 }
1212
1213
1214
1215
1216 switch (cache) {
1217 case 8:
1218 csr0 |= MRL | (1 << CALShift) | (16 << BurstLenShift);
1219 break;
1220 case 16:
1221 csr0 |= MRL | (2 << CALShift) | (16 << BurstLenShift);
1222 break;
1223 case 32:
1224 csr0 |= MRL | (3 << CALShift) | (32 << BurstLenShift);
1225 break;
1226 default:
1227 cache = 0;
1228 break;
1229 }
1230
1231
1232
1233
1234 if (cache)
1235 goto out;
1236
1237
1238 if (csr0 & MWI) {
1239 pci_clear_mwi(pdev);
1240 csr0 &= ~MWI;
1241 }
1242
1243
1244
1245
1246 csr0 |= (8 << BurstLenShift) | (1 << CALShift);
1247
1248 out:
1249 tp->csr0 = csr0;
1250 if (tulip_debug > 2)
1251 netdev_dbg(dev, "MWI config cacheline=%d, csr0=%08x\n",
1252 cache, csr0);
1253 }
1254 #endif
1255
1256
1257
1258
1259
1260
1261 static int tulip_uli_dm_quirk(struct pci_dev *pdev)
1262 {
1263 if (pdev->vendor == 0x1282 && pdev->device == 0x9102)
1264 return 1;
1265 return 0;
1266 }
1267
1268 static const struct net_device_ops tulip_netdev_ops = {
1269 .ndo_open = tulip_open,
1270 .ndo_start_xmit = tulip_start_xmit,
1271 .ndo_tx_timeout = tulip_tx_timeout,
1272 .ndo_stop = tulip_close,
1273 .ndo_get_stats = tulip_get_stats,
1274 .ndo_eth_ioctl = private_ioctl,
1275 .ndo_set_rx_mode = set_rx_mode,
1276 .ndo_set_mac_address = eth_mac_addr,
1277 .ndo_validate_addr = eth_validate_addr,
1278 #ifdef CONFIG_NET_POLL_CONTROLLER
1279 .ndo_poll_controller = poll_tulip,
1280 #endif
1281 };
1282
1283 static const struct pci_device_id early_486_chipsets[] = {
1284 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82424) },
1285 { PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496) },
1286 { },
1287 };
1288
1289 static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1290 {
1291 struct tulip_private *tp;
1292
1293 static unsigned char last_phys_addr[ETH_ALEN] = {
1294 0x00, 'L', 'i', 'n', 'u', 'x'
1295 };
1296 #if defined(__i386__) || defined(__x86_64__)
1297 static int last_irq;
1298 #endif
1299 int i, irq;
1300 unsigned short sum;
1301 unsigned char *ee_data;
1302 struct net_device *dev;
1303 void __iomem *ioaddr;
1304 static int board_idx = -1;
1305 int chip_idx = ent->driver_data;
1306 const char *chip_name = tulip_tbl[chip_idx].chip_name;
1307 unsigned int eeprom_missing = 0;
1308 u8 addr[ETH_ALEN] __aligned(2);
1309 unsigned int force_csr0 = 0;
1310
1311 board_idx++;
1312
1313
1314
1315
1316
1317
1318 if (pdev->subsystem_vendor == PCI_VENDOR_ID_LMC) {
1319 pr_err("skipping LMC card\n");
1320 return -ENODEV;
1321 } else if (pdev->subsystem_vendor == PCI_VENDOR_ID_SBE &&
1322 (pdev->subsystem_device == PCI_SUBDEVICE_ID_SBE_T3E3 ||
1323 pdev->subsystem_device == PCI_SUBDEVICE_ID_SBE_2T3E3_P0 ||
1324 pdev->subsystem_device == PCI_SUBDEVICE_ID_SBE_2T3E3_P1)) {
1325 pr_err("skipping SBE T3E3 port\n");
1326 return -ENODEV;
1327 }
1328
1329
1330
1331
1332
1333
1334
1335 #ifdef CONFIG_TULIP_DM910X
1336 if (chip_idx == DM910X) {
1337 struct device_node *dp;
1338
1339 if (pdev->vendor == 0x1282 && pdev->device == 0x9100 &&
1340 pdev->revision < 0x30) {
1341 pr_info("skipping early DM9100 with Crc bug (use dmfe)\n");
1342 return -ENODEV;
1343 }
1344
1345 dp = pci_device_to_OF_node(pdev);
1346 if (!(dp && of_get_property(dp, "local-mac-address", NULL))) {
1347 pr_info("skipping DM910x expansion card (use dmfe)\n");
1348 return -ENODEV;
1349 }
1350 }
1351 #endif
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366 if (pci_dev_present(early_486_chipsets)) {
1367 csr0 = MRL | MRM | (8 << BurstLenShift) | (1 << CALShift);
1368 force_csr0 = 1;
1369 }
1370
1371
1372 if (chip_idx == AX88140) {
1373 if ((csr0 & 0x3f00) == 0)
1374 csr0 |= 0x2000;
1375 }
1376
1377
1378 if (chip_idx == LC82C168)
1379 csr0 &= ~0xfff10000;
1380
1381
1382 if (tulip_uli_dm_quirk(pdev)) {
1383 csr0 &= ~0x01f100ff;
1384 #if defined(CONFIG_SPARC)
1385 csr0 = (csr0 & ~0xff00) | 0xe000;
1386 #endif
1387 }
1388
1389
1390
1391
1392 i = pcim_enable_device(pdev);
1393 if (i) {
1394 pr_err("Cannot enable tulip board #%d, aborting\n", board_idx);
1395 return i;
1396 }
1397
1398 irq = pdev->irq;
1399
1400
1401 dev = devm_alloc_etherdev(&pdev->dev, sizeof(*tp));
1402 if (!dev)
1403 return -ENOMEM;
1404
1405 SET_NETDEV_DEV(dev, &pdev->dev);
1406 if (pci_resource_len (pdev, 0) < tulip_tbl[chip_idx].io_size) {
1407 pr_err("%s: I/O region (0x%llx@0x%llx) too small, aborting\n",
1408 pci_name(pdev),
1409 (unsigned long long)pci_resource_len (pdev, 0),
1410 (unsigned long long)pci_resource_start (pdev, 0));
1411 return -ENODEV;
1412 }
1413
1414
1415
1416 if (pci_request_regions(pdev, DRV_NAME))
1417 return -ENODEV;
1418
1419 ioaddr = pcim_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size);
1420
1421 if (!ioaddr)
1422 return -ENODEV;
1423
1424
1425
1426
1427
1428 tp = netdev_priv(dev);
1429 tp->dev = dev;
1430
1431 tp->rx_ring = dmam_alloc_coherent(&pdev->dev,
1432 sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
1433 sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
1434 &tp->rx_ring_dma, GFP_KERNEL);
1435 if (!tp->rx_ring)
1436 return -ENODEV;
1437 tp->tx_ring = (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE);
1438 tp->tx_ring_dma = tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * RX_RING_SIZE;
1439
1440 tp->chip_id = chip_idx;
1441 tp->flags = tulip_tbl[chip_idx].flags;
1442
1443 tp->wolinfo.supported = 0;
1444 tp->wolinfo.wolopts = 0;
1445
1446 if (chip_idx == COMET ) {
1447 u32 sig;
1448 pci_read_config_dword (pdev, 0x80, &sig);
1449 if (sig == 0x09811317) {
1450 tp->flags |= COMET_PM;
1451 tp->wolinfo.supported = WAKE_PHY | WAKE_MAGIC;
1452 pr_info("%s: Enabled WOL support for AN983B\n",
1453 __func__);
1454 }
1455 }
1456 tp->pdev = pdev;
1457 tp->base_addr = ioaddr;
1458 tp->revision = pdev->revision;
1459 tp->csr0 = csr0;
1460 spin_lock_init(&tp->lock);
1461 spin_lock_init(&tp->mii_lock);
1462 timer_setup(&tp->timer, tulip_tbl[tp->chip_id].media_timer, 0);
1463
1464 INIT_WORK(&tp->media_work, tulip_tbl[tp->chip_id].media_task);
1465
1466 #ifdef CONFIG_TULIP_MWI
1467 if (!force_csr0 && (tp->flags & HAS_PCI_MWI))
1468 tulip_mwi_config (pdev, dev);
1469 #endif
1470
1471
1472 tulip_stop_rxtx(tp);
1473
1474 pci_set_master(pdev);
1475
1476 #ifdef CONFIG_GSC
1477 if (pdev->subsystem_vendor == PCI_VENDOR_ID_HP) {
1478 switch (pdev->subsystem_device) {
1479 default:
1480 break;
1481 case 0x1061:
1482 case 0x1062:
1483 case 0x1063:
1484 case 0x1098:
1485 case 0x1099:
1486 case 0x10EE:
1487 tp->flags |= HAS_SWAPPED_SEEPROM | NEEDS_FAKE_MEDIA_TABLE;
1488 chip_name = "GSC DS21140 Tulip";
1489 }
1490 }
1491 #endif
1492
1493
1494 ioread32(ioaddr + CSR8);
1495
1496
1497
1498
1499
1500 ee_data = tp->eeprom;
1501 memset(ee_data, 0, sizeof(tp->eeprom));
1502 sum = 0;
1503 if (chip_idx == LC82C168) {
1504 for (i = 0; i < 3; i++) {
1505 int value, boguscnt = 100000;
1506 iowrite32(0x600 | i, ioaddr + 0x98);
1507 do {
1508 value = ioread32(ioaddr + CSR9);
1509 } while (value < 0 && --boguscnt > 0);
1510 put_unaligned_le16(value, ((__le16 *)addr) + i);
1511 sum += value & 0xffff;
1512 }
1513 eth_hw_addr_set(dev, addr);
1514 } else if (chip_idx == COMET) {
1515
1516 put_unaligned_le32(ioread32(ioaddr + 0xA4), addr);
1517 put_unaligned_le16(ioread32(ioaddr + 0xA8), addr + 4);
1518 eth_hw_addr_set(dev, addr);
1519 for (i = 0; i < 6; i ++)
1520 sum += dev->dev_addr[i];
1521 } else {
1522
1523 int sa_offset = 0;
1524 int ee_addr_size = tulip_read_eeprom(dev, 0xff, 8) & 0x40000 ? 8 : 6;
1525 int ee_max_addr = ((1 << ee_addr_size) - 1) * sizeof(u16);
1526
1527 if (ee_max_addr > sizeof(tp->eeprom))
1528 ee_max_addr = sizeof(tp->eeprom);
1529
1530 for (i = 0; i < ee_max_addr ; i += sizeof(u16)) {
1531 u16 data = tulip_read_eeprom(dev, i/2, ee_addr_size);
1532 ee_data[i] = data & 0xff;
1533 ee_data[i + 1] = data >> 8;
1534 }
1535
1536
1537
1538
1539 for (i = 0; i < 8; i ++)
1540 if (ee_data[i] != ee_data[16+i])
1541 sa_offset = 20;
1542 if (chip_idx == CONEXANT) {
1543
1544 if (ee_data[0x198] == 0x04 && ee_data[0x199] == 6)
1545 sa_offset = 0x19A;
1546 } else if (ee_data[0] == 0xff && ee_data[1] == 0xff &&
1547 ee_data[2] == 0) {
1548 sa_offset = 2;
1549 }
1550 #ifdef CONFIG_MIPS_COBALT
1551 if ((pdev->bus->number == 0) &&
1552 ((PCI_SLOT(pdev->devfn) == 7) ||
1553 (PCI_SLOT(pdev->devfn) == 12))) {
1554
1555 sa_offset = 0;
1556
1557 memcpy(ee_data + 16, ee_data, 8);
1558 }
1559 #endif
1560 #ifdef CONFIG_GSC
1561
1562 if (ee_data[0] == 0x61 && ee_data[1] == 0x10) {
1563
1564 ee_data[0] = ee_data[2];
1565 ee_data[1] = ee_data[3];
1566 ee_data[2] = 0x61;
1567 ee_data[3] = 0x10;
1568
1569
1570
1571
1572
1573 for (i = 4; i >= 0; i -= 2) {
1574 ee_data[17 + i + 3] = ee_data[17 + i];
1575 ee_data[16 + i + 5] = ee_data[16 + i];
1576 }
1577 }
1578 #endif
1579
1580 for (i = 0; i < 6; i ++) {
1581 addr[i] = ee_data[i + sa_offset];
1582 sum += ee_data[i + sa_offset];
1583 }
1584 eth_hw_addr_set(dev, addr);
1585 }
1586
1587 if ((dev->dev_addr[0] == 0xA0 ||
1588 dev->dev_addr[0] == 0xC0 ||
1589 dev->dev_addr[0] == 0x02) &&
1590 dev->dev_addr[1] == 0x00) {
1591 for (i = 0; i < 6; i+=2) {
1592 addr[i] = dev->dev_addr[i+1];
1593 addr[i+1] = dev->dev_addr[i];
1594 }
1595 eth_hw_addr_set(dev, addr);
1596 }
1597
1598
1599
1600
1601
1602
1603
1604
1605 if (sum == 0 || sum == 6*0xff) {
1606 #if defined(CONFIG_SPARC)
1607 struct device_node *dp = pci_device_to_OF_node(pdev);
1608 const unsigned char *addr2;
1609 int len;
1610 #endif
1611 eeprom_missing = 1;
1612 for (i = 0; i < 5; i++)
1613 addr[i] = last_phys_addr[i];
1614 addr[i] = last_phys_addr[i] + 1;
1615 eth_hw_addr_set(dev, addr);
1616 #if defined(CONFIG_SPARC)
1617 addr2 = of_get_property(dp, "local-mac-address", &len);
1618 if (addr2 && len == ETH_ALEN)
1619 eth_hw_addr_set(dev, addr2);
1620 #endif
1621 #if defined(__i386__) || defined(__x86_64__)
1622 if (last_irq)
1623 irq = last_irq;
1624 #endif
1625 }
1626
1627 for (i = 0; i < 6; i++)
1628 last_phys_addr[i] = dev->dev_addr[i];
1629 #if defined(__i386__) || defined(__x86_64__)
1630 last_irq = irq;
1631 #endif
1632
1633
1634 if (board_idx >= 0 && board_idx < MAX_UNITS) {
1635 if (options[board_idx] & MEDIA_MASK)
1636 tp->default_port = options[board_idx] & MEDIA_MASK;
1637 if ((options[board_idx] & FullDuplex) || full_duplex[board_idx] > 0)
1638 tp->full_duplex = 1;
1639 if (mtu[board_idx] > 0)
1640 dev->mtu = mtu[board_idx];
1641 }
1642 if (dev->mem_start & MEDIA_MASK)
1643 tp->default_port = dev->mem_start & MEDIA_MASK;
1644 if (tp->default_port) {
1645 pr_info(DRV_NAME "%d: Transceiver selection forced to %s\n",
1646 board_idx, medianame[tp->default_port & MEDIA_MASK]);
1647 tp->medialock = 1;
1648 if (tulip_media_cap[tp->default_port] & MediaAlwaysFD)
1649 tp->full_duplex = 1;
1650 }
1651 if (tp->full_duplex)
1652 tp->full_duplex_lock = 1;
1653
1654 if (tulip_media_cap[tp->default_port] & MediaIsMII) {
1655 static const u16 media2advert[] = {
1656 0x20, 0x40, 0x03e0, 0x60, 0x80, 0x100, 0x200
1657 };
1658 tp->mii_advertise = media2advert[tp->default_port - 9];
1659 tp->mii_advertise |= (tp->flags & HAS_8023X);
1660 }
1661
1662 if (tp->flags & HAS_MEDIA_TABLE) {
1663 sprintf(dev->name, DRV_NAME "%d", board_idx);
1664 tulip_parse_eeprom(dev);
1665 strcpy(dev->name, "eth%d");
1666 }
1667
1668 if ((tp->flags & ALWAYS_CHECK_MII) ||
1669 (tp->mtable && tp->mtable->has_mii) ||
1670 ( ! tp->mtable && (tp->flags & HAS_MII))) {
1671 if (tp->mtable && tp->mtable->has_mii) {
1672 for (i = 0; i < tp->mtable->leafcount; i++)
1673 if (tp->mtable->mleaf[i].media == 11) {
1674 tp->cur_index = i;
1675 tp->saved_if_port = dev->if_port;
1676 tulip_select_media(dev, 2);
1677 dev->if_port = tp->saved_if_port;
1678 break;
1679 }
1680 }
1681
1682
1683
1684
1685 tulip_find_mii (dev, board_idx);
1686 }
1687
1688
1689 dev->netdev_ops = &tulip_netdev_ops;
1690 dev->watchdog_timeo = TX_TIMEOUT;
1691 #ifdef CONFIG_TULIP_NAPI
1692 netif_napi_add_weight(dev, &tp->napi, tulip_poll, 16);
1693 #endif
1694 dev->ethtool_ops = &ops;
1695
1696 i = register_netdev(dev);
1697 if (i)
1698 return i;
1699
1700 pci_set_drvdata(pdev, dev);
1701
1702 dev_info(&dev->dev,
1703 #ifdef CONFIG_TULIP_MMIO
1704 "%s rev %d at MMIO %#llx,%s %pM, IRQ %d\n",
1705 #else
1706 "%s rev %d at Port %#llx,%s %pM, IRQ %d\n",
1707 #endif
1708 chip_name, pdev->revision,
1709 (unsigned long long)pci_resource_start(pdev, TULIP_BAR),
1710 eeprom_missing ? " EEPROM not present," : "",
1711 dev->dev_addr, irq);
1712
1713 if (tp->chip_id == PNIC2)
1714 tp->link_change = pnic2_lnk_change;
1715 else if (tp->flags & HAS_NWAY)
1716 tp->link_change = t21142_lnk_change;
1717 else if (tp->flags & HAS_PNICNWAY)
1718 tp->link_change = pnic_lnk_change;
1719
1720
1721 switch (chip_idx) {
1722 case DC21140:
1723 case DM910X:
1724 default:
1725 if (tp->mtable)
1726 iowrite32(tp->mtable->csr12dir | 0x100, ioaddr + CSR12);
1727 break;
1728 case DC21142:
1729 if (tp->mii_cnt || tulip_media_cap[dev->if_port] & MediaIsMII) {
1730 iowrite32(csr6_mask_defstate, ioaddr + CSR6);
1731 iowrite32(0x0000, ioaddr + CSR13);
1732 iowrite32(0x0000, ioaddr + CSR14);
1733 iowrite32(csr6_mask_hdcap, ioaddr + CSR6);
1734 } else
1735 t21142_start_nway(dev);
1736 break;
1737 case PNIC2:
1738
1739 iowrite32(0x0000, ioaddr + CSR13);
1740 iowrite32(0x0000, ioaddr + CSR14);
1741 break;
1742 case LC82C168:
1743 if ( ! tp->mii_cnt) {
1744 tp->nway = 1;
1745 tp->nwayset = 0;
1746 iowrite32(csr6_ttm | csr6_ca, ioaddr + CSR6);
1747 iowrite32(0x30, ioaddr + CSR12);
1748 iowrite32(0x0001F078, ioaddr + CSR6);
1749 iowrite32(0x0201F078, ioaddr + CSR6);
1750 }
1751 break;
1752 case MX98713:
1753 case COMPEX9881:
1754 iowrite32(0x00000000, ioaddr + CSR6);
1755 iowrite32(0x000711C0, ioaddr + CSR14);
1756 iowrite32(0x00000001, ioaddr + CSR13);
1757 break;
1758 case MX98715:
1759 case MX98725:
1760 iowrite32(0x01a80000, ioaddr + CSR6);
1761 iowrite32(0xFFFFFFFF, ioaddr + CSR14);
1762 iowrite32(0x00001000, ioaddr + CSR12);
1763 break;
1764 case COMET:
1765
1766 break;
1767 }
1768
1769
1770 tulip_set_power_state (tp, 0, 1);
1771
1772 return 0;
1773 }
1774
1775
1776
1777 static void tulip_set_wolopts (struct pci_dev *pdev, u32 wolopts)
1778 {
1779 struct net_device *dev = pci_get_drvdata(pdev);
1780 struct tulip_private *tp = netdev_priv(dev);
1781 void __iomem *ioaddr = tp->base_addr;
1782
1783 if (tp->flags & COMET_PM) {
1784 unsigned int tmp;
1785
1786 tmp = ioread32(ioaddr + CSR18);
1787 tmp &= ~(comet_csr18_pmes_sticky | comet_csr18_apm_mode | comet_csr18_d3a);
1788 tmp |= comet_csr18_pm_mode;
1789 iowrite32(tmp, ioaddr + CSR18);
1790
1791
1792 tmp = ioread32(ioaddr + CSR13);
1793 tmp &= ~(comet_csr13_linkoffe | comet_csr13_linkone | comet_csr13_wfre | comet_csr13_lsce | comet_csr13_mpre);
1794 if (wolopts & WAKE_MAGIC)
1795 tmp |= comet_csr13_mpre;
1796 if (wolopts & WAKE_PHY)
1797 tmp |= comet_csr13_linkoffe | comet_csr13_linkone | comet_csr13_lsce;
1798
1799 tmp |= comet_csr13_wfr | comet_csr13_mpr | comet_csr13_lsc;
1800 iowrite32(tmp, ioaddr + CSR13);
1801 }
1802 }
1803
1804 static int __maybe_unused tulip_suspend(struct device *dev_d)
1805 {
1806 struct net_device *dev = dev_get_drvdata(dev_d);
1807 struct tulip_private *tp = netdev_priv(dev);
1808
1809 if (!dev)
1810 return -EINVAL;
1811
1812 if (!netif_running(dev))
1813 goto save_state;
1814
1815 tulip_down(dev);
1816
1817 netif_device_detach(dev);
1818
1819 free_irq(tp->pdev->irq, dev);
1820
1821 save_state:
1822 tulip_set_wolopts(to_pci_dev(dev_d), tp->wolinfo.wolopts);
1823 device_set_wakeup_enable(dev_d, !!tp->wolinfo.wolopts);
1824
1825 return 0;
1826 }
1827
1828 static int __maybe_unused tulip_resume(struct device *dev_d)
1829 {
1830 struct pci_dev *pdev = to_pci_dev(dev_d);
1831 struct net_device *dev = dev_get_drvdata(dev_d);
1832 struct tulip_private *tp = netdev_priv(dev);
1833 void __iomem *ioaddr = tp->base_addr;
1834 unsigned int tmp;
1835 int retval = 0;
1836
1837 if (!dev)
1838 return -EINVAL;
1839
1840 if (!netif_running(dev))
1841 return 0;
1842
1843 retval = request_irq(pdev->irq, tulip_interrupt, IRQF_SHARED,
1844 dev->name, dev);
1845 if (retval) {
1846 pr_err("request_irq failed in resume\n");
1847 return retval;
1848 }
1849
1850 if (tp->flags & COMET_PM) {
1851 device_set_wakeup_enable(dev_d, 0);
1852
1853
1854 tmp = ioread32(ioaddr + CSR20);
1855 tmp |= comet_csr20_pmes;
1856 iowrite32(tmp, ioaddr + CSR20);
1857
1858
1859 tulip_set_wolopts(pdev, 0);
1860 }
1861 netif_device_attach(dev);
1862
1863 if (netif_running(dev))
1864 tulip_up(dev);
1865
1866 return 0;
1867 }
1868
1869 static void tulip_remove_one(struct pci_dev *pdev)
1870 {
1871 struct net_device *dev = pci_get_drvdata (pdev);
1872
1873 if (!dev)
1874 return;
1875
1876 unregister_netdev(dev);
1877 }
1878
1879 #ifdef CONFIG_NET_POLL_CONTROLLER
1880
1881
1882
1883
1884
1885
1886 static void poll_tulip (struct net_device *dev)
1887 {
1888 struct tulip_private *tp = netdev_priv(dev);
1889 const int irq = tp->pdev->irq;
1890
1891
1892
1893 disable_irq(irq);
1894 tulip_interrupt (irq, dev);
1895 enable_irq(irq);
1896 }
1897 #endif
1898
1899 static SIMPLE_DEV_PM_OPS(tulip_pm_ops, tulip_suspend, tulip_resume);
1900
1901 static struct pci_driver tulip_driver = {
1902 .name = DRV_NAME,
1903 .id_table = tulip_pci_tbl,
1904 .probe = tulip_init_one,
1905 .remove = tulip_remove_one,
1906 .driver.pm = &tulip_pm_ops,
1907 };
1908
1909
1910 static int __init tulip_init (void)
1911 {
1912 if (!csr0) {
1913 pr_warn("tulip: unknown CPU architecture, using default csr0\n");
1914
1915 csr0 = 0x00A00000 | 0x4800;
1916 }
1917
1918
1919 tulip_rx_copybreak = rx_copybreak;
1920 tulip_max_interrupt_work = max_interrupt_work;
1921
1922
1923 return pci_register_driver(&tulip_driver);
1924 }
1925
1926
1927 static void __exit tulip_cleanup (void)
1928 {
1929 pci_unregister_driver (&tulip_driver);
1930 }
1931
1932
1933 module_init(tulip_init);
1934 module_exit(tulip_cleanup);