at v2.6.26-rc7 1716 lines 43 kB view raw
1/* 2 * rrunner.c: Linux driver for the Essential RoadRunner HIPPI board. 3 * 4 * Copyright (C) 1998-2002 by Jes Sorensen, <jes@wildopensource.com>. 5 * 6 * Thanks to Essential Communication for providing us with hardware 7 * and very comprehensive documentation without which I would not have 8 * been able to write this driver. A special thank you to John Gibbon 9 * for sorting out the legal issues, with the NDA, allowing the code to 10 * be released under the GPL. 11 * 12 * This program is free software; you can redistribute it and/or modify 13 * it under the terms of the GNU General Public License as published by 14 * the Free Software Foundation; either version 2 of the License, or 15 * (at your option) any later version. 16 * 17 * Thanks to Jayaram Bhat from ODS/Essential for fixing some of the 18 * stupid bugs in my code. 19 * 20 * Softnet support and various other patches from Val Henson of 21 * ODS/Essential. 22 * 23 * PCI DMA mapping code partly based on work by Francois Romieu. 24 */ 25 26 27#define DEBUG 1 28#define RX_DMA_SKBUFF 1 29#define PKT_COPY_THRESHOLD 512 30 31#include <linux/module.h> 32#include <linux/types.h> 33#include <linux/errno.h> 34#include <linux/ioport.h> 35#include <linux/pci.h> 36#include <linux/kernel.h> 37#include <linux/netdevice.h> 38#include <linux/hippidevice.h> 39#include <linux/skbuff.h> 40#include <linux/init.h> 41#include <linux/delay.h> 42#include <linux/mm.h> 43#include <net/sock.h> 44 45#include <asm/system.h> 46#include <asm/cache.h> 47#include <asm/byteorder.h> 48#include <asm/io.h> 49#include <asm/irq.h> 50#include <asm/uaccess.h> 51 52#define rr_if_busy(dev) netif_queue_stopped(dev) 53#define rr_if_running(dev) netif_running(dev) 54 55#include "rrunner.h" 56 57#define RUN_AT(x) (jiffies + (x)) 58 59 60MODULE_AUTHOR("Jes Sorensen <jes@wildopensource.com>"); 61MODULE_DESCRIPTION("Essential RoadRunner HIPPI driver"); 62MODULE_LICENSE("GPL"); 63 64static char version[] __devinitdata = "rrunner.c: v0.50 11/11/2002 Jes Sorensen (jes@wildopensource.com)\n"; 65 66/* 67 * Implementation notes: 68 * 69 * The DMA engine only allows for DMA within physical 64KB chunks of 70 * memory. The current approach of the driver (and stack) is to use 71 * linear blocks of memory for the skbuffs. However, as the data block 72 * is always the first part of the skb and skbs are 2^n aligned so we 73 * are guarantted to get the whole block within one 64KB align 64KB 74 * chunk. 75 * 76 * On the long term, relying on being able to allocate 64KB linear 77 * chunks of memory is not feasible and the skb handling code and the 78 * stack will need to know about I/O vectors or something similar. 79 */ 80 81static int __devinit rr_init_one(struct pci_dev *pdev, 82 const struct pci_device_id *ent) 83{ 84 struct net_device *dev; 85 static int version_disp; 86 u8 pci_latency; 87 struct rr_private *rrpriv; 88 void *tmpptr; 89 dma_addr_t ring_dma; 90 int ret = -ENOMEM; 91 92 dev = alloc_hippi_dev(sizeof(struct rr_private)); 93 if (!dev) 94 goto out3; 95 96 ret = pci_enable_device(pdev); 97 if (ret) { 98 ret = -ENODEV; 99 goto out2; 100 } 101 102 rrpriv = netdev_priv(dev); 103 104 SET_NETDEV_DEV(dev, &pdev->dev); 105 106 if (pci_request_regions(pdev, "rrunner")) { 107 ret = -EIO; 108 goto out; 109 } 110 111 pci_set_drvdata(pdev, dev); 112 113 rrpriv->pci_dev = pdev; 114 115 spin_lock_init(&rrpriv->lock); 116 117 dev->irq = pdev->irq; 118 dev->open = &rr_open; 119 dev->hard_start_xmit = &rr_start_xmit; 120 dev->stop = &rr_close; 121 dev->do_ioctl = &rr_ioctl; 122 123 dev->base_addr = pci_resource_start(pdev, 0); 124 125 /* display version info if adapter is found */ 126 if (!version_disp) { 127 /* set display flag to TRUE so that */ 128 /* we only display this string ONCE */ 129 version_disp = 1; 130 printk(version); 131 } 132 133 pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &pci_latency); 134 if (pci_latency <= 0x58){ 135 pci_latency = 0x58; 136 pci_write_config_byte(pdev, PCI_LATENCY_TIMER, pci_latency); 137 } 138 139 pci_set_master(pdev); 140 141 printk(KERN_INFO "%s: Essential RoadRunner serial HIPPI " 142 "at 0x%08lx, irq %i, PCI latency %i\n", dev->name, 143 dev->base_addr, dev->irq, pci_latency); 144 145 /* 146 * Remap the regs into kernel space. 147 */ 148 149 rrpriv->regs = ioremap(dev->base_addr, 0x1000); 150 151 if (!rrpriv->regs){ 152 printk(KERN_ERR "%s: Unable to map I/O register, " 153 "RoadRunner will be disabled.\n", dev->name); 154 ret = -EIO; 155 goto out; 156 } 157 158 tmpptr = pci_alloc_consistent(pdev, TX_TOTAL_SIZE, &ring_dma); 159 rrpriv->tx_ring = tmpptr; 160 rrpriv->tx_ring_dma = ring_dma; 161 162 if (!tmpptr) { 163 ret = -ENOMEM; 164 goto out; 165 } 166 167 tmpptr = pci_alloc_consistent(pdev, RX_TOTAL_SIZE, &ring_dma); 168 rrpriv->rx_ring = tmpptr; 169 rrpriv->rx_ring_dma = ring_dma; 170 171 if (!tmpptr) { 172 ret = -ENOMEM; 173 goto out; 174 } 175 176 tmpptr = pci_alloc_consistent(pdev, EVT_RING_SIZE, &ring_dma); 177 rrpriv->evt_ring = tmpptr; 178 rrpriv->evt_ring_dma = ring_dma; 179 180 if (!tmpptr) { 181 ret = -ENOMEM; 182 goto out; 183 } 184 185 /* 186 * Don't access any register before this point! 187 */ 188#ifdef __BIG_ENDIAN 189 writel(readl(&rrpriv->regs->HostCtrl) | NO_SWAP, 190 &rrpriv->regs->HostCtrl); 191#endif 192 /* 193 * Need to add a case for little-endian 64-bit hosts here. 194 */ 195 196 rr_init(dev); 197 198 dev->base_addr = 0; 199 200 ret = register_netdev(dev); 201 if (ret) 202 goto out; 203 return 0; 204 205 out: 206 if (rrpriv->rx_ring) 207 pci_free_consistent(pdev, RX_TOTAL_SIZE, rrpriv->rx_ring, 208 rrpriv->rx_ring_dma); 209 if (rrpriv->tx_ring) 210 pci_free_consistent(pdev, TX_TOTAL_SIZE, rrpriv->tx_ring, 211 rrpriv->tx_ring_dma); 212 if (rrpriv->regs) 213 iounmap(rrpriv->regs); 214 if (pdev) { 215 pci_release_regions(pdev); 216 pci_set_drvdata(pdev, NULL); 217 } 218 out2: 219 free_netdev(dev); 220 out3: 221 return ret; 222} 223 224static void __devexit rr_remove_one (struct pci_dev *pdev) 225{ 226 struct net_device *dev = pci_get_drvdata(pdev); 227 228 if (dev) { 229 struct rr_private *rr = netdev_priv(dev); 230 231 if (!(readl(&rr->regs->HostCtrl) & NIC_HALTED)){ 232 printk(KERN_ERR "%s: trying to unload running NIC\n", 233 dev->name); 234 writel(HALT_NIC, &rr->regs->HostCtrl); 235 } 236 237 pci_free_consistent(pdev, EVT_RING_SIZE, rr->evt_ring, 238 rr->evt_ring_dma); 239 pci_free_consistent(pdev, RX_TOTAL_SIZE, rr->rx_ring, 240 rr->rx_ring_dma); 241 pci_free_consistent(pdev, TX_TOTAL_SIZE, rr->tx_ring, 242 rr->tx_ring_dma); 243 unregister_netdev(dev); 244 iounmap(rr->regs); 245 free_netdev(dev); 246 pci_release_regions(pdev); 247 pci_disable_device(pdev); 248 pci_set_drvdata(pdev, NULL); 249 } 250} 251 252 253/* 254 * Commands are considered to be slow, thus there is no reason to 255 * inline this. 256 */ 257static void rr_issue_cmd(struct rr_private *rrpriv, struct cmd *cmd) 258{ 259 struct rr_regs __iomem *regs; 260 u32 idx; 261 262 regs = rrpriv->regs; 263 /* 264 * This is temporary - it will go away in the final version. 265 * We probably also want to make this function inline. 266 */ 267 if (readl(&regs->HostCtrl) & NIC_HALTED){ 268 printk("issuing command for halted NIC, code 0x%x, " 269 "HostCtrl %08x\n", cmd->code, readl(&regs->HostCtrl)); 270 if (readl(&regs->Mode) & FATAL_ERR) 271 printk("error codes Fail1 %02x, Fail2 %02x\n", 272 readl(&regs->Fail1), readl(&regs->Fail2)); 273 } 274 275 idx = rrpriv->info->cmd_ctrl.pi; 276 277 writel(*(u32*)(cmd), &regs->CmdRing[idx]); 278 wmb(); 279 280 idx = (idx - 1) % CMD_RING_ENTRIES; 281 rrpriv->info->cmd_ctrl.pi = idx; 282 wmb(); 283 284 if (readl(&regs->Mode) & FATAL_ERR) 285 printk("error code %02x\n", readl(&regs->Fail1)); 286} 287 288 289/* 290 * Reset the board in a sensible manner. The NIC is already halted 291 * when we get here and a spin-lock is held. 292 */ 293static int rr_reset(struct net_device *dev) 294{ 295 struct rr_private *rrpriv; 296 struct rr_regs __iomem *regs; 297 u32 start_pc; 298 int i; 299 300 rrpriv = netdev_priv(dev); 301 regs = rrpriv->regs; 302 303 rr_load_firmware(dev); 304 305 writel(0x01000000, &regs->TX_state); 306 writel(0xff800000, &regs->RX_state); 307 writel(0, &regs->AssistState); 308 writel(CLEAR_INTA, &regs->LocalCtrl); 309 writel(0x01, &regs->BrkPt); 310 writel(0, &regs->Timer); 311 writel(0, &regs->TimerRef); 312 writel(RESET_DMA, &regs->DmaReadState); 313 writel(RESET_DMA, &regs->DmaWriteState); 314 writel(0, &regs->DmaWriteHostHi); 315 writel(0, &regs->DmaWriteHostLo); 316 writel(0, &regs->DmaReadHostHi); 317 writel(0, &regs->DmaReadHostLo); 318 writel(0, &regs->DmaReadLen); 319 writel(0, &regs->DmaWriteLen); 320 writel(0, &regs->DmaWriteLcl); 321 writel(0, &regs->DmaWriteIPchecksum); 322 writel(0, &regs->DmaReadLcl); 323 writel(0, &regs->DmaReadIPchecksum); 324 writel(0, &regs->PciState); 325#if (BITS_PER_LONG == 64) && defined __LITTLE_ENDIAN 326 writel(SWAP_DATA | PTR64BIT | PTR_WD_SWAP, &regs->Mode); 327#elif (BITS_PER_LONG == 64) 328 writel(SWAP_DATA | PTR64BIT | PTR_WD_NOSWAP, &regs->Mode); 329#else 330 writel(SWAP_DATA | PTR32BIT | PTR_WD_NOSWAP, &regs->Mode); 331#endif 332 333#if 0 334 /* 335 * Don't worry, this is just black magic. 336 */ 337 writel(0xdf000, &regs->RxBase); 338 writel(0xdf000, &regs->RxPrd); 339 writel(0xdf000, &regs->RxCon); 340 writel(0xce000, &regs->TxBase); 341 writel(0xce000, &regs->TxPrd); 342 writel(0xce000, &regs->TxCon); 343 writel(0, &regs->RxIndPro); 344 writel(0, &regs->RxIndCon); 345 writel(0, &regs->RxIndRef); 346 writel(0, &regs->TxIndPro); 347 writel(0, &regs->TxIndCon); 348 writel(0, &regs->TxIndRef); 349 writel(0xcc000, &regs->pad10[0]); 350 writel(0, &regs->DrCmndPro); 351 writel(0, &regs->DrCmndCon); 352 writel(0, &regs->DwCmndPro); 353 writel(0, &regs->DwCmndCon); 354 writel(0, &regs->DwCmndRef); 355 writel(0, &regs->DrDataPro); 356 writel(0, &regs->DrDataCon); 357 writel(0, &regs->DrDataRef); 358 writel(0, &regs->DwDataPro); 359 writel(0, &regs->DwDataCon); 360 writel(0, &regs->DwDataRef); 361#endif 362 363 writel(0xffffffff, &regs->MbEvent); 364 writel(0, &regs->Event); 365 366 writel(0, &regs->TxPi); 367 writel(0, &regs->IpRxPi); 368 369 writel(0, &regs->EvtCon); 370 writel(0, &regs->EvtPrd); 371 372 rrpriv->info->evt_ctrl.pi = 0; 373 374 for (i = 0; i < CMD_RING_ENTRIES; i++) 375 writel(0, &regs->CmdRing[i]); 376 377/* 378 * Why 32 ? is this not cache line size dependent? 379 */ 380 writel(RBURST_64|WBURST_64, &regs->PciState); 381 wmb(); 382 383 start_pc = rr_read_eeprom_word(rrpriv, 384 offsetof(struct eeprom, rncd_info.FwStart)); 385 386#if (DEBUG > 1) 387 printk("%s: Executing firmware at address 0x%06x\n", 388 dev->name, start_pc); 389#endif 390 391 writel(start_pc + 0x800, &regs->Pc); 392 wmb(); 393 udelay(5); 394 395 writel(start_pc, &regs->Pc); 396 wmb(); 397 398 return 0; 399} 400 401 402/* 403 * Read a string from the EEPROM. 404 */ 405static unsigned int rr_read_eeprom(struct rr_private *rrpriv, 406 unsigned long offset, 407 unsigned char *buf, 408 unsigned long length) 409{ 410 struct rr_regs __iomem *regs = rrpriv->regs; 411 u32 misc, io, host, i; 412 413 io = readl(&regs->ExtIo); 414 writel(0, &regs->ExtIo); 415 misc = readl(&regs->LocalCtrl); 416 writel(0, &regs->LocalCtrl); 417 host = readl(&regs->HostCtrl); 418 writel(host | HALT_NIC, &regs->HostCtrl); 419 mb(); 420 421 for (i = 0; i < length; i++){ 422 writel((EEPROM_BASE + ((offset+i) << 3)), &regs->WinBase); 423 mb(); 424 buf[i] = (readl(&regs->WinData) >> 24) & 0xff; 425 mb(); 426 } 427 428 writel(host, &regs->HostCtrl); 429 writel(misc, &regs->LocalCtrl); 430 writel(io, &regs->ExtIo); 431 mb(); 432 return i; 433} 434 435 436/* 437 * Shortcut to read one word (4 bytes) out of the EEPROM and convert 438 * it to our CPU byte-order. 439 */ 440static u32 rr_read_eeprom_word(struct rr_private *rrpriv, 441 size_t offset) 442{ 443 __be32 word; 444 445 if ((rr_read_eeprom(rrpriv, offset, 446 (unsigned char *)&word, 4) == 4)) 447 return be32_to_cpu(word); 448 return 0; 449} 450 451 452/* 453 * Write a string to the EEPROM. 454 * 455 * This is only called when the firmware is not running. 456 */ 457static unsigned int write_eeprom(struct rr_private *rrpriv, 458 unsigned long offset, 459 unsigned char *buf, 460 unsigned long length) 461{ 462 struct rr_regs __iomem *regs = rrpriv->regs; 463 u32 misc, io, data, i, j, ready, error = 0; 464 465 io = readl(&regs->ExtIo); 466 writel(0, &regs->ExtIo); 467 misc = readl(&regs->LocalCtrl); 468 writel(ENABLE_EEPROM_WRITE, &regs->LocalCtrl); 469 mb(); 470 471 for (i = 0; i < length; i++){ 472 writel((EEPROM_BASE + ((offset+i) << 3)), &regs->WinBase); 473 mb(); 474 data = buf[i] << 24; 475 /* 476 * Only try to write the data if it is not the same 477 * value already. 478 */ 479 if ((readl(&regs->WinData) & 0xff000000) != data){ 480 writel(data, &regs->WinData); 481 ready = 0; 482 j = 0; 483 mb(); 484 while(!ready){ 485 udelay(20); 486 if ((readl(&regs->WinData) & 0xff000000) == 487 data) 488 ready = 1; 489 mb(); 490 if (j++ > 5000){ 491 printk("data mismatch: %08x, " 492 "WinData %08x\n", data, 493 readl(&regs->WinData)); 494 ready = 1; 495 error = 1; 496 } 497 } 498 } 499 } 500 501 writel(misc, &regs->LocalCtrl); 502 writel(io, &regs->ExtIo); 503 mb(); 504 505 return error; 506} 507 508 509static int __devinit rr_init(struct net_device *dev) 510{ 511 struct rr_private *rrpriv; 512 struct rr_regs __iomem *regs; 513 u32 sram_size, rev; 514 DECLARE_MAC_BUF(mac); 515 516 rrpriv = netdev_priv(dev); 517 regs = rrpriv->regs; 518 519 rev = readl(&regs->FwRev); 520 rrpriv->fw_rev = rev; 521 if (rev > 0x00020024) 522 printk(" Firmware revision: %i.%i.%i\n", (rev >> 16), 523 ((rev >> 8) & 0xff), (rev & 0xff)); 524 else if (rev >= 0x00020000) { 525 printk(" Firmware revision: %i.%i.%i (2.0.37 or " 526 "later is recommended)\n", (rev >> 16), 527 ((rev >> 8) & 0xff), (rev & 0xff)); 528 }else{ 529 printk(" Firmware revision too old: %i.%i.%i, please " 530 "upgrade to 2.0.37 or later.\n", 531 (rev >> 16), ((rev >> 8) & 0xff), (rev & 0xff)); 532 } 533 534#if (DEBUG > 2) 535 printk(" Maximum receive rings %i\n", readl(&regs->MaxRxRng)); 536#endif 537 538 /* 539 * Read the hardware address from the eeprom. The HW address 540 * is not really necessary for HIPPI but awfully convenient. 541 * The pointer arithmetic to put it in dev_addr is ugly, but 542 * Donald Becker does it this way for the GigE version of this 543 * card and it's shorter and more portable than any 544 * other method I've seen. -VAL 545 */ 546 547 *(__be16 *)(dev->dev_addr) = 548 htons(rr_read_eeprom_word(rrpriv, offsetof(struct eeprom, manf.BoardULA))); 549 *(__be32 *)(dev->dev_addr+2) = 550 htonl(rr_read_eeprom_word(rrpriv, offsetof(struct eeprom, manf.BoardULA[4]))); 551 552 printk(" MAC: %s\n", print_mac(mac, dev->dev_addr)); 553 554 sram_size = rr_read_eeprom_word(rrpriv, 8); 555 printk(" SRAM size 0x%06x\n", sram_size); 556 557 return 0; 558} 559 560 561static int rr_init1(struct net_device *dev) 562{ 563 struct rr_private *rrpriv; 564 struct rr_regs __iomem *regs; 565 unsigned long myjif, flags; 566 struct cmd cmd; 567 u32 hostctrl; 568 int ecode = 0; 569 short i; 570 571 rrpriv = netdev_priv(dev); 572 regs = rrpriv->regs; 573 574 spin_lock_irqsave(&rrpriv->lock, flags); 575 576 hostctrl = readl(&regs->HostCtrl); 577 writel(hostctrl | HALT_NIC | RR_CLEAR_INT, &regs->HostCtrl); 578 wmb(); 579 580 if (hostctrl & PARITY_ERR){ 581 printk("%s: Parity error halting NIC - this is serious!\n", 582 dev->name); 583 spin_unlock_irqrestore(&rrpriv->lock, flags); 584 ecode = -EFAULT; 585 goto error; 586 } 587 588 set_rxaddr(regs, rrpriv->rx_ctrl_dma); 589 set_infoaddr(regs, rrpriv->info_dma); 590 591 rrpriv->info->evt_ctrl.entry_size = sizeof(struct event); 592 rrpriv->info->evt_ctrl.entries = EVT_RING_ENTRIES; 593 rrpriv->info->evt_ctrl.mode = 0; 594 rrpriv->info->evt_ctrl.pi = 0; 595 set_rraddr(&rrpriv->info->evt_ctrl.rngptr, rrpriv->evt_ring_dma); 596 597 rrpriv->info->cmd_ctrl.entry_size = sizeof(struct cmd); 598 rrpriv->info->cmd_ctrl.entries = CMD_RING_ENTRIES; 599 rrpriv->info->cmd_ctrl.mode = 0; 600 rrpriv->info->cmd_ctrl.pi = 15; 601 602 for (i = 0; i < CMD_RING_ENTRIES; i++) { 603 writel(0, &regs->CmdRing[i]); 604 } 605 606 for (i = 0; i < TX_RING_ENTRIES; i++) { 607 rrpriv->tx_ring[i].size = 0; 608 set_rraddr(&rrpriv->tx_ring[i].addr, 0); 609 rrpriv->tx_skbuff[i] = NULL; 610 } 611 rrpriv->info->tx_ctrl.entry_size = sizeof(struct tx_desc); 612 rrpriv->info->tx_ctrl.entries = TX_RING_ENTRIES; 613 rrpriv->info->tx_ctrl.mode = 0; 614 rrpriv->info->tx_ctrl.pi = 0; 615 set_rraddr(&rrpriv->info->tx_ctrl.rngptr, rrpriv->tx_ring_dma); 616 617 /* 618 * Set dirty_tx before we start receiving interrupts, otherwise 619 * the interrupt handler might think it is supposed to process 620 * tx ints before we are up and running, which may cause a null 621 * pointer access in the int handler. 622 */ 623 rrpriv->tx_full = 0; 624 rrpriv->cur_rx = 0; 625 rrpriv->dirty_rx = rrpriv->dirty_tx = 0; 626 627 rr_reset(dev); 628 629 /* Tuning values */ 630 writel(0x5000, &regs->ConRetry); 631 writel(0x100, &regs->ConRetryTmr); 632 writel(0x500000, &regs->ConTmout); 633 writel(0x60, &regs->IntrTmr); 634 writel(0x500000, &regs->TxDataMvTimeout); 635 writel(0x200000, &regs->RxDataMvTimeout); 636 writel(0x80, &regs->WriteDmaThresh); 637 writel(0x80, &regs->ReadDmaThresh); 638 639 rrpriv->fw_running = 0; 640 wmb(); 641 642 hostctrl &= ~(HALT_NIC | INVALID_INST_B | PARITY_ERR); 643 writel(hostctrl, &regs->HostCtrl); 644 wmb(); 645 646 spin_unlock_irqrestore(&rrpriv->lock, flags); 647 648 for (i = 0; i < RX_RING_ENTRIES; i++) { 649 struct sk_buff *skb; 650 dma_addr_t addr; 651 652 rrpriv->rx_ring[i].mode = 0; 653 skb = alloc_skb(dev->mtu + HIPPI_HLEN, GFP_ATOMIC); 654 if (!skb) { 655 printk(KERN_WARNING "%s: Unable to allocate memory " 656 "for receive ring - halting NIC\n", dev->name); 657 ecode = -ENOMEM; 658 goto error; 659 } 660 rrpriv->rx_skbuff[i] = skb; 661 addr = pci_map_single(rrpriv->pci_dev, skb->data, 662 dev->mtu + HIPPI_HLEN, PCI_DMA_FROMDEVICE); 663 /* 664 * Sanity test to see if we conflict with the DMA 665 * limitations of the Roadrunner. 666 */ 667 if ((((unsigned long)skb->data) & 0xfff) > ~65320) 668 printk("skb alloc error\n"); 669 670 set_rraddr(&rrpriv->rx_ring[i].addr, addr); 671 rrpriv->rx_ring[i].size = dev->mtu + HIPPI_HLEN; 672 } 673 674 rrpriv->rx_ctrl[4].entry_size = sizeof(struct rx_desc); 675 rrpriv->rx_ctrl[4].entries = RX_RING_ENTRIES; 676 rrpriv->rx_ctrl[4].mode = 8; 677 rrpriv->rx_ctrl[4].pi = 0; 678 wmb(); 679 set_rraddr(&rrpriv->rx_ctrl[4].rngptr, rrpriv->rx_ring_dma); 680 681 udelay(1000); 682 683 /* 684 * Now start the FirmWare. 685 */ 686 cmd.code = C_START_FW; 687 cmd.ring = 0; 688 cmd.index = 0; 689 690 rr_issue_cmd(rrpriv, &cmd); 691 692 /* 693 * Give the FirmWare time to chew on the `get running' command. 694 */ 695 myjif = jiffies + 5 * HZ; 696 while (time_before(jiffies, myjif) && !rrpriv->fw_running) 697 cpu_relax(); 698 699 netif_start_queue(dev); 700 701 return ecode; 702 703 error: 704 /* 705 * We might have gotten here because we are out of memory, 706 * make sure we release everything we allocated before failing 707 */ 708 for (i = 0; i < RX_RING_ENTRIES; i++) { 709 struct sk_buff *skb = rrpriv->rx_skbuff[i]; 710 711 if (skb) { 712 pci_unmap_single(rrpriv->pci_dev, 713 rrpriv->rx_ring[i].addr.addrlo, 714 dev->mtu + HIPPI_HLEN, 715 PCI_DMA_FROMDEVICE); 716 rrpriv->rx_ring[i].size = 0; 717 set_rraddr(&rrpriv->rx_ring[i].addr, 0); 718 dev_kfree_skb(skb); 719 rrpriv->rx_skbuff[i] = NULL; 720 } 721 } 722 return ecode; 723} 724 725 726/* 727 * All events are considered to be slow (RX/TX ints do not generate 728 * events) and are handled here, outside the main interrupt handler, 729 * to reduce the size of the handler. 730 */ 731static u32 rr_handle_event(struct net_device *dev, u32 prodidx, u32 eidx) 732{ 733 struct rr_private *rrpriv; 734 struct rr_regs __iomem *regs; 735 u32 tmp; 736 737 rrpriv = netdev_priv(dev); 738 regs = rrpriv->regs; 739 740 while (prodidx != eidx){ 741 switch (rrpriv->evt_ring[eidx].code){ 742 case E_NIC_UP: 743 tmp = readl(&regs->FwRev); 744 printk(KERN_INFO "%s: Firmware revision %i.%i.%i " 745 "up and running\n", dev->name, 746 (tmp >> 16), ((tmp >> 8) & 0xff), (tmp & 0xff)); 747 rrpriv->fw_running = 1; 748 writel(RX_RING_ENTRIES - 1, &regs->IpRxPi); 749 wmb(); 750 break; 751 case E_LINK_ON: 752 printk(KERN_INFO "%s: Optical link ON\n", dev->name); 753 break; 754 case E_LINK_OFF: 755 printk(KERN_INFO "%s: Optical link OFF\n", dev->name); 756 break; 757 case E_RX_IDLE: 758 printk(KERN_WARNING "%s: RX data not moving\n", 759 dev->name); 760 goto drop; 761 case E_WATCHDOG: 762 printk(KERN_INFO "%s: The watchdog is here to see " 763 "us\n", dev->name); 764 break; 765 case E_INTERN_ERR: 766 printk(KERN_ERR "%s: HIPPI Internal NIC error\n", 767 dev->name); 768 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, 769 &regs->HostCtrl); 770 wmb(); 771 break; 772 case E_HOST_ERR: 773 printk(KERN_ERR "%s: Host software error\n", 774 dev->name); 775 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, 776 &regs->HostCtrl); 777 wmb(); 778 break; 779 /* 780 * TX events. 781 */ 782 case E_CON_REJ: 783 printk(KERN_WARNING "%s: Connection rejected\n", 784 dev->name); 785 dev->stats.tx_aborted_errors++; 786 break; 787 case E_CON_TMOUT: 788 printk(KERN_WARNING "%s: Connection timeout\n", 789 dev->name); 790 break; 791 case E_DISC_ERR: 792 printk(KERN_WARNING "%s: HIPPI disconnect error\n", 793 dev->name); 794 dev->stats.tx_aborted_errors++; 795 break; 796 case E_INT_PRTY: 797 printk(KERN_ERR "%s: HIPPI Internal Parity error\n", 798 dev->name); 799 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, 800 &regs->HostCtrl); 801 wmb(); 802 break; 803 case E_TX_IDLE: 804 printk(KERN_WARNING "%s: Transmitter idle\n", 805 dev->name); 806 break; 807 case E_TX_LINK_DROP: 808 printk(KERN_WARNING "%s: Link lost during transmit\n", 809 dev->name); 810 dev->stats.tx_aborted_errors++; 811 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, 812 &regs->HostCtrl); 813 wmb(); 814 break; 815 case E_TX_INV_RNG: 816 printk(KERN_ERR "%s: Invalid send ring block\n", 817 dev->name); 818 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, 819 &regs->HostCtrl); 820 wmb(); 821 break; 822 case E_TX_INV_BUF: 823 printk(KERN_ERR "%s: Invalid send buffer address\n", 824 dev->name); 825 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, 826 &regs->HostCtrl); 827 wmb(); 828 break; 829 case E_TX_INV_DSC: 830 printk(KERN_ERR "%s: Invalid descriptor address\n", 831 dev->name); 832 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, 833 &regs->HostCtrl); 834 wmb(); 835 break; 836 /* 837 * RX events. 838 */ 839 case E_RX_RNG_OUT: 840 printk(KERN_INFO "%s: Receive ring full\n", dev->name); 841 break; 842 843 case E_RX_PAR_ERR: 844 printk(KERN_WARNING "%s: Receive parity error\n", 845 dev->name); 846 goto drop; 847 case E_RX_LLRC_ERR: 848 printk(KERN_WARNING "%s: Receive LLRC error\n", 849 dev->name); 850 goto drop; 851 case E_PKT_LN_ERR: 852 printk(KERN_WARNING "%s: Receive packet length " 853 "error\n", dev->name); 854 goto drop; 855 case E_DTA_CKSM_ERR: 856 printk(KERN_WARNING "%s: Data checksum error\n", 857 dev->name); 858 goto drop; 859 case E_SHT_BST: 860 printk(KERN_WARNING "%s: Unexpected short burst " 861 "error\n", dev->name); 862 goto drop; 863 case E_STATE_ERR: 864 printk(KERN_WARNING "%s: Recv. state transition" 865 " error\n", dev->name); 866 goto drop; 867 case E_UNEXP_DATA: 868 printk(KERN_WARNING "%s: Unexpected data error\n", 869 dev->name); 870 goto drop; 871 case E_LST_LNK_ERR: 872 printk(KERN_WARNING "%s: Link lost error\n", 873 dev->name); 874 goto drop; 875 case E_FRM_ERR: 876 printk(KERN_WARNING "%s: Framming Error\n", 877 dev->name); 878 goto drop; 879 case E_FLG_SYN_ERR: 880 printk(KERN_WARNING "%s: Flag sync. lost during " 881 "packet\n", dev->name); 882 goto drop; 883 case E_RX_INV_BUF: 884 printk(KERN_ERR "%s: Invalid receive buffer " 885 "address\n", dev->name); 886 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, 887 &regs->HostCtrl); 888 wmb(); 889 break; 890 case E_RX_INV_DSC: 891 printk(KERN_ERR "%s: Invalid receive descriptor " 892 "address\n", dev->name); 893 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, 894 &regs->HostCtrl); 895 wmb(); 896 break; 897 case E_RNG_BLK: 898 printk(KERN_ERR "%s: Invalid ring block\n", 899 dev->name); 900 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, 901 &regs->HostCtrl); 902 wmb(); 903 break; 904 drop: 905 /* Label packet to be dropped. 906 * Actual dropping occurs in rx 907 * handling. 908 * 909 * The index of packet we get to drop is 910 * the index of the packet following 911 * the bad packet. -kbf 912 */ 913 { 914 u16 index = rrpriv->evt_ring[eidx].index; 915 index = (index + (RX_RING_ENTRIES - 1)) % 916 RX_RING_ENTRIES; 917 rrpriv->rx_ring[index].mode |= 918 (PACKET_BAD | PACKET_END); 919 } 920 break; 921 default: 922 printk(KERN_WARNING "%s: Unhandled event 0x%02x\n", 923 dev->name, rrpriv->evt_ring[eidx].code); 924 } 925 eidx = (eidx + 1) % EVT_RING_ENTRIES; 926 } 927 928 rrpriv->info->evt_ctrl.pi = eidx; 929 wmb(); 930 return eidx; 931} 932 933 934static void rx_int(struct net_device *dev, u32 rxlimit, u32 index) 935{ 936 struct rr_private *rrpriv = netdev_priv(dev); 937 struct rr_regs __iomem *regs = rrpriv->regs; 938 939 do { 940 struct rx_desc *desc; 941 u32 pkt_len; 942 943 desc = &(rrpriv->rx_ring[index]); 944 pkt_len = desc->size; 945#if (DEBUG > 2) 946 printk("index %i, rxlimit %i\n", index, rxlimit); 947 printk("len %x, mode %x\n", pkt_len, desc->mode); 948#endif 949 if ( (rrpriv->rx_ring[index].mode & PACKET_BAD) == PACKET_BAD){ 950 dev->stats.rx_dropped++; 951 goto defer; 952 } 953 954 if (pkt_len > 0){ 955 struct sk_buff *skb, *rx_skb; 956 957 rx_skb = rrpriv->rx_skbuff[index]; 958 959 if (pkt_len < PKT_COPY_THRESHOLD) { 960 skb = alloc_skb(pkt_len, GFP_ATOMIC); 961 if (skb == NULL){ 962 printk(KERN_WARNING "%s: Unable to allocate skb (%i bytes), deferring packet\n", dev->name, pkt_len); 963 dev->stats.rx_dropped++; 964 goto defer; 965 } else { 966 pci_dma_sync_single_for_cpu(rrpriv->pci_dev, 967 desc->addr.addrlo, 968 pkt_len, 969 PCI_DMA_FROMDEVICE); 970 971 memcpy(skb_put(skb, pkt_len), 972 rx_skb->data, pkt_len); 973 974 pci_dma_sync_single_for_device(rrpriv->pci_dev, 975 desc->addr.addrlo, 976 pkt_len, 977 PCI_DMA_FROMDEVICE); 978 } 979 }else{ 980 struct sk_buff *newskb; 981 982 newskb = alloc_skb(dev->mtu + HIPPI_HLEN, 983 GFP_ATOMIC); 984 if (newskb){ 985 dma_addr_t addr; 986 987 pci_unmap_single(rrpriv->pci_dev, 988 desc->addr.addrlo, dev->mtu + 989 HIPPI_HLEN, PCI_DMA_FROMDEVICE); 990 skb = rx_skb; 991 skb_put(skb, pkt_len); 992 rrpriv->rx_skbuff[index] = newskb; 993 addr = pci_map_single(rrpriv->pci_dev, 994 newskb->data, 995 dev->mtu + HIPPI_HLEN, 996 PCI_DMA_FROMDEVICE); 997 set_rraddr(&desc->addr, addr); 998 } else { 999 printk("%s: Out of memory, deferring " 1000 "packet\n", dev->name); 1001 dev->stats.rx_dropped++; 1002 goto defer; 1003 } 1004 } 1005 skb->protocol = hippi_type_trans(skb, dev); 1006 1007 netif_rx(skb); /* send it up */ 1008 1009 dev->last_rx = jiffies; 1010 dev->stats.rx_packets++; 1011 dev->stats.rx_bytes += pkt_len; 1012 } 1013 defer: 1014 desc->mode = 0; 1015 desc->size = dev->mtu + HIPPI_HLEN; 1016 1017 if ((index & 7) == 7) 1018 writel(index, &regs->IpRxPi); 1019 1020 index = (index + 1) % RX_RING_ENTRIES; 1021 } while(index != rxlimit); 1022 1023 rrpriv->cur_rx = index; 1024 wmb(); 1025} 1026 1027 1028static irqreturn_t rr_interrupt(int irq, void *dev_id) 1029{ 1030 struct rr_private *rrpriv; 1031 struct rr_regs __iomem *regs; 1032 struct net_device *dev = (struct net_device *)dev_id; 1033 u32 prodidx, rxindex, eidx, txcsmr, rxlimit, txcon; 1034 1035 rrpriv = netdev_priv(dev); 1036 regs = rrpriv->regs; 1037 1038 if (!(readl(&regs->HostCtrl) & RR_INT)) 1039 return IRQ_NONE; 1040 1041 spin_lock(&rrpriv->lock); 1042 1043 prodidx = readl(&regs->EvtPrd); 1044 txcsmr = (prodidx >> 8) & 0xff; 1045 rxlimit = (prodidx >> 16) & 0xff; 1046 prodidx &= 0xff; 1047 1048#if (DEBUG > 2) 1049 printk("%s: interrupt, prodidx = %i, eidx = %i\n", dev->name, 1050 prodidx, rrpriv->info->evt_ctrl.pi); 1051#endif 1052 /* 1053 * Order here is important. We must handle events 1054 * before doing anything else in order to catch 1055 * such things as LLRC errors, etc -kbf 1056 */ 1057 1058 eidx = rrpriv->info->evt_ctrl.pi; 1059 if (prodidx != eidx) 1060 eidx = rr_handle_event(dev, prodidx, eidx); 1061 1062 rxindex = rrpriv->cur_rx; 1063 if (rxindex != rxlimit) 1064 rx_int(dev, rxlimit, rxindex); 1065 1066 txcon = rrpriv->dirty_tx; 1067 if (txcsmr != txcon) { 1068 do { 1069 /* Due to occational firmware TX producer/consumer out 1070 * of sync. error need to check entry in ring -kbf 1071 */ 1072 if(rrpriv->tx_skbuff[txcon]){ 1073 struct tx_desc *desc; 1074 struct sk_buff *skb; 1075 1076 desc = &(rrpriv->tx_ring[txcon]); 1077 skb = rrpriv->tx_skbuff[txcon]; 1078 1079 dev->stats.tx_packets++; 1080 dev->stats.tx_bytes += skb->len; 1081 1082 pci_unmap_single(rrpriv->pci_dev, 1083 desc->addr.addrlo, skb->len, 1084 PCI_DMA_TODEVICE); 1085 dev_kfree_skb_irq(skb); 1086 1087 rrpriv->tx_skbuff[txcon] = NULL; 1088 desc->size = 0; 1089 set_rraddr(&rrpriv->tx_ring[txcon].addr, 0); 1090 desc->mode = 0; 1091 } 1092 txcon = (txcon + 1) % TX_RING_ENTRIES; 1093 } while (txcsmr != txcon); 1094 wmb(); 1095 1096 rrpriv->dirty_tx = txcon; 1097 if (rrpriv->tx_full && rr_if_busy(dev) && 1098 (((rrpriv->info->tx_ctrl.pi + 1) % TX_RING_ENTRIES) 1099 != rrpriv->dirty_tx)){ 1100 rrpriv->tx_full = 0; 1101 netif_wake_queue(dev); 1102 } 1103 } 1104 1105 eidx |= ((txcsmr << 8) | (rxlimit << 16)); 1106 writel(eidx, &regs->EvtCon); 1107 wmb(); 1108 1109 spin_unlock(&rrpriv->lock); 1110 return IRQ_HANDLED; 1111} 1112 1113static inline void rr_raz_tx(struct rr_private *rrpriv, 1114 struct net_device *dev) 1115{ 1116 int i; 1117 1118 for (i = 0; i < TX_RING_ENTRIES; i++) { 1119 struct sk_buff *skb = rrpriv->tx_skbuff[i]; 1120 1121 if (skb) { 1122 struct tx_desc *desc = &(rrpriv->tx_ring[i]); 1123 1124 pci_unmap_single(rrpriv->pci_dev, desc->addr.addrlo, 1125 skb->len, PCI_DMA_TODEVICE); 1126 desc->size = 0; 1127 set_rraddr(&desc->addr, 0); 1128 dev_kfree_skb(skb); 1129 rrpriv->tx_skbuff[i] = NULL; 1130 } 1131 } 1132} 1133 1134 1135static inline void rr_raz_rx(struct rr_private *rrpriv, 1136 struct net_device *dev) 1137{ 1138 int i; 1139 1140 for (i = 0; i < RX_RING_ENTRIES; i++) { 1141 struct sk_buff *skb = rrpriv->rx_skbuff[i]; 1142 1143 if (skb) { 1144 struct rx_desc *desc = &(rrpriv->rx_ring[i]); 1145 1146 pci_unmap_single(rrpriv->pci_dev, desc->addr.addrlo, 1147 dev->mtu + HIPPI_HLEN, PCI_DMA_FROMDEVICE); 1148 desc->size = 0; 1149 set_rraddr(&desc->addr, 0); 1150 dev_kfree_skb(skb); 1151 rrpriv->rx_skbuff[i] = NULL; 1152 } 1153 } 1154} 1155 1156static void rr_timer(unsigned long data) 1157{ 1158 struct net_device *dev = (struct net_device *)data; 1159 struct rr_private *rrpriv = netdev_priv(dev); 1160 struct rr_regs __iomem *regs = rrpriv->regs; 1161 unsigned long flags; 1162 1163 if (readl(&regs->HostCtrl) & NIC_HALTED){ 1164 printk("%s: Restarting nic\n", dev->name); 1165 memset(rrpriv->rx_ctrl, 0, 256 * sizeof(struct ring_ctrl)); 1166 memset(rrpriv->info, 0, sizeof(struct rr_info)); 1167 wmb(); 1168 1169 rr_raz_tx(rrpriv, dev); 1170 rr_raz_rx(rrpriv, dev); 1171 1172 if (rr_init1(dev)) { 1173 spin_lock_irqsave(&rrpriv->lock, flags); 1174 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, 1175 &regs->HostCtrl); 1176 spin_unlock_irqrestore(&rrpriv->lock, flags); 1177 } 1178 } 1179 rrpriv->timer.expires = RUN_AT(5*HZ); 1180 add_timer(&rrpriv->timer); 1181} 1182 1183 1184static int rr_open(struct net_device *dev) 1185{ 1186 struct rr_private *rrpriv = netdev_priv(dev); 1187 struct pci_dev *pdev = rrpriv->pci_dev; 1188 struct rr_regs __iomem *regs; 1189 int ecode = 0; 1190 unsigned long flags; 1191 dma_addr_t dma_addr; 1192 1193 regs = rrpriv->regs; 1194 1195 if (rrpriv->fw_rev < 0x00020000) { 1196 printk(KERN_WARNING "%s: trying to configure device with " 1197 "obsolete firmware\n", dev->name); 1198 ecode = -EBUSY; 1199 goto error; 1200 } 1201 1202 rrpriv->rx_ctrl = pci_alloc_consistent(pdev, 1203 256 * sizeof(struct ring_ctrl), 1204 &dma_addr); 1205 if (!rrpriv->rx_ctrl) { 1206 ecode = -ENOMEM; 1207 goto error; 1208 } 1209 rrpriv->rx_ctrl_dma = dma_addr; 1210 memset(rrpriv->rx_ctrl, 0, 256*sizeof(struct ring_ctrl)); 1211 1212 rrpriv->info = pci_alloc_consistent(pdev, sizeof(struct rr_info), 1213 &dma_addr); 1214 if (!rrpriv->info) { 1215 ecode = -ENOMEM; 1216 goto error; 1217 } 1218 rrpriv->info_dma = dma_addr; 1219 memset(rrpriv->info, 0, sizeof(struct rr_info)); 1220 wmb(); 1221 1222 spin_lock_irqsave(&rrpriv->lock, flags); 1223 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, &regs->HostCtrl); 1224 readl(&regs->HostCtrl); 1225 spin_unlock_irqrestore(&rrpriv->lock, flags); 1226 1227 if (request_irq(dev->irq, rr_interrupt, IRQF_SHARED, dev->name, dev)) { 1228 printk(KERN_WARNING "%s: Requested IRQ %d is busy\n", 1229 dev->name, dev->irq); 1230 ecode = -EAGAIN; 1231 goto error; 1232 } 1233 1234 if ((ecode = rr_init1(dev))) 1235 goto error; 1236 1237 /* Set the timer to switch to check for link beat and perhaps switch 1238 to an alternate media type. */ 1239 init_timer(&rrpriv->timer); 1240 rrpriv->timer.expires = RUN_AT(5*HZ); /* 5 sec. watchdog */ 1241 rrpriv->timer.data = (unsigned long)dev; 1242 rrpriv->timer.function = &rr_timer; /* timer handler */ 1243 add_timer(&rrpriv->timer); 1244 1245 netif_start_queue(dev); 1246 1247 return ecode; 1248 1249 error: 1250 spin_lock_irqsave(&rrpriv->lock, flags); 1251 writel(readl(&regs->HostCtrl)|HALT_NIC|RR_CLEAR_INT, &regs->HostCtrl); 1252 spin_unlock_irqrestore(&rrpriv->lock, flags); 1253 1254 if (rrpriv->info) { 1255 pci_free_consistent(pdev, sizeof(struct rr_info), rrpriv->info, 1256 rrpriv->info_dma); 1257 rrpriv->info = NULL; 1258 } 1259 if (rrpriv->rx_ctrl) { 1260 pci_free_consistent(pdev, sizeof(struct ring_ctrl), 1261 rrpriv->rx_ctrl, rrpriv->rx_ctrl_dma); 1262 rrpriv->rx_ctrl = NULL; 1263 } 1264 1265 netif_stop_queue(dev); 1266 1267 return ecode; 1268} 1269 1270 1271static void rr_dump(struct net_device *dev) 1272{ 1273 struct rr_private *rrpriv; 1274 struct rr_regs __iomem *regs; 1275 u32 index, cons; 1276 short i; 1277 int len; 1278 1279 rrpriv = netdev_priv(dev); 1280 regs = rrpriv->regs; 1281 1282 printk("%s: dumping NIC TX rings\n", dev->name); 1283 1284 printk("RxPrd %08x, TxPrd %02x, EvtPrd %08x, TxPi %02x, TxCtrlPi %02x\n", 1285 readl(&regs->RxPrd), readl(&regs->TxPrd), 1286 readl(&regs->EvtPrd), readl(&regs->TxPi), 1287 rrpriv->info->tx_ctrl.pi); 1288 1289 printk("Error code 0x%x\n", readl(&regs->Fail1)); 1290 1291 index = (((readl(&regs->EvtPrd) >> 8) & 0xff ) - 1) % EVT_RING_ENTRIES; 1292 cons = rrpriv->dirty_tx; 1293 printk("TX ring index %i, TX consumer %i\n", 1294 index, cons); 1295 1296 if (rrpriv->tx_skbuff[index]){ 1297 len = min_t(int, 0x80, rrpriv->tx_skbuff[index]->len); 1298 printk("skbuff for index %i is valid - dumping data (0x%x bytes - DMA len 0x%x)\n", index, len, rrpriv->tx_ring[index].size); 1299 for (i = 0; i < len; i++){ 1300 if (!(i & 7)) 1301 printk("\n"); 1302 printk("%02x ", (unsigned char) rrpriv->tx_skbuff[index]->data[i]); 1303 } 1304 printk("\n"); 1305 } 1306 1307 if (rrpriv->tx_skbuff[cons]){ 1308 len = min_t(int, 0x80, rrpriv->tx_skbuff[cons]->len); 1309 printk("skbuff for cons %i is valid - dumping data (0x%x bytes - skbuff len 0x%x)\n", cons, len, rrpriv->tx_skbuff[cons]->len); 1310 printk("mode 0x%x, size 0x%x,\n phys %08Lx, skbuff-addr %08lx, truesize 0x%x\n", 1311 rrpriv->tx_ring[cons].mode, 1312 rrpriv->tx_ring[cons].size, 1313 (unsigned long long) rrpriv->tx_ring[cons].addr.addrlo, 1314 (unsigned long)rrpriv->tx_skbuff[cons]->data, 1315 (unsigned int)rrpriv->tx_skbuff[cons]->truesize); 1316 for (i = 0; i < len; i++){ 1317 if (!(i & 7)) 1318 printk("\n"); 1319 printk("%02x ", (unsigned char)rrpriv->tx_ring[cons].size); 1320 } 1321 printk("\n"); 1322 } 1323 1324 printk("dumping TX ring info:\n"); 1325 for (i = 0; i < TX_RING_ENTRIES; i++) 1326 printk("mode 0x%x, size 0x%x, phys-addr %08Lx\n", 1327 rrpriv->tx_ring[i].mode, 1328 rrpriv->tx_ring[i].size, 1329 (unsigned long long) rrpriv->tx_ring[i].addr.addrlo); 1330 1331} 1332 1333 1334static int rr_close(struct net_device *dev) 1335{ 1336 struct rr_private *rrpriv; 1337 struct rr_regs __iomem *regs; 1338 unsigned long flags; 1339 u32 tmp; 1340 short i; 1341 1342 netif_stop_queue(dev); 1343 1344 rrpriv = netdev_priv(dev); 1345 regs = rrpriv->regs; 1346 1347 /* 1348 * Lock to make sure we are not cleaning up while another CPU 1349 * is handling interrupts. 1350 */ 1351 spin_lock_irqsave(&rrpriv->lock, flags); 1352 1353 tmp = readl(&regs->HostCtrl); 1354 if (tmp & NIC_HALTED){ 1355 printk("%s: NIC already halted\n", dev->name); 1356 rr_dump(dev); 1357 }else{ 1358 tmp |= HALT_NIC | RR_CLEAR_INT; 1359 writel(tmp, &regs->HostCtrl); 1360 readl(&regs->HostCtrl); 1361 } 1362 1363 rrpriv->fw_running = 0; 1364 1365 del_timer_sync(&rrpriv->timer); 1366 1367 writel(0, &regs->TxPi); 1368 writel(0, &regs->IpRxPi); 1369 1370 writel(0, &regs->EvtCon); 1371 writel(0, &regs->EvtPrd); 1372 1373 for (i = 0; i < CMD_RING_ENTRIES; i++) 1374 writel(0, &regs->CmdRing[i]); 1375 1376 rrpriv->info->tx_ctrl.entries = 0; 1377 rrpriv->info->cmd_ctrl.pi = 0; 1378 rrpriv->info->evt_ctrl.pi = 0; 1379 rrpriv->rx_ctrl[4].entries = 0; 1380 1381 rr_raz_tx(rrpriv, dev); 1382 rr_raz_rx(rrpriv, dev); 1383 1384 pci_free_consistent(rrpriv->pci_dev, 256 * sizeof(struct ring_ctrl), 1385 rrpriv->rx_ctrl, rrpriv->rx_ctrl_dma); 1386 rrpriv->rx_ctrl = NULL; 1387 1388 pci_free_consistent(rrpriv->pci_dev, sizeof(struct rr_info), 1389 rrpriv->info, rrpriv->info_dma); 1390 rrpriv->info = NULL; 1391 1392 free_irq(dev->irq, dev); 1393 spin_unlock_irqrestore(&rrpriv->lock, flags); 1394 1395 return 0; 1396} 1397 1398 1399static int rr_start_xmit(struct sk_buff *skb, struct net_device *dev) 1400{ 1401 struct rr_private *rrpriv = netdev_priv(dev); 1402 struct rr_regs __iomem *regs = rrpriv->regs; 1403 struct hippi_cb *hcb = (struct hippi_cb *) skb->cb; 1404 struct ring_ctrl *txctrl; 1405 unsigned long flags; 1406 u32 index, len = skb->len; 1407 u32 *ifield; 1408 struct sk_buff *new_skb; 1409 1410 if (readl(&regs->Mode) & FATAL_ERR) 1411 printk("error codes Fail1 %02x, Fail2 %02x\n", 1412 readl(&regs->Fail1), readl(&regs->Fail2)); 1413 1414 /* 1415 * We probably need to deal with tbusy here to prevent overruns. 1416 */ 1417 1418 if (skb_headroom(skb) < 8){ 1419 printk("incoming skb too small - reallocating\n"); 1420 if (!(new_skb = dev_alloc_skb(len + 8))) { 1421 dev_kfree_skb(skb); 1422 netif_wake_queue(dev); 1423 return -EBUSY; 1424 } 1425 skb_reserve(new_skb, 8); 1426 skb_put(new_skb, len); 1427 skb_copy_from_linear_data(skb, new_skb->data, len); 1428 dev_kfree_skb(skb); 1429 skb = new_skb; 1430 } 1431 1432 ifield = (u32 *)skb_push(skb, 8); 1433 1434 ifield[0] = 0; 1435 ifield[1] = hcb->ifield; 1436 1437 /* 1438 * We don't need the lock before we are actually going to start 1439 * fiddling with the control blocks. 1440 */ 1441 spin_lock_irqsave(&rrpriv->lock, flags); 1442 1443 txctrl = &rrpriv->info->tx_ctrl; 1444 1445 index = txctrl->pi; 1446 1447 rrpriv->tx_skbuff[index] = skb; 1448 set_rraddr(&rrpriv->tx_ring[index].addr, pci_map_single( 1449 rrpriv->pci_dev, skb->data, len + 8, PCI_DMA_TODEVICE)); 1450 rrpriv->tx_ring[index].size = len + 8; /* include IFIELD */ 1451 rrpriv->tx_ring[index].mode = PACKET_START | PACKET_END; 1452 txctrl->pi = (index + 1) % TX_RING_ENTRIES; 1453 wmb(); 1454 writel(txctrl->pi, &regs->TxPi); 1455 1456 if (txctrl->pi == rrpriv->dirty_tx){ 1457 rrpriv->tx_full = 1; 1458 netif_stop_queue(dev); 1459 } 1460 1461 spin_unlock_irqrestore(&rrpriv->lock, flags); 1462 1463 dev->trans_start = jiffies; 1464 return 0; 1465} 1466 1467 1468/* 1469 * Read the firmware out of the EEPROM and put it into the SRAM 1470 * (or from user space - later) 1471 * 1472 * This operation requires the NIC to be halted and is performed with 1473 * interrupts disabled and with the spinlock hold. 1474 */ 1475static int rr_load_firmware(struct net_device *dev) 1476{ 1477 struct rr_private *rrpriv; 1478 struct rr_regs __iomem *regs; 1479 size_t eptr, segptr; 1480 int i, j; 1481 u32 localctrl, sptr, len, tmp; 1482 u32 p2len, p2size, nr_seg, revision, io, sram_size; 1483 1484 rrpriv = netdev_priv(dev); 1485 regs = rrpriv->regs; 1486 1487 if (dev->flags & IFF_UP) 1488 return -EBUSY; 1489 1490 if (!(readl(&regs->HostCtrl) & NIC_HALTED)){ 1491 printk("%s: Trying to load firmware to a running NIC.\n", 1492 dev->name); 1493 return -EBUSY; 1494 } 1495 1496 localctrl = readl(&regs->LocalCtrl); 1497 writel(0, &regs->LocalCtrl); 1498 1499 writel(0, &regs->EvtPrd); 1500 writel(0, &regs->RxPrd); 1501 writel(0, &regs->TxPrd); 1502 1503 /* 1504 * First wipe the entire SRAM, otherwise we might run into all 1505 * kinds of trouble ... sigh, this took almost all afternoon 1506 * to track down ;-( 1507 */ 1508 io = readl(&regs->ExtIo); 1509 writel(0, &regs->ExtIo); 1510 sram_size = rr_read_eeprom_word(rrpriv, 8); 1511 1512 for (i = 200; i < sram_size / 4; i++){ 1513 writel(i * 4, &regs->WinBase); 1514 mb(); 1515 writel(0, &regs->WinData); 1516 mb(); 1517 } 1518 writel(io, &regs->ExtIo); 1519 mb(); 1520 1521 eptr = rr_read_eeprom_word(rrpriv, 1522 offsetof(struct eeprom, rncd_info.AddrRunCodeSegs)); 1523 eptr = ((eptr & 0x1fffff) >> 3); 1524 1525 p2len = rr_read_eeprom_word(rrpriv, 0x83*4); 1526 p2len = (p2len << 2); 1527 p2size = rr_read_eeprom_word(rrpriv, 0x84*4); 1528 p2size = ((p2size & 0x1fffff) >> 3); 1529 1530 if ((eptr < p2size) || (eptr > (p2size + p2len))){ 1531 printk("%s: eptr is invalid\n", dev->name); 1532 goto out; 1533 } 1534 1535 revision = rr_read_eeprom_word(rrpriv, 1536 offsetof(struct eeprom, manf.HeaderFmt)); 1537 1538 if (revision != 1){ 1539 printk("%s: invalid firmware format (%i)\n", 1540 dev->name, revision); 1541 goto out; 1542 } 1543 1544 nr_seg = rr_read_eeprom_word(rrpriv, eptr); 1545 eptr +=4; 1546#if (DEBUG > 1) 1547 printk("%s: nr_seg %i\n", dev->name, nr_seg); 1548#endif 1549 1550 for (i = 0; i < nr_seg; i++){ 1551 sptr = rr_read_eeprom_word(rrpriv, eptr); 1552 eptr += 4; 1553 len = rr_read_eeprom_word(rrpriv, eptr); 1554 eptr += 4; 1555 segptr = rr_read_eeprom_word(rrpriv, eptr); 1556 segptr = ((segptr & 0x1fffff) >> 3); 1557 eptr += 4; 1558#if (DEBUG > 1) 1559 printk("%s: segment %i, sram address %06x, length %04x, segptr %06x\n", 1560 dev->name, i, sptr, len, segptr); 1561#endif 1562 for (j = 0; j < len; j++){ 1563 tmp = rr_read_eeprom_word(rrpriv, segptr); 1564 writel(sptr, &regs->WinBase); 1565 mb(); 1566 writel(tmp, &regs->WinData); 1567 mb(); 1568 segptr += 4; 1569 sptr += 4; 1570 } 1571 } 1572 1573out: 1574 writel(localctrl, &regs->LocalCtrl); 1575 mb(); 1576 return 0; 1577} 1578 1579 1580static int rr_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 1581{ 1582 struct rr_private *rrpriv; 1583 unsigned char *image, *oldimage; 1584 unsigned long flags; 1585 unsigned int i; 1586 int error = -EOPNOTSUPP; 1587 1588 rrpriv = netdev_priv(dev); 1589 1590 switch(cmd){ 1591 case SIOCRRGFW: 1592 if (!capable(CAP_SYS_RAWIO)){ 1593 return -EPERM; 1594 } 1595 1596 image = kmalloc(EEPROM_WORDS * sizeof(u32), GFP_KERNEL); 1597 if (!image){ 1598 printk(KERN_ERR "%s: Unable to allocate memory " 1599 "for EEPROM image\n", dev->name); 1600 return -ENOMEM; 1601 } 1602 1603 1604 if (rrpriv->fw_running){ 1605 printk("%s: Firmware already running\n", dev->name); 1606 error = -EPERM; 1607 goto gf_out; 1608 } 1609 1610 spin_lock_irqsave(&rrpriv->lock, flags); 1611 i = rr_read_eeprom(rrpriv, 0, image, EEPROM_BYTES); 1612 spin_unlock_irqrestore(&rrpriv->lock, flags); 1613 if (i != EEPROM_BYTES){ 1614 printk(KERN_ERR "%s: Error reading EEPROM\n", 1615 dev->name); 1616 error = -EFAULT; 1617 goto gf_out; 1618 } 1619 error = copy_to_user(rq->ifr_data, image, EEPROM_BYTES); 1620 if (error) 1621 error = -EFAULT; 1622 gf_out: 1623 kfree(image); 1624 return error; 1625 1626 case SIOCRRPFW: 1627 if (!capable(CAP_SYS_RAWIO)){ 1628 return -EPERM; 1629 } 1630 1631 image = kmalloc(EEPROM_WORDS * sizeof(u32), GFP_KERNEL); 1632 oldimage = kmalloc(EEPROM_WORDS * sizeof(u32), GFP_KERNEL); 1633 if (!image || !oldimage) { 1634 printk(KERN_ERR "%s: Unable to allocate memory " 1635 "for EEPROM image\n", dev->name); 1636 error = -ENOMEM; 1637 goto wf_out; 1638 } 1639 1640 error = copy_from_user(image, rq->ifr_data, EEPROM_BYTES); 1641 if (error) { 1642 error = -EFAULT; 1643 goto wf_out; 1644 } 1645 1646 if (rrpriv->fw_running){ 1647 printk("%s: Firmware already running\n", dev->name); 1648 error = -EPERM; 1649 goto wf_out; 1650 } 1651 1652 printk("%s: Updating EEPROM firmware\n", dev->name); 1653 1654 spin_lock_irqsave(&rrpriv->lock, flags); 1655 error = write_eeprom(rrpriv, 0, image, EEPROM_BYTES); 1656 if (error) 1657 printk(KERN_ERR "%s: Error writing EEPROM\n", 1658 dev->name); 1659 1660 i = rr_read_eeprom(rrpriv, 0, oldimage, EEPROM_BYTES); 1661 spin_unlock_irqrestore(&rrpriv->lock, flags); 1662 1663 if (i != EEPROM_BYTES) 1664 printk(KERN_ERR "%s: Error reading back EEPROM " 1665 "image\n", dev->name); 1666 1667 error = memcmp(image, oldimage, EEPROM_BYTES); 1668 if (error){ 1669 printk(KERN_ERR "%s: Error verifying EEPROM image\n", 1670 dev->name); 1671 error = -EFAULT; 1672 } 1673 wf_out: 1674 kfree(oldimage); 1675 kfree(image); 1676 return error; 1677 1678 case SIOCRRID: 1679 return put_user(0x52523032, (int __user *)rq->ifr_data); 1680 default: 1681 return error; 1682 } 1683} 1684 1685static struct pci_device_id rr_pci_tbl[] = { 1686 { PCI_VENDOR_ID_ESSENTIAL, PCI_DEVICE_ID_ESSENTIAL_ROADRUNNER, 1687 PCI_ANY_ID, PCI_ANY_ID, }, 1688 { 0,} 1689}; 1690MODULE_DEVICE_TABLE(pci, rr_pci_tbl); 1691 1692static struct pci_driver rr_driver = { 1693 .name = "rrunner", 1694 .id_table = rr_pci_tbl, 1695 .probe = rr_init_one, 1696 .remove = __devexit_p(rr_remove_one), 1697}; 1698 1699static int __init rr_init_module(void) 1700{ 1701 return pci_register_driver(&rr_driver); 1702} 1703 1704static void __exit rr_cleanup_module(void) 1705{ 1706 pci_unregister_driver(&rr_driver); 1707} 1708 1709module_init(rr_init_module); 1710module_exit(rr_cleanup_module); 1711 1712/* 1713 * Local variables: 1714 * compile-command: "gcc -D__KERNEL__ -I../../include -Wall -Wstrict-prototypes -O2 -pipe -fomit-frame-pointer -fno-strength-reduce -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2 -DMODULE -DMODVERSIONS -include ../../include/linux/modversions.h -c rrunner.c" 1715 * End: 1716 */