Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.27-rc2 2329 lines 61 kB view raw
1/* 2 * smc91x.c 3 * This is a driver for SMSC's 91C9x/91C1xx single-chip Ethernet devices. 4 * 5 * Copyright (C) 1996 by Erik Stahlman 6 * Copyright (C) 2001 Standard Microsystems Corporation 7 * Developed by Simple Network Magic Corporation 8 * Copyright (C) 2003 Monta Vista Software, Inc. 9 * Unified SMC91x driver by Nicolas Pitre 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2 of the License, or 14 * (at your option) any later version. 15 * 16 * This program is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 * GNU General Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with this program; if not, write to the Free Software 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 24 * 25 * Arguments: 26 * io = for the base address 27 * irq = for the IRQ 28 * nowait = 0 for normal wait states, 1 eliminates additional wait states 29 * 30 * original author: 31 * Erik Stahlman <erik@vt.edu> 32 * 33 * hardware multicast code: 34 * Peter Cammaert <pc@denkart.be> 35 * 36 * contributors: 37 * Daris A Nevil <dnevil@snmc.com> 38 * Nicolas Pitre <nico@cam.org> 39 * Russell King <rmk@arm.linux.org.uk> 40 * 41 * History: 42 * 08/20/00 Arnaldo Melo fix kfree(skb) in smc_hardware_send_packet 43 * 12/15/00 Christian Jullien fix "Warning: kfree_skb on hard IRQ" 44 * 03/16/01 Daris A Nevil modified smc9194.c for use with LAN91C111 45 * 08/22/01 Scott Anderson merge changes from smc9194 to smc91111 46 * 08/21/01 Pramod B Bhardwaj added support for RevB of LAN91C111 47 * 12/20/01 Jeff Sutherland initial port to Xscale PXA with DMA support 48 * 04/07/03 Nicolas Pitre unified SMC91x driver, killed irq races, 49 * more bus abstraction, big cleanup, etc. 50 * 29/09/03 Russell King - add driver model support 51 * - ethtool support 52 * - convert to use generic MII interface 53 * - add link up/down notification 54 * - don't try to handle full negotiation in 55 * smc_phy_configure 56 * - clean up (and fix stack overrun) in PHY 57 * MII read/write functions 58 * 22/09/04 Nicolas Pitre big update (see commit log for details) 59 */ 60static const char version[] = 61 "smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@cam.org>\n"; 62 63/* Debugging level */ 64#ifndef SMC_DEBUG 65#define SMC_DEBUG 0 66#endif 67 68 69#include <linux/init.h> 70#include <linux/module.h> 71#include <linux/kernel.h> 72#include <linux/sched.h> 73#include <linux/slab.h> 74#include <linux/delay.h> 75#include <linux/interrupt.h> 76#include <linux/errno.h> 77#include <linux/ioport.h> 78#include <linux/crc32.h> 79#include <linux/platform_device.h> 80#include <linux/spinlock.h> 81#include <linux/ethtool.h> 82#include <linux/mii.h> 83#include <linux/workqueue.h> 84 85#include <linux/netdevice.h> 86#include <linux/etherdevice.h> 87#include <linux/skbuff.h> 88 89#include <asm/io.h> 90 91#include "smc91x.h" 92 93#ifdef CONFIG_ISA 94/* 95 * the LAN91C111 can be at any of the following port addresses. To change, 96 * for a slightly different card, you can add it to the array. Keep in 97 * mind that the array must end in zero. 98 */ 99static unsigned int smc_portlist[] __initdata = { 100 0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0, 101 0x300, 0x320, 0x340, 0x360, 0x380, 0x3A0, 0x3C0, 0x3E0, 0 102}; 103 104#ifndef SMC_IOADDR 105# define SMC_IOADDR -1 106#endif 107static unsigned long io = SMC_IOADDR; 108module_param(io, ulong, 0400); 109MODULE_PARM_DESC(io, "I/O base address"); 110 111#ifndef SMC_IRQ 112# define SMC_IRQ -1 113#endif 114static int irq = SMC_IRQ; 115module_param(irq, int, 0400); 116MODULE_PARM_DESC(irq, "IRQ number"); 117 118#endif /* CONFIG_ISA */ 119 120#ifndef SMC_NOWAIT 121# define SMC_NOWAIT 0 122#endif 123static int nowait = SMC_NOWAIT; 124module_param(nowait, int, 0400); 125MODULE_PARM_DESC(nowait, "set to 1 for no wait state"); 126 127/* 128 * Transmit timeout, default 5 seconds. 129 */ 130static int watchdog = 1000; 131module_param(watchdog, int, 0400); 132MODULE_PARM_DESC(watchdog, "transmit timeout in milliseconds"); 133 134MODULE_LICENSE("GPL"); 135MODULE_ALIAS("platform:smc91x"); 136 137/* 138 * The internal workings of the driver. If you are changing anything 139 * here with the SMC stuff, you should have the datasheet and know 140 * what you are doing. 141 */ 142#define CARDNAME "smc91x" 143 144/* 145 * Use power-down feature of the chip 146 */ 147#define POWER_DOWN 1 148 149/* 150 * Wait time for memory to be free. This probably shouldn't be 151 * tuned that much, as waiting for this means nothing else happens 152 * in the system 153 */ 154#define MEMORY_WAIT_TIME 16 155 156/* 157 * The maximum number of processing loops allowed for each call to the 158 * IRQ handler. 159 */ 160#define MAX_IRQ_LOOPS 8 161 162/* 163 * This selects whether TX packets are sent one by one to the SMC91x internal 164 * memory and throttled until transmission completes. This may prevent 165 * RX overruns a litle by keeping much of the memory free for RX packets 166 * but to the expense of reduced TX throughput and increased IRQ overhead. 167 * Note this is not a cure for a too slow data bus or too high IRQ latency. 168 */ 169#define THROTTLE_TX_PKTS 0 170 171/* 172 * The MII clock high/low times. 2x this number gives the MII clock period 173 * in microseconds. (was 50, but this gives 6.4ms for each MII transaction!) 174 */ 175#define MII_DELAY 1 176 177#if SMC_DEBUG > 0 178#define DBG(n, args...) \ 179 do { \ 180 if (SMC_DEBUG >= (n)) \ 181 printk(args); \ 182 } while (0) 183 184#define PRINTK(args...) printk(args) 185#else 186#define DBG(n, args...) do { } while(0) 187#define PRINTK(args...) printk(KERN_DEBUG args) 188#endif 189 190#if SMC_DEBUG > 3 191static void PRINT_PKT(u_char *buf, int length) 192{ 193 int i; 194 int remainder; 195 int lines; 196 197 lines = length / 16; 198 remainder = length % 16; 199 200 for (i = 0; i < lines ; i ++) { 201 int cur; 202 for (cur = 0; cur < 8; cur++) { 203 u_char a, b; 204 a = *buf++; 205 b = *buf++; 206 printk("%02x%02x ", a, b); 207 } 208 printk("\n"); 209 } 210 for (i = 0; i < remainder/2 ; i++) { 211 u_char a, b; 212 a = *buf++; 213 b = *buf++; 214 printk("%02x%02x ", a, b); 215 } 216 printk("\n"); 217} 218#else 219#define PRINT_PKT(x...) do { } while(0) 220#endif 221 222 223/* this enables an interrupt in the interrupt mask register */ 224#define SMC_ENABLE_INT(lp, x) do { \ 225 unsigned char mask; \ 226 spin_lock_irq(&lp->lock); \ 227 mask = SMC_GET_INT_MASK(lp); \ 228 mask |= (x); \ 229 SMC_SET_INT_MASK(lp, mask); \ 230 spin_unlock_irq(&lp->lock); \ 231} while (0) 232 233/* this disables an interrupt from the interrupt mask register */ 234#define SMC_DISABLE_INT(lp, x) do { \ 235 unsigned char mask; \ 236 spin_lock_irq(&lp->lock); \ 237 mask = SMC_GET_INT_MASK(lp); \ 238 mask &= ~(x); \ 239 SMC_SET_INT_MASK(lp, mask); \ 240 spin_unlock_irq(&lp->lock); \ 241} while (0) 242 243/* 244 * Wait while MMU is busy. This is usually in the order of a few nanosecs 245 * if at all, but let's avoid deadlocking the system if the hardware 246 * decides to go south. 247 */ 248#define SMC_WAIT_MMU_BUSY(lp) do { \ 249 if (unlikely(SMC_GET_MMU_CMD(lp) & MC_BUSY)) { \ 250 unsigned long timeout = jiffies + 2; \ 251 while (SMC_GET_MMU_CMD(lp) & MC_BUSY) { \ 252 if (time_after(jiffies, timeout)) { \ 253 printk("%s: timeout %s line %d\n", \ 254 dev->name, __FILE__, __LINE__); \ 255 break; \ 256 } \ 257 cpu_relax(); \ 258 } \ 259 } \ 260} while (0) 261 262 263/* 264 * this does a soft reset on the device 265 */ 266static void smc_reset(struct net_device *dev) 267{ 268 struct smc_local *lp = netdev_priv(dev); 269 void __iomem *ioaddr = lp->base; 270 unsigned int ctl, cfg; 271 struct sk_buff *pending_skb; 272 273 DBG(2, "%s: %s\n", dev->name, __FUNCTION__); 274 275 /* Disable all interrupts, block TX tasklet */ 276 spin_lock_irq(&lp->lock); 277 SMC_SELECT_BANK(lp, 2); 278 SMC_SET_INT_MASK(lp, 0); 279 pending_skb = lp->pending_tx_skb; 280 lp->pending_tx_skb = NULL; 281 spin_unlock_irq(&lp->lock); 282 283 /* free any pending tx skb */ 284 if (pending_skb) { 285 dev_kfree_skb(pending_skb); 286 dev->stats.tx_errors++; 287 dev->stats.tx_aborted_errors++; 288 } 289 290 /* 291 * This resets the registers mostly to defaults, but doesn't 292 * affect EEPROM. That seems unnecessary 293 */ 294 SMC_SELECT_BANK(lp, 0); 295 SMC_SET_RCR(lp, RCR_SOFTRST); 296 297 /* 298 * Setup the Configuration Register 299 * This is necessary because the CONFIG_REG is not affected 300 * by a soft reset 301 */ 302 SMC_SELECT_BANK(lp, 1); 303 304 cfg = CONFIG_DEFAULT; 305 306 /* 307 * Setup for fast accesses if requested. If the card/system 308 * can't handle it then there will be no recovery except for 309 * a hard reset or power cycle 310 */ 311 if (lp->cfg.flags & SMC91X_NOWAIT) 312 cfg |= CONFIG_NO_WAIT; 313 314 /* 315 * Release from possible power-down state 316 * Configuration register is not affected by Soft Reset 317 */ 318 cfg |= CONFIG_EPH_POWER_EN; 319 320 SMC_SET_CONFIG(lp, cfg); 321 322 /* this should pause enough for the chip to be happy */ 323 /* 324 * elaborate? What does the chip _need_? --jgarzik 325 * 326 * This seems to be undocumented, but something the original 327 * driver(s) have always done. Suspect undocumented timing 328 * info/determined empirically. --rmk 329 */ 330 udelay(1); 331 332 /* Disable transmit and receive functionality */ 333 SMC_SELECT_BANK(lp, 0); 334 SMC_SET_RCR(lp, RCR_CLEAR); 335 SMC_SET_TCR(lp, TCR_CLEAR); 336 337 SMC_SELECT_BANK(lp, 1); 338 ctl = SMC_GET_CTL(lp) | CTL_LE_ENABLE; 339 340 /* 341 * Set the control register to automatically release successfully 342 * transmitted packets, to make the best use out of our limited 343 * memory 344 */ 345 if(!THROTTLE_TX_PKTS) 346 ctl |= CTL_AUTO_RELEASE; 347 else 348 ctl &= ~CTL_AUTO_RELEASE; 349 SMC_SET_CTL(lp, ctl); 350 351 /* Reset the MMU */ 352 SMC_SELECT_BANK(lp, 2); 353 SMC_SET_MMU_CMD(lp, MC_RESET); 354 SMC_WAIT_MMU_BUSY(lp); 355} 356 357/* 358 * Enable Interrupts, Receive, and Transmit 359 */ 360static void smc_enable(struct net_device *dev) 361{ 362 struct smc_local *lp = netdev_priv(dev); 363 void __iomem *ioaddr = lp->base; 364 int mask; 365 366 DBG(2, "%s: %s\n", dev->name, __FUNCTION__); 367 368 /* see the header file for options in TCR/RCR DEFAULT */ 369 SMC_SELECT_BANK(lp, 0); 370 SMC_SET_TCR(lp, lp->tcr_cur_mode); 371 SMC_SET_RCR(lp, lp->rcr_cur_mode); 372 373 SMC_SELECT_BANK(lp, 1); 374 SMC_SET_MAC_ADDR(lp, dev->dev_addr); 375 376 /* now, enable interrupts */ 377 mask = IM_EPH_INT|IM_RX_OVRN_INT|IM_RCV_INT; 378 if (lp->version >= (CHIP_91100 << 4)) 379 mask |= IM_MDINT; 380 SMC_SELECT_BANK(lp, 2); 381 SMC_SET_INT_MASK(lp, mask); 382 383 /* 384 * From this point the register bank must _NOT_ be switched away 385 * to something else than bank 2 without proper locking against 386 * races with any tasklet or interrupt handlers until smc_shutdown() 387 * or smc_reset() is called. 388 */ 389} 390 391/* 392 * this puts the device in an inactive state 393 */ 394static void smc_shutdown(struct net_device *dev) 395{ 396 struct smc_local *lp = netdev_priv(dev); 397 void __iomem *ioaddr = lp->base; 398 struct sk_buff *pending_skb; 399 400 DBG(2, "%s: %s\n", CARDNAME, __FUNCTION__); 401 402 /* no more interrupts for me */ 403 spin_lock_irq(&lp->lock); 404 SMC_SELECT_BANK(lp, 2); 405 SMC_SET_INT_MASK(lp, 0); 406 pending_skb = lp->pending_tx_skb; 407 lp->pending_tx_skb = NULL; 408 spin_unlock_irq(&lp->lock); 409 if (pending_skb) 410 dev_kfree_skb(pending_skb); 411 412 /* and tell the card to stay away from that nasty outside world */ 413 SMC_SELECT_BANK(lp, 0); 414 SMC_SET_RCR(lp, RCR_CLEAR); 415 SMC_SET_TCR(lp, TCR_CLEAR); 416 417#ifdef POWER_DOWN 418 /* finally, shut the chip down */ 419 SMC_SELECT_BANK(lp, 1); 420 SMC_SET_CONFIG(lp, SMC_GET_CONFIG(lp) & ~CONFIG_EPH_POWER_EN); 421#endif 422} 423 424/* 425 * This is the procedure to handle the receipt of a packet. 426 */ 427static inline void smc_rcv(struct net_device *dev) 428{ 429 struct smc_local *lp = netdev_priv(dev); 430 void __iomem *ioaddr = lp->base; 431 unsigned int packet_number, status, packet_len; 432 433 DBG(3, "%s: %s\n", dev->name, __FUNCTION__); 434 435 packet_number = SMC_GET_RXFIFO(lp); 436 if (unlikely(packet_number & RXFIFO_REMPTY)) { 437 PRINTK("%s: smc_rcv with nothing on FIFO.\n", dev->name); 438 return; 439 } 440 441 /* read from start of packet */ 442 SMC_SET_PTR(lp, PTR_READ | PTR_RCV | PTR_AUTOINC); 443 444 /* First two words are status and packet length */ 445 SMC_GET_PKT_HDR(lp, status, packet_len); 446 packet_len &= 0x07ff; /* mask off top bits */ 447 DBG(2, "%s: RX PNR 0x%x STATUS 0x%04x LENGTH 0x%04x (%d)\n", 448 dev->name, packet_number, status, 449 packet_len, packet_len); 450 451 back: 452 if (unlikely(packet_len < 6 || status & RS_ERRORS)) { 453 if (status & RS_TOOLONG && packet_len <= (1514 + 4 + 6)) { 454 /* accept VLAN packets */ 455 status &= ~RS_TOOLONG; 456 goto back; 457 } 458 if (packet_len < 6) { 459 /* bloody hardware */ 460 printk(KERN_ERR "%s: fubar (rxlen %u status %x\n", 461 dev->name, packet_len, status); 462 status |= RS_TOOSHORT; 463 } 464 SMC_WAIT_MMU_BUSY(lp); 465 SMC_SET_MMU_CMD(lp, MC_RELEASE); 466 dev->stats.rx_errors++; 467 if (status & RS_ALGNERR) 468 dev->stats.rx_frame_errors++; 469 if (status & (RS_TOOSHORT | RS_TOOLONG)) 470 dev->stats.rx_length_errors++; 471 if (status & RS_BADCRC) 472 dev->stats.rx_crc_errors++; 473 } else { 474 struct sk_buff *skb; 475 unsigned char *data; 476 unsigned int data_len; 477 478 /* set multicast stats */ 479 if (status & RS_MULTICAST) 480 dev->stats.multicast++; 481 482 /* 483 * Actual payload is packet_len - 6 (or 5 if odd byte). 484 * We want skb_reserve(2) and the final ctrl word 485 * (2 bytes, possibly containing the payload odd byte). 486 * Furthermore, we add 2 bytes to allow rounding up to 487 * multiple of 4 bytes on 32 bit buses. 488 * Hence packet_len - 6 + 2 + 2 + 2. 489 */ 490 skb = dev_alloc_skb(packet_len); 491 if (unlikely(skb == NULL)) { 492 printk(KERN_NOTICE "%s: Low memory, packet dropped.\n", 493 dev->name); 494 SMC_WAIT_MMU_BUSY(lp); 495 SMC_SET_MMU_CMD(lp, MC_RELEASE); 496 dev->stats.rx_dropped++; 497 return; 498 } 499 500 /* Align IP header to 32 bits */ 501 skb_reserve(skb, 2); 502 503 /* BUG: the LAN91C111 rev A never sets this bit. Force it. */ 504 if (lp->version == 0x90) 505 status |= RS_ODDFRAME; 506 507 /* 508 * If odd length: packet_len - 5, 509 * otherwise packet_len - 6. 510 * With the trailing ctrl byte it's packet_len - 4. 511 */ 512 data_len = packet_len - ((status & RS_ODDFRAME) ? 5 : 6); 513 data = skb_put(skb, data_len); 514 SMC_PULL_DATA(lp, data, packet_len - 4); 515 516 SMC_WAIT_MMU_BUSY(lp); 517 SMC_SET_MMU_CMD(lp, MC_RELEASE); 518 519 PRINT_PKT(data, packet_len - 4); 520 521 dev->last_rx = jiffies; 522 skb->protocol = eth_type_trans(skb, dev); 523 netif_rx(skb); 524 dev->stats.rx_packets++; 525 dev->stats.rx_bytes += data_len; 526 } 527} 528 529#ifdef CONFIG_SMP 530/* 531 * On SMP we have the following problem: 532 * 533 * A = smc_hardware_send_pkt() 534 * B = smc_hard_start_xmit() 535 * C = smc_interrupt() 536 * 537 * A and B can never be executed simultaneously. However, at least on UP, 538 * it is possible (and even desirable) for C to interrupt execution of 539 * A or B in order to have better RX reliability and avoid overruns. 540 * C, just like A and B, must have exclusive access to the chip and 541 * each of them must lock against any other concurrent access. 542 * Unfortunately this is not possible to have C suspend execution of A or 543 * B taking place on another CPU. On UP this is no an issue since A and B 544 * are run from softirq context and C from hard IRQ context, and there is 545 * no other CPU where concurrent access can happen. 546 * If ever there is a way to force at least B and C to always be executed 547 * on the same CPU then we could use read/write locks to protect against 548 * any other concurrent access and C would always interrupt B. But life 549 * isn't that easy in a SMP world... 550 */ 551#define smc_special_trylock(lock) \ 552({ \ 553 int __ret; \ 554 local_irq_disable(); \ 555 __ret = spin_trylock(lock); \ 556 if (!__ret) \ 557 local_irq_enable(); \ 558 __ret; \ 559}) 560#define smc_special_lock(lock) spin_lock_irq(lock) 561#define smc_special_unlock(lock) spin_unlock_irq(lock) 562#else 563#define smc_special_trylock(lock) (1) 564#define smc_special_lock(lock) do { } while (0) 565#define smc_special_unlock(lock) do { } while (0) 566#endif 567 568/* 569 * This is called to actually send a packet to the chip. 570 */ 571static void smc_hardware_send_pkt(unsigned long data) 572{ 573 struct net_device *dev = (struct net_device *)data; 574 struct smc_local *lp = netdev_priv(dev); 575 void __iomem *ioaddr = lp->base; 576 struct sk_buff *skb; 577 unsigned int packet_no, len; 578 unsigned char *buf; 579 580 DBG(3, "%s: %s\n", dev->name, __FUNCTION__); 581 582 if (!smc_special_trylock(&lp->lock)) { 583 netif_stop_queue(dev); 584 tasklet_schedule(&lp->tx_task); 585 return; 586 } 587 588 skb = lp->pending_tx_skb; 589 if (unlikely(!skb)) { 590 smc_special_unlock(&lp->lock); 591 return; 592 } 593 lp->pending_tx_skb = NULL; 594 595 packet_no = SMC_GET_AR(lp); 596 if (unlikely(packet_no & AR_FAILED)) { 597 printk("%s: Memory allocation failed.\n", dev->name); 598 dev->stats.tx_errors++; 599 dev->stats.tx_fifo_errors++; 600 smc_special_unlock(&lp->lock); 601 goto done; 602 } 603 604 /* point to the beginning of the packet */ 605 SMC_SET_PN(lp, packet_no); 606 SMC_SET_PTR(lp, PTR_AUTOINC); 607 608 buf = skb->data; 609 len = skb->len; 610 DBG(2, "%s: TX PNR 0x%x LENGTH 0x%04x (%d) BUF 0x%p\n", 611 dev->name, packet_no, len, len, buf); 612 PRINT_PKT(buf, len); 613 614 /* 615 * Send the packet length (+6 for status words, length, and ctl. 616 * The card will pad to 64 bytes with zeroes if packet is too small. 617 */ 618 SMC_PUT_PKT_HDR(lp, 0, len + 6); 619 620 /* send the actual data */ 621 SMC_PUSH_DATA(lp, buf, len & ~1); 622 623 /* Send final ctl word with the last byte if there is one */ 624 SMC_outw(((len & 1) ? (0x2000 | buf[len-1]) : 0), ioaddr, DATA_REG(lp)); 625 626 /* 627 * If THROTTLE_TX_PKTS is set, we stop the queue here. This will 628 * have the effect of having at most one packet queued for TX 629 * in the chip's memory at all time. 630 * 631 * If THROTTLE_TX_PKTS is not set then the queue is stopped only 632 * when memory allocation (MC_ALLOC) does not succeed right away. 633 */ 634 if (THROTTLE_TX_PKTS) 635 netif_stop_queue(dev); 636 637 /* queue the packet for TX */ 638 SMC_SET_MMU_CMD(lp, MC_ENQUEUE); 639 smc_special_unlock(&lp->lock); 640 641 dev->trans_start = jiffies; 642 dev->stats.tx_packets++; 643 dev->stats.tx_bytes += len; 644 645 SMC_ENABLE_INT(lp, IM_TX_INT | IM_TX_EMPTY_INT); 646 647done: if (!THROTTLE_TX_PKTS) 648 netif_wake_queue(dev); 649 650 dev_kfree_skb(skb); 651} 652 653/* 654 * Since I am not sure if I will have enough room in the chip's ram 655 * to store the packet, I call this routine which either sends it 656 * now, or set the card to generates an interrupt when ready 657 * for the packet. 658 */ 659static int smc_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) 660{ 661 struct smc_local *lp = netdev_priv(dev); 662 void __iomem *ioaddr = lp->base; 663 unsigned int numPages, poll_count, status; 664 665 DBG(3, "%s: %s\n", dev->name, __FUNCTION__); 666 667 BUG_ON(lp->pending_tx_skb != NULL); 668 669 /* 670 * The MMU wants the number of pages to be the number of 256 bytes 671 * 'pages', minus 1 (since a packet can't ever have 0 pages :)) 672 * 673 * The 91C111 ignores the size bits, but earlier models don't. 674 * 675 * Pkt size for allocating is data length +6 (for additional status 676 * words, length and ctl) 677 * 678 * If odd size then last byte is included in ctl word. 679 */ 680 numPages = ((skb->len & ~1) + (6 - 1)) >> 8; 681 if (unlikely(numPages > 7)) { 682 printk("%s: Far too big packet error.\n", dev->name); 683 dev->stats.tx_errors++; 684 dev->stats.tx_dropped++; 685 dev_kfree_skb(skb); 686 return 0; 687 } 688 689 smc_special_lock(&lp->lock); 690 691 /* now, try to allocate the memory */ 692 SMC_SET_MMU_CMD(lp, MC_ALLOC | numPages); 693 694 /* 695 * Poll the chip for a short amount of time in case the 696 * allocation succeeds quickly. 697 */ 698 poll_count = MEMORY_WAIT_TIME; 699 do { 700 status = SMC_GET_INT(lp); 701 if (status & IM_ALLOC_INT) { 702 SMC_ACK_INT(lp, IM_ALLOC_INT); 703 break; 704 } 705 } while (--poll_count); 706 707 smc_special_unlock(&lp->lock); 708 709 lp->pending_tx_skb = skb; 710 if (!poll_count) { 711 /* oh well, wait until the chip finds memory later */ 712 netif_stop_queue(dev); 713 DBG(2, "%s: TX memory allocation deferred.\n", dev->name); 714 SMC_ENABLE_INT(lp, IM_ALLOC_INT); 715 } else { 716 /* 717 * Allocation succeeded: push packet to the chip's own memory 718 * immediately. 719 */ 720 smc_hardware_send_pkt((unsigned long)dev); 721 } 722 723 return 0; 724} 725 726/* 727 * This handles a TX interrupt, which is only called when: 728 * - a TX error occurred, or 729 * - CTL_AUTO_RELEASE is not set and TX of a packet completed. 730 */ 731static void smc_tx(struct net_device *dev) 732{ 733 struct smc_local *lp = netdev_priv(dev); 734 void __iomem *ioaddr = lp->base; 735 unsigned int saved_packet, packet_no, tx_status, pkt_len; 736 737 DBG(3, "%s: %s\n", dev->name, __FUNCTION__); 738 739 /* If the TX FIFO is empty then nothing to do */ 740 packet_no = SMC_GET_TXFIFO(lp); 741 if (unlikely(packet_no & TXFIFO_TEMPTY)) { 742 PRINTK("%s: smc_tx with nothing on FIFO.\n", dev->name); 743 return; 744 } 745 746 /* select packet to read from */ 747 saved_packet = SMC_GET_PN(lp); 748 SMC_SET_PN(lp, packet_no); 749 750 /* read the first word (status word) from this packet */ 751 SMC_SET_PTR(lp, PTR_AUTOINC | PTR_READ); 752 SMC_GET_PKT_HDR(lp, tx_status, pkt_len); 753 DBG(2, "%s: TX STATUS 0x%04x PNR 0x%02x\n", 754 dev->name, tx_status, packet_no); 755 756 if (!(tx_status & ES_TX_SUC)) 757 dev->stats.tx_errors++; 758 759 if (tx_status & ES_LOSTCARR) 760 dev->stats.tx_carrier_errors++; 761 762 if (tx_status & (ES_LATCOL | ES_16COL)) { 763 PRINTK("%s: %s occurred on last xmit\n", dev->name, 764 (tx_status & ES_LATCOL) ? 765 "late collision" : "too many collisions"); 766 dev->stats.tx_window_errors++; 767 if (!(dev->stats.tx_window_errors & 63) && net_ratelimit()) { 768 printk(KERN_INFO "%s: unexpectedly large number of " 769 "bad collisions. Please check duplex " 770 "setting.\n", dev->name); 771 } 772 } 773 774 /* kill the packet */ 775 SMC_WAIT_MMU_BUSY(lp); 776 SMC_SET_MMU_CMD(lp, MC_FREEPKT); 777 778 /* Don't restore Packet Number Reg until busy bit is cleared */ 779 SMC_WAIT_MMU_BUSY(lp); 780 SMC_SET_PN(lp, saved_packet); 781 782 /* re-enable transmit */ 783 SMC_SELECT_BANK(lp, 0); 784 SMC_SET_TCR(lp, lp->tcr_cur_mode); 785 SMC_SELECT_BANK(lp, 2); 786} 787 788 789/*---PHY CONTROL AND CONFIGURATION-----------------------------------------*/ 790 791static void smc_mii_out(struct net_device *dev, unsigned int val, int bits) 792{ 793 struct smc_local *lp = netdev_priv(dev); 794 void __iomem *ioaddr = lp->base; 795 unsigned int mii_reg, mask; 796 797 mii_reg = SMC_GET_MII(lp) & ~(MII_MCLK | MII_MDOE | MII_MDO); 798 mii_reg |= MII_MDOE; 799 800 for (mask = 1 << (bits - 1); mask; mask >>= 1) { 801 if (val & mask) 802 mii_reg |= MII_MDO; 803 else 804 mii_reg &= ~MII_MDO; 805 806 SMC_SET_MII(lp, mii_reg); 807 udelay(MII_DELAY); 808 SMC_SET_MII(lp, mii_reg | MII_MCLK); 809 udelay(MII_DELAY); 810 } 811} 812 813static unsigned int smc_mii_in(struct net_device *dev, int bits) 814{ 815 struct smc_local *lp = netdev_priv(dev); 816 void __iomem *ioaddr = lp->base; 817 unsigned int mii_reg, mask, val; 818 819 mii_reg = SMC_GET_MII(lp) & ~(MII_MCLK | MII_MDOE | MII_MDO); 820 SMC_SET_MII(lp, mii_reg); 821 822 for (mask = 1 << (bits - 1), val = 0; mask; mask >>= 1) { 823 if (SMC_GET_MII(lp) & MII_MDI) 824 val |= mask; 825 826 SMC_SET_MII(lp, mii_reg); 827 udelay(MII_DELAY); 828 SMC_SET_MII(lp, mii_reg | MII_MCLK); 829 udelay(MII_DELAY); 830 } 831 832 return val; 833} 834 835/* 836 * Reads a register from the MII Management serial interface 837 */ 838static int smc_phy_read(struct net_device *dev, int phyaddr, int phyreg) 839{ 840 struct smc_local *lp = netdev_priv(dev); 841 void __iomem *ioaddr = lp->base; 842 unsigned int phydata; 843 844 SMC_SELECT_BANK(lp, 3); 845 846 /* Idle - 32 ones */ 847 smc_mii_out(dev, 0xffffffff, 32); 848 849 /* Start code (01) + read (10) + phyaddr + phyreg */ 850 smc_mii_out(dev, 6 << 10 | phyaddr << 5 | phyreg, 14); 851 852 /* Turnaround (2bits) + phydata */ 853 phydata = smc_mii_in(dev, 18); 854 855 /* Return to idle state */ 856 SMC_SET_MII(lp, SMC_GET_MII(lp) & ~(MII_MCLK|MII_MDOE|MII_MDO)); 857 858 DBG(3, "%s: phyaddr=0x%x, phyreg=0x%x, phydata=0x%x\n", 859 __FUNCTION__, phyaddr, phyreg, phydata); 860 861 SMC_SELECT_BANK(lp, 2); 862 return phydata; 863} 864 865/* 866 * Writes a register to the MII Management serial interface 867 */ 868static void smc_phy_write(struct net_device *dev, int phyaddr, int phyreg, 869 int phydata) 870{ 871 struct smc_local *lp = netdev_priv(dev); 872 void __iomem *ioaddr = lp->base; 873 874 SMC_SELECT_BANK(lp, 3); 875 876 /* Idle - 32 ones */ 877 smc_mii_out(dev, 0xffffffff, 32); 878 879 /* Start code (01) + write (01) + phyaddr + phyreg + turnaround + phydata */ 880 smc_mii_out(dev, 5 << 28 | phyaddr << 23 | phyreg << 18 | 2 << 16 | phydata, 32); 881 882 /* Return to idle state */ 883 SMC_SET_MII(lp, SMC_GET_MII(lp) & ~(MII_MCLK|MII_MDOE|MII_MDO)); 884 885 DBG(3, "%s: phyaddr=0x%x, phyreg=0x%x, phydata=0x%x\n", 886 __FUNCTION__, phyaddr, phyreg, phydata); 887 888 SMC_SELECT_BANK(lp, 2); 889} 890 891/* 892 * Finds and reports the PHY address 893 */ 894static void smc_phy_detect(struct net_device *dev) 895{ 896 struct smc_local *lp = netdev_priv(dev); 897 int phyaddr; 898 899 DBG(2, "%s: %s\n", dev->name, __FUNCTION__); 900 901 lp->phy_type = 0; 902 903 /* 904 * Scan all 32 PHY addresses if necessary, starting at 905 * PHY#1 to PHY#31, and then PHY#0 last. 906 */ 907 for (phyaddr = 1; phyaddr < 33; ++phyaddr) { 908 unsigned int id1, id2; 909 910 /* Read the PHY identifiers */ 911 id1 = smc_phy_read(dev, phyaddr & 31, MII_PHYSID1); 912 id2 = smc_phy_read(dev, phyaddr & 31, MII_PHYSID2); 913 914 DBG(3, "%s: phy_id1=0x%x, phy_id2=0x%x\n", 915 dev->name, id1, id2); 916 917 /* Make sure it is a valid identifier */ 918 if (id1 != 0x0000 && id1 != 0xffff && id1 != 0x8000 && 919 id2 != 0x0000 && id2 != 0xffff && id2 != 0x8000) { 920 /* Save the PHY's address */ 921 lp->mii.phy_id = phyaddr & 31; 922 lp->phy_type = id1 << 16 | id2; 923 break; 924 } 925 } 926} 927 928/* 929 * Sets the PHY to a configuration as determined by the user 930 */ 931static int smc_phy_fixed(struct net_device *dev) 932{ 933 struct smc_local *lp = netdev_priv(dev); 934 void __iomem *ioaddr = lp->base; 935 int phyaddr = lp->mii.phy_id; 936 int bmcr, cfg1; 937 938 DBG(3, "%s: %s\n", dev->name, __FUNCTION__); 939 940 /* Enter Link Disable state */ 941 cfg1 = smc_phy_read(dev, phyaddr, PHY_CFG1_REG); 942 cfg1 |= PHY_CFG1_LNKDIS; 943 smc_phy_write(dev, phyaddr, PHY_CFG1_REG, cfg1); 944 945 /* 946 * Set our fixed capabilities 947 * Disable auto-negotiation 948 */ 949 bmcr = 0; 950 951 if (lp->ctl_rfduplx) 952 bmcr |= BMCR_FULLDPLX; 953 954 if (lp->ctl_rspeed == 100) 955 bmcr |= BMCR_SPEED100; 956 957 /* Write our capabilities to the phy control register */ 958 smc_phy_write(dev, phyaddr, MII_BMCR, bmcr); 959 960 /* Re-Configure the Receive/Phy Control register */ 961 SMC_SELECT_BANK(lp, 0); 962 SMC_SET_RPC(lp, lp->rpc_cur_mode); 963 SMC_SELECT_BANK(lp, 2); 964 965 return 1; 966} 967 968/* 969 * smc_phy_reset - reset the phy 970 * @dev: net device 971 * @phy: phy address 972 * 973 * Issue a software reset for the specified PHY and 974 * wait up to 100ms for the reset to complete. We should 975 * not access the PHY for 50ms after issuing the reset. 976 * 977 * The time to wait appears to be dependent on the PHY. 978 * 979 * Must be called with lp->lock locked. 980 */ 981static int smc_phy_reset(struct net_device *dev, int phy) 982{ 983 struct smc_local *lp = netdev_priv(dev); 984 unsigned int bmcr; 985 int timeout; 986 987 smc_phy_write(dev, phy, MII_BMCR, BMCR_RESET); 988 989 for (timeout = 2; timeout; timeout--) { 990 spin_unlock_irq(&lp->lock); 991 msleep(50); 992 spin_lock_irq(&lp->lock); 993 994 bmcr = smc_phy_read(dev, phy, MII_BMCR); 995 if (!(bmcr & BMCR_RESET)) 996 break; 997 } 998 999 return bmcr & BMCR_RESET; 1000} 1001 1002/* 1003 * smc_phy_powerdown - powerdown phy 1004 * @dev: net device 1005 * 1006 * Power down the specified PHY 1007 */ 1008static void smc_phy_powerdown(struct net_device *dev) 1009{ 1010 struct smc_local *lp = netdev_priv(dev); 1011 unsigned int bmcr; 1012 int phy = lp->mii.phy_id; 1013 1014 if (lp->phy_type == 0) 1015 return; 1016 1017 /* We need to ensure that no calls to smc_phy_configure are 1018 pending. 1019 */ 1020 cancel_work_sync(&lp->phy_configure); 1021 1022 bmcr = smc_phy_read(dev, phy, MII_BMCR); 1023 smc_phy_write(dev, phy, MII_BMCR, bmcr | BMCR_PDOWN); 1024} 1025 1026/* 1027 * smc_phy_check_media - check the media status and adjust TCR 1028 * @dev: net device 1029 * @init: set true for initialisation 1030 * 1031 * Select duplex mode depending on negotiation state. This 1032 * also updates our carrier state. 1033 */ 1034static void smc_phy_check_media(struct net_device *dev, int init) 1035{ 1036 struct smc_local *lp = netdev_priv(dev); 1037 void __iomem *ioaddr = lp->base; 1038 1039 if (mii_check_media(&lp->mii, netif_msg_link(lp), init)) { 1040 /* duplex state has changed */ 1041 if (lp->mii.full_duplex) { 1042 lp->tcr_cur_mode |= TCR_SWFDUP; 1043 } else { 1044 lp->tcr_cur_mode &= ~TCR_SWFDUP; 1045 } 1046 1047 SMC_SELECT_BANK(lp, 0); 1048 SMC_SET_TCR(lp, lp->tcr_cur_mode); 1049 } 1050} 1051 1052/* 1053 * Configures the specified PHY through the MII management interface 1054 * using Autonegotiation. 1055 * Calls smc_phy_fixed() if the user has requested a certain config. 1056 * If RPC ANEG bit is set, the media selection is dependent purely on 1057 * the selection by the MII (either in the MII BMCR reg or the result 1058 * of autonegotiation.) If the RPC ANEG bit is cleared, the selection 1059 * is controlled by the RPC SPEED and RPC DPLX bits. 1060 */ 1061static void smc_phy_configure(struct work_struct *work) 1062{ 1063 struct smc_local *lp = 1064 container_of(work, struct smc_local, phy_configure); 1065 struct net_device *dev = lp->dev; 1066 void __iomem *ioaddr = lp->base; 1067 int phyaddr = lp->mii.phy_id; 1068 int my_phy_caps; /* My PHY capabilities */ 1069 int my_ad_caps; /* My Advertised capabilities */ 1070 int status; 1071 1072 DBG(3, "%s:smc_program_phy()\n", dev->name); 1073 1074 spin_lock_irq(&lp->lock); 1075 1076 /* 1077 * We should not be called if phy_type is zero. 1078 */ 1079 if (lp->phy_type == 0) 1080 goto smc_phy_configure_exit; 1081 1082 if (smc_phy_reset(dev, phyaddr)) { 1083 printk("%s: PHY reset timed out\n", dev->name); 1084 goto smc_phy_configure_exit; 1085 } 1086 1087 /* 1088 * Enable PHY Interrupts (for register 18) 1089 * Interrupts listed here are disabled 1090 */ 1091 smc_phy_write(dev, phyaddr, PHY_MASK_REG, 1092 PHY_INT_LOSSSYNC | PHY_INT_CWRD | PHY_INT_SSD | 1093 PHY_INT_ESD | PHY_INT_RPOL | PHY_INT_JAB | 1094 PHY_INT_SPDDET | PHY_INT_DPLXDET); 1095 1096 /* Configure the Receive/Phy Control register */ 1097 SMC_SELECT_BANK(lp, 0); 1098 SMC_SET_RPC(lp, lp->rpc_cur_mode); 1099 1100 /* If the user requested no auto neg, then go set his request */ 1101 if (lp->mii.force_media) { 1102 smc_phy_fixed(dev); 1103 goto smc_phy_configure_exit; 1104 } 1105 1106 /* Copy our capabilities from MII_BMSR to MII_ADVERTISE */ 1107 my_phy_caps = smc_phy_read(dev, phyaddr, MII_BMSR); 1108 1109 if (!(my_phy_caps & BMSR_ANEGCAPABLE)) { 1110 printk(KERN_INFO "Auto negotiation NOT supported\n"); 1111 smc_phy_fixed(dev); 1112 goto smc_phy_configure_exit; 1113 } 1114 1115 my_ad_caps = ADVERTISE_CSMA; /* I am CSMA capable */ 1116 1117 if (my_phy_caps & BMSR_100BASE4) 1118 my_ad_caps |= ADVERTISE_100BASE4; 1119 if (my_phy_caps & BMSR_100FULL) 1120 my_ad_caps |= ADVERTISE_100FULL; 1121 if (my_phy_caps & BMSR_100HALF) 1122 my_ad_caps |= ADVERTISE_100HALF; 1123 if (my_phy_caps & BMSR_10FULL) 1124 my_ad_caps |= ADVERTISE_10FULL; 1125 if (my_phy_caps & BMSR_10HALF) 1126 my_ad_caps |= ADVERTISE_10HALF; 1127 1128 /* Disable capabilities not selected by our user */ 1129 if (lp->ctl_rspeed != 100) 1130 my_ad_caps &= ~(ADVERTISE_100BASE4|ADVERTISE_100FULL|ADVERTISE_100HALF); 1131 1132 if (!lp->ctl_rfduplx) 1133 my_ad_caps &= ~(ADVERTISE_100FULL|ADVERTISE_10FULL); 1134 1135 /* Update our Auto-Neg Advertisement Register */ 1136 smc_phy_write(dev, phyaddr, MII_ADVERTISE, my_ad_caps); 1137 lp->mii.advertising = my_ad_caps; 1138 1139 /* 1140 * Read the register back. Without this, it appears that when 1141 * auto-negotiation is restarted, sometimes it isn't ready and 1142 * the link does not come up. 1143 */ 1144 status = smc_phy_read(dev, phyaddr, MII_ADVERTISE); 1145 1146 DBG(2, "%s: phy caps=%x\n", dev->name, my_phy_caps); 1147 DBG(2, "%s: phy advertised caps=%x\n", dev->name, my_ad_caps); 1148 1149 /* Restart auto-negotiation process in order to advertise my caps */ 1150 smc_phy_write(dev, phyaddr, MII_BMCR, BMCR_ANENABLE | BMCR_ANRESTART); 1151 1152 smc_phy_check_media(dev, 1); 1153 1154smc_phy_configure_exit: 1155 SMC_SELECT_BANK(lp, 2); 1156 spin_unlock_irq(&lp->lock); 1157} 1158 1159/* 1160 * smc_phy_interrupt 1161 * 1162 * Purpose: Handle interrupts relating to PHY register 18. This is 1163 * called from the "hard" interrupt handler under our private spinlock. 1164 */ 1165static void smc_phy_interrupt(struct net_device *dev) 1166{ 1167 struct smc_local *lp = netdev_priv(dev); 1168 int phyaddr = lp->mii.phy_id; 1169 int phy18; 1170 1171 DBG(2, "%s: %s\n", dev->name, __FUNCTION__); 1172 1173 if (lp->phy_type == 0) 1174 return; 1175 1176 for(;;) { 1177 smc_phy_check_media(dev, 0); 1178 1179 /* Read PHY Register 18, Status Output */ 1180 phy18 = smc_phy_read(dev, phyaddr, PHY_INT_REG); 1181 if ((phy18 & PHY_INT_INT) == 0) 1182 break; 1183 } 1184} 1185 1186/*--- END PHY CONTROL AND CONFIGURATION-------------------------------------*/ 1187 1188static void smc_10bt_check_media(struct net_device *dev, int init) 1189{ 1190 struct smc_local *lp = netdev_priv(dev); 1191 void __iomem *ioaddr = lp->base; 1192 unsigned int old_carrier, new_carrier; 1193 1194 old_carrier = netif_carrier_ok(dev) ? 1 : 0; 1195 1196 SMC_SELECT_BANK(lp, 0); 1197 new_carrier = (SMC_GET_EPH_STATUS(lp) & ES_LINK_OK) ? 1 : 0; 1198 SMC_SELECT_BANK(lp, 2); 1199 1200 if (init || (old_carrier != new_carrier)) { 1201 if (!new_carrier) { 1202 netif_carrier_off(dev); 1203 } else { 1204 netif_carrier_on(dev); 1205 } 1206 if (netif_msg_link(lp)) 1207 printk(KERN_INFO "%s: link %s\n", dev->name, 1208 new_carrier ? "up" : "down"); 1209 } 1210} 1211 1212static void smc_eph_interrupt(struct net_device *dev) 1213{ 1214 struct smc_local *lp = netdev_priv(dev); 1215 void __iomem *ioaddr = lp->base; 1216 unsigned int ctl; 1217 1218 smc_10bt_check_media(dev, 0); 1219 1220 SMC_SELECT_BANK(lp, 1); 1221 ctl = SMC_GET_CTL(lp); 1222 SMC_SET_CTL(lp, ctl & ~CTL_LE_ENABLE); 1223 SMC_SET_CTL(lp, ctl); 1224 SMC_SELECT_BANK(lp, 2); 1225} 1226 1227/* 1228 * This is the main routine of the driver, to handle the device when 1229 * it needs some attention. 1230 */ 1231static irqreturn_t smc_interrupt(int irq, void *dev_id) 1232{ 1233 struct net_device *dev = dev_id; 1234 struct smc_local *lp = netdev_priv(dev); 1235 void __iomem *ioaddr = lp->base; 1236 int status, mask, timeout, card_stats; 1237 int saved_pointer; 1238 1239 DBG(3, "%s: %s\n", dev->name, __FUNCTION__); 1240 1241 spin_lock(&lp->lock); 1242 1243 /* A preamble may be used when there is a potential race 1244 * between the interruptible transmit functions and this 1245 * ISR. */ 1246 SMC_INTERRUPT_PREAMBLE; 1247 1248 saved_pointer = SMC_GET_PTR(lp); 1249 mask = SMC_GET_INT_MASK(lp); 1250 SMC_SET_INT_MASK(lp, 0); 1251 1252 /* set a timeout value, so I don't stay here forever */ 1253 timeout = MAX_IRQ_LOOPS; 1254 1255 do { 1256 status = SMC_GET_INT(lp); 1257 1258 DBG(2, "%s: INT 0x%02x MASK 0x%02x MEM 0x%04x FIFO 0x%04x\n", 1259 dev->name, status, mask, 1260 ({ int meminfo; SMC_SELECT_BANK(lp, 0); 1261 meminfo = SMC_GET_MIR(lp); 1262 SMC_SELECT_BANK(lp, 2); meminfo; }), 1263 SMC_GET_FIFO(lp)); 1264 1265 status &= mask; 1266 if (!status) 1267 break; 1268 1269 if (status & IM_TX_INT) { 1270 /* do this before RX as it will free memory quickly */ 1271 DBG(3, "%s: TX int\n", dev->name); 1272 smc_tx(dev); 1273 SMC_ACK_INT(lp, IM_TX_INT); 1274 if (THROTTLE_TX_PKTS) 1275 netif_wake_queue(dev); 1276 } else if (status & IM_RCV_INT) { 1277 DBG(3, "%s: RX irq\n", dev->name); 1278 smc_rcv(dev); 1279 } else if (status & IM_ALLOC_INT) { 1280 DBG(3, "%s: Allocation irq\n", dev->name); 1281 tasklet_hi_schedule(&lp->tx_task); 1282 mask &= ~IM_ALLOC_INT; 1283 } else if (status & IM_TX_EMPTY_INT) { 1284 DBG(3, "%s: TX empty\n", dev->name); 1285 mask &= ~IM_TX_EMPTY_INT; 1286 1287 /* update stats */ 1288 SMC_SELECT_BANK(lp, 0); 1289 card_stats = SMC_GET_COUNTER(lp); 1290 SMC_SELECT_BANK(lp, 2); 1291 1292 /* single collisions */ 1293 dev->stats.collisions += card_stats & 0xF; 1294 card_stats >>= 4; 1295 1296 /* multiple collisions */ 1297 dev->stats.collisions += card_stats & 0xF; 1298 } else if (status & IM_RX_OVRN_INT) { 1299 DBG(1, "%s: RX overrun (EPH_ST 0x%04x)\n", dev->name, 1300 ({ int eph_st; SMC_SELECT_BANK(lp, 0); 1301 eph_st = SMC_GET_EPH_STATUS(lp); 1302 SMC_SELECT_BANK(lp, 2); eph_st; })); 1303 SMC_ACK_INT(lp, IM_RX_OVRN_INT); 1304 dev->stats.rx_errors++; 1305 dev->stats.rx_fifo_errors++; 1306 } else if (status & IM_EPH_INT) { 1307 smc_eph_interrupt(dev); 1308 } else if (status & IM_MDINT) { 1309 SMC_ACK_INT(lp, IM_MDINT); 1310 smc_phy_interrupt(dev); 1311 } else if (status & IM_ERCV_INT) { 1312 SMC_ACK_INT(lp, IM_ERCV_INT); 1313 PRINTK("%s: UNSUPPORTED: ERCV INTERRUPT \n", dev->name); 1314 } 1315 } while (--timeout); 1316 1317 /* restore register states */ 1318 SMC_SET_PTR(lp, saved_pointer); 1319 SMC_SET_INT_MASK(lp, mask); 1320 spin_unlock(&lp->lock); 1321 1322#ifndef CONFIG_NET_POLL_CONTROLLER 1323 if (timeout == MAX_IRQ_LOOPS) 1324 PRINTK("%s: spurious interrupt (mask = 0x%02x)\n", 1325 dev->name, mask); 1326#endif 1327 DBG(3, "%s: Interrupt done (%d loops)\n", 1328 dev->name, MAX_IRQ_LOOPS - timeout); 1329 1330 /* 1331 * We return IRQ_HANDLED unconditionally here even if there was 1332 * nothing to do. There is a possibility that a packet might 1333 * get enqueued into the chip right after TX_EMPTY_INT is raised 1334 * but just before the CPU acknowledges the IRQ. 1335 * Better take an unneeded IRQ in some occasions than complexifying 1336 * the code for all cases. 1337 */ 1338 return IRQ_HANDLED; 1339} 1340 1341#ifdef CONFIG_NET_POLL_CONTROLLER 1342/* 1343 * Polling receive - used by netconsole and other diagnostic tools 1344 * to allow network i/o with interrupts disabled. 1345 */ 1346static void smc_poll_controller(struct net_device *dev) 1347{ 1348 disable_irq(dev->irq); 1349 smc_interrupt(dev->irq, dev); 1350 enable_irq(dev->irq); 1351} 1352#endif 1353 1354/* Our watchdog timed out. Called by the networking layer */ 1355static void smc_timeout(struct net_device *dev) 1356{ 1357 struct smc_local *lp = netdev_priv(dev); 1358 void __iomem *ioaddr = lp->base; 1359 int status, mask, eph_st, meminfo, fifo; 1360 1361 DBG(2, "%s: %s\n", dev->name, __FUNCTION__); 1362 1363 spin_lock_irq(&lp->lock); 1364 status = SMC_GET_INT(lp); 1365 mask = SMC_GET_INT_MASK(lp); 1366 fifo = SMC_GET_FIFO(lp); 1367 SMC_SELECT_BANK(lp, 0); 1368 eph_st = SMC_GET_EPH_STATUS(lp); 1369 meminfo = SMC_GET_MIR(lp); 1370 SMC_SELECT_BANK(lp, 2); 1371 spin_unlock_irq(&lp->lock); 1372 PRINTK( "%s: TX timeout (INT 0x%02x INTMASK 0x%02x " 1373 "MEM 0x%04x FIFO 0x%04x EPH_ST 0x%04x)\n", 1374 dev->name, status, mask, meminfo, fifo, eph_st ); 1375 1376 smc_reset(dev); 1377 smc_enable(dev); 1378 1379 /* 1380 * Reconfiguring the PHY doesn't seem like a bad idea here, but 1381 * smc_phy_configure() calls msleep() which calls schedule_timeout() 1382 * which calls schedule(). Hence we use a work queue. 1383 */ 1384 if (lp->phy_type != 0) 1385 schedule_work(&lp->phy_configure); 1386 1387 /* We can accept TX packets again */ 1388 dev->trans_start = jiffies; 1389 netif_wake_queue(dev); 1390} 1391 1392/* 1393 * This routine will, depending on the values passed to it, 1394 * either make it accept multicast packets, go into 1395 * promiscuous mode (for TCPDUMP and cousins) or accept 1396 * a select set of multicast packets 1397 */ 1398static void smc_set_multicast_list(struct net_device *dev) 1399{ 1400 struct smc_local *lp = netdev_priv(dev); 1401 void __iomem *ioaddr = lp->base; 1402 unsigned char multicast_table[8]; 1403 int update_multicast = 0; 1404 1405 DBG(2, "%s: %s\n", dev->name, __FUNCTION__); 1406 1407 if (dev->flags & IFF_PROMISC) { 1408 DBG(2, "%s: RCR_PRMS\n", dev->name); 1409 lp->rcr_cur_mode |= RCR_PRMS; 1410 } 1411 1412/* BUG? I never disable promiscuous mode if multicasting was turned on. 1413 Now, I turn off promiscuous mode, but I don't do anything to multicasting 1414 when promiscuous mode is turned on. 1415*/ 1416 1417 /* 1418 * Here, I am setting this to accept all multicast packets. 1419 * I don't need to zero the multicast table, because the flag is 1420 * checked before the table is 1421 */ 1422 else if (dev->flags & IFF_ALLMULTI || dev->mc_count > 16) { 1423 DBG(2, "%s: RCR_ALMUL\n", dev->name); 1424 lp->rcr_cur_mode |= RCR_ALMUL; 1425 } 1426 1427 /* 1428 * This sets the internal hardware table to filter out unwanted 1429 * multicast packets before they take up memory. 1430 * 1431 * The SMC chip uses a hash table where the high 6 bits of the CRC of 1432 * address are the offset into the table. If that bit is 1, then the 1433 * multicast packet is accepted. Otherwise, it's dropped silently. 1434 * 1435 * To use the 6 bits as an offset into the table, the high 3 bits are 1436 * the number of the 8 bit register, while the low 3 bits are the bit 1437 * within that register. 1438 */ 1439 else if (dev->mc_count) { 1440 int i; 1441 struct dev_mc_list *cur_addr; 1442 1443 /* table for flipping the order of 3 bits */ 1444 static const unsigned char invert3[] = {0, 4, 2, 6, 1, 5, 3, 7}; 1445 1446 /* start with a table of all zeros: reject all */ 1447 memset(multicast_table, 0, sizeof(multicast_table)); 1448 1449 cur_addr = dev->mc_list; 1450 for (i = 0; i < dev->mc_count; i++, cur_addr = cur_addr->next) { 1451 int position; 1452 1453 /* do we have a pointer here? */ 1454 if (!cur_addr) 1455 break; 1456 /* make sure this is a multicast address - 1457 shouldn't this be a given if we have it here ? */ 1458 if (!(*cur_addr->dmi_addr & 1)) 1459 continue; 1460 1461 /* only use the low order bits */ 1462 position = crc32_le(~0, cur_addr->dmi_addr, 6) & 0x3f; 1463 1464 /* do some messy swapping to put the bit in the right spot */ 1465 multicast_table[invert3[position&7]] |= 1466 (1<<invert3[(position>>3)&7]); 1467 } 1468 1469 /* be sure I get rid of flags I might have set */ 1470 lp->rcr_cur_mode &= ~(RCR_PRMS | RCR_ALMUL); 1471 1472 /* now, the table can be loaded into the chipset */ 1473 update_multicast = 1; 1474 } else { 1475 DBG(2, "%s: ~(RCR_PRMS|RCR_ALMUL)\n", dev->name); 1476 lp->rcr_cur_mode &= ~(RCR_PRMS | RCR_ALMUL); 1477 1478 /* 1479 * since I'm disabling all multicast entirely, I need to 1480 * clear the multicast list 1481 */ 1482 memset(multicast_table, 0, sizeof(multicast_table)); 1483 update_multicast = 1; 1484 } 1485 1486 spin_lock_irq(&lp->lock); 1487 SMC_SELECT_BANK(lp, 0); 1488 SMC_SET_RCR(lp, lp->rcr_cur_mode); 1489 if (update_multicast) { 1490 SMC_SELECT_BANK(lp, 3); 1491 SMC_SET_MCAST(lp, multicast_table); 1492 } 1493 SMC_SELECT_BANK(lp, 2); 1494 spin_unlock_irq(&lp->lock); 1495} 1496 1497 1498/* 1499 * Open and Initialize the board 1500 * 1501 * Set up everything, reset the card, etc.. 1502 */ 1503static int 1504smc_open(struct net_device *dev) 1505{ 1506 struct smc_local *lp = netdev_priv(dev); 1507 1508 DBG(2, "%s: %s\n", dev->name, __FUNCTION__); 1509 1510 /* 1511 * Check that the address is valid. If its not, refuse 1512 * to bring the device up. The user must specify an 1513 * address using ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx 1514 */ 1515 if (!is_valid_ether_addr(dev->dev_addr)) { 1516 PRINTK("%s: no valid ethernet hw addr\n", __FUNCTION__); 1517 return -EINVAL; 1518 } 1519 1520 /* Setup the default Register Modes */ 1521 lp->tcr_cur_mode = TCR_DEFAULT; 1522 lp->rcr_cur_mode = RCR_DEFAULT; 1523 lp->rpc_cur_mode = RPC_DEFAULT; 1524 1525 /* 1526 * If we are not using a MII interface, we need to 1527 * monitor our own carrier signal to detect faults. 1528 */ 1529 if (lp->phy_type == 0) 1530 lp->tcr_cur_mode |= TCR_MON_CSN; 1531 1532 /* reset the hardware */ 1533 smc_reset(dev); 1534 smc_enable(dev); 1535 1536 /* Configure the PHY, initialize the link state */ 1537 if (lp->phy_type != 0) 1538 smc_phy_configure(&lp->phy_configure); 1539 else { 1540 spin_lock_irq(&lp->lock); 1541 smc_10bt_check_media(dev, 1); 1542 spin_unlock_irq(&lp->lock); 1543 } 1544 1545 netif_start_queue(dev); 1546 return 0; 1547} 1548 1549/* 1550 * smc_close 1551 * 1552 * this makes the board clean up everything that it can 1553 * and not talk to the outside world. Caused by 1554 * an 'ifconfig ethX down' 1555 */ 1556static int smc_close(struct net_device *dev) 1557{ 1558 struct smc_local *lp = netdev_priv(dev); 1559 1560 DBG(2, "%s: %s\n", dev->name, __FUNCTION__); 1561 1562 netif_stop_queue(dev); 1563 netif_carrier_off(dev); 1564 1565 /* clear everything */ 1566 smc_shutdown(dev); 1567 tasklet_kill(&lp->tx_task); 1568 smc_phy_powerdown(dev); 1569 return 0; 1570} 1571 1572/* 1573 * Ethtool support 1574 */ 1575static int 1576smc_ethtool_getsettings(struct net_device *dev, struct ethtool_cmd *cmd) 1577{ 1578 struct smc_local *lp = netdev_priv(dev); 1579 int ret; 1580 1581 cmd->maxtxpkt = 1; 1582 cmd->maxrxpkt = 1; 1583 1584 if (lp->phy_type != 0) { 1585 spin_lock_irq(&lp->lock); 1586 ret = mii_ethtool_gset(&lp->mii, cmd); 1587 spin_unlock_irq(&lp->lock); 1588 } else { 1589 cmd->supported = SUPPORTED_10baseT_Half | 1590 SUPPORTED_10baseT_Full | 1591 SUPPORTED_TP | SUPPORTED_AUI; 1592 1593 if (lp->ctl_rspeed == 10) 1594 cmd->speed = SPEED_10; 1595 else if (lp->ctl_rspeed == 100) 1596 cmd->speed = SPEED_100; 1597 1598 cmd->autoneg = AUTONEG_DISABLE; 1599 cmd->transceiver = XCVR_INTERNAL; 1600 cmd->port = 0; 1601 cmd->duplex = lp->tcr_cur_mode & TCR_SWFDUP ? DUPLEX_FULL : DUPLEX_HALF; 1602 1603 ret = 0; 1604 } 1605 1606 return ret; 1607} 1608 1609static int 1610smc_ethtool_setsettings(struct net_device *dev, struct ethtool_cmd *cmd) 1611{ 1612 struct smc_local *lp = netdev_priv(dev); 1613 int ret; 1614 1615 if (lp->phy_type != 0) { 1616 spin_lock_irq(&lp->lock); 1617 ret = mii_ethtool_sset(&lp->mii, cmd); 1618 spin_unlock_irq(&lp->lock); 1619 } else { 1620 if (cmd->autoneg != AUTONEG_DISABLE || 1621 cmd->speed != SPEED_10 || 1622 (cmd->duplex != DUPLEX_HALF && cmd->duplex != DUPLEX_FULL) || 1623 (cmd->port != PORT_TP && cmd->port != PORT_AUI)) 1624 return -EINVAL; 1625 1626// lp->port = cmd->port; 1627 lp->ctl_rfduplx = cmd->duplex == DUPLEX_FULL; 1628 1629// if (netif_running(dev)) 1630// smc_set_port(dev); 1631 1632 ret = 0; 1633 } 1634 1635 return ret; 1636} 1637 1638static void 1639smc_ethtool_getdrvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 1640{ 1641 strncpy(info->driver, CARDNAME, sizeof(info->driver)); 1642 strncpy(info->version, version, sizeof(info->version)); 1643 strncpy(info->bus_info, dev->dev.parent->bus_id, sizeof(info->bus_info)); 1644} 1645 1646static int smc_ethtool_nwayreset(struct net_device *dev) 1647{ 1648 struct smc_local *lp = netdev_priv(dev); 1649 int ret = -EINVAL; 1650 1651 if (lp->phy_type != 0) { 1652 spin_lock_irq(&lp->lock); 1653 ret = mii_nway_restart(&lp->mii); 1654 spin_unlock_irq(&lp->lock); 1655 } 1656 1657 return ret; 1658} 1659 1660static u32 smc_ethtool_getmsglevel(struct net_device *dev) 1661{ 1662 struct smc_local *lp = netdev_priv(dev); 1663 return lp->msg_enable; 1664} 1665 1666static void smc_ethtool_setmsglevel(struct net_device *dev, u32 level) 1667{ 1668 struct smc_local *lp = netdev_priv(dev); 1669 lp->msg_enable = level; 1670} 1671 1672static const struct ethtool_ops smc_ethtool_ops = { 1673 .get_settings = smc_ethtool_getsettings, 1674 .set_settings = smc_ethtool_setsettings, 1675 .get_drvinfo = smc_ethtool_getdrvinfo, 1676 1677 .get_msglevel = smc_ethtool_getmsglevel, 1678 .set_msglevel = smc_ethtool_setmsglevel, 1679 .nway_reset = smc_ethtool_nwayreset, 1680 .get_link = ethtool_op_get_link, 1681// .get_eeprom = smc_ethtool_geteeprom, 1682// .set_eeprom = smc_ethtool_seteeprom, 1683}; 1684 1685/* 1686 * smc_findirq 1687 * 1688 * This routine has a simple purpose -- make the SMC chip generate an 1689 * interrupt, so an auto-detect routine can detect it, and find the IRQ, 1690 */ 1691/* 1692 * does this still work? 1693 * 1694 * I just deleted auto_irq.c, since it was never built... 1695 * --jgarzik 1696 */ 1697static int __init smc_findirq(struct smc_local *lp) 1698{ 1699 void __iomem *ioaddr = lp->base; 1700 int timeout = 20; 1701 unsigned long cookie; 1702 1703 DBG(2, "%s: %s\n", CARDNAME, __FUNCTION__); 1704 1705 cookie = probe_irq_on(); 1706 1707 /* 1708 * What I try to do here is trigger an ALLOC_INT. This is done 1709 * by allocating a small chunk of memory, which will give an interrupt 1710 * when done. 1711 */ 1712 /* enable ALLOCation interrupts ONLY */ 1713 SMC_SELECT_BANK(lp, 2); 1714 SMC_SET_INT_MASK(lp, IM_ALLOC_INT); 1715 1716 /* 1717 * Allocate 512 bytes of memory. Note that the chip was just 1718 * reset so all the memory is available 1719 */ 1720 SMC_SET_MMU_CMD(lp, MC_ALLOC | 1); 1721 1722 /* 1723 * Wait until positive that the interrupt has been generated 1724 */ 1725 do { 1726 int int_status; 1727 udelay(10); 1728 int_status = SMC_GET_INT(lp); 1729 if (int_status & IM_ALLOC_INT) 1730 break; /* got the interrupt */ 1731 } while (--timeout); 1732 1733 /* 1734 * there is really nothing that I can do here if timeout fails, 1735 * as autoirq_report will return a 0 anyway, which is what I 1736 * want in this case. Plus, the clean up is needed in both 1737 * cases. 1738 */ 1739 1740 /* and disable all interrupts again */ 1741 SMC_SET_INT_MASK(lp, 0); 1742 1743 /* and return what I found */ 1744 return probe_irq_off(cookie); 1745} 1746 1747/* 1748 * Function: smc_probe(unsigned long ioaddr) 1749 * 1750 * Purpose: 1751 * Tests to see if a given ioaddr points to an SMC91x chip. 1752 * Returns a 0 on success 1753 * 1754 * Algorithm: 1755 * (1) see if the high byte of BANK_SELECT is 0x33 1756 * (2) compare the ioaddr with the base register's address 1757 * (3) see if I recognize the chip ID in the appropriate register 1758 * 1759 * Here I do typical initialization tasks. 1760 * 1761 * o Initialize the structure if needed 1762 * o print out my vanity message if not done so already 1763 * o print out what type of hardware is detected 1764 * o print out the ethernet address 1765 * o find the IRQ 1766 * o set up my private data 1767 * o configure the dev structure with my subroutines 1768 * o actually GRAB the irq. 1769 * o GRAB the region 1770 */ 1771static int __init smc_probe(struct net_device *dev, void __iomem *ioaddr, 1772 unsigned long irq_flags) 1773{ 1774 struct smc_local *lp = netdev_priv(dev); 1775 static int version_printed = 0; 1776 int retval; 1777 unsigned int val, revision_register; 1778 const char *version_string; 1779 DECLARE_MAC_BUF(mac); 1780 1781 DBG(2, "%s: %s\n", CARDNAME, __FUNCTION__); 1782 1783 /* First, see if the high byte is 0x33 */ 1784 val = SMC_CURRENT_BANK(lp); 1785 DBG(2, "%s: bank signature probe returned 0x%04x\n", CARDNAME, val); 1786 if ((val & 0xFF00) != 0x3300) { 1787 if ((val & 0xFF) == 0x33) { 1788 printk(KERN_WARNING 1789 "%s: Detected possible byte-swapped interface" 1790 " at IOADDR %p\n", CARDNAME, ioaddr); 1791 } 1792 retval = -ENODEV; 1793 goto err_out; 1794 } 1795 1796 /* 1797 * The above MIGHT indicate a device, but I need to write to 1798 * further test this. 1799 */ 1800 SMC_SELECT_BANK(lp, 0); 1801 val = SMC_CURRENT_BANK(lp); 1802 if ((val & 0xFF00) != 0x3300) { 1803 retval = -ENODEV; 1804 goto err_out; 1805 } 1806 1807 /* 1808 * well, we've already written once, so hopefully another 1809 * time won't hurt. This time, I need to switch the bank 1810 * register to bank 1, so I can access the base address 1811 * register 1812 */ 1813 SMC_SELECT_BANK(lp, 1); 1814 val = SMC_GET_BASE(lp); 1815 val = ((val & 0x1F00) >> 3) << SMC_IO_SHIFT; 1816 if (((unsigned int)ioaddr & (0x3e0 << SMC_IO_SHIFT)) != val) { 1817 printk("%s: IOADDR %p doesn't match configuration (%x).\n", 1818 CARDNAME, ioaddr, val); 1819 } 1820 1821 /* 1822 * check if the revision register is something that I 1823 * recognize. These might need to be added to later, 1824 * as future revisions could be added. 1825 */ 1826 SMC_SELECT_BANK(lp, 3); 1827 revision_register = SMC_GET_REV(lp); 1828 DBG(2, "%s: revision = 0x%04x\n", CARDNAME, revision_register); 1829 version_string = chip_ids[ (revision_register >> 4) & 0xF]; 1830 if (!version_string || (revision_register & 0xff00) != 0x3300) { 1831 /* I don't recognize this chip, so... */ 1832 printk("%s: IO %p: Unrecognized revision register 0x%04x" 1833 ", Contact author.\n", CARDNAME, 1834 ioaddr, revision_register); 1835 1836 retval = -ENODEV; 1837 goto err_out; 1838 } 1839 1840 /* At this point I'll assume that the chip is an SMC91x. */ 1841 if (version_printed++ == 0) 1842 printk("%s", version); 1843 1844 /* fill in some of the fields */ 1845 dev->base_addr = (unsigned long)ioaddr; 1846 lp->base = ioaddr; 1847 lp->version = revision_register & 0xff; 1848 spin_lock_init(&lp->lock); 1849 1850 /* Get the MAC address */ 1851 SMC_SELECT_BANK(lp, 1); 1852 SMC_GET_MAC_ADDR(lp, dev->dev_addr); 1853 1854 /* now, reset the chip, and put it into a known state */ 1855 smc_reset(dev); 1856 1857 /* 1858 * If dev->irq is 0, then the device has to be banged on to see 1859 * what the IRQ is. 1860 * 1861 * This banging doesn't always detect the IRQ, for unknown reasons. 1862 * a workaround is to reset the chip and try again. 1863 * 1864 * Interestingly, the DOS packet driver *SETS* the IRQ on the card to 1865 * be what is requested on the command line. I don't do that, mostly 1866 * because the card that I have uses a non-standard method of accessing 1867 * the IRQs, and because this _should_ work in most configurations. 1868 * 1869 * Specifying an IRQ is done with the assumption that the user knows 1870 * what (s)he is doing. No checking is done!!!! 1871 */ 1872 if (dev->irq < 1) { 1873 int trials; 1874 1875 trials = 3; 1876 while (trials--) { 1877 dev->irq = smc_findirq(lp); 1878 if (dev->irq) 1879 break; 1880 /* kick the card and try again */ 1881 smc_reset(dev); 1882 } 1883 } 1884 if (dev->irq == 0) { 1885 printk("%s: Couldn't autodetect your IRQ. Use irq=xx.\n", 1886 dev->name); 1887 retval = -ENODEV; 1888 goto err_out; 1889 } 1890 dev->irq = irq_canonicalize(dev->irq); 1891 1892 /* Fill in the fields of the device structure with ethernet values. */ 1893 ether_setup(dev); 1894 1895 dev->open = smc_open; 1896 dev->stop = smc_close; 1897 dev->hard_start_xmit = smc_hard_start_xmit; 1898 dev->tx_timeout = smc_timeout; 1899 dev->watchdog_timeo = msecs_to_jiffies(watchdog); 1900 dev->set_multicast_list = smc_set_multicast_list; 1901 dev->ethtool_ops = &smc_ethtool_ops; 1902#ifdef CONFIG_NET_POLL_CONTROLLER 1903 dev->poll_controller = smc_poll_controller; 1904#endif 1905 1906 tasklet_init(&lp->tx_task, smc_hardware_send_pkt, (unsigned long)dev); 1907 INIT_WORK(&lp->phy_configure, smc_phy_configure); 1908 lp->dev = dev; 1909 lp->mii.phy_id_mask = 0x1f; 1910 lp->mii.reg_num_mask = 0x1f; 1911 lp->mii.force_media = 0; 1912 lp->mii.full_duplex = 0; 1913 lp->mii.dev = dev; 1914 lp->mii.mdio_read = smc_phy_read; 1915 lp->mii.mdio_write = smc_phy_write; 1916 1917 /* 1918 * Locate the phy, if any. 1919 */ 1920 if (lp->version >= (CHIP_91100 << 4)) 1921 smc_phy_detect(dev); 1922 1923 /* then shut everything down to save power */ 1924 smc_shutdown(dev); 1925 smc_phy_powerdown(dev); 1926 1927 /* Set default parameters */ 1928 lp->msg_enable = NETIF_MSG_LINK; 1929 lp->ctl_rfduplx = 0; 1930 lp->ctl_rspeed = 10; 1931 1932 if (lp->version >= (CHIP_91100 << 4)) { 1933 lp->ctl_rfduplx = 1; 1934 lp->ctl_rspeed = 100; 1935 } 1936 1937 /* Grab the IRQ */ 1938 retval = request_irq(dev->irq, &smc_interrupt, irq_flags, dev->name, dev); 1939 if (retval) 1940 goto err_out; 1941 1942#ifdef CONFIG_ARCH_PXA 1943# ifdef SMC_USE_PXA_DMA 1944 lp->cfg.flags |= SMC91X_USE_DMA; 1945# endif 1946 if (lp->cfg.flags & SMC91X_USE_DMA) { 1947 int dma = pxa_request_dma(dev->name, DMA_PRIO_LOW, 1948 smc_pxa_dma_irq, NULL); 1949 if (dma >= 0) 1950 dev->dma = dma; 1951 } 1952#endif 1953 1954 retval = register_netdev(dev); 1955 if (retval == 0) { 1956 /* now, print out the card info, in a short format.. */ 1957 printk("%s: %s (rev %d) at %p IRQ %d", 1958 dev->name, version_string, revision_register & 0x0f, 1959 lp->base, dev->irq); 1960 1961 if (dev->dma != (unsigned char)-1) 1962 printk(" DMA %d", dev->dma); 1963 1964 printk("%s%s\n", nowait ? " [nowait]" : "", 1965 THROTTLE_TX_PKTS ? " [throttle_tx]" : ""); 1966 1967 if (!is_valid_ether_addr(dev->dev_addr)) { 1968 printk("%s: Invalid ethernet MAC address. Please " 1969 "set using ifconfig\n", dev->name); 1970 } else { 1971 /* Print the Ethernet address */ 1972 printk("%s: Ethernet addr: %s\n", 1973 dev->name, print_mac(mac, dev->dev_addr)); 1974 } 1975 1976 if (lp->phy_type == 0) { 1977 PRINTK("%s: No PHY found\n", dev->name); 1978 } else if ((lp->phy_type & 0xfffffff0) == 0x0016f840) { 1979 PRINTK("%s: PHY LAN83C183 (LAN91C111 Internal)\n", dev->name); 1980 } else if ((lp->phy_type & 0xfffffff0) == 0x02821c50) { 1981 PRINTK("%s: PHY LAN83C180\n", dev->name); 1982 } 1983 } 1984 1985err_out: 1986#ifdef CONFIG_ARCH_PXA 1987 if (retval && dev->dma != (unsigned char)-1) 1988 pxa_free_dma(dev->dma); 1989#endif 1990 return retval; 1991} 1992 1993static int smc_enable_device(struct platform_device *pdev) 1994{ 1995 struct net_device *ndev = platform_get_drvdata(pdev); 1996 struct smc_local *lp = netdev_priv(ndev); 1997 unsigned long flags; 1998 unsigned char ecor, ecsr; 1999 void __iomem *addr; 2000 struct resource * res; 2001 2002 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-attrib"); 2003 if (!res) 2004 return 0; 2005 2006 /* 2007 * Map the attribute space. This is overkill, but clean. 2008 */ 2009 addr = ioremap(res->start, ATTRIB_SIZE); 2010 if (!addr) 2011 return -ENOMEM; 2012 2013 /* 2014 * Reset the device. We must disable IRQs around this 2015 * since a reset causes the IRQ line become active. 2016 */ 2017 local_irq_save(flags); 2018 ecor = readb(addr + (ECOR << SMC_IO_SHIFT)) & ~ECOR_RESET; 2019 writeb(ecor | ECOR_RESET, addr + (ECOR << SMC_IO_SHIFT)); 2020 readb(addr + (ECOR << SMC_IO_SHIFT)); 2021 2022 /* 2023 * Wait 100us for the chip to reset. 2024 */ 2025 udelay(100); 2026 2027 /* 2028 * The device will ignore all writes to the enable bit while 2029 * reset is asserted, even if the reset bit is cleared in the 2030 * same write. Must clear reset first, then enable the device. 2031 */ 2032 writeb(ecor, addr + (ECOR << SMC_IO_SHIFT)); 2033 writeb(ecor | ECOR_ENABLE, addr + (ECOR << SMC_IO_SHIFT)); 2034 2035 /* 2036 * Set the appropriate byte/word mode. 2037 */ 2038 ecsr = readb(addr + (ECSR << SMC_IO_SHIFT)) & ~ECSR_IOIS8; 2039 if (!SMC_16BIT(lp)) 2040 ecsr |= ECSR_IOIS8; 2041 writeb(ecsr, addr + (ECSR << SMC_IO_SHIFT)); 2042 local_irq_restore(flags); 2043 2044 iounmap(addr); 2045 2046 /* 2047 * Wait for the chip to wake up. We could poll the control 2048 * register in the main register space, but that isn't mapped 2049 * yet. We know this is going to take 750us. 2050 */ 2051 msleep(1); 2052 2053 return 0; 2054} 2055 2056static int smc_request_attrib(struct platform_device *pdev, 2057 struct net_device *ndev) 2058{ 2059 struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-attrib"); 2060 struct smc_local *lp = netdev_priv(ndev); 2061 2062 if (!res) 2063 return 0; 2064 2065 if (!request_mem_region(res->start, ATTRIB_SIZE, CARDNAME)) 2066 return -EBUSY; 2067 2068 return 0; 2069} 2070 2071static void smc_release_attrib(struct platform_device *pdev, 2072 struct net_device *ndev) 2073{ 2074 struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-attrib"); 2075 struct smc_local *lp = netdev_priv(ndev); 2076 2077 if (res) 2078 release_mem_region(res->start, ATTRIB_SIZE); 2079} 2080 2081static inline void smc_request_datacs(struct platform_device *pdev, struct net_device *ndev) 2082{ 2083 if (SMC_CAN_USE_DATACS) { 2084 struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32"); 2085 struct smc_local *lp = netdev_priv(ndev); 2086 2087 if (!res) 2088 return; 2089 2090 if(!request_mem_region(res->start, SMC_DATA_EXTENT, CARDNAME)) { 2091 printk(KERN_INFO "%s: failed to request datacs memory region.\n", CARDNAME); 2092 return; 2093 } 2094 2095 lp->datacs = ioremap(res->start, SMC_DATA_EXTENT); 2096 } 2097} 2098 2099static void smc_release_datacs(struct platform_device *pdev, struct net_device *ndev) 2100{ 2101 if (SMC_CAN_USE_DATACS) { 2102 struct smc_local *lp = netdev_priv(ndev); 2103 struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32"); 2104 2105 if (lp->datacs) 2106 iounmap(lp->datacs); 2107 2108 lp->datacs = NULL; 2109 2110 if (res) 2111 release_mem_region(res->start, SMC_DATA_EXTENT); 2112 } 2113} 2114 2115/* 2116 * smc_init(void) 2117 * Input parameters: 2118 * dev->base_addr == 0, try to find all possible locations 2119 * dev->base_addr > 0x1ff, this is the address to check 2120 * dev->base_addr == <anything else>, return failure code 2121 * 2122 * Output: 2123 * 0 --> there is a device 2124 * anything else, error 2125 */ 2126static int smc_drv_probe(struct platform_device *pdev) 2127{ 2128 struct smc91x_platdata *pd = pdev->dev.platform_data; 2129 struct smc_local *lp; 2130 struct net_device *ndev; 2131 struct resource *res, *ires; 2132 unsigned int __iomem *addr; 2133 unsigned long irq_flags = SMC_IRQ_FLAGS; 2134 int ret; 2135 2136 ndev = alloc_etherdev(sizeof(struct smc_local)); 2137 if (!ndev) { 2138 printk("%s: could not allocate device.\n", CARDNAME); 2139 ret = -ENOMEM; 2140 goto out; 2141 } 2142 SET_NETDEV_DEV(ndev, &pdev->dev); 2143 2144 /* get configuration from platform data, only allow use of 2145 * bus width if both SMC_CAN_USE_xxx and SMC91X_USE_xxx are set. 2146 */ 2147 2148 lp = netdev_priv(ndev); 2149 2150 if (pd) { 2151 memcpy(&lp->cfg, pd, sizeof(lp->cfg)); 2152 lp->io_shift = SMC91X_IO_SHIFT(lp->cfg.flags); 2153 } else { 2154 lp->cfg.flags |= (SMC_CAN_USE_8BIT) ? SMC91X_USE_8BIT : 0; 2155 lp->cfg.flags |= (SMC_CAN_USE_16BIT) ? SMC91X_USE_16BIT : 0; 2156 lp->cfg.flags |= (SMC_CAN_USE_32BIT) ? SMC91X_USE_32BIT : 0; 2157 lp->cfg.flags |= (nowait) ? SMC91X_NOWAIT : 0; 2158 } 2159 2160 ndev->dma = (unsigned char)-1; 2161 2162 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs"); 2163 if (!res) 2164 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 2165 if (!res) { 2166 ret = -ENODEV; 2167 goto out_free_netdev; 2168 } 2169 2170 2171 if (!request_mem_region(res->start, SMC_IO_EXTENT, CARDNAME)) { 2172 ret = -EBUSY; 2173 goto out_free_netdev; 2174 } 2175 2176 ires = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 2177 if (!ires) { 2178 ret = -ENODEV; 2179 goto out_release_io; 2180 } 2181 2182 ndev->irq = ires->start; 2183 2184 if (ires->flags & IRQF_TRIGGER_MASK) 2185 irq_flags = ires->flags & IRQF_TRIGGER_MASK; 2186 2187 ret = smc_request_attrib(pdev, ndev); 2188 if (ret) 2189 goto out_release_io; 2190#if defined(CONFIG_SA1100_ASSABET) 2191 NCR_0 |= NCR_ENET_OSC_EN; 2192#endif 2193 platform_set_drvdata(pdev, ndev); 2194 ret = smc_enable_device(pdev); 2195 if (ret) 2196 goto out_release_attrib; 2197 2198 addr = ioremap(res->start, SMC_IO_EXTENT); 2199 if (!addr) { 2200 ret = -ENOMEM; 2201 goto out_release_attrib; 2202 } 2203 2204#ifdef CONFIG_ARCH_PXA 2205 { 2206 struct smc_local *lp = netdev_priv(ndev); 2207 lp->device = &pdev->dev; 2208 lp->physaddr = res->start; 2209 } 2210#endif 2211 2212 ret = smc_probe(ndev, addr, irq_flags); 2213 if (ret != 0) 2214 goto out_iounmap; 2215 2216 smc_request_datacs(pdev, ndev); 2217 2218 return 0; 2219 2220 out_iounmap: 2221 platform_set_drvdata(pdev, NULL); 2222 iounmap(addr); 2223 out_release_attrib: 2224 smc_release_attrib(pdev, ndev); 2225 out_release_io: 2226 release_mem_region(res->start, SMC_IO_EXTENT); 2227 out_free_netdev: 2228 free_netdev(ndev); 2229 out: 2230 printk("%s: not found (%d).\n", CARDNAME, ret); 2231 2232 return ret; 2233} 2234 2235static int smc_drv_remove(struct platform_device *pdev) 2236{ 2237 struct net_device *ndev = platform_get_drvdata(pdev); 2238 struct smc_local *lp = netdev_priv(ndev); 2239 struct resource *res; 2240 2241 platform_set_drvdata(pdev, NULL); 2242 2243 unregister_netdev(ndev); 2244 2245 free_irq(ndev->irq, ndev); 2246 2247#ifdef CONFIG_ARCH_PXA 2248 if (ndev->dma != (unsigned char)-1) 2249 pxa_free_dma(ndev->dma); 2250#endif 2251 iounmap(lp->base); 2252 2253 smc_release_datacs(pdev,ndev); 2254 smc_release_attrib(pdev,ndev); 2255 2256 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs"); 2257 if (!res) 2258 platform_get_resource(pdev, IORESOURCE_MEM, 0); 2259 release_mem_region(res->start, SMC_IO_EXTENT); 2260 2261 free_netdev(ndev); 2262 2263 return 0; 2264} 2265 2266static int smc_drv_suspend(struct platform_device *dev, pm_message_t state) 2267{ 2268 struct net_device *ndev = platform_get_drvdata(dev); 2269 2270 if (ndev) { 2271 if (netif_running(ndev)) { 2272 netif_device_detach(ndev); 2273 smc_shutdown(ndev); 2274 smc_phy_powerdown(ndev); 2275 } 2276 } 2277 return 0; 2278} 2279 2280static int smc_drv_resume(struct platform_device *dev) 2281{ 2282 struct net_device *ndev = platform_get_drvdata(dev); 2283 2284 if (ndev) { 2285 struct smc_local *lp = netdev_priv(ndev); 2286 smc_enable_device(dev); 2287 if (netif_running(ndev)) { 2288 smc_reset(ndev); 2289 smc_enable(ndev); 2290 if (lp->phy_type != 0) 2291 smc_phy_configure(&lp->phy_configure); 2292 netif_device_attach(ndev); 2293 } 2294 } 2295 return 0; 2296} 2297 2298static struct platform_driver smc_driver = { 2299 .probe = smc_drv_probe, 2300 .remove = smc_drv_remove, 2301 .suspend = smc_drv_suspend, 2302 .resume = smc_drv_resume, 2303 .driver = { 2304 .name = CARDNAME, 2305 .owner = THIS_MODULE, 2306 }, 2307}; 2308 2309static int __init smc_init(void) 2310{ 2311#ifdef MODULE 2312#ifdef CONFIG_ISA 2313 if (io == -1) 2314 printk(KERN_WARNING 2315 "%s: You shouldn't use auto-probing with insmod!\n", 2316 CARDNAME); 2317#endif 2318#endif 2319 2320 return platform_driver_register(&smc_driver); 2321} 2322 2323static void __exit smc_cleanup(void) 2324{ 2325 platform_driver_unregister(&smc_driver); 2326} 2327 2328module_init(smc_init); 2329module_exit(smc_cleanup);