linux/drivers/net/ethernet/dec/tulip/xircom_cb.c
<<
>>
Prefs
   1/*
   2 * xircom_cb: A driver for the (tulip-like) Xircom Cardbus ethernet cards
   3 *
   4 * This software is (C) by the respective authors, and licensed under the GPL
   5 * License.
   6 *
   7 * Written by Arjan van de Ven for Red Hat, Inc.
   8 * Based on work by Jeff Garzik, Doug Ledford and Donald Becker
   9 *
  10 *      This software may be used and distributed according to the terms
  11 *      of the GNU General Public License, incorporated herein by reference.
  12 *
  13 *
  14 *      $Id: xircom_cb.c,v 1.33 2001/03/19 14:02:07 arjanv Exp $
  15 */
  16
  17#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  18
  19#include <linux/module.h>
  20#include <linux/kernel.h>
  21#include <linux/string.h>
  22#include <linux/errno.h>
  23#include <linux/ioport.h>
  24#include <linux/slab.h>
  25#include <linux/interrupt.h>
  26#include <linux/pci.h>
  27#include <linux/netdevice.h>
  28#include <linux/etherdevice.h>
  29#include <linux/skbuff.h>
  30#include <linux/delay.h>
  31#include <linux/init.h>
  32#include <linux/bitops.h>
  33
  34#include <asm/uaccess.h>
  35#include <asm/io.h>
  36#ifdef CONFIG_NET_POLL_CONTROLLER
  37#include <asm/irq.h>
  38#endif
  39
  40MODULE_DESCRIPTION("Xircom Cardbus ethernet driver");
  41MODULE_AUTHOR("Arjan van de Ven <arjanv@redhat.com>");
  42MODULE_LICENSE("GPL");
  43
  44
  45
  46/* IO registers on the card, offsets */
  47#define CSR0    0x00
  48#define CSR1    0x08
  49#define CSR2    0x10
  50#define CSR3    0x18
  51#define CSR4    0x20
  52#define CSR5    0x28
  53#define CSR6    0x30
  54#define CSR7    0x38
  55#define CSR8    0x40
  56#define CSR9    0x48
  57#define CSR10   0x50
  58#define CSR11   0x58
  59#define CSR12   0x60
  60#define CSR13   0x68
  61#define CSR14   0x70
  62#define CSR15   0x78
  63#define CSR16   0x80
  64
  65/* PCI registers */
  66#define PCI_POWERMGMT   0x40
  67
  68/* Offsets of the buffers within the descriptor pages, in bytes */
  69
  70#define NUMDESCRIPTORS 4
  71
  72static int bufferoffsets[NUMDESCRIPTORS] = {128,2048,4096,6144};
  73
  74
  75struct xircom_private {
  76        /* Send and receive buffers, kernel-addressable and dma addressable forms */
  77
  78        __le32 *rx_buffer;
  79        __le32 *tx_buffer;
  80
  81        dma_addr_t rx_dma_handle;
  82        dma_addr_t tx_dma_handle;
  83
  84        struct sk_buff *tx_skb[4];
  85
  86        unsigned long io_port;
  87        int open;
  88
  89        /* transmit_used is the rotating counter that indicates which transmit
  90           descriptor has to be used next */
  91        int transmit_used;
  92
  93        /* Spinlock to serialize register operations.
  94           It must be helt while manipulating the following registers:
  95           CSR0, CSR6, CSR7, CSR9, CSR10, CSR15
  96         */
  97        spinlock_t lock;
  98
  99        struct pci_dev *pdev;
 100        struct net_device *dev;
 101};
 102
 103
 104/* Function prototypes */
 105static int xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id);
 106static void xircom_remove(struct pci_dev *pdev);
 107static irqreturn_t xircom_interrupt(int irq, void *dev_instance);
 108static netdev_tx_t xircom_start_xmit(struct sk_buff *skb,
 109                                           struct net_device *dev);
 110static int xircom_open(struct net_device *dev);
 111static int xircom_close(struct net_device *dev);
 112static void xircom_up(struct xircom_private *card);
 113#ifdef CONFIG_NET_POLL_CONTROLLER
 114static void xircom_poll_controller(struct net_device *dev);
 115#endif
 116
 117static void investigate_read_descriptor(struct net_device *dev,struct xircom_private *card, int descnr, unsigned int bufferoffset);
 118static void investigate_write_descriptor(struct net_device *dev, struct xircom_private *card, int descnr, unsigned int bufferoffset);
 119static void read_mac_address(struct xircom_private *card);
 120static void transceiver_voodoo(struct xircom_private *card);
 121static void initialize_card(struct xircom_private *card);
 122static void trigger_transmit(struct xircom_private *card);
 123static void trigger_receive(struct xircom_private *card);
 124static void setup_descriptors(struct xircom_private *card);
 125static void remove_descriptors(struct xircom_private *card);
 126static int link_status_changed(struct xircom_private *card);
 127static void activate_receiver(struct xircom_private *card);
 128static void deactivate_receiver(struct xircom_private *card);
 129static void activate_transmitter(struct xircom_private *card);
 130static void deactivate_transmitter(struct xircom_private *card);
 131static void enable_transmit_interrupt(struct xircom_private *card);
 132static void enable_receive_interrupt(struct xircom_private *card);
 133static void enable_link_interrupt(struct xircom_private *card);
 134static void disable_all_interrupts(struct xircom_private *card);
 135static int link_status(struct xircom_private *card);
 136
 137
 138
 139static DEFINE_PCI_DEVICE_TABLE(xircom_pci_table) = {
 140        {0x115D, 0x0003, PCI_ANY_ID, PCI_ANY_ID,},
 141        {0,},
 142};
 143MODULE_DEVICE_TABLE(pci, xircom_pci_table);
 144
 145static struct pci_driver xircom_ops = {
 146        .name           = "xircom_cb",
 147        .id_table       = xircom_pci_table,
 148        .probe          = xircom_probe,
 149        .remove         = xircom_remove,
 150        .suspend =NULL,
 151        .resume =NULL
 152};
 153
 154
 155#if defined DEBUG && DEBUG > 1
 156static void print_binary(unsigned int number)
 157{
 158        int i,i2;
 159        char buffer[64];
 160        memset(buffer,0,64);
 161        i2=0;
 162        for (i=31;i>=0;i--) {
 163                if (number & (1<<i))
 164                        buffer[i2++]='1';
 165                else
 166                        buffer[i2++]='0';
 167                if ((i&3)==0)
 168                        buffer[i2++]=' ';
 169        }
 170        pr_debug("%s\n",buffer);
 171}
 172#endif
 173
 174static const struct net_device_ops netdev_ops = {
 175        .ndo_open               = xircom_open,
 176        .ndo_stop               = xircom_close,
 177        .ndo_start_xmit         = xircom_start_xmit,
 178        .ndo_change_mtu         = eth_change_mtu,
 179        .ndo_set_mac_address    = eth_mac_addr,
 180        .ndo_validate_addr      = eth_validate_addr,
 181#ifdef CONFIG_NET_POLL_CONTROLLER
 182        .ndo_poll_controller    = xircom_poll_controller,
 183#endif
 184};
 185
 186/* xircom_probe is the code that gets called on device insertion.
 187   it sets up the hardware and registers the device to the networklayer.
 188
 189   TODO: Send 1 or 2 "dummy" packets here as the card seems to discard the
 190         first two packets that get send, and pump hates that.
 191
 192 */
 193static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 194{
 195        struct net_device *dev = NULL;
 196        struct xircom_private *private;
 197        unsigned long flags;
 198        unsigned short tmp16;
 199
 200        /* First do the PCI initialisation */
 201
 202        if (pci_enable_device(pdev))
 203                return -ENODEV;
 204
 205        /* disable all powermanagement */
 206        pci_write_config_dword(pdev, PCI_POWERMGMT, 0x0000);
 207
 208        pci_set_master(pdev); /* Why isn't this done by pci_enable_device ?*/
 209
 210        /* clear PCI status, if any */
 211        pci_read_config_word (pdev,PCI_STATUS, &tmp16);
 212        pci_write_config_word (pdev, PCI_STATUS,tmp16);
 213
 214        if (!request_region(pci_resource_start(pdev, 0), 128, "xircom_cb")) {
 215                pr_err("%s: failed to allocate io-region\n", __func__);
 216                return -ENODEV;
 217        }
 218
 219        /*
 220           Before changing the hardware, allocate the memory.
 221           This way, we can fail gracefully if not enough memory
 222           is available.
 223         */
 224        dev = alloc_etherdev(sizeof(struct xircom_private));
 225        if (!dev) {
 226                pr_err("%s: failed to allocate etherdev\n", __func__);
 227                goto device_fail;
 228        }
 229        private = netdev_priv(dev);
 230
 231        /* Allocate the send/receive buffers */
 232        private->rx_buffer = pci_alloc_consistent(pdev,8192,&private->rx_dma_handle);
 233        if (private->rx_buffer == NULL) {
 234                pr_err("%s: no memory for rx buffer\n", __func__);
 235                goto rx_buf_fail;
 236        }
 237        private->tx_buffer = pci_alloc_consistent(pdev,8192,&private->tx_dma_handle);
 238        if (private->tx_buffer == NULL) {
 239                pr_err("%s: no memory for tx buffer\n", __func__);
 240                goto tx_buf_fail;
 241        }
 242
 243        SET_NETDEV_DEV(dev, &pdev->dev);
 244
 245
 246        private->dev = dev;
 247        private->pdev = pdev;
 248        private->io_port = pci_resource_start(pdev, 0);
 249        spin_lock_init(&private->lock);
 250        dev->irq = pdev->irq;
 251        dev->base_addr = private->io_port;
 252
 253        initialize_card(private);
 254        read_mac_address(private);
 255        setup_descriptors(private);
 256
 257        dev->netdev_ops = &netdev_ops;
 258        pci_set_drvdata(pdev, dev);
 259
 260        if (register_netdev(dev)) {
 261                pr_err("%s: netdevice registration failed\n", __func__);
 262                goto reg_fail;
 263        }
 264
 265        netdev_info(dev, "Xircom cardbus revision %i at irq %i\n",
 266                    pdev->revision, pdev->irq);
 267        /* start the transmitter to get a heartbeat */
 268        /* TODO: send 2 dummy packets here */
 269        transceiver_voodoo(private);
 270
 271        spin_lock_irqsave(&private->lock,flags);
 272        activate_transmitter(private);
 273        activate_receiver(private);
 274        spin_unlock_irqrestore(&private->lock,flags);
 275
 276        trigger_receive(private);
 277
 278        return 0;
 279
 280reg_fail:
 281        kfree(private->tx_buffer);
 282tx_buf_fail:
 283        kfree(private->rx_buffer);
 284rx_buf_fail:
 285        free_netdev(dev);
 286device_fail:
 287        return -ENODEV;
 288}
 289
 290
 291/*
 292 xircom_remove is called on module-unload or on device-eject.
 293 it unregisters the irq, io-region and network device.
 294 Interrupts and such are already stopped in the "ifconfig ethX down"
 295 code.
 296 */
 297static void __devexit xircom_remove(struct pci_dev *pdev)
 298{
 299        struct net_device *dev = pci_get_drvdata(pdev);
 300        struct xircom_private *card = netdev_priv(dev);
 301
 302        pci_free_consistent(pdev,8192,card->rx_buffer,card->rx_dma_handle);
 303        pci_free_consistent(pdev,8192,card->tx_buffer,card->tx_dma_handle);
 304
 305        release_region(dev->base_addr, 128);
 306        unregister_netdev(dev);
 307        free_netdev(dev);
 308        pci_set_drvdata(pdev, NULL);
 309}
 310
 311static irqreturn_t xircom_interrupt(int irq, void *dev_instance)
 312{
 313        struct net_device *dev = (struct net_device *) dev_instance;
 314        struct xircom_private *card = netdev_priv(dev);
 315        unsigned int status;
 316        int i;
 317
 318        spin_lock(&card->lock);
 319        status = inl(card->io_port+CSR5);
 320
 321#if defined DEBUG && DEBUG > 1
 322        print_binary(status);
 323        pr_debug("tx status 0x%08x 0x%08x\n",
 324                 card->tx_buffer[0], card->tx_buffer[4]);
 325        pr_debug("rx status 0x%08x 0x%08x\n",
 326                 card->rx_buffer[0], card->rx_buffer[4]);
 327#endif
 328        /* Handle shared irq and hotplug */
 329        if (status == 0 || status == 0xffffffff) {
 330                spin_unlock(&card->lock);
 331                return IRQ_NONE;
 332        }
 333
 334        if (link_status_changed(card)) {
 335                int newlink;
 336                netdev_dbg(dev, "Link status has changed\n");
 337                newlink = link_status(card);
 338                netdev_info(dev, "Link is %d mbit\n", newlink);
 339                if (newlink)
 340                        netif_carrier_on(dev);
 341                else
 342                        netif_carrier_off(dev);
 343
 344        }
 345
 346        /* Clear all remaining interrupts */
 347        status |= 0xffffffff; /* FIXME: make this clear only the
 348                                        real existing bits */
 349        outl(status,card->io_port+CSR5);
 350
 351
 352        for (i=0;i<NUMDESCRIPTORS;i++)
 353                investigate_write_descriptor(dev,card,i,bufferoffsets[i]);
 354        for (i=0;i<NUMDESCRIPTORS;i++)
 355                investigate_read_descriptor(dev,card,i,bufferoffsets[i]);
 356
 357        spin_unlock(&card->lock);
 358        return IRQ_HANDLED;
 359}
 360
 361static netdev_tx_t xircom_start_xmit(struct sk_buff *skb,
 362                                           struct net_device *dev)
 363{
 364        struct xircom_private *card;
 365        unsigned long flags;
 366        int nextdescriptor;
 367        int desc;
 368
 369        card = netdev_priv(dev);
 370        spin_lock_irqsave(&card->lock,flags);
 371
 372        /* First see if we can free some descriptors */
 373        for (desc=0;desc<NUMDESCRIPTORS;desc++)
 374                investigate_write_descriptor(dev,card,desc,bufferoffsets[desc]);
 375
 376
 377        nextdescriptor = (card->transmit_used +1) % (NUMDESCRIPTORS);
 378        desc = card->transmit_used;
 379
 380        /* only send the packet if the descriptor is free */
 381        if (card->tx_buffer[4*desc]==0) {
 382                        /* Copy the packet data; zero the memory first as the card
 383                           sometimes sends more than you ask it to. */
 384
 385                        memset(&card->tx_buffer[bufferoffsets[desc]/4],0,1536);
 386                        skb_copy_from_linear_data(skb,
 387                                  &(card->tx_buffer[bufferoffsets[desc] / 4]),
 388                                                  skb->len);
 389                        /* FIXME: The specification tells us that the length we send HAS to be a multiple of
 390                           4 bytes. */
 391
 392                        card->tx_buffer[4*desc+1] = cpu_to_le32(skb->len);
 393                        if (desc == NUMDESCRIPTORS - 1) /* bit 25: last descriptor of the ring */
 394                                card->tx_buffer[4*desc+1] |= cpu_to_le32(1<<25);  
 395
 396                        card->tx_buffer[4*desc+1] |= cpu_to_le32(0xF0000000);
 397                                                 /* 0xF0... means want interrupts*/
 398                        card->tx_skb[desc] = skb;
 399
 400                        wmb();
 401                        /* This gives the descriptor to the card */
 402                        card->tx_buffer[4*desc] = cpu_to_le32(0x80000000);
 403                        trigger_transmit(card);
 404                        if (card->tx_buffer[nextdescriptor*4] & cpu_to_le32(0x8000000)) {
 405                                /* next descriptor is occupied... */
 406                                netif_stop_queue(dev);
 407                        }
 408                        card->transmit_used = nextdescriptor;
 409                        spin_unlock_irqrestore(&card->lock,flags);
 410                        return NETDEV_TX_OK;
 411        }
 412
 413        /* Uh oh... no free descriptor... drop the packet */
 414        netif_stop_queue(dev);
 415        spin_unlock_irqrestore(&card->lock,flags);
 416        trigger_transmit(card);
 417
 418        return NETDEV_TX_BUSY;
 419}
 420
 421
 422
 423
 424static int xircom_open(struct net_device *dev)
 425{
 426        struct xircom_private *xp = netdev_priv(dev);
 427        int retval;
 428
 429        netdev_info(dev, "xircom cardbus adaptor found, using irq %i\n",
 430                    dev->irq);
 431        retval = request_irq(dev->irq, xircom_interrupt, IRQF_SHARED, dev->name, dev);
 432        if (retval)
 433                return retval;
 434
 435        xircom_up(xp);
 436        xp->open = 1;
 437
 438        return 0;
 439}
 440
 441static int xircom_close(struct net_device *dev)
 442{
 443        struct xircom_private *card;
 444        unsigned long flags;
 445
 446        card = netdev_priv(dev);
 447        netif_stop_queue(dev); /* we don't want new packets */
 448
 449
 450        spin_lock_irqsave(&card->lock,flags);
 451
 452        disable_all_interrupts(card);
 453#if 0
 454        /* We can enable this again once we send dummy packets on ifconfig ethX up */
 455        deactivate_receiver(card);
 456        deactivate_transmitter(card);
 457#endif
 458        remove_descriptors(card);
 459
 460        spin_unlock_irqrestore(&card->lock,flags);
 461
 462        card->open = 0;
 463        free_irq(dev->irq,dev);
 464
 465        return 0;
 466
 467}
 468
 469
 470#ifdef CONFIG_NET_POLL_CONTROLLER
 471static void xircom_poll_controller(struct net_device *dev)
 472{
 473        disable_irq(dev->irq);
 474        xircom_interrupt(dev->irq, dev);
 475        enable_irq(dev->irq);
 476}
 477#endif
 478
 479
 480static void initialize_card(struct xircom_private *card)
 481{
 482        unsigned int val;
 483        unsigned long flags;
 484
 485        spin_lock_irqsave(&card->lock, flags);
 486
 487        /* First: reset the card */
 488        val = inl(card->io_port + CSR0);
 489        val |= 0x01;            /* Software reset */
 490        outl(val, card->io_port + CSR0);
 491
 492        udelay(100);            /* give the card some time to reset */
 493
 494        val = inl(card->io_port + CSR0);
 495        val &= ~0x01;           /* disable Software reset */
 496        outl(val, card->io_port + CSR0);
 497
 498
 499        val = 0;                /* Value 0x00 is a safe and conservative value
 500                                   for the PCI configuration settings */
 501        outl(val, card->io_port + CSR0);
 502
 503
 504        disable_all_interrupts(card);
 505        deactivate_receiver(card);
 506        deactivate_transmitter(card);
 507
 508        spin_unlock_irqrestore(&card->lock, flags);
 509}
 510
 511/*
 512trigger_transmit causes the card to check for frames to be transmitted.
 513This is accomplished by writing to the CSR1 port. The documentation
 514claims that the act of writing is sufficient and that the value is
 515ignored; I chose zero.
 516*/
 517static void trigger_transmit(struct xircom_private *card)
 518{
 519        unsigned int val;
 520
 521        val = 0;
 522        outl(val, card->io_port + CSR1);
 523}
 524
 525/*
 526trigger_receive causes the card to check for empty frames in the
 527descriptor list in which packets can be received.
 528This is accomplished by writing to the CSR2 port. The documentation
 529claims that the act of writing is sufficient and that the value is
 530ignored; I chose zero.
 531*/
 532static void trigger_receive(struct xircom_private *card)
 533{
 534        unsigned int val;
 535
 536        val = 0;
 537        outl(val, card->io_port + CSR2);
 538}
 539
 540/*
 541setup_descriptors initializes the send and receive buffers to be valid
 542descriptors and programs the addresses into the card.
 543*/
 544static void setup_descriptors(struct xircom_private *card)
 545{
 546        u32 address;
 547        int i;
 548
 549        BUG_ON(card->rx_buffer == NULL);
 550        BUG_ON(card->tx_buffer == NULL);
 551
 552        /* Receive descriptors */
 553        memset(card->rx_buffer, 0, 128);        /* clear the descriptors */
 554        for (i=0;i<NUMDESCRIPTORS;i++ ) {
 555
 556                /* Rx Descr0: It's empty, let the card own it, no errors -> 0x80000000 */
 557                card->rx_buffer[i*4 + 0] = cpu_to_le32(0x80000000);
 558                /* Rx Descr1: buffer 1 is 1536 bytes, buffer 2 is 0 bytes */
 559                card->rx_buffer[i*4 + 1] = cpu_to_le32(1536);
 560                if (i == NUMDESCRIPTORS - 1) /* bit 25 is "last descriptor" */
 561                        card->rx_buffer[i*4 + 1] |= cpu_to_le32(1 << 25);
 562
 563                /* Rx Descr2: address of the buffer
 564                   we store the buffer at the 2nd half of the page */
 565
 566                address = card->rx_dma_handle;
 567                card->rx_buffer[i*4 + 2] = cpu_to_le32(address + bufferoffsets[i]);
 568                /* Rx Desc3: address of 2nd buffer -> 0 */
 569                card->rx_buffer[i*4 + 3] = 0;
 570        }
 571
 572        wmb();
 573        /* Write the receive descriptor ring address to the card */
 574        address = card->rx_dma_handle;
 575        outl(address, card->io_port + CSR3);    /* Receive descr list address */
 576
 577
 578        /* transmit descriptors */
 579        memset(card->tx_buffer, 0, 128);        /* clear the descriptors */
 580
 581        for (i=0;i<NUMDESCRIPTORS;i++ ) {
 582                /* Tx Descr0: Empty, we own it, no errors -> 0x00000000 */
 583                card->tx_buffer[i*4 + 0] = 0x00000000;
 584                /* Tx Descr1: buffer 1 is 1536 bytes, buffer 2 is 0 bytes */
 585                card->tx_buffer[i*4 + 1] = cpu_to_le32(1536);
 586                if (i == NUMDESCRIPTORS - 1) /* bit 25 is "last descriptor" */
 587                        card->tx_buffer[i*4 + 1] |= cpu_to_le32(1 << 25);
 588
 589                /* Tx Descr2: address of the buffer
 590                   we store the buffer at the 2nd half of the page */
 591                address = card->tx_dma_handle;
 592                card->tx_buffer[i*4 + 2] = cpu_to_le32(address + bufferoffsets[i]);
 593                /* Tx Desc3: address of 2nd buffer -> 0 */
 594                card->tx_buffer[i*4 + 3] = 0;
 595        }
 596
 597        wmb();
 598        /* wite the transmit descriptor ring to the card */
 599        address = card->tx_dma_handle;
 600        outl(address, card->io_port + CSR4);    /* xmit descr list address */
 601}
 602
 603/*
 604remove_descriptors informs the card the descriptors are no longer
 605valid by setting the address in the card to 0x00.
 606*/
 607static void remove_descriptors(struct xircom_private *card)
 608{
 609        unsigned int val;
 610
 611        val = 0;
 612        outl(val, card->io_port + CSR3);        /* Receive descriptor address */
 613        outl(val, card->io_port + CSR4);        /* Send descriptor address */
 614}
 615
 616/*
 617link_status_changed returns 1 if the card has indicated that
 618the link status has changed. The new link status has to be read from CSR12.
 619
 620This function also clears the status-bit.
 621*/
 622static int link_status_changed(struct xircom_private *card)
 623{
 624        unsigned int val;
 625
 626        val = inl(card->io_port + CSR5);        /* Status register */
 627
 628        if ((val & (1 << 27)) == 0)             /* no change */
 629                return 0;
 630
 631        /* clear the event by writing a 1 to the bit in the
 632           status register. */
 633        val = (1 << 27);
 634        outl(val, card->io_port + CSR5);
 635
 636        return 1;
 637}
 638
 639
 640/*
 641transmit_active returns 1 if the transmitter on the card is
 642in a non-stopped state.
 643*/
 644static int transmit_active(struct xircom_private *card)
 645{
 646        unsigned int val;
 647
 648        val = inl(card->io_port + CSR5);        /* Status register */
 649
 650        if ((val & (7 << 20)) == 0)             /* transmitter disabled */
 651                return 0;
 652
 653        return 1;
 654}
 655
 656/*
 657receive_active returns 1 if the receiver on the card is
 658in a non-stopped state.
 659*/
 660static int receive_active(struct xircom_private *card)
 661{
 662        unsigned int val;
 663
 664        val = inl(card->io_port + CSR5);        /* Status register */
 665
 666        if ((val & (7 << 17)) == 0)             /* receiver disabled */
 667                return 0;
 668
 669        return 1;
 670}
 671
 672/*
 673activate_receiver enables the receiver on the card.
 674Before being allowed to active the receiver, the receiver
 675must be completely de-activated. To achieve this,
 676this code actually disables the receiver first; then it waits for the
 677receiver to become inactive, then it activates the receiver and then
 678it waits for the receiver to be active.
 679
 680must be called with the lock held and interrupts disabled.
 681*/
 682static void activate_receiver(struct xircom_private *card)
 683{
 684        unsigned int val;
 685        int counter;
 686
 687        val = inl(card->io_port + CSR6);        /* Operation mode */
 688
 689        /* If the "active" bit is set and the receiver is already
 690           active, no need to do the expensive thing */
 691        if ((val&2) && (receive_active(card)))
 692                return;
 693
 694
 695        val = val & ~2;         /* disable the receiver */
 696        outl(val, card->io_port + CSR6);
 697
 698        counter = 10;
 699        while (counter > 0) {
 700                if (!receive_active(card))
 701                        break;
 702                /* wait a while */
 703                udelay(50);
 704                counter--;
 705                if (counter <= 0)
 706                        netdev_err(card->dev, "Receiver failed to deactivate\n");
 707        }
 708
 709        /* enable the receiver */
 710        val = inl(card->io_port + CSR6);        /* Operation mode */
 711        val = val | 2;                          /* enable the receiver */
 712        outl(val, card->io_port + CSR6);
 713
 714        /* now wait for the card to activate again */
 715        counter = 10;
 716        while (counter > 0) {
 717                if (receive_active(card))
 718                        break;
 719                /* wait a while */
 720                udelay(50);
 721                counter--;
 722                if (counter <= 0)
 723                        netdev_err(card->dev,
 724                                   "Receiver failed to re-activate\n");
 725        }
 726}
 727
 728/*
 729deactivate_receiver disables the receiver on the card.
 730To achieve this this code disables the receiver first;
 731then it waits for the receiver to become inactive.
 732
 733must be called with the lock held and interrupts disabled.
 734*/
 735static void deactivate_receiver(struct xircom_private *card)
 736{
 737        unsigned int val;
 738        int counter;
 739
 740        val = inl(card->io_port + CSR6);        /* Operation mode */
 741        val = val & ~2;                         /* disable the receiver */
 742        outl(val, card->io_port + CSR6);
 743
 744        counter = 10;
 745        while (counter > 0) {
 746                if (!receive_active(card))
 747                        break;
 748                /* wait a while */
 749                udelay(50);
 750                counter--;
 751                if (counter <= 0)
 752                        netdev_err(card->dev, "Receiver failed to deactivate\n");
 753        }
 754}
 755
 756
 757/*
 758activate_transmitter enables the transmitter on the card.
 759Before being allowed to active the transmitter, the transmitter
 760must be completely de-activated. To achieve this,
 761this code actually disables the transmitter first; then it waits for the
 762transmitter to become inactive, then it activates the transmitter and then
 763it waits for the transmitter to be active again.
 764
 765must be called with the lock held and interrupts disabled.
 766*/
 767static void activate_transmitter(struct xircom_private *card)
 768{
 769        unsigned int val;
 770        int counter;
 771
 772        val = inl(card->io_port + CSR6);        /* Operation mode */
 773
 774        /* If the "active" bit is set and the receiver is already
 775           active, no need to do the expensive thing */
 776        if ((val&(1<<13)) && (transmit_active(card)))
 777                return;
 778
 779        val = val & ~(1 << 13); /* disable the transmitter */
 780        outl(val, card->io_port + CSR6);
 781
 782        counter = 10;
 783        while (counter > 0) {
 784                if (!transmit_active(card))
 785                        break;
 786                /* wait a while */
 787                udelay(50);
 788                counter--;
 789                if (counter <= 0)
 790                        netdev_err(card->dev,
 791                                   "Transmitter failed to deactivate\n");
 792        }
 793
 794        /* enable the transmitter */
 795        val = inl(card->io_port + CSR6);        /* Operation mode */
 796        val = val | (1 << 13);  /* enable the transmitter */
 797        outl(val, card->io_port + CSR6);
 798
 799        /* now wait for the card to activate again */
 800        counter = 10;
 801        while (counter > 0) {
 802                if (transmit_active(card))
 803                        break;
 804                /* wait a while */
 805                udelay(50);
 806                counter--;
 807                if (counter <= 0)
 808                        netdev_err(card->dev,
 809                                   "Transmitter failed to re-activate\n");
 810        }
 811}
 812
 813/*
 814deactivate_transmitter disables the transmitter on the card.
 815To achieve this this code disables the transmitter first;
 816then it waits for the transmitter to become inactive.
 817
 818must be called with the lock held and interrupts disabled.
 819*/
 820static void deactivate_transmitter(struct xircom_private *card)
 821{
 822        unsigned int val;
 823        int counter;
 824
 825        val = inl(card->io_port + CSR6);        /* Operation mode */
 826        val = val & ~2;         /* disable the transmitter */
 827        outl(val, card->io_port + CSR6);
 828
 829        counter = 20;
 830        while (counter > 0) {
 831                if (!transmit_active(card))
 832                        break;
 833                /* wait a while */
 834                udelay(50);
 835                counter--;
 836                if (counter <= 0)
 837                        netdev_err(card->dev,
 838                                   "Transmitter failed to deactivate\n");
 839        }
 840}
 841
 842
 843/*
 844enable_transmit_interrupt enables the transmit interrupt
 845
 846must be called with the lock held and interrupts disabled.
 847*/
 848static void enable_transmit_interrupt(struct xircom_private *card)
 849{
 850        unsigned int val;
 851
 852        val = inl(card->io_port + CSR7);        /* Interrupt enable register */
 853        val |= 1;                               /* enable the transmit interrupt */
 854        outl(val, card->io_port + CSR7);
 855}
 856
 857
 858/*
 859enable_receive_interrupt enables the receive interrupt
 860
 861must be called with the lock held and interrupts disabled.
 862*/
 863static void enable_receive_interrupt(struct xircom_private *card)
 864{
 865        unsigned int val;
 866
 867        val = inl(card->io_port + CSR7);        /* Interrupt enable register */
 868        val = val | (1 << 6);                   /* enable the receive interrupt */
 869        outl(val, card->io_port + CSR7);
 870}
 871
 872/*
 873enable_link_interrupt enables the link status change interrupt
 874
 875must be called with the lock held and interrupts disabled.
 876*/
 877static void enable_link_interrupt(struct xircom_private *card)
 878{
 879        unsigned int val;
 880
 881        val = inl(card->io_port + CSR7);        /* Interrupt enable register */
 882        val = val | (1 << 27);                  /* enable the link status chage interrupt */
 883        outl(val, card->io_port + CSR7);
 884}
 885
 886
 887
 888/*
 889disable_all_interrupts disables all interrupts
 890
 891must be called with the lock held and interrupts disabled.
 892*/
 893static void disable_all_interrupts(struct xircom_private *card)
 894{
 895        unsigned int val;
 896
 897        val = 0;                                /* disable all interrupts */
 898        outl(val, card->io_port + CSR7);
 899}
 900
 901/*
 902enable_common_interrupts enables several weird interrupts
 903
 904must be called with the lock held and interrupts disabled.
 905*/
 906static void enable_common_interrupts(struct xircom_private *card)
 907{
 908        unsigned int val;
 909
 910        val = inl(card->io_port + CSR7);        /* Interrupt enable register */
 911        val |= (1<<16); /* Normal Interrupt Summary */
 912        val |= (1<<15); /* Abnormal Interrupt Summary */
 913        val |= (1<<13); /* Fatal bus error */
 914        val |= (1<<8);  /* Receive Process Stopped */
 915        val |= (1<<7);  /* Receive Buffer Unavailable */
 916        val |= (1<<5);  /* Transmit Underflow */
 917        val |= (1<<2);  /* Transmit Buffer Unavailable */
 918        val |= (1<<1);  /* Transmit Process Stopped */
 919        outl(val, card->io_port + CSR7);
 920}
 921
 922/*
 923enable_promisc starts promisc mode
 924
 925must be called with the lock held and interrupts disabled.
 926*/
 927static int enable_promisc(struct xircom_private *card)
 928{
 929        unsigned int val;
 930
 931        val = inl(card->io_port + CSR6);
 932        val = val | (1 << 6);
 933        outl(val, card->io_port + CSR6);
 934
 935        return 1;
 936}
 937
 938
 939
 940
 941/*
 942link_status() checks the links status and will return 0 for no link, 10 for 10mbit link and 100 for.. guess what.
 943
 944Must be called in locked state with interrupts disabled
 945*/
 946static int link_status(struct xircom_private *card)
 947{
 948        unsigned int val;
 949
 950        val = inb(card->io_port + CSR12);
 951
 952        if (!(val&(1<<2)))  /* bit 2 is 0 for 10mbit link, 1 for not an 10mbit link */
 953                return 10;
 954        if (!(val&(1<<1)))  /* bit 1 is 0 for 100mbit link, 1 for not an 100mbit link */
 955                return 100;
 956
 957        /* If we get here -> no link at all */
 958
 959        return 0;
 960}
 961
 962
 963
 964
 965
 966/*
 967  read_mac_address() reads the MAC address from the NIC and stores it in the "dev" structure.
 968
 969  This function will take the spinlock itself and can, as a result, not be called with the lock helt.
 970 */
 971static void read_mac_address(struct xircom_private *card)
 972{
 973        unsigned char j, tuple, link, data_id, data_count;
 974        unsigned long flags;
 975        int i;
 976
 977        spin_lock_irqsave(&card->lock, flags);
 978
 979        outl(1 << 12, card->io_port + CSR9);    /* enable boot rom access */
 980        for (i = 0x100; i < 0x1f7; i += link + 2) {
 981                outl(i, card->io_port + CSR10);
 982                tuple = inl(card->io_port + CSR9) & 0xff;
 983                outl(i + 1, card->io_port + CSR10);
 984                link = inl(card->io_port + CSR9) & 0xff;
 985                outl(i + 2, card->io_port + CSR10);
 986                data_id = inl(card->io_port + CSR9) & 0xff;
 987                outl(i + 3, card->io_port + CSR10);
 988                data_count = inl(card->io_port + CSR9) & 0xff;
 989                if ((tuple == 0x22) && (data_id == 0x04) && (data_count == 0x06)) {
 990                        /*
 991                         * This is it.  We have the data we want.
 992                         */
 993                        for (j = 0; j < 6; j++) {
 994                                outl(i + j + 4, card->io_port + CSR10);
 995                                card->dev->dev_addr[j] = inl(card->io_port + CSR9) & 0xff;
 996                        }
 997                        break;
 998                } else if (link == 0) {
 999                        break;
1000                }
1001        }
1002        spin_unlock_irqrestore(&card->lock, flags);
1003        pr_debug(" %pM\n", card->dev->dev_addr);
1004}
1005
1006
1007/*
1008 transceiver_voodoo() enables the external UTP plug thingy.
1009 it's called voodoo as I stole this code and cannot cross-reference
1010 it with the specification.
1011 */
1012static void transceiver_voodoo(struct xircom_private *card)
1013{
1014        unsigned long flags;
1015
1016        /* disable all powermanagement */
1017        pci_write_config_dword(card->pdev, PCI_POWERMGMT, 0x0000);
1018
1019        setup_descriptors(card);
1020
1021        spin_lock_irqsave(&card->lock, flags);
1022
1023        outl(0x0008, card->io_port + CSR15);
1024        udelay(25);
1025        outl(0xa8050000, card->io_port + CSR15);
1026        udelay(25);
1027        outl(0xa00f0000, card->io_port + CSR15);
1028        udelay(25);
1029
1030        spin_unlock_irqrestore(&card->lock, flags);
1031
1032        netif_start_queue(card->dev);
1033}
1034
1035
1036static void xircom_up(struct xircom_private *card)
1037{
1038        unsigned long flags;
1039        int i;
1040
1041        /* disable all powermanagement */
1042        pci_write_config_dword(card->pdev, PCI_POWERMGMT, 0x0000);
1043
1044        setup_descriptors(card);
1045
1046        spin_lock_irqsave(&card->lock, flags);
1047
1048
1049        enable_link_interrupt(card);
1050        enable_transmit_interrupt(card);
1051        enable_receive_interrupt(card);
1052        enable_common_interrupts(card);
1053        enable_promisc(card);
1054
1055        /* The card can have received packets already, read them away now */
1056        for (i=0;i<NUMDESCRIPTORS;i++)
1057                investigate_read_descriptor(card->dev,card,i,bufferoffsets[i]);
1058
1059
1060        spin_unlock_irqrestore(&card->lock, flags);
1061        trigger_receive(card);
1062        trigger_transmit(card);
1063        netif_start_queue(card->dev);
1064}
1065
1066/* Bufferoffset is in BYTES */
1067static void
1068investigate_read_descriptor(struct net_device *dev, struct xircom_private *card,
1069                            int descnr, unsigned int bufferoffset)
1070{
1071        int status;
1072
1073        status = le32_to_cpu(card->rx_buffer[4*descnr]);
1074
1075        if (status > 0) {               /* packet received */
1076
1077                /* TODO: discard error packets */
1078
1079                short pkt_len = ((status >> 16) & 0x7ff) - 4;
1080                                        /* minus 4, we don't want the CRC */
1081                struct sk_buff *skb;
1082
1083                if (pkt_len > 1518) {
1084                        netdev_err(dev, "Packet length %i is bogus\n", pkt_len);
1085                        pkt_len = 1518;
1086                }
1087
1088                skb = dev_alloc_skb(pkt_len + 2);
1089                if (skb == NULL) {
1090                        dev->stats.rx_dropped++;
1091                        goto out;
1092                }
1093                skb_reserve(skb, 2);
1094                skb_copy_to_linear_data(skb,
1095                                        &card->rx_buffer[bufferoffset / 4],
1096                                        pkt_len);
1097                skb_put(skb, pkt_len);
1098                skb->protocol = eth_type_trans(skb, dev);
1099                netif_rx(skb);
1100                dev->stats.rx_packets++;
1101                dev->stats.rx_bytes += pkt_len;
1102
1103out:
1104                /* give the buffer back to the card */
1105                card->rx_buffer[4*descnr] = cpu_to_le32(0x80000000);
1106                trigger_receive(card);
1107        }
1108}
1109
1110
1111/* Bufferoffset is in BYTES */
1112static void
1113investigate_write_descriptor(struct net_device *dev,
1114                             struct xircom_private *card,
1115                             int descnr, unsigned int bufferoffset)
1116{
1117        int status;
1118
1119        status = le32_to_cpu(card->tx_buffer[4*descnr]);
1120#if 0
1121        if (status & 0x8000) {  /* Major error */
1122                pr_err("Major transmit error status %x\n", status);
1123                card->tx_buffer[4*descnr] = 0;
1124                netif_wake_queue (dev);
1125        }
1126#endif
1127        if (status > 0) {       /* bit 31 is 0 when done */
1128                if (card->tx_skb[descnr]!=NULL) {
1129                        dev->stats.tx_bytes += card->tx_skb[descnr]->len;
1130                        dev_kfree_skb_irq(card->tx_skb[descnr]);
1131                }
1132                card->tx_skb[descnr] = NULL;
1133                /* Bit 8 in the status field is 1 if there was a collision */
1134                if (status & (1 << 8))
1135                        dev->stats.collisions++;
1136                card->tx_buffer[4*descnr] = 0; /* descriptor is free again */
1137                netif_wake_queue (dev);
1138                dev->stats.tx_packets++;
1139        }
1140}
1141
1142static int __init xircom_init(void)
1143{
1144        return pci_register_driver(&xircom_ops);
1145}
1146
1147static void __exit xircom_exit(void)
1148{
1149        pci_unregister_driver(&xircom_ops);
1150}
1151
1152module_init(xircom_init)
1153module_exit(xircom_exit)
1154
1155