Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.39-rc7 1661 lines 43 kB view raw
1/* 3c527.c: 3Com Etherlink/MC32 driver for Linux 2.4 and 2.6. 2 * 3 * (c) Copyright 1998 Red Hat Software Inc 4 * Written by Alan Cox. 5 * Further debugging by Carl Drougge. 6 * Initial SMP support by Felipe W Damasio <felipewd@terra.com.br> 7 * Heavily modified by Richard Procter <rnp@paradise.net.nz> 8 * 9 * Based on skeleton.c written 1993-94 by Donald Becker and ne2.c 10 * (for the MCA stuff) written by Wim Dumon. 11 * 12 * Thanks to 3Com for making this possible by providing me with the 13 * documentation. 14 * 15 * This software may be used and distributed according to the terms 16 * of the GNU General Public License, incorporated herein by reference. 17 * 18 */ 19 20#define DRV_NAME "3c527" 21#define DRV_VERSION "0.7-SMP" 22#define DRV_RELDATE "2003/09/21" 23 24static const char *version = 25DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " Richard Procter <rnp@paradise.net.nz>\n"; 26 27/** 28 * DOC: Traps for the unwary 29 * 30 * The diagram (Figure 1-1) and the POS summary disagree with the 31 * "Interrupt Level" section in the manual. 32 * 33 * The manual contradicts itself when describing the minimum number 34 * buffers in the 'configure lists' command. 35 * My card accepts a buffer config of 4/4. 36 * 37 * Setting the SAV BP bit does not save bad packets, but 38 * only enables RX on-card stats collection. 39 * 40 * The documentation in places seems to miss things. In actual fact 41 * I've always eventually found everything is documented, it just 42 * requires careful study. 43 * 44 * DOC: Theory Of Operation 45 * 46 * The 3com 3c527 is a 32bit MCA bus mastering adapter with a large 47 * amount of on board intelligence that housekeeps a somewhat dumber 48 * Intel NIC. For performance we want to keep the transmit queue deep 49 * as the card can transmit packets while fetching others from main 50 * memory by bus master DMA. Transmission and reception are driven by 51 * circular buffer queues. 52 * 53 * The mailboxes can be used for controlling how the card traverses 54 * its buffer rings, but are used only for initial setup in this 55 * implementation. The exec mailbox allows a variety of commands to 56 * be executed. Each command must complete before the next is 57 * executed. Primarily we use the exec mailbox for controlling the 58 * multicast lists. We have to do a certain amount of interesting 59 * hoop jumping as the multicast list changes can occur in interrupt 60 * state when the card has an exec command pending. We defer such 61 * events until the command completion interrupt. 62 * 63 * A copy break scheme (taken from 3c59x.c) is employed whereby 64 * received frames exceeding a configurable length are passed 65 * directly to the higher networking layers without incuring a copy, 66 * in what amounts to a time/space trade-off. 67 * 68 * The card also keeps a large amount of statistical information 69 * on-board. In a perfect world, these could be used safely at no 70 * cost. However, lacking information to the contrary, processing 71 * them without races would involve so much extra complexity as to 72 * make it unworthwhile to do so. In the end, a hybrid SW/HW 73 * implementation was made necessary --- see mc32_update_stats(). 74 * 75 * DOC: Notes 76 * 77 * It should be possible to use two or more cards, but at this stage 78 * only by loading two copies of the same module. 79 * 80 * The on-board 82586 NIC has trouble receiving multiple 81 * back-to-back frames and so is likely to drop packets from fast 82 * senders. 83**/ 84 85#include <linux/module.h> 86 87#include <linux/errno.h> 88#include <linux/netdevice.h> 89#include <linux/etherdevice.h> 90#include <linux/if_ether.h> 91#include <linux/init.h> 92#include <linux/kernel.h> 93#include <linux/types.h> 94#include <linux/fcntl.h> 95#include <linux/interrupt.h> 96#include <linux/mca-legacy.h> 97#include <linux/ioport.h> 98#include <linux/in.h> 99#include <linux/skbuff.h> 100#include <linux/slab.h> 101#include <linux/string.h> 102#include <linux/wait.h> 103#include <linux/ethtool.h> 104#include <linux/completion.h> 105#include <linux/bitops.h> 106#include <linux/semaphore.h> 107 108#include <asm/uaccess.h> 109#include <asm/system.h> 110#include <asm/io.h> 111#include <asm/dma.h> 112 113#include "3c527.h" 114 115MODULE_LICENSE("GPL"); 116 117/* 118 * The name of the card. Is used for messages and in the requests for 119 * io regions, irqs and dma channels 120 */ 121static const char* cardname = DRV_NAME; 122 123/* use 0 for production, 1 for verification, >2 for debug */ 124#ifndef NET_DEBUG 125#define NET_DEBUG 2 126#endif 127 128static unsigned int mc32_debug = NET_DEBUG; 129 130/* The number of low I/O ports used by the ethercard. */ 131#define MC32_IO_EXTENT 8 132 133/* As implemented, values must be a power-of-2 -- 4/8/16/32 */ 134#define TX_RING_LEN 32 /* Typically the card supports 37 */ 135#define RX_RING_LEN 8 /* " " " */ 136 137/* Copy break point, see above for details. 138 * Setting to > 1512 effectively disables this feature. */ 139#define RX_COPYBREAK 200 /* Value from 3c59x.c */ 140 141/* Issue the 82586 workaround command - this is for "busy lans", but 142 * basically means for all lans now days - has a performance (latency) 143 * cost, but best set. */ 144static const int WORKAROUND_82586=1; 145 146/* Pointers to buffers and their on-card records */ 147struct mc32_ring_desc 148{ 149 volatile struct skb_header *p; 150 struct sk_buff *skb; 151}; 152 153/* Information that needs to be kept for each board. */ 154struct mc32_local 155{ 156 int slot; 157 158 u32 base; 159 volatile struct mc32_mailbox *rx_box; 160 volatile struct mc32_mailbox *tx_box; 161 volatile struct mc32_mailbox *exec_box; 162 volatile struct mc32_stats *stats; /* Start of on-card statistics */ 163 u16 tx_chain; /* Transmit list start offset */ 164 u16 rx_chain; /* Receive list start offset */ 165 u16 tx_len; /* Transmit list count */ 166 u16 rx_len; /* Receive list count */ 167 168 u16 xceiver_desired_state; /* HALTED or RUNNING */ 169 u16 cmd_nonblocking; /* Thread is uninterested in command result */ 170 u16 mc_reload_wait; /* A multicast load request is pending */ 171 u32 mc_list_valid; /* True when the mclist is set */ 172 173 struct mc32_ring_desc tx_ring[TX_RING_LEN]; /* Host Transmit ring */ 174 struct mc32_ring_desc rx_ring[RX_RING_LEN]; /* Host Receive ring */ 175 176 atomic_t tx_count; /* buffers left */ 177 atomic_t tx_ring_head; /* index to tx en-queue end */ 178 u16 tx_ring_tail; /* index to tx de-queue end */ 179 180 u16 rx_ring_tail; /* index to rx de-queue end */ 181 182 struct semaphore cmd_mutex; /* Serialises issuing of execute commands */ 183 struct completion execution_cmd; /* Card has completed an execute command */ 184 struct completion xceiver_cmd; /* Card has completed a tx or rx command */ 185}; 186 187/* The station (ethernet) address prefix, used for a sanity check. */ 188#define SA_ADDR0 0x02 189#define SA_ADDR1 0x60 190#define SA_ADDR2 0xAC 191 192struct mca_adapters_t { 193 unsigned int id; 194 char *name; 195}; 196 197static const struct mca_adapters_t mc32_adapters[] = { 198 { 0x0041, "3COM EtherLink MC/32" }, 199 { 0x8EF5, "IBM High Performance Lan Adapter" }, 200 { 0x0000, NULL } 201}; 202 203 204/* Macros for ring index manipulations */ 205static inline u16 next_rx(u16 rx) { return (rx+1)&(RX_RING_LEN-1); }; 206static inline u16 prev_rx(u16 rx) { return (rx-1)&(RX_RING_LEN-1); }; 207 208static inline u16 next_tx(u16 tx) { return (tx+1)&(TX_RING_LEN-1); }; 209 210 211/* Index to functions, as function prototypes. */ 212static int mc32_probe1(struct net_device *dev, int ioaddr); 213static int mc32_command(struct net_device *dev, u16 cmd, void *data, int len); 214static int mc32_open(struct net_device *dev); 215static void mc32_timeout(struct net_device *dev); 216static netdev_tx_t mc32_send_packet(struct sk_buff *skb, 217 struct net_device *dev); 218static irqreturn_t mc32_interrupt(int irq, void *dev_id); 219static int mc32_close(struct net_device *dev); 220static struct net_device_stats *mc32_get_stats(struct net_device *dev); 221static void mc32_set_multicast_list(struct net_device *dev); 222static void mc32_reset_multicast_list(struct net_device *dev); 223static const struct ethtool_ops netdev_ethtool_ops; 224 225static void cleanup_card(struct net_device *dev) 226{ 227 struct mc32_local *lp = netdev_priv(dev); 228 unsigned slot = lp->slot; 229 mca_mark_as_unused(slot); 230 mca_set_adapter_name(slot, NULL); 231 free_irq(dev->irq, dev); 232 release_region(dev->base_addr, MC32_IO_EXTENT); 233} 234 235/** 236 * mc32_probe - Search for supported boards 237 * @unit: interface number to use 238 * 239 * Because MCA bus is a real bus and we can scan for cards we could do a 240 * single scan for all boards here. Right now we use the passed in device 241 * structure and scan for only one board. This needs fixing for modules 242 * in particular. 243 */ 244 245struct net_device *__init mc32_probe(int unit) 246{ 247 struct net_device *dev = alloc_etherdev(sizeof(struct mc32_local)); 248 static int current_mca_slot = -1; 249 int i; 250 int err; 251 252 if (!dev) 253 return ERR_PTR(-ENOMEM); 254 255 if (unit >= 0) 256 sprintf(dev->name, "eth%d", unit); 257 258 /* Do not check any supplied i/o locations. 259 POS registers usually don't fail :) */ 260 261 /* MCA cards have POS registers. 262 Autodetecting MCA cards is extremely simple. 263 Just search for the card. */ 264 265 for(i = 0; (mc32_adapters[i].name != NULL); i++) { 266 current_mca_slot = 267 mca_find_unused_adapter(mc32_adapters[i].id, 0); 268 269 if(current_mca_slot != MCA_NOTFOUND) { 270 if(!mc32_probe1(dev, current_mca_slot)) 271 { 272 mca_set_adapter_name(current_mca_slot, 273 mc32_adapters[i].name); 274 mca_mark_as_used(current_mca_slot); 275 err = register_netdev(dev); 276 if (err) { 277 cleanup_card(dev); 278 free_netdev(dev); 279 dev = ERR_PTR(err); 280 } 281 return dev; 282 } 283 284 } 285 } 286 free_netdev(dev); 287 return ERR_PTR(-ENODEV); 288} 289 290static const struct net_device_ops netdev_ops = { 291 .ndo_open = mc32_open, 292 .ndo_stop = mc32_close, 293 .ndo_start_xmit = mc32_send_packet, 294 .ndo_get_stats = mc32_get_stats, 295 .ndo_set_multicast_list = mc32_set_multicast_list, 296 .ndo_tx_timeout = mc32_timeout, 297 .ndo_change_mtu = eth_change_mtu, 298 .ndo_set_mac_address = eth_mac_addr, 299 .ndo_validate_addr = eth_validate_addr, 300}; 301 302/** 303 * mc32_probe1 - Check a given slot for a board and test the card 304 * @dev: Device structure to fill in 305 * @slot: The MCA bus slot being used by this card 306 * 307 * Decode the slot data and configure the card structures. Having done this we 308 * can reset the card and configure it. The card does a full self test cycle 309 * in firmware so we have to wait for it to return and post us either a 310 * failure case or some addresses we use to find the board internals. 311 */ 312 313static int __init mc32_probe1(struct net_device *dev, int slot) 314{ 315 static unsigned version_printed; 316 int i, err; 317 u8 POS; 318 u32 base; 319 struct mc32_local *lp = netdev_priv(dev); 320 static const u16 mca_io_bases[] = { 321 0x7280,0x7290, 322 0x7680,0x7690, 323 0x7A80,0x7A90, 324 0x7E80,0x7E90 325 }; 326 static const u32 mca_mem_bases[] = { 327 0x00C0000, 328 0x00C4000, 329 0x00C8000, 330 0x00CC000, 331 0x00D0000, 332 0x00D4000, 333 0x00D8000, 334 0x00DC000 335 }; 336 static const char * const failures[] = { 337 "Processor instruction", 338 "Processor data bus", 339 "Processor data bus", 340 "Processor data bus", 341 "Adapter bus", 342 "ROM checksum", 343 "Base RAM", 344 "Extended RAM", 345 "82586 internal loopback", 346 "82586 initialisation failure", 347 "Adapter list configuration error" 348 }; 349 350 /* Time to play MCA games */ 351 352 if (mc32_debug && version_printed++ == 0) 353 pr_debug("%s", version); 354 355 pr_info("%s: %s found in slot %d: ", dev->name, cardname, slot); 356 357 POS = mca_read_stored_pos(slot, 2); 358 359 if(!(POS&1)) 360 { 361 pr_cont("disabled.\n"); 362 return -ENODEV; 363 } 364 365 /* Fill in the 'dev' fields. */ 366 dev->base_addr = mca_io_bases[(POS>>1)&7]; 367 dev->mem_start = mca_mem_bases[(POS>>4)&7]; 368 369 POS = mca_read_stored_pos(slot, 4); 370 if(!(POS&1)) 371 { 372 pr_cont("memory window disabled.\n"); 373 return -ENODEV; 374 } 375 376 POS = mca_read_stored_pos(slot, 5); 377 378 i=(POS>>4)&3; 379 if(i==3) 380 { 381 pr_cont("invalid memory window.\n"); 382 return -ENODEV; 383 } 384 385 i*=16384; 386 i+=16384; 387 388 dev->mem_end=dev->mem_start + i; 389 390 dev->irq = ((POS>>2)&3)+9; 391 392 if(!request_region(dev->base_addr, MC32_IO_EXTENT, cardname)) 393 { 394 pr_cont("io 0x%3lX, which is busy.\n", dev->base_addr); 395 return -EBUSY; 396 } 397 398 pr_cont("io 0x%3lX irq %d mem 0x%lX (%dK)\n", 399 dev->base_addr, dev->irq, dev->mem_start, i/1024); 400 401 402 /* We ought to set the cache line size here.. */ 403 404 405 /* 406 * Go PROM browsing 407 */ 408 409 /* Retrieve and print the ethernet address. */ 410 for (i = 0; i < 6; i++) 411 { 412 mca_write_pos(slot, 6, i+12); 413 mca_write_pos(slot, 7, 0); 414 415 dev->dev_addr[i] = mca_read_pos(slot,3); 416 } 417 418 pr_info("%s: Address %pM ", dev->name, dev->dev_addr); 419 420 mca_write_pos(slot, 6, 0); 421 mca_write_pos(slot, 7, 0); 422 423 POS = mca_read_stored_pos(slot, 4); 424 425 if(POS&2) 426 pr_cont(": BNC port selected.\n"); 427 else 428 pr_cont(": AUI port selected.\n"); 429 430 POS=inb(dev->base_addr+HOST_CTRL); 431 POS|=HOST_CTRL_ATTN|HOST_CTRL_RESET; 432 POS&=~HOST_CTRL_INTE; 433 outb(POS, dev->base_addr+HOST_CTRL); 434 /* Reset adapter */ 435 udelay(100); 436 /* Reset off */ 437 POS&=~(HOST_CTRL_ATTN|HOST_CTRL_RESET); 438 outb(POS, dev->base_addr+HOST_CTRL); 439 440 udelay(300); 441 442 /* 443 * Grab the IRQ 444 */ 445 446 err = request_irq(dev->irq, mc32_interrupt, IRQF_SHARED, DRV_NAME, dev); 447 if (err) { 448 release_region(dev->base_addr, MC32_IO_EXTENT); 449 pr_err("%s: unable to get IRQ %d.\n", DRV_NAME, dev->irq); 450 goto err_exit_ports; 451 } 452 453 memset(lp, 0, sizeof(struct mc32_local)); 454 lp->slot = slot; 455 456 i=0; 457 458 base = inb(dev->base_addr); 459 460 while(base == 0xFF) 461 { 462 i++; 463 if(i == 1000) 464 { 465 pr_err("%s: failed to boot adapter.\n", dev->name); 466 err = -ENODEV; 467 goto err_exit_irq; 468 } 469 udelay(1000); 470 if(inb(dev->base_addr+2)&(1<<5)) 471 base = inb(dev->base_addr); 472 } 473 474 if(base>0) 475 { 476 if(base < 0x0C) 477 pr_err("%s: %s%s.\n", dev->name, failures[base-1], 478 base<0x0A?" test failure":""); 479 else 480 pr_err("%s: unknown failure %d.\n", dev->name, base); 481 err = -ENODEV; 482 goto err_exit_irq; 483 } 484 485 base=0; 486 for(i=0;i<4;i++) 487 { 488 int n=0; 489 490 while(!(inb(dev->base_addr+2)&(1<<5))) 491 { 492 n++; 493 udelay(50); 494 if(n>100) 495 { 496 pr_err("%s: mailbox read fail (%d).\n", dev->name, i); 497 err = -ENODEV; 498 goto err_exit_irq; 499 } 500 } 501 502 base|=(inb(dev->base_addr)<<(8*i)); 503 } 504 505 lp->exec_box=isa_bus_to_virt(dev->mem_start+base); 506 507 base=lp->exec_box->data[1]<<16|lp->exec_box->data[0]; 508 509 lp->base = dev->mem_start+base; 510 511 lp->rx_box=isa_bus_to_virt(lp->base + lp->exec_box->data[2]); 512 lp->tx_box=isa_bus_to_virt(lp->base + lp->exec_box->data[3]); 513 514 lp->stats = isa_bus_to_virt(lp->base + lp->exec_box->data[5]); 515 516 /* 517 * Descriptor chains (card relative) 518 */ 519 520 lp->tx_chain = lp->exec_box->data[8]; /* Transmit list start offset */ 521 lp->rx_chain = lp->exec_box->data[10]; /* Receive list start offset */ 522 lp->tx_len = lp->exec_box->data[9]; /* Transmit list count */ 523 lp->rx_len = lp->exec_box->data[11]; /* Receive list count */ 524 525 sema_init(&lp->cmd_mutex, 0); 526 init_completion(&lp->execution_cmd); 527 init_completion(&lp->xceiver_cmd); 528 529 pr_info("%s: Firmware Rev %d. %d RX buffers, %d TX buffers. Base of 0x%08X.\n", 530 dev->name, lp->exec_box->data[12], lp->rx_len, lp->tx_len, lp->base); 531 532 dev->netdev_ops = &netdev_ops; 533 dev->watchdog_timeo = HZ*5; /* Board does all the work */ 534 dev->ethtool_ops = &netdev_ethtool_ops; 535 536 return 0; 537 538err_exit_irq: 539 free_irq(dev->irq, dev); 540err_exit_ports: 541 release_region(dev->base_addr, MC32_IO_EXTENT); 542 return err; 543} 544 545 546/** 547 * mc32_ready_poll - wait until we can feed it a command 548 * @dev: The device to wait for 549 * 550 * Wait until the card becomes ready to accept a command via the 551 * command register. This tells us nothing about the completion 552 * status of any pending commands and takes very little time at all. 553 */ 554 555static inline void mc32_ready_poll(struct net_device *dev) 556{ 557 int ioaddr = dev->base_addr; 558 while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR)); 559} 560 561 562/** 563 * mc32_command_nowait - send a command non blocking 564 * @dev: The 3c527 to issue the command to 565 * @cmd: The command word to write to the mailbox 566 * @data: A data block if the command expects one 567 * @len: Length of the data block 568 * 569 * Send a command from interrupt state. If there is a command 570 * currently being executed then we return an error of -1. It 571 * simply isn't viable to wait around as commands may be 572 * slow. This can theoretically be starved on SMP, but it's hard 573 * to see a realistic situation. We do not wait for the command 574 * to complete --- we rely on the interrupt handler to tidy up 575 * after us. 576 */ 577 578static int mc32_command_nowait(struct net_device *dev, u16 cmd, void *data, int len) 579{ 580 struct mc32_local *lp = netdev_priv(dev); 581 int ioaddr = dev->base_addr; 582 int ret = -1; 583 584 if (down_trylock(&lp->cmd_mutex) == 0) 585 { 586 lp->cmd_nonblocking=1; 587 lp->exec_box->mbox=0; 588 lp->exec_box->mbox=cmd; 589 memcpy((void *)lp->exec_box->data, data, len); 590 barrier(); /* the memcpy forgot the volatile so be sure */ 591 592 /* Send the command */ 593 mc32_ready_poll(dev); 594 outb(1<<6, ioaddr+HOST_CMD); 595 596 ret = 0; 597 598 /* Interrupt handler will signal mutex on completion */ 599 } 600 601 return ret; 602} 603 604 605/** 606 * mc32_command - send a command and sleep until completion 607 * @dev: The 3c527 card to issue the command to 608 * @cmd: The command word to write to the mailbox 609 * @data: A data block if the command expects one 610 * @len: Length of the data block 611 * 612 * Sends exec commands in a user context. This permits us to wait around 613 * for the replies and also to wait for the command buffer to complete 614 * from a previous command before we execute our command. After our 615 * command completes we will attempt any pending multicast reload 616 * we blocked off by hogging the exec buffer. 617 * 618 * You feed the card a command, you wait, it interrupts you get a 619 * reply. All well and good. The complication arises because you use 620 * commands for filter list changes which come in at bh level from things 621 * like IPV6 group stuff. 622 */ 623 624static int mc32_command(struct net_device *dev, u16 cmd, void *data, int len) 625{ 626 struct mc32_local *lp = netdev_priv(dev); 627 int ioaddr = dev->base_addr; 628 int ret = 0; 629 630 down(&lp->cmd_mutex); 631 632 /* 633 * My Turn 634 */ 635 636 lp->cmd_nonblocking=0; 637 lp->exec_box->mbox=0; 638 lp->exec_box->mbox=cmd; 639 memcpy((void *)lp->exec_box->data, data, len); 640 barrier(); /* the memcpy forgot the volatile so be sure */ 641 642 mc32_ready_poll(dev); 643 outb(1<<6, ioaddr+HOST_CMD); 644 645 wait_for_completion(&lp->execution_cmd); 646 647 if(lp->exec_box->mbox&(1<<13)) 648 ret = -1; 649 650 up(&lp->cmd_mutex); 651 652 /* 653 * A multicast set got blocked - try it now 654 */ 655 656 if(lp->mc_reload_wait) 657 { 658 mc32_reset_multicast_list(dev); 659 } 660 661 return ret; 662} 663 664 665/** 666 * mc32_start_transceiver - tell board to restart tx/rx 667 * @dev: The 3c527 card to issue the command to 668 * 669 * This may be called from the interrupt state, where it is used 670 * to restart the rx ring if the card runs out of rx buffers. 671 * 672 * We must first check if it's ok to (re)start the transceiver. See 673 * mc32_close for details. 674 */ 675 676static void mc32_start_transceiver(struct net_device *dev) { 677 678 struct mc32_local *lp = netdev_priv(dev); 679 int ioaddr = dev->base_addr; 680 681 /* Ignore RX overflow on device closure */ 682 if (lp->xceiver_desired_state==HALTED) 683 return; 684 685 /* Give the card the offset to the post-EOL-bit RX descriptor */ 686 mc32_ready_poll(dev); 687 lp->rx_box->mbox=0; 688 lp->rx_box->data[0]=lp->rx_ring[prev_rx(lp->rx_ring_tail)].p->next; 689 outb(HOST_CMD_START_RX, ioaddr+HOST_CMD); 690 691 mc32_ready_poll(dev); 692 lp->tx_box->mbox=0; 693 outb(HOST_CMD_RESTRT_TX, ioaddr+HOST_CMD); /* card ignores this on RX restart */ 694 695 /* We are not interrupted on start completion */ 696} 697 698 699/** 700 * mc32_halt_transceiver - tell board to stop tx/rx 701 * @dev: The 3c527 card to issue the command to 702 * 703 * We issue the commands to halt the card's transceiver. In fact, 704 * after some experimenting we now simply tell the card to 705 * suspend. When issuing aborts occasionally odd things happened. 706 * 707 * We then sleep until the card has notified us that both rx and 708 * tx have been suspended. 709 */ 710 711static void mc32_halt_transceiver(struct net_device *dev) 712{ 713 struct mc32_local *lp = netdev_priv(dev); 714 int ioaddr = dev->base_addr; 715 716 mc32_ready_poll(dev); 717 lp->rx_box->mbox=0; 718 outb(HOST_CMD_SUSPND_RX, ioaddr+HOST_CMD); 719 wait_for_completion(&lp->xceiver_cmd); 720 721 mc32_ready_poll(dev); 722 lp->tx_box->mbox=0; 723 outb(HOST_CMD_SUSPND_TX, ioaddr+HOST_CMD); 724 wait_for_completion(&lp->xceiver_cmd); 725} 726 727 728/** 729 * mc32_load_rx_ring - load the ring of receive buffers 730 * @dev: 3c527 to build the ring for 731 * 732 * This initialises the on-card and driver datastructures to 733 * the point where mc32_start_transceiver() can be called. 734 * 735 * The card sets up the receive ring for us. We are required to use the 736 * ring it provides, although the size of the ring is configurable. 737 * 738 * We allocate an sk_buff for each ring entry in turn and 739 * initialise its house-keeping info. At the same time, we read 740 * each 'next' pointer in our rx_ring array. This reduces slow 741 * shared-memory reads and makes it easy to access predecessor 742 * descriptors. 743 * 744 * We then set the end-of-list bit for the last entry so that the 745 * card will know when it has run out of buffers. 746 */ 747 748static int mc32_load_rx_ring(struct net_device *dev) 749{ 750 struct mc32_local *lp = netdev_priv(dev); 751 int i; 752 u16 rx_base; 753 volatile struct skb_header *p; 754 755 rx_base=lp->rx_chain; 756 757 for(i=0; i<RX_RING_LEN; i++) { 758 lp->rx_ring[i].skb=alloc_skb(1532, GFP_KERNEL); 759 if (lp->rx_ring[i].skb==NULL) { 760 for (;i>=0;i--) 761 kfree_skb(lp->rx_ring[i].skb); 762 return -ENOBUFS; 763 } 764 skb_reserve(lp->rx_ring[i].skb, 18); 765 766 p=isa_bus_to_virt(lp->base+rx_base); 767 768 p->control=0; 769 p->data=isa_virt_to_bus(lp->rx_ring[i].skb->data); 770 p->status=0; 771 p->length=1532; 772 773 lp->rx_ring[i].p=p; 774 rx_base=p->next; 775 } 776 777 lp->rx_ring[i-1].p->control |= CONTROL_EOL; 778 779 lp->rx_ring_tail=0; 780 781 return 0; 782} 783 784 785/** 786 * mc32_flush_rx_ring - free the ring of receive buffers 787 * @lp: Local data of 3c527 to flush the rx ring of 788 * 789 * Free the buffer for each ring slot. This may be called 790 * before mc32_load_rx_ring(), eg. on error in mc32_open(). 791 * Requires rx skb pointers to point to a valid skb, or NULL. 792 */ 793 794static void mc32_flush_rx_ring(struct net_device *dev) 795{ 796 struct mc32_local *lp = netdev_priv(dev); 797 int i; 798 799 for(i=0; i < RX_RING_LEN; i++) 800 { 801 if (lp->rx_ring[i].skb) { 802 dev_kfree_skb(lp->rx_ring[i].skb); 803 lp->rx_ring[i].skb = NULL; 804 } 805 lp->rx_ring[i].p=NULL; 806 } 807} 808 809 810/** 811 * mc32_load_tx_ring - load transmit ring 812 * @dev: The 3c527 card to issue the command to 813 * 814 * This sets up the host transmit data-structures. 815 * 816 * First, we obtain from the card it's current position in the tx 817 * ring, so that we will know where to begin transmitting 818 * packets. 819 * 820 * Then, we read the 'next' pointers from the on-card tx ring into 821 * our tx_ring array to reduce slow shared-mem reads. Finally, we 822 * intitalise the tx house keeping variables. 823 * 824 */ 825 826static void mc32_load_tx_ring(struct net_device *dev) 827{ 828 struct mc32_local *lp = netdev_priv(dev); 829 volatile struct skb_header *p; 830 int i; 831 u16 tx_base; 832 833 tx_base=lp->tx_box->data[0]; 834 835 for(i=0 ; i<TX_RING_LEN ; i++) 836 { 837 p=isa_bus_to_virt(lp->base+tx_base); 838 lp->tx_ring[i].p=p; 839 lp->tx_ring[i].skb=NULL; 840 841 tx_base=p->next; 842 } 843 844 /* -1 so that tx_ring_head cannot "lap" tx_ring_tail */ 845 /* see mc32_tx_ring */ 846 847 atomic_set(&lp->tx_count, TX_RING_LEN-1); 848 atomic_set(&lp->tx_ring_head, 0); 849 lp->tx_ring_tail=0; 850} 851 852 853/** 854 * mc32_flush_tx_ring - free transmit ring 855 * @lp: Local data of 3c527 to flush the tx ring of 856 * 857 * If the ring is non-empty, zip over the it, freeing any 858 * allocated skb_buffs. The tx ring house-keeping variables are 859 * then reset. Requires rx skb pointers to point to a valid skb, 860 * or NULL. 861 */ 862 863static void mc32_flush_tx_ring(struct net_device *dev) 864{ 865 struct mc32_local *lp = netdev_priv(dev); 866 int i; 867 868 for (i=0; i < TX_RING_LEN; i++) 869 { 870 if (lp->tx_ring[i].skb) 871 { 872 dev_kfree_skb(lp->tx_ring[i].skb); 873 lp->tx_ring[i].skb = NULL; 874 } 875 } 876 877 atomic_set(&lp->tx_count, 0); 878 atomic_set(&lp->tx_ring_head, 0); 879 lp->tx_ring_tail=0; 880} 881 882 883/** 884 * mc32_open - handle 'up' of card 885 * @dev: device to open 886 * 887 * The user is trying to bring the card into ready state. This requires 888 * a brief dialogue with the card. Firstly we enable interrupts and then 889 * 'indications'. Without these enabled the card doesn't bother telling 890 * us what it has done. This had me puzzled for a week. 891 * 892 * We configure the number of card descriptors, then load the network 893 * address and multicast filters. Turn on the workaround mode. This 894 * works around a bug in the 82586 - it asks the firmware to do 895 * so. It has a performance (latency) hit but is needed on busy 896 * [read most] lans. We load the ring with buffers then we kick it 897 * all off. 898 */ 899 900static int mc32_open(struct net_device *dev) 901{ 902 int ioaddr = dev->base_addr; 903 struct mc32_local *lp = netdev_priv(dev); 904 u8 one=1; 905 u8 regs; 906 u16 descnumbuffs[2] = {TX_RING_LEN, RX_RING_LEN}; 907 908 /* 909 * Interrupts enabled 910 */ 911 912 regs=inb(ioaddr+HOST_CTRL); 913 regs|=HOST_CTRL_INTE; 914 outb(regs, ioaddr+HOST_CTRL); 915 916 /* 917 * Allow ourselves to issue commands 918 */ 919 920 up(&lp->cmd_mutex); 921 922 923 /* 924 * Send the indications on command 925 */ 926 927 mc32_command(dev, 4, &one, 2); 928 929 /* 930 * Poke it to make sure it's really dead. 931 */ 932 933 mc32_halt_transceiver(dev); 934 mc32_flush_tx_ring(dev); 935 936 /* 937 * Ask card to set up on-card descriptors to our spec 938 */ 939 940 if(mc32_command(dev, 8, descnumbuffs, 4)) { 941 pr_info("%s: %s rejected our buffer configuration!\n", 942 dev->name, cardname); 943 mc32_close(dev); 944 return -ENOBUFS; 945 } 946 947 /* Report new configuration */ 948 mc32_command(dev, 6, NULL, 0); 949 950 lp->tx_chain = lp->exec_box->data[8]; /* Transmit list start offset */ 951 lp->rx_chain = lp->exec_box->data[10]; /* Receive list start offset */ 952 lp->tx_len = lp->exec_box->data[9]; /* Transmit list count */ 953 lp->rx_len = lp->exec_box->data[11]; /* Receive list count */ 954 955 /* Set Network Address */ 956 mc32_command(dev, 1, dev->dev_addr, 6); 957 958 /* Set the filters */ 959 mc32_set_multicast_list(dev); 960 961 if (WORKAROUND_82586) { 962 u16 zero_word=0; 963 mc32_command(dev, 0x0D, &zero_word, 2); /* 82586 bug workaround on */ 964 } 965 966 mc32_load_tx_ring(dev); 967 968 if(mc32_load_rx_ring(dev)) 969 { 970 mc32_close(dev); 971 return -ENOBUFS; 972 } 973 974 lp->xceiver_desired_state = RUNNING; 975 976 /* And finally, set the ball rolling... */ 977 mc32_start_transceiver(dev); 978 979 netif_start_queue(dev); 980 981 return 0; 982} 983 984 985/** 986 * mc32_timeout - handle a timeout from the network layer 987 * @dev: 3c527 that timed out 988 * 989 * Handle a timeout on transmit from the 3c527. This normally means 990 * bad things as the hardware handles cable timeouts and mess for 991 * us. 992 * 993 */ 994 995static void mc32_timeout(struct net_device *dev) 996{ 997 pr_warning("%s: transmit timed out?\n", dev->name); 998 /* Try to restart the adaptor. */ 999 netif_wake_queue(dev); 1000} 1001 1002 1003/** 1004 * mc32_send_packet - queue a frame for transmit 1005 * @skb: buffer to transmit 1006 * @dev: 3c527 to send it out of 1007 * 1008 * Transmit a buffer. This normally means throwing the buffer onto 1009 * the transmit queue as the queue is quite large. If the queue is 1010 * full then we set tx_busy and return. Once the interrupt handler 1011 * gets messages telling it to reclaim transmit queue entries, we will 1012 * clear tx_busy and the kernel will start calling this again. 1013 * 1014 * We do not disable interrupts or acquire any locks; this can 1015 * run concurrently with mc32_tx_ring(), and the function itself 1016 * is serialised at a higher layer. However, similarly for the 1017 * card itself, we must ensure that we update tx_ring_head only 1018 * after we've established a valid packet on the tx ring (and 1019 * before we let the card "see" it, to prevent it racing with the 1020 * irq handler). 1021 * 1022 */ 1023 1024static netdev_tx_t mc32_send_packet(struct sk_buff *skb, 1025 struct net_device *dev) 1026{ 1027 struct mc32_local *lp = netdev_priv(dev); 1028 u32 head = atomic_read(&lp->tx_ring_head); 1029 1030 volatile struct skb_header *p, *np; 1031 1032 netif_stop_queue(dev); 1033 1034 if(atomic_read(&lp->tx_count)==0) { 1035 return NETDEV_TX_BUSY; 1036 } 1037 1038 if (skb_padto(skb, ETH_ZLEN)) { 1039 netif_wake_queue(dev); 1040 return NETDEV_TX_OK; 1041 } 1042 1043 atomic_dec(&lp->tx_count); 1044 1045 /* P is the last sending/sent buffer as a pointer */ 1046 p=lp->tx_ring[head].p; 1047 1048 head = next_tx(head); 1049 1050 /* NP is the buffer we will be loading */ 1051 np=lp->tx_ring[head].p; 1052 1053 /* We will need this to flush the buffer out */ 1054 lp->tx_ring[head].skb=skb; 1055 1056 np->length = unlikely(skb->len < ETH_ZLEN) ? ETH_ZLEN : skb->len; 1057 np->data = isa_virt_to_bus(skb->data); 1058 np->status = 0; 1059 np->control = CONTROL_EOP | CONTROL_EOL; 1060 wmb(); 1061 1062 /* 1063 * The new frame has been setup; we can now 1064 * let the interrupt handler and card "see" it 1065 */ 1066 1067 atomic_set(&lp->tx_ring_head, head); 1068 p->control &= ~CONTROL_EOL; 1069 1070 netif_wake_queue(dev); 1071 return NETDEV_TX_OK; 1072} 1073 1074 1075/** 1076 * mc32_update_stats - pull off the on board statistics 1077 * @dev: 3c527 to service 1078 * 1079 * 1080 * Query and reset the on-card stats. There's the small possibility 1081 * of a race here, which would result in an underestimation of 1082 * actual errors. As such, we'd prefer to keep all our stats 1083 * collection in software. As a rule, we do. However it can't be 1084 * used for rx errors and collisions as, by default, the card discards 1085 * bad rx packets. 1086 * 1087 * Setting the SAV BP in the rx filter command supposedly 1088 * stops this behaviour. However, testing shows that it only seems to 1089 * enable the collation of on-card rx statistics --- the driver 1090 * never sees an RX descriptor with an error status set. 1091 * 1092 */ 1093 1094static void mc32_update_stats(struct net_device *dev) 1095{ 1096 struct mc32_local *lp = netdev_priv(dev); 1097 volatile struct mc32_stats *st = lp->stats; 1098 1099 u32 rx_errors=0; 1100 1101 rx_errors+=dev->stats.rx_crc_errors +=st->rx_crc_errors; 1102 st->rx_crc_errors=0; 1103 rx_errors+=dev->stats.rx_fifo_errors +=st->rx_overrun_errors; 1104 st->rx_overrun_errors=0; 1105 rx_errors+=dev->stats.rx_frame_errors +=st->rx_alignment_errors; 1106 st->rx_alignment_errors=0; 1107 rx_errors+=dev->stats.rx_length_errors+=st->rx_tooshort_errors; 1108 st->rx_tooshort_errors=0; 1109 rx_errors+=dev->stats.rx_missed_errors+=st->rx_outofresource_errors; 1110 st->rx_outofresource_errors=0; 1111 dev->stats.rx_errors=rx_errors; 1112 1113 /* Number of packets which saw one collision */ 1114 dev->stats.collisions+=st->dataC[10]; 1115 st->dataC[10]=0; 1116 1117 /* Number of packets which saw 2--15 collisions */ 1118 dev->stats.collisions+=st->dataC[11]; 1119 st->dataC[11]=0; 1120} 1121 1122 1123/** 1124 * mc32_rx_ring - process the receive ring 1125 * @dev: 3c527 that needs its receive ring processing 1126 * 1127 * 1128 * We have received one or more indications from the card that a 1129 * receive has completed. The buffer ring thus contains dirty 1130 * entries. We walk the ring by iterating over the circular rx_ring 1131 * array, starting at the next dirty buffer (which happens to be the 1132 * one we finished up at last time around). 1133 * 1134 * For each completed packet, we will either copy it and pass it up 1135 * the stack or, if the packet is near MTU sized, we allocate 1136 * another buffer and flip the old one up the stack. 1137 * 1138 * We must succeed in keeping a buffer on the ring. If necessary we 1139 * will toss a received packet rather than lose a ring entry. Once 1140 * the first uncompleted descriptor is found, we move the 1141 * End-Of-List bit to include the buffers just processed. 1142 * 1143 */ 1144 1145static void mc32_rx_ring(struct net_device *dev) 1146{ 1147 struct mc32_local *lp = netdev_priv(dev); 1148 volatile struct skb_header *p; 1149 u16 rx_ring_tail; 1150 u16 rx_old_tail; 1151 int x=0; 1152 1153 rx_old_tail = rx_ring_tail = lp->rx_ring_tail; 1154 1155 do 1156 { 1157 p=lp->rx_ring[rx_ring_tail].p; 1158 1159 if(!(p->status & (1<<7))) { /* Not COMPLETED */ 1160 break; 1161 } 1162 if(p->status & (1<<6)) /* COMPLETED_OK */ 1163 { 1164 1165 u16 length=p->length; 1166 struct sk_buff *skb; 1167 struct sk_buff *newskb; 1168 1169 /* Try to save time by avoiding a copy on big frames */ 1170 1171 if ((length > RX_COPYBREAK) && 1172 ((newskb=dev_alloc_skb(1532)) != NULL)) 1173 { 1174 skb=lp->rx_ring[rx_ring_tail].skb; 1175 skb_put(skb, length); 1176 1177 skb_reserve(newskb,18); 1178 lp->rx_ring[rx_ring_tail].skb=newskb; 1179 p->data=isa_virt_to_bus(newskb->data); 1180 } 1181 else 1182 { 1183 skb=dev_alloc_skb(length+2); 1184 1185 if(skb==NULL) { 1186 dev->stats.rx_dropped++; 1187 goto dropped; 1188 } 1189 1190 skb_reserve(skb,2); 1191 memcpy(skb_put(skb, length), 1192 lp->rx_ring[rx_ring_tail].skb->data, length); 1193 } 1194 1195 skb->protocol=eth_type_trans(skb,dev); 1196 dev->stats.rx_packets++; 1197 dev->stats.rx_bytes += length; 1198 netif_rx(skb); 1199 } 1200 1201 dropped: 1202 p->length = 1532; 1203 p->status = 0; 1204 1205 rx_ring_tail=next_rx(rx_ring_tail); 1206 } 1207 while(x++<48); 1208 1209 /* If there was actually a frame to be processed, place the EOL bit */ 1210 /* at the descriptor prior to the one to be filled next */ 1211 1212 if (rx_ring_tail != rx_old_tail) 1213 { 1214 lp->rx_ring[prev_rx(rx_ring_tail)].p->control |= CONTROL_EOL; 1215 lp->rx_ring[prev_rx(rx_old_tail)].p->control &= ~CONTROL_EOL; 1216 1217 lp->rx_ring_tail=rx_ring_tail; 1218 } 1219} 1220 1221 1222/** 1223 * mc32_tx_ring - process completed transmits 1224 * @dev: 3c527 that needs its transmit ring processing 1225 * 1226 * 1227 * This operates in a similar fashion to mc32_rx_ring. We iterate 1228 * over the transmit ring. For each descriptor which has been 1229 * processed by the card, we free its associated buffer and note 1230 * any errors. This continues until the transmit ring is emptied 1231 * or we reach a descriptor that hasn't yet been processed by the 1232 * card. 1233 * 1234 */ 1235 1236static void mc32_tx_ring(struct net_device *dev) 1237{ 1238 struct mc32_local *lp = netdev_priv(dev); 1239 volatile struct skb_header *np; 1240 1241 /* 1242 * We rely on head==tail to mean 'queue empty'. 1243 * This is why lp->tx_count=TX_RING_LEN-1: in order to prevent 1244 * tx_ring_head wrapping to tail and confusing a 'queue empty' 1245 * condition with 'queue full' 1246 */ 1247 1248 while (lp->tx_ring_tail != atomic_read(&lp->tx_ring_head)) 1249 { 1250 u16 t; 1251 1252 t=next_tx(lp->tx_ring_tail); 1253 np=lp->tx_ring[t].p; 1254 1255 if(!(np->status & (1<<7))) 1256 { 1257 /* Not COMPLETED */ 1258 break; 1259 } 1260 dev->stats.tx_packets++; 1261 if(!(np->status & (1<<6))) /* Not COMPLETED_OK */ 1262 { 1263 dev->stats.tx_errors++; 1264 1265 switch(np->status&0x0F) 1266 { 1267 case 1: 1268 dev->stats.tx_aborted_errors++; 1269 break; /* Max collisions */ 1270 case 2: 1271 dev->stats.tx_fifo_errors++; 1272 break; 1273 case 3: 1274 dev->stats.tx_carrier_errors++; 1275 break; 1276 case 4: 1277 dev->stats.tx_window_errors++; 1278 break; /* CTS Lost */ 1279 case 5: 1280 dev->stats.tx_aborted_errors++; 1281 break; /* Transmit timeout */ 1282 } 1283 } 1284 /* Packets are sent in order - this is 1285 basically a FIFO queue of buffers matching 1286 the card ring */ 1287 dev->stats.tx_bytes+=lp->tx_ring[t].skb->len; 1288 dev_kfree_skb_irq(lp->tx_ring[t].skb); 1289 lp->tx_ring[t].skb=NULL; 1290 atomic_inc(&lp->tx_count); 1291 netif_wake_queue(dev); 1292 1293 lp->tx_ring_tail=t; 1294 } 1295 1296} 1297 1298 1299/** 1300 * mc32_interrupt - handle an interrupt from a 3c527 1301 * @irq: Interrupt number 1302 * @dev_id: 3c527 that requires servicing 1303 * @regs: Registers (unused) 1304 * 1305 * 1306 * An interrupt is raised whenever the 3c527 writes to the command 1307 * register. This register contains the message it wishes to send us 1308 * packed into a single byte field. We keep reading status entries 1309 * until we have processed all the control items, but simply count 1310 * transmit and receive reports. When all reports are in we empty the 1311 * transceiver rings as appropriate. This saves the overhead of 1312 * multiple command requests. 1313 * 1314 * Because MCA is level-triggered, we shouldn't miss indications. 1315 * Therefore, we needn't ask the card to suspend interrupts within 1316 * this handler. The card receives an implicit acknowledgment of the 1317 * current interrupt when we read the command register. 1318 * 1319 */ 1320 1321static irqreturn_t mc32_interrupt(int irq, void *dev_id) 1322{ 1323 struct net_device *dev = dev_id; 1324 struct mc32_local *lp; 1325 int ioaddr, status, boguscount = 0; 1326 int rx_event = 0; 1327 int tx_event = 0; 1328 1329 ioaddr = dev->base_addr; 1330 lp = netdev_priv(dev); 1331 1332 /* See whats cooking */ 1333 1334 while((inb(ioaddr+HOST_STATUS)&HOST_STATUS_CWR) && boguscount++<2000) 1335 { 1336 status=inb(ioaddr+HOST_CMD); 1337 1338 pr_debug("Status TX%d RX%d EX%d OV%d BC%d\n", 1339 (status&7), (status>>3)&7, (status>>6)&1, 1340 (status>>7)&1, boguscount); 1341 1342 switch(status&7) 1343 { 1344 case 0: 1345 break; 1346 case 6: /* TX fail */ 1347 case 2: /* TX ok */ 1348 tx_event = 1; 1349 break; 1350 case 3: /* Halt */ 1351 case 4: /* Abort */ 1352 complete(&lp->xceiver_cmd); 1353 break; 1354 default: 1355 pr_notice("%s: strange tx ack %d\n", dev->name, status&7); 1356 } 1357 status>>=3; 1358 switch(status&7) 1359 { 1360 case 0: 1361 break; 1362 case 2: /* RX */ 1363 rx_event=1; 1364 break; 1365 case 3: /* Halt */ 1366 case 4: /* Abort */ 1367 complete(&lp->xceiver_cmd); 1368 break; 1369 case 6: 1370 /* Out of RX buffers stat */ 1371 /* Must restart rx */ 1372 dev->stats.rx_dropped++; 1373 mc32_rx_ring(dev); 1374 mc32_start_transceiver(dev); 1375 break; 1376 default: 1377 pr_notice("%s: strange rx ack %d\n", 1378 dev->name, status&7); 1379 } 1380 status>>=3; 1381 if(status&1) 1382 { 1383 /* 1384 * No thread is waiting: we need to tidy 1385 * up ourself. 1386 */ 1387 1388 if (lp->cmd_nonblocking) { 1389 up(&lp->cmd_mutex); 1390 if (lp->mc_reload_wait) 1391 mc32_reset_multicast_list(dev); 1392 } 1393 else complete(&lp->execution_cmd); 1394 } 1395 if(status&2) 1396 { 1397 /* 1398 * We get interrupted once per 1399 * counter that is about to overflow. 1400 */ 1401 1402 mc32_update_stats(dev); 1403 } 1404 } 1405 1406 1407 /* 1408 * Process the transmit and receive rings 1409 */ 1410 1411 if(tx_event) 1412 mc32_tx_ring(dev); 1413 1414 if(rx_event) 1415 mc32_rx_ring(dev); 1416 1417 return IRQ_HANDLED; 1418} 1419 1420 1421/** 1422 * mc32_close - user configuring the 3c527 down 1423 * @dev: 3c527 card to shut down 1424 * 1425 * The 3c527 is a bus mastering device. We must be careful how we 1426 * shut it down. It may also be running shared interrupt so we have 1427 * to be sure to silence it properly 1428 * 1429 * We indicate that the card is closing to the rest of the 1430 * driver. Otherwise, it is possible that the card may run out 1431 * of receive buffers and restart the transceiver while we're 1432 * trying to close it. 1433 * 1434 * We abort any receive and transmits going on and then wait until 1435 * any pending exec commands have completed in other code threads. 1436 * In theory we can't get here while that is true, in practice I am 1437 * paranoid 1438 * 1439 * We turn off the interrupt enable for the board to be sure it can't 1440 * intefere with other devices. 1441 */ 1442 1443static int mc32_close(struct net_device *dev) 1444{ 1445 struct mc32_local *lp = netdev_priv(dev); 1446 int ioaddr = dev->base_addr; 1447 1448 u8 regs; 1449 u16 one=1; 1450 1451 lp->xceiver_desired_state = HALTED; 1452 netif_stop_queue(dev); 1453 1454 /* 1455 * Send the indications on command (handy debug check) 1456 */ 1457 1458 mc32_command(dev, 4, &one, 2); 1459 1460 /* Shut down the transceiver */ 1461 1462 mc32_halt_transceiver(dev); 1463 1464 /* Ensure we issue no more commands beyond this point */ 1465 1466 down(&lp->cmd_mutex); 1467 1468 /* Ok the card is now stopping */ 1469 1470 regs=inb(ioaddr+HOST_CTRL); 1471 regs&=~HOST_CTRL_INTE; 1472 outb(regs, ioaddr+HOST_CTRL); 1473 1474 mc32_flush_rx_ring(dev); 1475 mc32_flush_tx_ring(dev); 1476 1477 mc32_update_stats(dev); 1478 1479 return 0; 1480} 1481 1482 1483/** 1484 * mc32_get_stats - hand back stats to network layer 1485 * @dev: The 3c527 card to handle 1486 * 1487 * We've collected all the stats we can in software already. Now 1488 * it's time to update those kept on-card and return the lot. 1489 * 1490 */ 1491 1492static struct net_device_stats *mc32_get_stats(struct net_device *dev) 1493{ 1494 mc32_update_stats(dev); 1495 return &dev->stats; 1496} 1497 1498 1499/** 1500 * do_mc32_set_multicast_list - attempt to update multicasts 1501 * @dev: 3c527 device to load the list on 1502 * @retry: indicates this is not the first call. 1503 * 1504 * 1505 * Actually set or clear the multicast filter for this adaptor. The 1506 * locking issues are handled by this routine. We have to track 1507 * state as it may take multiple calls to get the command sequence 1508 * completed. We just keep trying to schedule the loads until we 1509 * manage to process them all. 1510 * 1511 * num_addrs == -1 Promiscuous mode, receive all packets 1512 * 1513 * num_addrs == 0 Normal mode, clear multicast list 1514 * 1515 * num_addrs > 0 Multicast mode, receive normal and MC packets, 1516 * and do best-effort filtering. 1517 * 1518 * See mc32_update_stats() regards setting the SAV BP bit. 1519 * 1520 */ 1521 1522static void do_mc32_set_multicast_list(struct net_device *dev, int retry) 1523{ 1524 struct mc32_local *lp = netdev_priv(dev); 1525 u16 filt = (1<<2); /* Save Bad Packets, for stats purposes */ 1526 1527 if ((dev->flags&IFF_PROMISC) || 1528 (dev->flags&IFF_ALLMULTI) || 1529 netdev_mc_count(dev) > 10) 1530 /* Enable promiscuous mode */ 1531 filt |= 1; 1532 else if (!netdev_mc_empty(dev)) 1533 { 1534 unsigned char block[62]; 1535 unsigned char *bp; 1536 struct netdev_hw_addr *ha; 1537 1538 if(retry==0) 1539 lp->mc_list_valid = 0; 1540 if(!lp->mc_list_valid) 1541 { 1542 block[1]=0; 1543 block[0]=netdev_mc_count(dev); 1544 bp=block+2; 1545 1546 netdev_for_each_mc_addr(ha, dev) { 1547 memcpy(bp, ha->addr, 6); 1548 bp+=6; 1549 } 1550 if(mc32_command_nowait(dev, 2, block, 1551 2+6*netdev_mc_count(dev))==-1) 1552 { 1553 lp->mc_reload_wait = 1; 1554 return; 1555 } 1556 lp->mc_list_valid=1; 1557 } 1558 } 1559 1560 if(mc32_command_nowait(dev, 0, &filt, 2)==-1) 1561 { 1562 lp->mc_reload_wait = 1; 1563 } 1564 else { 1565 lp->mc_reload_wait = 0; 1566 } 1567} 1568 1569 1570/** 1571 * mc32_set_multicast_list - queue multicast list update 1572 * @dev: The 3c527 to use 1573 * 1574 * Commence loading the multicast list. This is called when the kernel 1575 * changes the lists. It will override any pending list we are trying to 1576 * load. 1577 */ 1578 1579static void mc32_set_multicast_list(struct net_device *dev) 1580{ 1581 do_mc32_set_multicast_list(dev,0); 1582} 1583 1584 1585/** 1586 * mc32_reset_multicast_list - reset multicast list 1587 * @dev: The 3c527 to use 1588 * 1589 * Attempt the next step in loading the multicast lists. If this attempt 1590 * fails to complete then it will be scheduled and this function called 1591 * again later from elsewhere. 1592 */ 1593 1594static void mc32_reset_multicast_list(struct net_device *dev) 1595{ 1596 do_mc32_set_multicast_list(dev,1); 1597} 1598 1599static void netdev_get_drvinfo(struct net_device *dev, 1600 struct ethtool_drvinfo *info) 1601{ 1602 strcpy(info->driver, DRV_NAME); 1603 strcpy(info->version, DRV_VERSION); 1604 sprintf(info->bus_info, "MCA 0x%lx", dev->base_addr); 1605} 1606 1607static u32 netdev_get_msglevel(struct net_device *dev) 1608{ 1609 return mc32_debug; 1610} 1611 1612static void netdev_set_msglevel(struct net_device *dev, u32 level) 1613{ 1614 mc32_debug = level; 1615} 1616 1617static const struct ethtool_ops netdev_ethtool_ops = { 1618 .get_drvinfo = netdev_get_drvinfo, 1619 .get_msglevel = netdev_get_msglevel, 1620 .set_msglevel = netdev_set_msglevel, 1621}; 1622 1623#ifdef MODULE 1624 1625static struct net_device *this_device; 1626 1627/** 1628 * init_module - entry point 1629 * 1630 * Probe and locate a 3c527 card. This really should probe and locate 1631 * all the 3c527 cards in the machine not just one of them. Yes you can 1632 * insmod multiple modules for now but it's a hack. 1633 */ 1634 1635int __init init_module(void) 1636{ 1637 this_device = mc32_probe(-1); 1638 if (IS_ERR(this_device)) 1639 return PTR_ERR(this_device); 1640 return 0; 1641} 1642 1643/** 1644 * cleanup_module - free resources for an unload 1645 * 1646 * Unloading time. We release the MCA bus resources and the interrupt 1647 * at which point everything is ready to unload. The card must be stopped 1648 * at this point or we would not have been called. When we unload we 1649 * leave the card stopped but not totally shut down. When the card is 1650 * initialized it must be rebooted or the rings reloaded before any 1651 * transmit operations are allowed to start scribbling into memory. 1652 */ 1653 1654void __exit cleanup_module(void) 1655{ 1656 unregister_netdev(this_device); 1657 cleanup_card(this_device); 1658 free_netdev(this_device); 1659} 1660 1661#endif /* MODULE */