Linux Audio

Check our new training course

Linux BSP development engineering services

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