linux/drivers/staging/qlge/qlge_main.c
<<
>>
Prefs
   1/*
   2 * QLogic qlge NIC HBA Driver
   3 * Copyright (c)  2003-2008 QLogic Corporation
   4 * See LICENSE.qlge for copyright and licensing details.
   5 * Author:     Linux qlge network device driver by
   6 *                      Ron Mercer <ron.mercer@qlogic.com>
   7 */
   8#include <linux/kernel.h>
   9#include <linux/bitops.h>
  10#include <linux/types.h>
  11#include <linux/module.h>
  12#include <linux/list.h>
  13#include <linux/pci.h>
  14#include <linux/dma-mapping.h>
  15#include <linux/pagemap.h>
  16#include <linux/sched.h>
  17#include <linux/slab.h>
  18#include <linux/dmapool.h>
  19#include <linux/mempool.h>
  20#include <linux/spinlock.h>
  21#include <linux/kthread.h>
  22#include <linux/interrupt.h>
  23#include <linux/errno.h>
  24#include <linux/ioport.h>
  25#include <linux/in.h>
  26#include <linux/ip.h>
  27#include <linux/ipv6.h>
  28#include <net/ipv6.h>
  29#include <linux/tcp.h>
  30#include <linux/udp.h>
  31#include <linux/if_arp.h>
  32#include <linux/if_ether.h>
  33#include <linux/netdevice.h>
  34#include <linux/etherdevice.h>
  35#include <linux/ethtool.h>
  36#include <linux/if_vlan.h>
  37#include <linux/skbuff.h>
  38#include <linux/delay.h>
  39#include <linux/mm.h>
  40#include <linux/vmalloc.h>
  41#include <linux/prefetch.h>
  42#include <net/ip6_checksum.h>
  43
  44#include "qlge.h"
  45
  46char qlge_driver_name[] = DRV_NAME;
  47const char qlge_driver_version[] = DRV_VERSION;
  48
  49MODULE_AUTHOR("Ron Mercer <ron.mercer@qlogic.com>");
  50MODULE_DESCRIPTION(DRV_STRING " ");
  51MODULE_LICENSE("GPL");
  52MODULE_VERSION(DRV_VERSION);
  53
  54static const u32 default_msg =
  55        NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK |
  56        NETIF_MSG_IFDOWN |
  57        NETIF_MSG_IFUP |
  58        NETIF_MSG_RX_ERR |
  59        NETIF_MSG_TX_ERR |
  60        NETIF_MSG_HW | NETIF_MSG_WOL | 0;
  61
  62static int debug = -1;  /* defaults above */
  63module_param(debug, int, 0664);
  64MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
  65
  66#define MSIX_IRQ 0
  67#define MSI_IRQ 1
  68#define LEG_IRQ 2
  69static int qlge_irq_type = MSIX_IRQ;
  70module_param(qlge_irq_type, int, 0664);
  71MODULE_PARM_DESC(qlge_irq_type, "0 = MSI-X, 1 = MSI, 2 = Legacy.");
  72
  73static int qlge_mpi_coredump;
  74module_param(qlge_mpi_coredump, int, 0);
  75MODULE_PARM_DESC(qlge_mpi_coredump,
  76                 "Option to enable MPI firmware dump. Default is OFF - Do Not allocate memory. ");
  77
  78static int qlge_force_coredump;
  79module_param(qlge_force_coredump, int, 0);
  80MODULE_PARM_DESC(qlge_force_coredump,
  81                 "Option to allow force of firmware core dump. Default is OFF - Do not allow.");
  82
  83static const struct pci_device_id qlge_pci_tbl[] = {
  84        {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QLGE_DEVICE_ID_8012)},
  85        {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QLGE_DEVICE_ID_8000)},
  86        /* required last entry */
  87        {0,}
  88};
  89
  90MODULE_DEVICE_TABLE(pci, qlge_pci_tbl);
  91
  92static int ql_wol(struct ql_adapter *);
  93static void qlge_set_multicast_list(struct net_device *);
  94static int ql_adapter_down(struct ql_adapter *);
  95static int ql_adapter_up(struct ql_adapter *);
  96
  97/* This hardware semaphore causes exclusive access to
  98 * resources shared between the NIC driver, MPI firmware,
  99 * FCOE firmware and the FC driver.
 100 */
 101static int ql_sem_trylock(struct ql_adapter *qdev, u32 sem_mask)
 102{
 103        u32 sem_bits = 0;
 104
 105        switch (sem_mask) {
 106        case SEM_XGMAC0_MASK:
 107                sem_bits = SEM_SET << SEM_XGMAC0_SHIFT;
 108                break;
 109        case SEM_XGMAC1_MASK:
 110                sem_bits = SEM_SET << SEM_XGMAC1_SHIFT;
 111                break;
 112        case SEM_ICB_MASK:
 113                sem_bits = SEM_SET << SEM_ICB_SHIFT;
 114                break;
 115        case SEM_MAC_ADDR_MASK:
 116                sem_bits = SEM_SET << SEM_MAC_ADDR_SHIFT;
 117                break;
 118        case SEM_FLASH_MASK:
 119                sem_bits = SEM_SET << SEM_FLASH_SHIFT;
 120                break;
 121        case SEM_PROBE_MASK:
 122                sem_bits = SEM_SET << SEM_PROBE_SHIFT;
 123                break;
 124        case SEM_RT_IDX_MASK:
 125                sem_bits = SEM_SET << SEM_RT_IDX_SHIFT;
 126                break;
 127        case SEM_PROC_REG_MASK:
 128                sem_bits = SEM_SET << SEM_PROC_REG_SHIFT;
 129                break;
 130        default:
 131                netif_alert(qdev, probe, qdev->ndev, "bad Semaphore mask!.\n");
 132                return -EINVAL;
 133        }
 134
 135        ql_write32(qdev, SEM, sem_bits | sem_mask);
 136        return !(ql_read32(qdev, SEM) & sem_bits);
 137}
 138
 139int ql_sem_spinlock(struct ql_adapter *qdev, u32 sem_mask)
 140{
 141        unsigned int wait_count = 30;
 142
 143        do {
 144                if (!ql_sem_trylock(qdev, sem_mask))
 145                        return 0;
 146                udelay(100);
 147        } while (--wait_count);
 148        return -ETIMEDOUT;
 149}
 150
 151void ql_sem_unlock(struct ql_adapter *qdev, u32 sem_mask)
 152{
 153        ql_write32(qdev, SEM, sem_mask);
 154        ql_read32(qdev, SEM);   /* flush */
 155}
 156
 157/* This function waits for a specific bit to come ready
 158 * in a given register.  It is used mostly by the initialize
 159 * process, but is also used in kernel thread API such as
 160 * netdev->set_multi, netdev->set_mac_address, netdev->vlan_rx_add_vid.
 161 */
 162int ql_wait_reg_rdy(struct ql_adapter *qdev, u32 reg, u32 bit, u32 err_bit)
 163{
 164        u32 temp;
 165        int count;
 166
 167        for (count = 0; count < UDELAY_COUNT; count++) {
 168                temp = ql_read32(qdev, reg);
 169
 170                /* check for errors */
 171                if (temp & err_bit) {
 172                        netif_alert(qdev, probe, qdev->ndev,
 173                                    "register 0x%.08x access error, value = 0x%.08x!.\n",
 174                                    reg, temp);
 175                        return -EIO;
 176                } else if (temp & bit) {
 177                        return 0;
 178                }
 179                udelay(UDELAY_DELAY);
 180        }
 181        netif_alert(qdev, probe, qdev->ndev,
 182                    "Timed out waiting for reg %x to come ready.\n", reg);
 183        return -ETIMEDOUT;
 184}
 185
 186/* The CFG register is used to download TX and RX control blocks
 187 * to the chip. This function waits for an operation to complete.
 188 */
 189static int ql_wait_cfg(struct ql_adapter *qdev, u32 bit)
 190{
 191        int count;
 192        u32 temp;
 193
 194        for (count = 0; count < UDELAY_COUNT; count++) {
 195                temp = ql_read32(qdev, CFG);
 196                if (temp & CFG_LE)
 197                        return -EIO;
 198                if (!(temp & bit))
 199                        return 0;
 200                udelay(UDELAY_DELAY);
 201        }
 202        return -ETIMEDOUT;
 203}
 204
 205/* Used to issue init control blocks to hw. Maps control block,
 206 * sets address, triggers download, waits for completion.
 207 */
 208int ql_write_cfg(struct ql_adapter *qdev, void *ptr, int size, u32 bit,
 209                 u16 q_id)
 210{
 211        u64 map;
 212        int status = 0;
 213        int direction;
 214        u32 mask;
 215        u32 value;
 216
 217        if (bit & (CFG_LRQ | CFG_LR | CFG_LCQ))
 218                direction = DMA_TO_DEVICE;
 219        else
 220                direction = DMA_FROM_DEVICE;
 221
 222        map = dma_map_single(&qdev->pdev->dev, ptr, size, direction);
 223        if (dma_mapping_error(&qdev->pdev->dev, map)) {
 224                netif_err(qdev, ifup, qdev->ndev, "Couldn't map DMA area.\n");
 225                return -ENOMEM;
 226        }
 227
 228        status = ql_sem_spinlock(qdev, SEM_ICB_MASK);
 229        if (status)
 230                goto lock_failed;
 231
 232        status = ql_wait_cfg(qdev, bit);
 233        if (status) {
 234                netif_err(qdev, ifup, qdev->ndev,
 235                          "Timed out waiting for CFG to come ready.\n");
 236                goto exit;
 237        }
 238
 239        ql_write32(qdev, ICB_L, (u32)map);
 240        ql_write32(qdev, ICB_H, (u32)(map >> 32));
 241
 242        mask = CFG_Q_MASK | (bit << 16);
 243        value = bit | (q_id << CFG_Q_SHIFT);
 244        ql_write32(qdev, CFG, (mask | value));
 245
 246        /*
 247         * Wait for the bit to clear after signaling hw.
 248         */
 249        status = ql_wait_cfg(qdev, bit);
 250exit:
 251        ql_sem_unlock(qdev, SEM_ICB_MASK);      /* does flush too */
 252lock_failed:
 253        dma_unmap_single(&qdev->pdev->dev, map, size, direction);
 254        return status;
 255}
 256
 257/* Get a specific MAC address from the CAM.  Used for debug and reg dump. */
 258int ql_get_mac_addr_reg(struct ql_adapter *qdev, u32 type, u16 index,
 259                        u32 *value)
 260{
 261        u32 offset = 0;
 262        int status;
 263
 264        switch (type) {
 265        case MAC_ADDR_TYPE_MULTI_MAC:
 266        case MAC_ADDR_TYPE_CAM_MAC: {
 267                status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
 268                if (status)
 269                        break;
 270                ql_write32(qdev, MAC_ADDR_IDX,
 271                           (offset++) | /* offset */
 272                                   (index << MAC_ADDR_IDX_SHIFT) | /* index */
 273                                   MAC_ADDR_ADR | MAC_ADDR_RS |
 274                                   type); /* type */
 275                status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MR, 0);
 276                if (status)
 277                        break;
 278                *value++ = ql_read32(qdev, MAC_ADDR_DATA);
 279                status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
 280                if (status)
 281                        break;
 282                ql_write32(qdev, MAC_ADDR_IDX,
 283                           (offset++) | /* offset */
 284                                   (index << MAC_ADDR_IDX_SHIFT) | /* index */
 285                                   MAC_ADDR_ADR | MAC_ADDR_RS |
 286                                   type); /* type */
 287                status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MR, 0);
 288                if (status)
 289                        break;
 290                *value++ = ql_read32(qdev, MAC_ADDR_DATA);
 291                if (type == MAC_ADDR_TYPE_CAM_MAC) {
 292                        status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX,
 293                                                 MAC_ADDR_MW, 0);
 294                        if (status)
 295                                break;
 296                        ql_write32(qdev, MAC_ADDR_IDX,
 297                                   (offset++) | /* offset */
 298                                           (index
 299                                            << MAC_ADDR_IDX_SHIFT) | /* index */
 300                                           MAC_ADDR_ADR |
 301                                           MAC_ADDR_RS | type); /* type */
 302                        status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX,
 303                                                 MAC_ADDR_MR, 0);
 304                        if (status)
 305                                break;
 306                        *value++ = ql_read32(qdev, MAC_ADDR_DATA);
 307                }
 308                break;
 309        }
 310        case MAC_ADDR_TYPE_VLAN:
 311        case MAC_ADDR_TYPE_MULTI_FLTR:
 312        default:
 313                netif_crit(qdev, ifup, qdev->ndev,
 314                           "Address type %d not yet supported.\n", type);
 315                status = -EPERM;
 316        }
 317        return status;
 318}
 319
 320/* Set up a MAC, multicast or VLAN address for the
 321 * inbound frame matching.
 322 */
 323static int ql_set_mac_addr_reg(struct ql_adapter *qdev, u8 *addr, u32 type,
 324                               u16 index)
 325{
 326        u32 offset = 0;
 327        int status = 0;
 328
 329        switch (type) {
 330        case MAC_ADDR_TYPE_MULTI_MAC: {
 331                u32 upper = (addr[0] << 8) | addr[1];
 332                u32 lower = (addr[2] << 24) | (addr[3] << 16) | (addr[4] << 8) |
 333                            (addr[5]);
 334
 335                status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
 336                if (status)
 337                        break;
 338                ql_write32(qdev, MAC_ADDR_IDX,
 339                           (offset++) | (index << MAC_ADDR_IDX_SHIFT) | type |
 340                                   MAC_ADDR_E);
 341                ql_write32(qdev, MAC_ADDR_DATA, lower);
 342                status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
 343                if (status)
 344                        break;
 345                ql_write32(qdev, MAC_ADDR_IDX,
 346                           (offset++) | (index << MAC_ADDR_IDX_SHIFT) | type |
 347                                   MAC_ADDR_E);
 348
 349                ql_write32(qdev, MAC_ADDR_DATA, upper);
 350                status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
 351                break;
 352        }
 353        case MAC_ADDR_TYPE_CAM_MAC: {
 354                u32 cam_output;
 355                u32 upper = (addr[0] << 8) | addr[1];
 356                u32 lower = (addr[2] << 24) | (addr[3] << 16) | (addr[4] << 8) |
 357                            (addr[5]);
 358                status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
 359                if (status)
 360                        break;
 361                ql_write32(qdev, MAC_ADDR_IDX,
 362                           (offset++) | /* offset */
 363                                   (index << MAC_ADDR_IDX_SHIFT) | /* index */
 364                                   type); /* type */
 365                ql_write32(qdev, MAC_ADDR_DATA, lower);
 366                status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
 367                if (status)
 368                        break;
 369                ql_write32(qdev, MAC_ADDR_IDX,
 370                           (offset++) | /* offset */
 371                                   (index << MAC_ADDR_IDX_SHIFT) | /* index */
 372                                   type); /* type */
 373                ql_write32(qdev, MAC_ADDR_DATA, upper);
 374                status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
 375                if (status)
 376                        break;
 377                ql_write32(qdev, MAC_ADDR_IDX,
 378                           (offset) | /* offset */
 379                                   (index << MAC_ADDR_IDX_SHIFT) | /* index */
 380                                   type); /* type */
 381                /* This field should also include the queue id
 382                 * and possibly the function id.  Right now we hardcode
 383                 * the route field to NIC core.
 384                 */
 385                cam_output = (CAM_OUT_ROUTE_NIC |
 386                              (qdev->func << CAM_OUT_FUNC_SHIFT) |
 387                              (0 << CAM_OUT_CQ_ID_SHIFT));
 388                if (qdev->ndev->features & NETIF_F_HW_VLAN_CTAG_RX)
 389                        cam_output |= CAM_OUT_RV;
 390                /* route to NIC core */
 391                ql_write32(qdev, MAC_ADDR_DATA, cam_output);
 392                break;
 393        }
 394        case MAC_ADDR_TYPE_VLAN: {
 395                u32 enable_bit = *((u32 *)&addr[0]);
 396                /* For VLAN, the addr actually holds a bit that
 397                 * either enables or disables the vlan id we are
 398                 * addressing. It's either MAC_ADDR_E on or off.
 399                 * That's bit-27 we're talking about.
 400                 */
 401                status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
 402                if (status)
 403                        break;
 404                ql_write32(qdev, MAC_ADDR_IDX,
 405                           offset | /* offset */
 406                                   (index << MAC_ADDR_IDX_SHIFT) | /* index */
 407                                   type | /* type */
 408                                   enable_bit); /* enable/disable */
 409                break;
 410        }
 411        case MAC_ADDR_TYPE_MULTI_FLTR:
 412        default:
 413                netif_crit(qdev, ifup, qdev->ndev,
 414                           "Address type %d not yet supported.\n", type);
 415                status = -EPERM;
 416        }
 417        return status;
 418}
 419
 420/* Set or clear MAC address in hardware. We sometimes
 421 * have to clear it to prevent wrong frame routing
 422 * especially in a bonding environment.
 423 */
 424static int ql_set_mac_addr(struct ql_adapter *qdev, int set)
 425{
 426        int status;
 427        char zero_mac_addr[ETH_ALEN];
 428        char *addr;
 429
 430        if (set) {
 431                addr = &qdev->current_mac_addr[0];
 432                netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
 433                             "Set Mac addr %pM\n", addr);
 434        } else {
 435                eth_zero_addr(zero_mac_addr);
 436                addr = &zero_mac_addr[0];
 437                netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
 438                             "Clearing MAC address\n");
 439        }
 440        status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
 441        if (status)
 442                return status;
 443        status = ql_set_mac_addr_reg(qdev, (u8 *)addr,
 444                                     MAC_ADDR_TYPE_CAM_MAC,
 445                                     qdev->func * MAX_CQ);
 446        ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
 447        if (status)
 448                netif_err(qdev, ifup, qdev->ndev,
 449                          "Failed to init mac address.\n");
 450        return status;
 451}
 452
 453void ql_link_on(struct ql_adapter *qdev)
 454{
 455        netif_err(qdev, link, qdev->ndev, "Link is up.\n");
 456        netif_carrier_on(qdev->ndev);
 457        ql_set_mac_addr(qdev, 1);
 458}
 459
 460void ql_link_off(struct ql_adapter *qdev)
 461{
 462        netif_err(qdev, link, qdev->ndev, "Link is down.\n");
 463        netif_carrier_off(qdev->ndev);
 464        ql_set_mac_addr(qdev, 0);
 465}
 466
 467/* Get a specific frame routing value from the CAM.
 468 * Used for debug and reg dump.
 469 */
 470int ql_get_routing_reg(struct ql_adapter *qdev, u32 index, u32 *value)
 471{
 472        int status = 0;
 473
 474        status = ql_wait_reg_rdy(qdev, RT_IDX, RT_IDX_MW, 0);
 475        if (status)
 476                goto exit;
 477
 478        ql_write32(qdev, RT_IDX,
 479                   RT_IDX_TYPE_NICQ | RT_IDX_RS | (index << RT_IDX_IDX_SHIFT));
 480        status = ql_wait_reg_rdy(qdev, RT_IDX, RT_IDX_MR, 0);
 481        if (status)
 482                goto exit;
 483        *value = ql_read32(qdev, RT_DATA);
 484exit:
 485        return status;
 486}
 487
 488/* The NIC function for this chip has 16 routing indexes.  Each one can be used
 489 * to route different frame types to various inbound queues.  We send broadcast/
 490 * multicast/error frames to the default queue for slow handling,
 491 * and CAM hit/RSS frames to the fast handling queues.
 492 */
 493static int ql_set_routing_reg(struct ql_adapter *qdev, u32 index, u32 mask,
 494                              int enable)
 495{
 496        int status = -EINVAL; /* Return error if no mask match. */
 497        u32 value = 0;
 498
 499        switch (mask) {
 500        case RT_IDX_CAM_HIT:
 501                {
 502                        value = RT_IDX_DST_CAM_Q |      /* dest */
 503                            RT_IDX_TYPE_NICQ |  /* type */
 504                            (RT_IDX_CAM_HIT_SLOT << RT_IDX_IDX_SHIFT);/* index */
 505                        break;
 506                }
 507        case RT_IDX_VALID:      /* Promiscuous Mode frames. */
 508                {
 509                        value = RT_IDX_DST_DFLT_Q |     /* dest */
 510                            RT_IDX_TYPE_NICQ |  /* type */
 511                            (RT_IDX_PROMISCUOUS_SLOT << RT_IDX_IDX_SHIFT);/* index */
 512                        break;
 513                }
 514        case RT_IDX_ERR:        /* Pass up MAC,IP,TCP/UDP error frames. */
 515                {
 516                        value = RT_IDX_DST_DFLT_Q |     /* dest */
 517                            RT_IDX_TYPE_NICQ |  /* type */
 518                            (RT_IDX_ALL_ERR_SLOT << RT_IDX_IDX_SHIFT);/* index */
 519                        break;
 520                }
 521        case RT_IDX_IP_CSUM_ERR: /* Pass up IP CSUM error frames. */
 522                {
 523                        value = RT_IDX_DST_DFLT_Q | /* dest */
 524                                RT_IDX_TYPE_NICQ | /* type */
 525                                (RT_IDX_IP_CSUM_ERR_SLOT <<
 526                                RT_IDX_IDX_SHIFT); /* index */
 527                        break;
 528                }
 529        case RT_IDX_TU_CSUM_ERR: /* Pass up TCP/UDP CSUM error frames. */
 530                {
 531                        value = RT_IDX_DST_DFLT_Q | /* dest */
 532                                RT_IDX_TYPE_NICQ | /* type */
 533                                (RT_IDX_TCP_UDP_CSUM_ERR_SLOT <<
 534                                RT_IDX_IDX_SHIFT); /* index */
 535                        break;
 536                }
 537        case RT_IDX_BCAST:      /* Pass up Broadcast frames to default Q. */
 538                {
 539                        value = RT_IDX_DST_DFLT_Q |     /* dest */
 540                            RT_IDX_TYPE_NICQ |  /* type */
 541                            (RT_IDX_BCAST_SLOT << RT_IDX_IDX_SHIFT);/* index */
 542                        break;
 543                }
 544        case RT_IDX_MCAST:      /* Pass up All Multicast frames. */
 545                {
 546                        value = RT_IDX_DST_DFLT_Q |     /* dest */
 547                            RT_IDX_TYPE_NICQ |  /* type */
 548                            (RT_IDX_ALLMULTI_SLOT << RT_IDX_IDX_SHIFT);/* index */
 549                        break;
 550                }
 551        case RT_IDX_MCAST_MATCH:        /* Pass up matched Multicast frames. */
 552                {
 553                        value = RT_IDX_DST_DFLT_Q |     /* dest */
 554                            RT_IDX_TYPE_NICQ |  /* type */
 555                            (RT_IDX_MCAST_MATCH_SLOT << RT_IDX_IDX_SHIFT);/* index */
 556                        break;
 557                }
 558        case RT_IDX_RSS_MATCH:  /* Pass up matched RSS frames. */
 559                {
 560                        value = RT_IDX_DST_RSS |        /* dest */
 561                            RT_IDX_TYPE_NICQ |  /* type */
 562                            (RT_IDX_RSS_MATCH_SLOT << RT_IDX_IDX_SHIFT);/* index */
 563                        break;
 564                }
 565        case 0:         /* Clear the E-bit on an entry. */
 566                {
 567                        value = RT_IDX_DST_DFLT_Q |     /* dest */
 568                            RT_IDX_TYPE_NICQ |  /* type */
 569                            (index << RT_IDX_IDX_SHIFT);/* index */
 570                        break;
 571                }
 572        default:
 573                netif_err(qdev, ifup, qdev->ndev,
 574                          "Mask type %d not yet supported.\n", mask);
 575                status = -EPERM;
 576                goto exit;
 577        }
 578
 579        if (value) {
 580                status = ql_wait_reg_rdy(qdev, RT_IDX, RT_IDX_MW, 0);
 581                if (status)
 582                        goto exit;
 583                value |= (enable ? RT_IDX_E : 0);
 584                ql_write32(qdev, RT_IDX, value);
 585                ql_write32(qdev, RT_DATA, enable ? mask : 0);
 586        }
 587exit:
 588        return status;
 589}
 590
 591static void ql_enable_interrupts(struct ql_adapter *qdev)
 592{
 593        ql_write32(qdev, INTR_EN, (INTR_EN_EI << 16) | INTR_EN_EI);
 594}
 595
 596static void ql_disable_interrupts(struct ql_adapter *qdev)
 597{
 598        ql_write32(qdev, INTR_EN, (INTR_EN_EI << 16));
 599}
 600
 601static void ql_enable_completion_interrupt(struct ql_adapter *qdev, u32 intr)
 602{
 603        struct intr_context *ctx = &qdev->intr_context[intr];
 604
 605        ql_write32(qdev, INTR_EN, ctx->intr_en_mask);
 606}
 607
 608static void ql_disable_completion_interrupt(struct ql_adapter *qdev, u32 intr)
 609{
 610        struct intr_context *ctx = &qdev->intr_context[intr];
 611
 612        ql_write32(qdev, INTR_EN, ctx->intr_dis_mask);
 613}
 614
 615static void ql_enable_all_completion_interrupts(struct ql_adapter *qdev)
 616{
 617        int i;
 618
 619        for (i = 0; i < qdev->intr_count; i++)
 620                ql_enable_completion_interrupt(qdev, i);
 621}
 622
 623static int ql_validate_flash(struct ql_adapter *qdev, u32 size, const char *str)
 624{
 625        int status, i;
 626        u16 csum = 0;
 627        __le16 *flash = (__le16 *)&qdev->flash;
 628
 629        status = strncmp((char *)&qdev->flash, str, 4);
 630        if (status) {
 631                netif_err(qdev, ifup, qdev->ndev, "Invalid flash signature.\n");
 632                return  status;
 633        }
 634
 635        for (i = 0; i < size; i++)
 636                csum += le16_to_cpu(*flash++);
 637
 638        if (csum)
 639                netif_err(qdev, ifup, qdev->ndev,
 640                          "Invalid flash checksum, csum = 0x%.04x.\n", csum);
 641
 642        return csum;
 643}
 644
 645static int ql_read_flash_word(struct ql_adapter *qdev, int offset, __le32 *data)
 646{
 647        int status = 0;
 648        /* wait for reg to come ready */
 649        status = ql_wait_reg_rdy(qdev,
 650                                 FLASH_ADDR, FLASH_ADDR_RDY, FLASH_ADDR_ERR);
 651        if (status)
 652                goto exit;
 653        /* set up for reg read */
 654        ql_write32(qdev, FLASH_ADDR, FLASH_ADDR_R | offset);
 655        /* wait for reg to come ready */
 656        status = ql_wait_reg_rdy(qdev,
 657                                 FLASH_ADDR, FLASH_ADDR_RDY, FLASH_ADDR_ERR);
 658        if (status)
 659                goto exit;
 660        /* This data is stored on flash as an array of
 661         * __le32.  Since ql_read32() returns cpu endian
 662         * we need to swap it back.
 663         */
 664        *data = cpu_to_le32(ql_read32(qdev, FLASH_DATA));
 665exit:
 666        return status;
 667}
 668
 669static int ql_get_8000_flash_params(struct ql_adapter *qdev)
 670{
 671        u32 i, size;
 672        int status;
 673        __le32 *p = (__le32 *)&qdev->flash;
 674        u32 offset;
 675        u8 mac_addr[6];
 676
 677        /* Get flash offset for function and adjust
 678         * for dword access.
 679         */
 680        if (!qdev->port)
 681                offset = FUNC0_FLASH_OFFSET / sizeof(u32);
 682        else
 683                offset = FUNC1_FLASH_OFFSET / sizeof(u32);
 684
 685        if (ql_sem_spinlock(qdev, SEM_FLASH_MASK))
 686                return -ETIMEDOUT;
 687
 688        size = sizeof(struct flash_params_8000) / sizeof(u32);
 689        for (i = 0; i < size; i++, p++) {
 690                status = ql_read_flash_word(qdev, i + offset, p);
 691                if (status) {
 692                        netif_err(qdev, ifup, qdev->ndev,
 693                                  "Error reading flash.\n");
 694                        goto exit;
 695                }
 696        }
 697
 698        status = ql_validate_flash(qdev,
 699                                   sizeof(struct flash_params_8000) /
 700                                   sizeof(u16),
 701                                   "8000");
 702        if (status) {
 703                netif_err(qdev, ifup, qdev->ndev, "Invalid flash.\n");
 704                status = -EINVAL;
 705                goto exit;
 706        }
 707
 708        /* Extract either manufacturer or BOFM modified
 709         * MAC address.
 710         */
 711        if (qdev->flash.flash_params_8000.data_type1 == 2)
 712                memcpy(mac_addr,
 713                       qdev->flash.flash_params_8000.mac_addr1,
 714                       qdev->ndev->addr_len);
 715        else
 716                memcpy(mac_addr,
 717                       qdev->flash.flash_params_8000.mac_addr,
 718                       qdev->ndev->addr_len);
 719
 720        if (!is_valid_ether_addr(mac_addr)) {
 721                netif_err(qdev, ifup, qdev->ndev, "Invalid MAC address.\n");
 722                status = -EINVAL;
 723                goto exit;
 724        }
 725
 726        memcpy(qdev->ndev->dev_addr,
 727               mac_addr,
 728               qdev->ndev->addr_len);
 729
 730exit:
 731        ql_sem_unlock(qdev, SEM_FLASH_MASK);
 732        return status;
 733}
 734
 735static int ql_get_8012_flash_params(struct ql_adapter *qdev)
 736{
 737        int i;
 738        int status;
 739        __le32 *p = (__le32 *)&qdev->flash;
 740        u32 offset = 0;
 741        u32 size = sizeof(struct flash_params_8012) / sizeof(u32);
 742
 743        /* Second function's parameters follow the first
 744         * function's.
 745         */
 746        if (qdev->port)
 747                offset = size;
 748
 749        if (ql_sem_spinlock(qdev, SEM_FLASH_MASK))
 750                return -ETIMEDOUT;
 751
 752        for (i = 0; i < size; i++, p++) {
 753                status = ql_read_flash_word(qdev, i + offset, p);
 754                if (status) {
 755                        netif_err(qdev, ifup, qdev->ndev,
 756                                  "Error reading flash.\n");
 757                        goto exit;
 758                }
 759
 760        }
 761
 762        status = ql_validate_flash(qdev,
 763                                   sizeof(struct flash_params_8012) /
 764                                   sizeof(u16),
 765                                   "8012");
 766        if (status) {
 767                netif_err(qdev, ifup, qdev->ndev, "Invalid flash.\n");
 768                status = -EINVAL;
 769                goto exit;
 770        }
 771
 772        if (!is_valid_ether_addr(qdev->flash.flash_params_8012.mac_addr)) {
 773                status = -EINVAL;
 774                goto exit;
 775        }
 776
 777        memcpy(qdev->ndev->dev_addr,
 778               qdev->flash.flash_params_8012.mac_addr,
 779               qdev->ndev->addr_len);
 780
 781exit:
 782        ql_sem_unlock(qdev, SEM_FLASH_MASK);
 783        return status;
 784}
 785
 786/* xgmac register are located behind the xgmac_addr and xgmac_data
 787 * register pair.  Each read/write requires us to wait for the ready
 788 * bit before reading/writing the data.
 789 */
 790static int ql_write_xgmac_reg(struct ql_adapter *qdev, u32 reg, u32 data)
 791{
 792        int status;
 793        /* wait for reg to come ready */
 794        status = ql_wait_reg_rdy(qdev,
 795                                 XGMAC_ADDR, XGMAC_ADDR_RDY, XGMAC_ADDR_XME);
 796        if (status)
 797                return status;
 798        /* write the data to the data reg */
 799        ql_write32(qdev, XGMAC_DATA, data);
 800        /* trigger the write */
 801        ql_write32(qdev, XGMAC_ADDR, reg);
 802        return status;
 803}
 804
 805/* xgmac register are located behind the xgmac_addr and xgmac_data
 806 * register pair.  Each read/write requires us to wait for the ready
 807 * bit before reading/writing the data.
 808 */
 809int ql_read_xgmac_reg(struct ql_adapter *qdev, u32 reg, u32 *data)
 810{
 811        int status = 0;
 812        /* wait for reg to come ready */
 813        status = ql_wait_reg_rdy(qdev,
 814                                 XGMAC_ADDR, XGMAC_ADDR_RDY, XGMAC_ADDR_XME);
 815        if (status)
 816                goto exit;
 817        /* set up for reg read */
 818        ql_write32(qdev, XGMAC_ADDR, reg | XGMAC_ADDR_R);
 819        /* wait for reg to come ready */
 820        status = ql_wait_reg_rdy(qdev,
 821                                 XGMAC_ADDR, XGMAC_ADDR_RDY, XGMAC_ADDR_XME);
 822        if (status)
 823                goto exit;
 824        /* get the data */
 825        *data = ql_read32(qdev, XGMAC_DATA);
 826exit:
 827        return status;
 828}
 829
 830/* This is used for reading the 64-bit statistics regs. */
 831int ql_read_xgmac_reg64(struct ql_adapter *qdev, u32 reg, u64 *data)
 832{
 833        int status = 0;
 834        u32 hi = 0;
 835        u32 lo = 0;
 836
 837        status = ql_read_xgmac_reg(qdev, reg, &lo);
 838        if (status)
 839                goto exit;
 840
 841        status = ql_read_xgmac_reg(qdev, reg + 4, &hi);
 842        if (status)
 843                goto exit;
 844
 845        *data = (u64)lo | ((u64)hi << 32);
 846
 847exit:
 848        return status;
 849}
 850
 851static int ql_8000_port_initialize(struct ql_adapter *qdev)
 852{
 853        int status;
 854        /*
 855         * Get MPI firmware version for driver banner
 856         * and ethool info.
 857         */
 858        status = ql_mb_about_fw(qdev);
 859        if (status)
 860                goto exit;
 861        status = ql_mb_get_fw_state(qdev);
 862        if (status)
 863                goto exit;
 864        /* Wake up a worker to get/set the TX/RX frame sizes. */
 865        queue_delayed_work(qdev->workqueue, &qdev->mpi_port_cfg_work, 0);
 866exit:
 867        return status;
 868}
 869
 870/* Take the MAC Core out of reset.
 871 * Enable statistics counting.
 872 * Take the transmitter/receiver out of reset.
 873 * This functionality may be done in the MPI firmware at a
 874 * later date.
 875 */
 876static int ql_8012_port_initialize(struct ql_adapter *qdev)
 877{
 878        int status = 0;
 879        u32 data;
 880
 881        if (ql_sem_trylock(qdev, qdev->xg_sem_mask)) {
 882                /* Another function has the semaphore, so
 883                 * wait for the port init bit to come ready.
 884                 */
 885                netif_info(qdev, link, qdev->ndev,
 886                           "Another function has the semaphore, so wait for the port init bit to come ready.\n");
 887                status = ql_wait_reg_rdy(qdev, STS, qdev->port_init, 0);
 888                if (status) {
 889                        netif_crit(qdev, link, qdev->ndev,
 890                                   "Port initialize timed out.\n");
 891                }
 892                return status;
 893        }
 894
 895        netif_info(qdev, link, qdev->ndev, "Got xgmac semaphore!.\n");
 896        /* Set the core reset. */
 897        status = ql_read_xgmac_reg(qdev, GLOBAL_CFG, &data);
 898        if (status)
 899                goto end;
 900        data |= GLOBAL_CFG_RESET;
 901        status = ql_write_xgmac_reg(qdev, GLOBAL_CFG, data);
 902        if (status)
 903                goto end;
 904
 905        /* Clear the core reset and turn on jumbo for receiver. */
 906        data &= ~GLOBAL_CFG_RESET;      /* Clear core reset. */
 907        data |= GLOBAL_CFG_JUMBO;       /* Turn on jumbo. */
 908        data |= GLOBAL_CFG_TX_STAT_EN;
 909        data |= GLOBAL_CFG_RX_STAT_EN;
 910        status = ql_write_xgmac_reg(qdev, GLOBAL_CFG, data);
 911        if (status)
 912                goto end;
 913
 914        /* Enable transmitter, and clear it's reset. */
 915        status = ql_read_xgmac_reg(qdev, TX_CFG, &data);
 916        if (status)
 917                goto end;
 918        data &= ~TX_CFG_RESET;  /* Clear the TX MAC reset. */
 919        data |= TX_CFG_EN;      /* Enable the transmitter. */
 920        status = ql_write_xgmac_reg(qdev, TX_CFG, data);
 921        if (status)
 922                goto end;
 923
 924        /* Enable receiver and clear it's reset. */
 925        status = ql_read_xgmac_reg(qdev, RX_CFG, &data);
 926        if (status)
 927                goto end;
 928        data &= ~RX_CFG_RESET;  /* Clear the RX MAC reset. */
 929        data |= RX_CFG_EN;      /* Enable the receiver. */
 930        status = ql_write_xgmac_reg(qdev, RX_CFG, data);
 931        if (status)
 932                goto end;
 933
 934        /* Turn on jumbo. */
 935        status =
 936            ql_write_xgmac_reg(qdev, MAC_TX_PARAMS, MAC_TX_PARAMS_JUMBO | (0x2580 << 16));
 937        if (status)
 938                goto end;
 939        status =
 940            ql_write_xgmac_reg(qdev, MAC_RX_PARAMS, 0x2580);
 941        if (status)
 942                goto end;
 943
 944        /* Signal to the world that the port is enabled.        */
 945        ql_write32(qdev, STS, ((qdev->port_init << 16) | qdev->port_init));
 946end:
 947        ql_sem_unlock(qdev, qdev->xg_sem_mask);
 948        return status;
 949}
 950
 951static inline unsigned int ql_lbq_block_size(struct ql_adapter *qdev)
 952{
 953        return PAGE_SIZE << qdev->lbq_buf_order;
 954}
 955
 956static struct qlge_bq_desc *qlge_get_curr_buf(struct qlge_bq *bq)
 957{
 958        struct qlge_bq_desc *bq_desc;
 959
 960        bq_desc = &bq->queue[bq->next_to_clean];
 961        bq->next_to_clean = QLGE_BQ_WRAP(bq->next_to_clean + 1);
 962
 963        return bq_desc;
 964}
 965
 966static struct qlge_bq_desc *ql_get_curr_lchunk(struct ql_adapter *qdev,
 967                                               struct rx_ring *rx_ring)
 968{
 969        struct qlge_bq_desc *lbq_desc = qlge_get_curr_buf(&rx_ring->lbq);
 970
 971        dma_sync_single_for_cpu(&qdev->pdev->dev, lbq_desc->dma_addr,
 972                                qdev->lbq_buf_size, DMA_FROM_DEVICE);
 973
 974        if ((lbq_desc->p.pg_chunk.offset + qdev->lbq_buf_size) ==
 975            ql_lbq_block_size(qdev)) {
 976                /* last chunk of the master page */
 977                dma_unmap_page(&qdev->pdev->dev, lbq_desc->dma_addr,
 978                               ql_lbq_block_size(qdev), DMA_FROM_DEVICE);
 979        }
 980
 981        return lbq_desc;
 982}
 983
 984/* Update an rx ring index. */
 985static void ql_update_cq(struct rx_ring *rx_ring)
 986{
 987        rx_ring->cnsmr_idx++;
 988        rx_ring->curr_entry++;
 989        if (unlikely(rx_ring->cnsmr_idx == rx_ring->cq_len)) {
 990                rx_ring->cnsmr_idx = 0;
 991                rx_ring->curr_entry = rx_ring->cq_base;
 992        }
 993}
 994
 995static void ql_write_cq_idx(struct rx_ring *rx_ring)
 996{
 997        ql_write_db_reg(rx_ring->cnsmr_idx, rx_ring->cnsmr_idx_db_reg);
 998}
 999
1000static const char * const bq_type_name[] = {
1001        [QLGE_SB] = "sbq",
1002        [QLGE_LB] = "lbq",
1003};
1004
1005/* return 0 or negative error */
1006static int qlge_refill_sb(struct rx_ring *rx_ring,
1007                          struct qlge_bq_desc *sbq_desc, gfp_t gfp)
1008{
1009        struct ql_adapter *qdev = rx_ring->qdev;
1010        struct sk_buff *skb;
1011
1012        if (sbq_desc->p.skb)
1013                return 0;
1014
1015        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1016                     "ring %u sbq: getting new skb for index %d.\n",
1017                     rx_ring->cq_id, sbq_desc->index);
1018
1019        skb = __netdev_alloc_skb(qdev->ndev, SMALL_BUFFER_SIZE, gfp);
1020        if (!skb)
1021                return -ENOMEM;
1022        skb_reserve(skb, QLGE_SB_PAD);
1023
1024        sbq_desc->dma_addr = dma_map_single(&qdev->pdev->dev, skb->data,
1025                                            SMALL_BUF_MAP_SIZE,
1026                                            DMA_FROM_DEVICE);
1027        if (dma_mapping_error(&qdev->pdev->dev, sbq_desc->dma_addr)) {
1028                netif_err(qdev, ifup, qdev->ndev, "PCI mapping failed.\n");
1029                dev_kfree_skb_any(skb);
1030                return -EIO;
1031        }
1032        *sbq_desc->buf_ptr = cpu_to_le64(sbq_desc->dma_addr);
1033
1034        sbq_desc->p.skb = skb;
1035        return 0;
1036}
1037
1038/* return 0 or negative error */
1039static int qlge_refill_lb(struct rx_ring *rx_ring,
1040                          struct qlge_bq_desc *lbq_desc, gfp_t gfp)
1041{
1042        struct ql_adapter *qdev = rx_ring->qdev;
1043        struct qlge_page_chunk *master_chunk = &rx_ring->master_chunk;
1044
1045        if (!master_chunk->page) {
1046                struct page *page;
1047                dma_addr_t dma_addr;
1048
1049                page = alloc_pages(gfp | __GFP_COMP, qdev->lbq_buf_order);
1050                if (unlikely(!page))
1051                        return -ENOMEM;
1052                dma_addr = dma_map_page(&qdev->pdev->dev, page, 0,
1053                                        ql_lbq_block_size(qdev),
1054                                        DMA_FROM_DEVICE);
1055                if (dma_mapping_error(&qdev->pdev->dev, dma_addr)) {
1056                        __free_pages(page, qdev->lbq_buf_order);
1057                        netif_err(qdev, drv, qdev->ndev,
1058                                  "PCI mapping failed.\n");
1059                        return -EIO;
1060                }
1061                master_chunk->page = page;
1062                master_chunk->va = page_address(page);
1063                master_chunk->offset = 0;
1064                rx_ring->chunk_dma_addr = dma_addr;
1065        }
1066
1067        lbq_desc->p.pg_chunk = *master_chunk;
1068        lbq_desc->dma_addr = rx_ring->chunk_dma_addr;
1069        *lbq_desc->buf_ptr = cpu_to_le64(lbq_desc->dma_addr +
1070                                         lbq_desc->p.pg_chunk.offset);
1071
1072        /* Adjust the master page chunk for next
1073         * buffer get.
1074         */
1075        master_chunk->offset += qdev->lbq_buf_size;
1076        if (master_chunk->offset == ql_lbq_block_size(qdev)) {
1077                master_chunk->page = NULL;
1078        } else {
1079                master_chunk->va += qdev->lbq_buf_size;
1080                get_page(master_chunk->page);
1081        }
1082
1083        return 0;
1084}
1085
1086/* return 0 or negative error */
1087static int qlge_refill_bq(struct qlge_bq *bq, gfp_t gfp)
1088{
1089        struct rx_ring *rx_ring = QLGE_BQ_CONTAINER(bq);
1090        struct ql_adapter *qdev = rx_ring->qdev;
1091        struct qlge_bq_desc *bq_desc;
1092        int refill_count;
1093        int retval;
1094        int i;
1095
1096        refill_count = QLGE_BQ_WRAP(QLGE_BQ_ALIGN(bq->next_to_clean - 1) -
1097                                    bq->next_to_use);
1098        if (!refill_count)
1099                return 0;
1100
1101        i = bq->next_to_use;
1102        bq_desc = &bq->queue[i];
1103        i -= QLGE_BQ_LEN;
1104        do {
1105                netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1106                             "ring %u %s: try cleaning idx %d\n",
1107                             rx_ring->cq_id, bq_type_name[bq->type], i);
1108
1109                if (bq->type == QLGE_SB)
1110                        retval = qlge_refill_sb(rx_ring, bq_desc, gfp);
1111                else
1112                        retval = qlge_refill_lb(rx_ring, bq_desc, gfp);
1113                if (retval < 0) {
1114                        netif_err(qdev, ifup, qdev->ndev,
1115                                  "ring %u %s: Could not get a page chunk, idx %d\n",
1116                                  rx_ring->cq_id, bq_type_name[bq->type], i);
1117                        break;
1118                }
1119
1120                bq_desc++;
1121                i++;
1122                if (unlikely(!i)) {
1123                        bq_desc = &bq->queue[0];
1124                        i -= QLGE_BQ_LEN;
1125                }
1126                refill_count--;
1127        } while (refill_count);
1128        i += QLGE_BQ_LEN;
1129
1130        if (bq->next_to_use != i) {
1131                if (QLGE_BQ_ALIGN(bq->next_to_use) != QLGE_BQ_ALIGN(i)) {
1132                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1133                                     "ring %u %s: updating prod idx = %d.\n",
1134                                     rx_ring->cq_id, bq_type_name[bq->type],
1135                                     i);
1136                        ql_write_db_reg(i, bq->prod_idx_db_reg);
1137                }
1138                bq->next_to_use = i;
1139        }
1140
1141        return retval;
1142}
1143
1144static void ql_update_buffer_queues(struct rx_ring *rx_ring, gfp_t gfp,
1145                                    unsigned long delay)
1146{
1147        bool sbq_fail, lbq_fail;
1148
1149        sbq_fail = !!qlge_refill_bq(&rx_ring->sbq, gfp);
1150        lbq_fail = !!qlge_refill_bq(&rx_ring->lbq, gfp);
1151
1152        /* Minimum number of buffers needed to be able to receive at least one
1153         * frame of any format:
1154         * sbq: 1 for header + 1 for data
1155         * lbq: mtu 9000 / lb size
1156         * Below this, the queue might stall.
1157         */
1158        if ((sbq_fail && QLGE_BQ_HW_OWNED(&rx_ring->sbq) < 2) ||
1159            (lbq_fail && QLGE_BQ_HW_OWNED(&rx_ring->lbq) <
1160             DIV_ROUND_UP(9000, LARGE_BUFFER_MAX_SIZE)))
1161                /* Allocations can take a long time in certain cases (ex.
1162                 * reclaim). Therefore, use a workqueue for long-running
1163                 * work items.
1164                 */
1165                queue_delayed_work_on(smp_processor_id(), system_long_wq,
1166                                      &rx_ring->refill_work, delay);
1167}
1168
1169static void qlge_slow_refill(struct work_struct *work)
1170{
1171        struct rx_ring *rx_ring = container_of(work, struct rx_ring,
1172                                               refill_work.work);
1173        struct napi_struct *napi = &rx_ring->napi;
1174
1175        napi_disable(napi);
1176        ql_update_buffer_queues(rx_ring, GFP_KERNEL, HZ / 2);
1177        napi_enable(napi);
1178
1179        local_bh_disable();
1180        /* napi_disable() might have prevented incomplete napi work from being
1181         * rescheduled.
1182         */
1183        napi_schedule(napi);
1184        /* trigger softirq processing */
1185        local_bh_enable();
1186}
1187
1188/* Unmaps tx buffers.  Can be called from send() if a pci mapping
1189 * fails at some stage, or from the interrupt when a tx completes.
1190 */
1191static void ql_unmap_send(struct ql_adapter *qdev,
1192                          struct tx_ring_desc *tx_ring_desc, int mapped)
1193{
1194        int i;
1195
1196        for (i = 0; i < mapped; i++) {
1197                if (i == 0 || (i == 7 && mapped > 7)) {
1198                        /*
1199                         * Unmap the skb->data area, or the
1200                         * external sglist (AKA the Outbound
1201                         * Address List (OAL)).
1202                         * If its the zeroeth element, then it's
1203                         * the skb->data area.  If it's the 7th
1204                         * element and there is more than 6 frags,
1205                         * then its an OAL.
1206                         */
1207                        if (i == 7) {
1208                                netif_printk(qdev, tx_done, KERN_DEBUG,
1209                                             qdev->ndev,
1210                                             "unmapping OAL area.\n");
1211                        }
1212                        dma_unmap_single(&qdev->pdev->dev,
1213                                         dma_unmap_addr(&tx_ring_desc->map[i],
1214                                                        mapaddr),
1215                                         dma_unmap_len(&tx_ring_desc->map[i],
1216                                                       maplen),
1217                                         DMA_TO_DEVICE);
1218                } else {
1219                        netif_printk(qdev, tx_done, KERN_DEBUG, qdev->ndev,
1220                                     "unmapping frag %d.\n", i);
1221                        dma_unmap_page(&qdev->pdev->dev,
1222                                       dma_unmap_addr(&tx_ring_desc->map[i],
1223                                                      mapaddr),
1224                                       dma_unmap_len(&tx_ring_desc->map[i],
1225                                                     maplen), DMA_TO_DEVICE);
1226                }
1227        }
1228
1229}
1230
1231/* Map the buffers for this transmit.  This will return
1232 * NETDEV_TX_BUSY or NETDEV_TX_OK based on success.
1233 */
1234static int ql_map_send(struct ql_adapter *qdev,
1235                       struct ob_mac_iocb_req *mac_iocb_ptr,
1236                       struct sk_buff *skb, struct tx_ring_desc *tx_ring_desc)
1237{
1238        int len = skb_headlen(skb);
1239        dma_addr_t map;
1240        int frag_idx, err, map_idx = 0;
1241        struct tx_buf_desc *tbd = mac_iocb_ptr->tbd;
1242        int frag_cnt = skb_shinfo(skb)->nr_frags;
1243
1244        if (frag_cnt) {
1245                netif_printk(qdev, tx_queued, KERN_DEBUG, qdev->ndev,
1246                             "frag_cnt = %d.\n", frag_cnt);
1247        }
1248        /*
1249         * Map the skb buffer first.
1250         */
1251        map = dma_map_single(&qdev->pdev->dev, skb->data, len, DMA_TO_DEVICE);
1252
1253        err = dma_mapping_error(&qdev->pdev->dev, map);
1254        if (err) {
1255                netif_err(qdev, tx_queued, qdev->ndev,
1256                          "PCI mapping failed with error: %d\n", err);
1257
1258                return NETDEV_TX_BUSY;
1259        }
1260
1261        tbd->len = cpu_to_le32(len);
1262        tbd->addr = cpu_to_le64(map);
1263        dma_unmap_addr_set(&tx_ring_desc->map[map_idx], mapaddr, map);
1264        dma_unmap_len_set(&tx_ring_desc->map[map_idx], maplen, len);
1265        map_idx++;
1266
1267        /*
1268         * This loop fills the remainder of the 8 address descriptors
1269         * in the IOCB.  If there are more than 7 fragments, then the
1270         * eighth address desc will point to an external list (OAL).
1271         * When this happens, the remainder of the frags will be stored
1272         * in this list.
1273         */
1274        for (frag_idx = 0; frag_idx < frag_cnt; frag_idx++, map_idx++) {
1275                skb_frag_t *frag = &skb_shinfo(skb)->frags[frag_idx];
1276
1277                tbd++;
1278                if (frag_idx == 6 && frag_cnt > 7) {
1279                        /* Let's tack on an sglist.
1280                         * Our control block will now
1281                         * look like this:
1282                         * iocb->seg[0] = skb->data
1283                         * iocb->seg[1] = frag[0]
1284                         * iocb->seg[2] = frag[1]
1285                         * iocb->seg[3] = frag[2]
1286                         * iocb->seg[4] = frag[3]
1287                         * iocb->seg[5] = frag[4]
1288                         * iocb->seg[6] = frag[5]
1289                         * iocb->seg[7] = ptr to OAL (external sglist)
1290                         * oal->seg[0] = frag[6]
1291                         * oal->seg[1] = frag[7]
1292                         * oal->seg[2] = frag[8]
1293                         * oal->seg[3] = frag[9]
1294                         * oal->seg[4] = frag[10]
1295                         *      etc...
1296                         */
1297                        /* Tack on the OAL in the eighth segment of IOCB. */
1298                        map = dma_map_single(&qdev->pdev->dev, &tx_ring_desc->oal,
1299                                             sizeof(struct oal),
1300                                             DMA_TO_DEVICE);
1301                        err = dma_mapping_error(&qdev->pdev->dev, map);
1302                        if (err) {
1303                                netif_err(qdev, tx_queued, qdev->ndev,
1304                                          "PCI mapping outbound address list with error: %d\n",
1305                                          err);
1306                                goto map_error;
1307                        }
1308
1309                        tbd->addr = cpu_to_le64(map);
1310                        /*
1311                         * The length is the number of fragments
1312                         * that remain to be mapped times the length
1313                         * of our sglist (OAL).
1314                         */
1315                        tbd->len =
1316                            cpu_to_le32((sizeof(struct tx_buf_desc) *
1317                                         (frag_cnt - frag_idx)) | TX_DESC_C);
1318                        dma_unmap_addr_set(&tx_ring_desc->map[map_idx], mapaddr,
1319                                           map);
1320                        dma_unmap_len_set(&tx_ring_desc->map[map_idx], maplen,
1321                                          sizeof(struct oal));
1322                        tbd = (struct tx_buf_desc *)&tx_ring_desc->oal;
1323                        map_idx++;
1324                }
1325
1326                map = skb_frag_dma_map(&qdev->pdev->dev, frag, 0, skb_frag_size(frag),
1327                                       DMA_TO_DEVICE);
1328
1329                err = dma_mapping_error(&qdev->pdev->dev, map);
1330                if (err) {
1331                        netif_err(qdev, tx_queued, qdev->ndev,
1332                                  "PCI mapping frags failed with error: %d.\n",
1333                                  err);
1334                        goto map_error;
1335                }
1336
1337                tbd->addr = cpu_to_le64(map);
1338                tbd->len = cpu_to_le32(skb_frag_size(frag));
1339                dma_unmap_addr_set(&tx_ring_desc->map[map_idx], mapaddr, map);
1340                dma_unmap_len_set(&tx_ring_desc->map[map_idx], maplen,
1341                                  skb_frag_size(frag));
1342
1343        }
1344        /* Save the number of segments we've mapped. */
1345        tx_ring_desc->map_cnt = map_idx;
1346        /* Terminate the last segment. */
1347        tbd->len = cpu_to_le32(le32_to_cpu(tbd->len) | TX_DESC_E);
1348        return NETDEV_TX_OK;
1349
1350map_error:
1351        /*
1352         * If the first frag mapping failed, then i will be zero.
1353         * This causes the unmap of the skb->data area.  Otherwise
1354         * we pass in the number of frags that mapped successfully
1355         * so they can be umapped.
1356         */
1357        ql_unmap_send(qdev, tx_ring_desc, map_idx);
1358        return NETDEV_TX_BUSY;
1359}
1360
1361/* Categorizing receive firmware frame errors */
1362static void ql_categorize_rx_err(struct ql_adapter *qdev, u8 rx_err,
1363                                 struct rx_ring *rx_ring)
1364{
1365        struct nic_stats *stats = &qdev->nic_stats;
1366
1367        stats->rx_err_count++;
1368        rx_ring->rx_errors++;
1369
1370        switch (rx_err & IB_MAC_IOCB_RSP_ERR_MASK) {
1371        case IB_MAC_IOCB_RSP_ERR_CODE_ERR:
1372                stats->rx_code_err++;
1373                break;
1374        case IB_MAC_IOCB_RSP_ERR_OVERSIZE:
1375                stats->rx_oversize_err++;
1376                break;
1377        case IB_MAC_IOCB_RSP_ERR_UNDERSIZE:
1378                stats->rx_undersize_err++;
1379                break;
1380        case IB_MAC_IOCB_RSP_ERR_PREAMBLE:
1381                stats->rx_preamble_err++;
1382                break;
1383        case IB_MAC_IOCB_RSP_ERR_FRAME_LEN:
1384                stats->rx_frame_len_err++;
1385                break;
1386        case IB_MAC_IOCB_RSP_ERR_CRC:
1387                stats->rx_crc_err++;
1388        default:
1389                break;
1390        }
1391}
1392
1393/**
1394 * ql_update_mac_hdr_len - helper routine to update the mac header length
1395 * based on vlan tags if present
1396 */
1397static void ql_update_mac_hdr_len(struct ql_adapter *qdev,
1398                                  struct ib_mac_iocb_rsp *ib_mac_rsp,
1399                                  void *page, size_t *len)
1400{
1401        u16 *tags;
1402
1403        if (qdev->ndev->features & NETIF_F_HW_VLAN_CTAG_RX)
1404                return;
1405        if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V) {
1406                tags = (u16 *)page;
1407                /* Look for stacked vlan tags in ethertype field */
1408                if (tags[6] == ETH_P_8021Q &&
1409                    tags[8] == ETH_P_8021Q)
1410                        *len += 2 * VLAN_HLEN;
1411                else
1412                        *len += VLAN_HLEN;
1413        }
1414}
1415
1416/* Process an inbound completion from an rx ring. */
1417static void ql_process_mac_rx_gro_page(struct ql_adapter *qdev,
1418                                       struct rx_ring *rx_ring,
1419                                       struct ib_mac_iocb_rsp *ib_mac_rsp,
1420                                       u32 length, u16 vlan_id)
1421{
1422        struct sk_buff *skb;
1423        struct qlge_bq_desc *lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
1424        struct napi_struct *napi = &rx_ring->napi;
1425
1426        /* Frame error, so drop the packet. */
1427        if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1428                ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1429                put_page(lbq_desc->p.pg_chunk.page);
1430                return;
1431        }
1432        napi->dev = qdev->ndev;
1433
1434        skb = napi_get_frags(napi);
1435        if (!skb) {
1436                netif_err(qdev, drv, qdev->ndev,
1437                          "Couldn't get an skb, exiting.\n");
1438                rx_ring->rx_dropped++;
1439                put_page(lbq_desc->p.pg_chunk.page);
1440                return;
1441        }
1442        prefetch(lbq_desc->p.pg_chunk.va);
1443        __skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags,
1444                             lbq_desc->p.pg_chunk.page,
1445                             lbq_desc->p.pg_chunk.offset,
1446                             length);
1447
1448        skb->len += length;
1449        skb->data_len += length;
1450        skb->truesize += length;
1451        skb_shinfo(skb)->nr_frags++;
1452
1453        rx_ring->rx_packets++;
1454        rx_ring->rx_bytes += length;
1455        skb->ip_summed = CHECKSUM_UNNECESSARY;
1456        skb_record_rx_queue(skb, rx_ring->cq_id);
1457        if (vlan_id != 0xffff)
1458                __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_id);
1459        napi_gro_frags(napi);
1460}
1461
1462/* Process an inbound completion from an rx ring. */
1463static void ql_process_mac_rx_page(struct ql_adapter *qdev,
1464                                   struct rx_ring *rx_ring,
1465                                   struct ib_mac_iocb_rsp *ib_mac_rsp,
1466                                   u32 length, u16 vlan_id)
1467{
1468        struct net_device *ndev = qdev->ndev;
1469        struct sk_buff *skb = NULL;
1470        void *addr;
1471        struct qlge_bq_desc *lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
1472        struct napi_struct *napi = &rx_ring->napi;
1473        size_t hlen = ETH_HLEN;
1474
1475        skb = netdev_alloc_skb(ndev, length);
1476        if (!skb) {
1477                rx_ring->rx_dropped++;
1478                put_page(lbq_desc->p.pg_chunk.page);
1479                return;
1480        }
1481
1482        addr = lbq_desc->p.pg_chunk.va;
1483        prefetch(addr);
1484
1485        /* Frame error, so drop the packet. */
1486        if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1487                ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1488                goto err_out;
1489        }
1490
1491        /* Update the MAC header length*/
1492        ql_update_mac_hdr_len(qdev, ib_mac_rsp, addr, &hlen);
1493
1494        /* The max framesize filter on this chip is set higher than
1495         * MTU since FCoE uses 2k frames.
1496         */
1497        if (skb->len > ndev->mtu + hlen) {
1498                netif_err(qdev, drv, qdev->ndev,
1499                          "Segment too small, dropping.\n");
1500                rx_ring->rx_dropped++;
1501                goto err_out;
1502        }
1503        skb_put_data(skb, addr, hlen);
1504        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1505                     "%d bytes of headers and data in large. Chain page to new skb and pull tail.\n",
1506                     length);
1507        skb_fill_page_desc(skb, 0, lbq_desc->p.pg_chunk.page,
1508                           lbq_desc->p.pg_chunk.offset + hlen, length - hlen);
1509        skb->len += length - hlen;
1510        skb->data_len += length - hlen;
1511        skb->truesize += length - hlen;
1512
1513        rx_ring->rx_packets++;
1514        rx_ring->rx_bytes += skb->len;
1515        skb->protocol = eth_type_trans(skb, ndev);
1516        skb_checksum_none_assert(skb);
1517
1518        if ((ndev->features & NETIF_F_RXCSUM) &&
1519            !(ib_mac_rsp->flags1 & IB_MAC_CSUM_ERR_MASK)) {
1520                /* TCP frame. */
1521                if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T) {
1522                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1523                                     "TCP checksum done!\n");
1524                        skb->ip_summed = CHECKSUM_UNNECESSARY;
1525                } else if ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_U) &&
1526                                (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_V4)) {
1527                        /* Unfragmented ipv4 UDP frame. */
1528                        struct iphdr *iph =
1529                                (struct iphdr *)((u8 *)addr + hlen);
1530                        if (!(iph->frag_off &
1531                                htons(IP_MF | IP_OFFSET))) {
1532                                skb->ip_summed = CHECKSUM_UNNECESSARY;
1533                                netif_printk(qdev, rx_status, KERN_DEBUG,
1534                                             qdev->ndev,
1535                                             "UDP checksum done!\n");
1536                        }
1537                }
1538        }
1539
1540        skb_record_rx_queue(skb, rx_ring->cq_id);
1541        if (vlan_id != 0xffff)
1542                __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_id);
1543        if (skb->ip_summed == CHECKSUM_UNNECESSARY)
1544                napi_gro_receive(napi, skb);
1545        else
1546                netif_receive_skb(skb);
1547        return;
1548err_out:
1549        dev_kfree_skb_any(skb);
1550        put_page(lbq_desc->p.pg_chunk.page);
1551}
1552
1553/* Process an inbound completion from an rx ring. */
1554static void ql_process_mac_rx_skb(struct ql_adapter *qdev,
1555                                  struct rx_ring *rx_ring,
1556                                  struct ib_mac_iocb_rsp *ib_mac_rsp,
1557                                  u32 length, u16 vlan_id)
1558{
1559        struct qlge_bq_desc *sbq_desc = qlge_get_curr_buf(&rx_ring->sbq);
1560        struct net_device *ndev = qdev->ndev;
1561        struct sk_buff *skb, *new_skb;
1562
1563        skb = sbq_desc->p.skb;
1564        /* Allocate new_skb and copy */
1565        new_skb = netdev_alloc_skb(qdev->ndev, length + NET_IP_ALIGN);
1566        if (!new_skb) {
1567                rx_ring->rx_dropped++;
1568                return;
1569        }
1570        skb_reserve(new_skb, NET_IP_ALIGN);
1571
1572        dma_sync_single_for_cpu(&qdev->pdev->dev, sbq_desc->dma_addr,
1573                                SMALL_BUF_MAP_SIZE, DMA_FROM_DEVICE);
1574
1575        skb_put_data(new_skb, skb->data, length);
1576
1577        skb = new_skb;
1578
1579        /* Frame error, so drop the packet. */
1580        if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1581                ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1582                dev_kfree_skb_any(skb);
1583                return;
1584        }
1585
1586        /* loopback self test for ethtool */
1587        if (test_bit(QL_SELFTEST, &qdev->flags)) {
1588                ql_check_lb_frame(qdev, skb);
1589                dev_kfree_skb_any(skb);
1590                return;
1591        }
1592
1593        /* The max framesize filter on this chip is set higher than
1594         * MTU since FCoE uses 2k frames.
1595         */
1596        if (skb->len > ndev->mtu + ETH_HLEN) {
1597                dev_kfree_skb_any(skb);
1598                rx_ring->rx_dropped++;
1599                return;
1600        }
1601
1602        prefetch(skb->data);
1603        if (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) {
1604                netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1605                             "%s Multicast.\n",
1606                             (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1607                             IB_MAC_IOCB_RSP_M_HASH ? "Hash" :
1608                             (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1609                             IB_MAC_IOCB_RSP_M_REG ? "Registered" :
1610                             (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1611                             IB_MAC_IOCB_RSP_M_PROM ? "Promiscuous" : "");
1612        }
1613        if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_P)
1614                netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1615                             "Promiscuous Packet.\n");
1616
1617        rx_ring->rx_packets++;
1618        rx_ring->rx_bytes += skb->len;
1619        skb->protocol = eth_type_trans(skb, ndev);
1620        skb_checksum_none_assert(skb);
1621
1622        /* If rx checksum is on, and there are no
1623         * csum or frame errors.
1624         */
1625        if ((ndev->features & NETIF_F_RXCSUM) &&
1626            !(ib_mac_rsp->flags1 & IB_MAC_CSUM_ERR_MASK)) {
1627                /* TCP frame. */
1628                if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T) {
1629                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1630                                     "TCP checksum done!\n");
1631                        skb->ip_summed = CHECKSUM_UNNECESSARY;
1632                } else if ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_U) &&
1633                                (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_V4)) {
1634                        /* Unfragmented ipv4 UDP frame. */
1635                        struct iphdr *iph = (struct iphdr *)skb->data;
1636
1637                        if (!(iph->frag_off &
1638                                htons(IP_MF | IP_OFFSET))) {
1639                                skb->ip_summed = CHECKSUM_UNNECESSARY;
1640                                netif_printk(qdev, rx_status, KERN_DEBUG,
1641                                             qdev->ndev,
1642                                             "UDP checksum done!\n");
1643                        }
1644                }
1645        }
1646
1647        skb_record_rx_queue(skb, rx_ring->cq_id);
1648        if (vlan_id != 0xffff)
1649                __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_id);
1650        if (skb->ip_summed == CHECKSUM_UNNECESSARY)
1651                napi_gro_receive(&rx_ring->napi, skb);
1652        else
1653                netif_receive_skb(skb);
1654}
1655
1656static void ql_realign_skb(struct sk_buff *skb, int len)
1657{
1658        void *temp_addr = skb->data;
1659
1660        /* Undo the skb_reserve(skb,32) we did before
1661         * giving to hardware, and realign data on
1662         * a 2-byte boundary.
1663         */
1664        skb->data -= QLGE_SB_PAD - NET_IP_ALIGN;
1665        skb->tail -= QLGE_SB_PAD - NET_IP_ALIGN;
1666        memmove(skb->data, temp_addr, len);
1667}
1668
1669/*
1670 * This function builds an skb for the given inbound
1671 * completion.  It will be rewritten for readability in the near
1672 * future, but for not it works well.
1673 */
1674static struct sk_buff *ql_build_rx_skb(struct ql_adapter *qdev,
1675                                       struct rx_ring *rx_ring,
1676                                       struct ib_mac_iocb_rsp *ib_mac_rsp)
1677{
1678        u32 length = le32_to_cpu(ib_mac_rsp->data_len);
1679        u32 hdr_len = le32_to_cpu(ib_mac_rsp->hdr_len);
1680        struct qlge_bq_desc *lbq_desc, *sbq_desc;
1681        struct sk_buff *skb = NULL;
1682        size_t hlen = ETH_HLEN;
1683
1684        /*
1685         * Handle the header buffer if present.
1686         */
1687        if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV &&
1688            ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS) {
1689                netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1690                             "Header of %d bytes in small buffer.\n", hdr_len);
1691                /*
1692                 * Headers fit nicely into a small buffer.
1693                 */
1694                sbq_desc = qlge_get_curr_buf(&rx_ring->sbq);
1695                dma_unmap_single(&qdev->pdev->dev, sbq_desc->dma_addr,
1696                                 SMALL_BUF_MAP_SIZE, DMA_FROM_DEVICE);
1697                skb = sbq_desc->p.skb;
1698                ql_realign_skb(skb, hdr_len);
1699                skb_put(skb, hdr_len);
1700                sbq_desc->p.skb = NULL;
1701        }
1702
1703        /*
1704         * Handle the data buffer(s).
1705         */
1706        if (unlikely(!length)) {        /* Is there data too? */
1707                netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1708                             "No Data buffer in this packet.\n");
1709                return skb;
1710        }
1711
1712        if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DS) {
1713                if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS) {
1714                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1715                                     "Headers in small, data of %d bytes in small, combine them.\n",
1716                                     length);
1717                        /*
1718                         * Data is less than small buffer size so it's
1719                         * stuffed in a small buffer.
1720                         * For this case we append the data
1721                         * from the "data" small buffer to the "header" small
1722                         * buffer.
1723                         */
1724                        sbq_desc = qlge_get_curr_buf(&rx_ring->sbq);
1725                        dma_sync_single_for_cpu(&qdev->pdev->dev,
1726                                                sbq_desc->dma_addr,
1727                                                SMALL_BUF_MAP_SIZE,
1728                                                DMA_FROM_DEVICE);
1729                        skb_put_data(skb, sbq_desc->p.skb->data, length);
1730                } else {
1731                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1732                                     "%d bytes in a single small buffer.\n",
1733                                     length);
1734                        sbq_desc = qlge_get_curr_buf(&rx_ring->sbq);
1735                        skb = sbq_desc->p.skb;
1736                        ql_realign_skb(skb, length);
1737                        skb_put(skb, length);
1738                        dma_unmap_single(&qdev->pdev->dev, sbq_desc->dma_addr,
1739                                         SMALL_BUF_MAP_SIZE,
1740                                         DMA_FROM_DEVICE);
1741                        sbq_desc->p.skb = NULL;
1742                }
1743        } else if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DL) {
1744                if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS) {
1745                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1746                                     "Header in small, %d bytes in large. Chain large to small!\n",
1747                                     length);
1748                        /*
1749                         * The data is in a single large buffer.  We
1750                         * chain it to the header buffer's skb and let
1751                         * it rip.
1752                         */
1753                        lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
1754                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1755                                     "Chaining page at offset = %d, for %d bytes  to skb.\n",
1756                                     lbq_desc->p.pg_chunk.offset, length);
1757                        skb_fill_page_desc(skb, 0, lbq_desc->p.pg_chunk.page,
1758                                           lbq_desc->p.pg_chunk.offset, length);
1759                        skb->len += length;
1760                        skb->data_len += length;
1761                        skb->truesize += length;
1762                } else {
1763                        /*
1764                         * The headers and data are in a single large buffer. We
1765                         * copy it to a new skb and let it go. This can happen with
1766                         * jumbo mtu on a non-TCP/UDP frame.
1767                         */
1768                        lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
1769                        skb = netdev_alloc_skb(qdev->ndev, length);
1770                        if (!skb) {
1771                                netif_printk(qdev, probe, KERN_DEBUG, qdev->ndev,
1772                                             "No skb available, drop the packet.\n");
1773                                return NULL;
1774                        }
1775                        dma_unmap_page(&qdev->pdev->dev, lbq_desc->dma_addr,
1776                                       qdev->lbq_buf_size,
1777                                       DMA_FROM_DEVICE);
1778                        skb_reserve(skb, NET_IP_ALIGN);
1779                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1780                                     "%d bytes of headers and data in large. Chain page to new skb and pull tail.\n",
1781                                     length);
1782                        skb_fill_page_desc(skb, 0, lbq_desc->p.pg_chunk.page,
1783                                           lbq_desc->p.pg_chunk.offset,
1784                                           length);
1785                        skb->len += length;
1786                        skb->data_len += length;
1787                        skb->truesize += length;
1788                        ql_update_mac_hdr_len(qdev, ib_mac_rsp,
1789                                              lbq_desc->p.pg_chunk.va,
1790                                              &hlen);
1791                        __pskb_pull_tail(skb, hlen);
1792                }
1793        } else {
1794                /*
1795                 * The data is in a chain of large buffers
1796                 * pointed to by a small buffer.  We loop
1797                 * thru and chain them to the our small header
1798                 * buffer's skb.
1799                 * frags:  There are 18 max frags and our small
1800                 *         buffer will hold 32 of them. The thing is,
1801                 *         we'll use 3 max for our 9000 byte jumbo
1802                 *         frames.  If the MTU goes up we could
1803                 *          eventually be in trouble.
1804                 */
1805                int size, i = 0;
1806
1807                sbq_desc = qlge_get_curr_buf(&rx_ring->sbq);
1808                dma_unmap_single(&qdev->pdev->dev, sbq_desc->dma_addr,
1809                                 SMALL_BUF_MAP_SIZE, DMA_FROM_DEVICE);
1810                if (!(ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS)) {
1811                        /*
1812                         * This is an non TCP/UDP IP frame, so
1813                         * the headers aren't split into a small
1814                         * buffer.  We have to use the small buffer
1815                         * that contains our sg list as our skb to
1816                         * send upstairs. Copy the sg list here to
1817                         * a local buffer and use it to find the
1818                         * pages to chain.
1819                         */
1820                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1821                                     "%d bytes of headers & data in chain of large.\n",
1822                                     length);
1823                        skb = sbq_desc->p.skb;
1824                        sbq_desc->p.skb = NULL;
1825                        skb_reserve(skb, NET_IP_ALIGN);
1826                }
1827                do {
1828                        lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
1829                        size = min(length, qdev->lbq_buf_size);
1830
1831                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1832                                     "Adding page %d to skb for %d bytes.\n",
1833                                     i, size);
1834                        skb_fill_page_desc(skb, i,
1835                                           lbq_desc->p.pg_chunk.page,
1836                                           lbq_desc->p.pg_chunk.offset, size);
1837                        skb->len += size;
1838                        skb->data_len += size;
1839                        skb->truesize += size;
1840                        length -= size;
1841                        i++;
1842                } while (length > 0);
1843                ql_update_mac_hdr_len(qdev, ib_mac_rsp, lbq_desc->p.pg_chunk.va,
1844                                      &hlen);
1845                __pskb_pull_tail(skb, hlen);
1846        }
1847        return skb;
1848}
1849
1850/* Process an inbound completion from an rx ring. */
1851static void ql_process_mac_split_rx_intr(struct ql_adapter *qdev,
1852                                         struct rx_ring *rx_ring,
1853                                         struct ib_mac_iocb_rsp *ib_mac_rsp,
1854                                         u16 vlan_id)
1855{
1856        struct net_device *ndev = qdev->ndev;
1857        struct sk_buff *skb = NULL;
1858
1859        QL_DUMP_IB_MAC_RSP(ib_mac_rsp);
1860
1861        skb = ql_build_rx_skb(qdev, rx_ring, ib_mac_rsp);
1862        if (unlikely(!skb)) {
1863                netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1864                             "No skb available, drop packet.\n");
1865                rx_ring->rx_dropped++;
1866                return;
1867        }
1868
1869        /* Frame error, so drop the packet. */
1870        if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1871                ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1872                dev_kfree_skb_any(skb);
1873                return;
1874        }
1875
1876        /* The max framesize filter on this chip is set higher than
1877         * MTU since FCoE uses 2k frames.
1878         */
1879        if (skb->len > ndev->mtu + ETH_HLEN) {
1880                dev_kfree_skb_any(skb);
1881                rx_ring->rx_dropped++;
1882                return;
1883        }
1884
1885        /* loopback self test for ethtool */
1886        if (test_bit(QL_SELFTEST, &qdev->flags)) {
1887                ql_check_lb_frame(qdev, skb);
1888                dev_kfree_skb_any(skb);
1889                return;
1890        }
1891
1892        prefetch(skb->data);
1893        if (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) {
1894                netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev, "%s Multicast.\n",
1895                             (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1896                             IB_MAC_IOCB_RSP_M_HASH ? "Hash" :
1897                             (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1898                             IB_MAC_IOCB_RSP_M_REG ? "Registered" :
1899                             (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1900                             IB_MAC_IOCB_RSP_M_PROM ? "Promiscuous" : "");
1901                rx_ring->rx_multicast++;
1902        }
1903        if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_P) {
1904                netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1905                             "Promiscuous Packet.\n");
1906        }
1907
1908        skb->protocol = eth_type_trans(skb, ndev);
1909        skb_checksum_none_assert(skb);
1910
1911        /* If rx checksum is on, and there are no
1912         * csum or frame errors.
1913         */
1914        if ((ndev->features & NETIF_F_RXCSUM) &&
1915            !(ib_mac_rsp->flags1 & IB_MAC_CSUM_ERR_MASK)) {
1916                /* TCP frame. */
1917                if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T) {
1918                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1919                                     "TCP checksum done!\n");
1920                        skb->ip_summed = CHECKSUM_UNNECESSARY;
1921                } else if ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_U) &&
1922                                (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_V4)) {
1923                /* Unfragmented ipv4 UDP frame. */
1924                        struct iphdr *iph = (struct iphdr *)skb->data;
1925
1926                        if (!(iph->frag_off &
1927                                htons(IP_MF | IP_OFFSET))) {
1928                                skb->ip_summed = CHECKSUM_UNNECESSARY;
1929                                netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1930                                             "TCP checksum done!\n");
1931                        }
1932                }
1933        }
1934
1935        rx_ring->rx_packets++;
1936        rx_ring->rx_bytes += skb->len;
1937        skb_record_rx_queue(skb, rx_ring->cq_id);
1938        if (vlan_id != 0xffff)
1939                __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_id);
1940        if (skb->ip_summed == CHECKSUM_UNNECESSARY)
1941                napi_gro_receive(&rx_ring->napi, skb);
1942        else
1943                netif_receive_skb(skb);
1944}
1945
1946/* Process an inbound completion from an rx ring. */
1947static unsigned long ql_process_mac_rx_intr(struct ql_adapter *qdev,
1948                                            struct rx_ring *rx_ring,
1949                                            struct ib_mac_iocb_rsp *ib_mac_rsp)
1950{
1951        u32 length = le32_to_cpu(ib_mac_rsp->data_len);
1952        u16 vlan_id = ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V) &&
1953                        (qdev->ndev->features & NETIF_F_HW_VLAN_CTAG_RX)) ?
1954                        ((le16_to_cpu(ib_mac_rsp->vlan_id) &
1955                        IB_MAC_IOCB_RSP_VLAN_MASK)) : 0xffff;
1956
1957        QL_DUMP_IB_MAC_RSP(ib_mac_rsp);
1958
1959        if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV) {
1960                /* The data and headers are split into
1961                 * separate buffers.
1962                 */
1963                ql_process_mac_split_rx_intr(qdev, rx_ring, ib_mac_rsp,
1964                                             vlan_id);
1965        } else if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DS) {
1966                /* The data fit in a single small buffer.
1967                 * Allocate a new skb, copy the data and
1968                 * return the buffer to the free pool.
1969                 */
1970                ql_process_mac_rx_skb(qdev, rx_ring, ib_mac_rsp, length,
1971                                      vlan_id);
1972        } else if ((ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DL) &&
1973                !(ib_mac_rsp->flags1 & IB_MAC_CSUM_ERR_MASK) &&
1974                (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T)) {
1975                /* TCP packet in a page chunk that's been checksummed.
1976                 * Tack it on to our GRO skb and let it go.
1977                 */
1978                ql_process_mac_rx_gro_page(qdev, rx_ring, ib_mac_rsp, length,
1979                                           vlan_id);
1980        } else if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DL) {
1981                /* Non-TCP packet in a page chunk. Allocate an
1982                 * skb, tack it on frags, and send it up.
1983                 */
1984                ql_process_mac_rx_page(qdev, rx_ring, ib_mac_rsp, length,
1985                                       vlan_id);
1986        } else {
1987                /* Non-TCP/UDP large frames that span multiple buffers
1988                 * can be processed corrrectly by the split frame logic.
1989                 */
1990                ql_process_mac_split_rx_intr(qdev, rx_ring, ib_mac_rsp,
1991                                             vlan_id);
1992        }
1993
1994        return (unsigned long)length;
1995}
1996
1997/* Process an outbound completion from an rx ring. */
1998static void ql_process_mac_tx_intr(struct ql_adapter *qdev,
1999                                   struct ob_mac_iocb_rsp *mac_rsp)
2000{
2001        struct tx_ring *tx_ring;
2002        struct tx_ring_desc *tx_ring_desc;
2003
2004        QL_DUMP_OB_MAC_RSP(mac_rsp);
2005        tx_ring = &qdev->tx_ring[mac_rsp->txq_idx];
2006        tx_ring_desc = &tx_ring->q[mac_rsp->tid];
2007        ql_unmap_send(qdev, tx_ring_desc, tx_ring_desc->map_cnt);
2008        tx_ring->tx_bytes += (tx_ring_desc->skb)->len;
2009        tx_ring->tx_packets++;
2010        dev_kfree_skb(tx_ring_desc->skb);
2011        tx_ring_desc->skb = NULL;
2012
2013        if (unlikely(mac_rsp->flags1 & (OB_MAC_IOCB_RSP_E |
2014                                        OB_MAC_IOCB_RSP_S |
2015                                        OB_MAC_IOCB_RSP_L |
2016                                        OB_MAC_IOCB_RSP_P | OB_MAC_IOCB_RSP_B))) {
2017                if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_E) {
2018                        netif_warn(qdev, tx_done, qdev->ndev,
2019                                   "Total descriptor length did not match transfer length.\n");
2020                }
2021                if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_S) {
2022                        netif_warn(qdev, tx_done, qdev->ndev,
2023                                   "Frame too short to be valid, not sent.\n");
2024                }
2025                if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_L) {
2026                        netif_warn(qdev, tx_done, qdev->ndev,
2027                                   "Frame too long, but sent anyway.\n");
2028                }
2029                if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_B) {
2030                        netif_warn(qdev, tx_done, qdev->ndev,
2031                                   "PCI backplane error. Frame not sent.\n");
2032                }
2033        }
2034        atomic_inc(&tx_ring->tx_count);
2035}
2036
2037/* Fire up a handler to reset the MPI processor. */
2038void ql_queue_fw_error(struct ql_adapter *qdev)
2039{
2040        ql_link_off(qdev);
2041        queue_delayed_work(qdev->workqueue, &qdev->mpi_reset_work, 0);
2042}
2043
2044void ql_queue_asic_error(struct ql_adapter *qdev)
2045{
2046        ql_link_off(qdev);
2047        ql_disable_interrupts(qdev);
2048        /* Clear adapter up bit to signal the recovery
2049         * process that it shouldn't kill the reset worker
2050         * thread
2051         */
2052        clear_bit(QL_ADAPTER_UP, &qdev->flags);
2053        /* Set asic recovery bit to indicate reset process that we are
2054         * in fatal error recovery process rather than normal close
2055         */
2056        set_bit(QL_ASIC_RECOVERY, &qdev->flags);
2057        queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0);
2058}
2059
2060static void ql_process_chip_ae_intr(struct ql_adapter *qdev,
2061                                    struct ib_ae_iocb_rsp *ib_ae_rsp)
2062{
2063        switch (ib_ae_rsp->event) {
2064        case MGMT_ERR_EVENT:
2065                netif_err(qdev, rx_err, qdev->ndev,
2066                          "Management Processor Fatal Error.\n");
2067                ql_queue_fw_error(qdev);
2068                return;
2069
2070        case CAM_LOOKUP_ERR_EVENT:
2071                netdev_err(qdev->ndev, "Multiple CAM hits lookup occurred.\n");
2072                netdev_err(qdev->ndev, "This event shouldn't occur.\n");
2073                ql_queue_asic_error(qdev);
2074                return;
2075
2076        case SOFT_ECC_ERROR_EVENT:
2077                netdev_err(qdev->ndev, "Soft ECC error detected.\n");
2078                ql_queue_asic_error(qdev);
2079                break;
2080
2081        case PCI_ERR_ANON_BUF_RD:
2082                netdev_err(qdev->ndev, "PCI error occurred when reading "
2083                                        "anonymous buffers from rx_ring %d.\n",
2084                                        ib_ae_rsp->q_id);
2085                ql_queue_asic_error(qdev);
2086                break;
2087
2088        default:
2089                netif_err(qdev, drv, qdev->ndev, "Unexpected event %d.\n",
2090                          ib_ae_rsp->event);
2091                ql_queue_asic_error(qdev);
2092                break;
2093        }
2094}
2095
2096static int ql_clean_outbound_rx_ring(struct rx_ring *rx_ring)
2097{
2098        struct ql_adapter *qdev = rx_ring->qdev;
2099        u32 prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
2100        struct ob_mac_iocb_rsp *net_rsp = NULL;
2101        int count = 0;
2102
2103        struct tx_ring *tx_ring;
2104        /* While there are entries in the completion queue. */
2105        while (prod != rx_ring->cnsmr_idx) {
2106
2107                netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
2108                             "cq_id = %d, prod = %d, cnsmr = %d\n",
2109                             rx_ring->cq_id, prod, rx_ring->cnsmr_idx);
2110
2111                net_rsp = (struct ob_mac_iocb_rsp *)rx_ring->curr_entry;
2112                rmb();
2113                switch (net_rsp->opcode) {
2114
2115                case OPCODE_OB_MAC_TSO_IOCB:
2116                case OPCODE_OB_MAC_IOCB:
2117                        ql_process_mac_tx_intr(qdev, net_rsp);
2118                        break;
2119                default:
2120                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
2121                                     "Hit default case, not handled! dropping the packet, opcode = %x.\n",
2122                                     net_rsp->opcode);
2123                }
2124                count++;
2125                ql_update_cq(rx_ring);
2126                prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
2127        }
2128        if (!net_rsp)
2129                return 0;
2130        ql_write_cq_idx(rx_ring);
2131        tx_ring = &qdev->tx_ring[net_rsp->txq_idx];
2132        if (__netif_subqueue_stopped(qdev->ndev, tx_ring->wq_id)) {
2133                if ((atomic_read(&tx_ring->tx_count) > (tx_ring->wq_len / 4)))
2134                        /*
2135                         * The queue got stopped because the tx_ring was full.
2136                         * Wake it up, because it's now at least 25% empty.
2137                         */
2138                        netif_wake_subqueue(qdev->ndev, tx_ring->wq_id);
2139        }
2140
2141        return count;
2142}
2143
2144static int ql_clean_inbound_rx_ring(struct rx_ring *rx_ring, int budget)
2145{
2146        struct ql_adapter *qdev = rx_ring->qdev;
2147        u32 prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
2148        struct ql_net_rsp_iocb *net_rsp;
2149        int count = 0;
2150
2151        /* While there are entries in the completion queue. */
2152        while (prod != rx_ring->cnsmr_idx) {
2153
2154                netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
2155                             "cq_id = %d, prod = %d, cnsmr = %d\n",
2156                             rx_ring->cq_id, prod, rx_ring->cnsmr_idx);
2157
2158                net_rsp = rx_ring->curr_entry;
2159                rmb();
2160                switch (net_rsp->opcode) {
2161                case OPCODE_IB_MAC_IOCB:
2162                        ql_process_mac_rx_intr(qdev, rx_ring,
2163                                               (struct ib_mac_iocb_rsp *)
2164                                               net_rsp);
2165                        break;
2166
2167                case OPCODE_IB_AE_IOCB:
2168                        ql_process_chip_ae_intr(qdev, (struct ib_ae_iocb_rsp *)
2169                                                net_rsp);
2170                        break;
2171                default:
2172                        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
2173                                     "Hit default case, not handled! dropping the packet, opcode = %x.\n",
2174                                     net_rsp->opcode);
2175                        break;
2176                }
2177                count++;
2178                ql_update_cq(rx_ring);
2179                prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
2180                if (count == budget)
2181                        break;
2182        }
2183        ql_update_buffer_queues(rx_ring, GFP_ATOMIC, 0);
2184        ql_write_cq_idx(rx_ring);
2185        return count;
2186}
2187
2188static int ql_napi_poll_msix(struct napi_struct *napi, int budget)
2189{
2190        struct rx_ring *rx_ring = container_of(napi, struct rx_ring, napi);
2191        struct ql_adapter *qdev = rx_ring->qdev;
2192        struct rx_ring *trx_ring;
2193        int i, work_done = 0;
2194        struct intr_context *ctx = &qdev->intr_context[rx_ring->cq_id];
2195
2196        netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
2197                     "Enter, NAPI POLL cq_id = %d.\n", rx_ring->cq_id);
2198
2199        /* Service the TX rings first.  They start
2200         * right after the RSS rings.
2201         */
2202        for (i = qdev->rss_ring_count; i < qdev->rx_ring_count; i++) {
2203                trx_ring = &qdev->rx_ring[i];
2204                /* If this TX completion ring belongs to this vector and
2205                 * it's not empty then service it.
2206                 */
2207                if ((ctx->irq_mask & (1 << trx_ring->cq_id)) &&
2208                    (ql_read_sh_reg(trx_ring->prod_idx_sh_reg) !=
2209                     trx_ring->cnsmr_idx)) {
2210                        netif_printk(qdev, intr, KERN_DEBUG, qdev->ndev,
2211                                     "%s: Servicing TX completion ring %d.\n",
2212                                     __func__, trx_ring->cq_id);
2213                        ql_clean_outbound_rx_ring(trx_ring);
2214                }
2215        }
2216
2217        /*
2218         * Now service the RSS ring if it's active.
2219         */
2220        if (ql_read_sh_reg(rx_ring->prod_idx_sh_reg) !=
2221                                        rx_ring->cnsmr_idx) {
2222                netif_printk(qdev, intr, KERN_DEBUG, qdev->ndev,
2223                             "%s: Servicing RX completion ring %d.\n",
2224                             __func__, rx_ring->cq_id);
2225                work_done = ql_clean_inbound_rx_ring(rx_ring, budget);
2226        }
2227
2228        if (work_done < budget) {
2229                napi_complete_done(napi, work_done);
2230                ql_enable_completion_interrupt(qdev, rx_ring->irq);
2231        }
2232        return work_done;
2233}
2234
2235static void qlge_vlan_mode(struct net_device *ndev, netdev_features_t features)
2236{
2237        struct ql_adapter *qdev = netdev_priv(ndev);
2238
2239        if (features & NETIF_F_HW_VLAN_CTAG_RX) {
2240                ql_write32(qdev, NIC_RCV_CFG, NIC_RCV_CFG_VLAN_MASK |
2241                                 NIC_RCV_CFG_VLAN_MATCH_AND_NON);
2242        } else {
2243                ql_write32(qdev, NIC_RCV_CFG, NIC_RCV_CFG_VLAN_MASK);
2244        }
2245}
2246
2247/**
2248 * qlge_update_hw_vlan_features - helper routine to reinitialize the adapter
2249 * based on the features to enable/disable hardware vlan accel
2250 */
2251static int qlge_update_hw_vlan_features(struct net_device *ndev,
2252                                        netdev_features_t features)
2253{
2254        struct ql_adapter *qdev = netdev_priv(ndev);
2255        int status = 0;
2256        bool need_restart = netif_running(ndev);
2257
2258        if (need_restart) {
2259                status = ql_adapter_down(qdev);
2260                if (status) {
2261                        netif_err(qdev, link, qdev->ndev,
2262                                  "Failed to bring down the adapter\n");
2263                        return status;
2264                }
2265        }
2266
2267        /* update the features with resent change */
2268        ndev->features = features;
2269
2270        if (need_restart) {
2271                status = ql_adapter_up(qdev);
2272                if (status) {
2273                        netif_err(qdev, link, qdev->ndev,
2274                                  "Failed to bring up the adapter\n");
2275                        return status;
2276                }
2277        }
2278
2279        return status;
2280}
2281
2282static int qlge_set_features(struct net_device *ndev,
2283                             netdev_features_t features)
2284{
2285        netdev_features_t changed = ndev->features ^ features;
2286        int err;
2287
2288        if (changed & NETIF_F_HW_VLAN_CTAG_RX) {
2289                /* Update the behavior of vlan accel in the adapter */
2290                err = qlge_update_hw_vlan_features(ndev, features);
2291                if (err)
2292                        return err;
2293
2294                qlge_vlan_mode(ndev, features);
2295        }
2296
2297        return 0;
2298}
2299
2300static int __qlge_vlan_rx_add_vid(struct ql_adapter *qdev, u16 vid)
2301{
2302        u32 enable_bit = MAC_ADDR_E;
2303        int err;
2304
2305        err = ql_set_mac_addr_reg(qdev, (u8 *)&enable_bit,
2306                                  MAC_ADDR_TYPE_VLAN, vid);
2307        if (err)
2308                netif_err(qdev, ifup, qdev->ndev,
2309                          "Failed to init vlan address.\n");
2310        return err;
2311}
2312
2313static int qlge_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid)
2314{
2315        struct ql_adapter *qdev = netdev_priv(ndev);
2316        int status;
2317        int err;
2318
2319        status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
2320        if (status)
2321                return status;
2322
2323        err = __qlge_vlan_rx_add_vid(qdev, vid);
2324        set_bit(vid, qdev->active_vlans);
2325
2326        ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
2327
2328        return err;
2329}
2330
2331static int __qlge_vlan_rx_kill_vid(struct ql_adapter *qdev, u16 vid)
2332{
2333        u32 enable_bit = 0;
2334        int err;
2335
2336        err = ql_set_mac_addr_reg(qdev, (u8 *)&enable_bit,
2337                                  MAC_ADDR_TYPE_VLAN, vid);
2338        if (err)
2339                netif_err(qdev, ifup, qdev->ndev,
2340                          "Failed to clear vlan address.\n");
2341        return err;
2342}
2343
2344static int qlge_vlan_rx_kill_vid(struct net_device *ndev, __be16 proto, u16 vid)
2345{
2346        struct ql_adapter *qdev = netdev_priv(ndev);
2347        int status;
2348        int err;
2349
2350        status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
2351        if (status)
2352                return status;
2353
2354        err = __qlge_vlan_rx_kill_vid(qdev, vid);
2355        clear_bit(vid, qdev->active_vlans);
2356
2357        ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
2358
2359        return err;
2360}
2361
2362static void qlge_restore_vlan(struct ql_adapter *qdev)
2363{
2364        int status;
2365        u16 vid;
2366
2367        status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
2368        if (status)
2369                return;
2370
2371        for_each_set_bit(vid, qdev->active_vlans, VLAN_N_VID)
2372                __qlge_vlan_rx_add_vid(qdev, vid);
2373
2374        ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
2375}
2376
2377/* MSI-X Multiple Vector Interrupt Handler for inbound completions. */
2378static irqreturn_t qlge_msix_rx_isr(int irq, void *dev_id)
2379{
2380        struct rx_ring *rx_ring = dev_id;
2381
2382        napi_schedule(&rx_ring->napi);
2383        return IRQ_HANDLED;
2384}
2385
2386/* This handles a fatal error, MPI activity, and the default
2387 * rx_ring in an MSI-X multiple vector environment.
2388 * In MSI/Legacy environment it also process the rest of
2389 * the rx_rings.
2390 */
2391static irqreturn_t qlge_isr(int irq, void *dev_id)
2392{
2393        struct rx_ring *rx_ring = dev_id;
2394        struct ql_adapter *qdev = rx_ring->qdev;
2395        struct intr_context *intr_context = &qdev->intr_context[0];
2396        u32 var;
2397        int work_done = 0;
2398
2399        /* Experience shows that when using INTx interrupts, interrupts must
2400         * be masked manually.
2401         * When using MSI mode, INTR_EN_EN must be explicitly disabled
2402         * (even though it is auto-masked), otherwise a later command to
2403         * enable it is not effective.
2404         */
2405        if (!test_bit(QL_MSIX_ENABLED, &qdev->flags))
2406                ql_disable_completion_interrupt(qdev, 0);
2407
2408        var = ql_read32(qdev, STS);
2409
2410        /*
2411         * Check for fatal error.
2412         */
2413        if (var & STS_FE) {
2414                ql_disable_completion_interrupt(qdev, 0);
2415                ql_queue_asic_error(qdev);
2416                netdev_err(qdev->ndev, "Got fatal error, STS = %x.\n", var);
2417                var = ql_read32(qdev, ERR_STS);
2418                netdev_err(qdev->ndev, "Resetting chip. "
2419                                        "Error Status Register = 0x%x\n", var);
2420                return IRQ_HANDLED;
2421        }
2422
2423        /*
2424         * Check MPI processor activity.
2425         */
2426        if ((var & STS_PI) &&
2427            (ql_read32(qdev, INTR_MASK) & INTR_MASK_PI)) {
2428                /*
2429                 * We've got an async event or mailbox completion.
2430                 * Handle it and clear the source of the interrupt.
2431                 */
2432                netif_err(qdev, intr, qdev->ndev,
2433                          "Got MPI processor interrupt.\n");
2434                ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16));
2435                queue_delayed_work_on(smp_processor_id(),
2436                                      qdev->workqueue, &qdev->mpi_work, 0);
2437                work_done++;
2438        }
2439
2440        /*
2441         * Get the bit-mask that shows the active queues for this
2442         * pass.  Compare it to the queues that this irq services
2443         * and call napi if there's a match.
2444         */
2445        var = ql_read32(qdev, ISR1);
2446        if (var & intr_context->irq_mask) {
2447                netif_info(qdev, intr, qdev->ndev,
2448                           "Waking handler for rx_ring[0].\n");
2449                napi_schedule(&rx_ring->napi);
2450                work_done++;
2451        } else {
2452                /* Experience shows that the device sometimes signals an
2453                 * interrupt but no work is scheduled from this function.
2454                 * Nevertheless, the interrupt is auto-masked. Therefore, we
2455                 * systematically re-enable the interrupt if we didn't
2456                 * schedule napi.
2457                 */
2458                ql_enable_completion_interrupt(qdev, 0);
2459        }
2460
2461        return work_done ? IRQ_HANDLED : IRQ_NONE;
2462}
2463
2464static int ql_tso(struct sk_buff *skb, struct ob_mac_tso_iocb_req *mac_iocb_ptr)
2465{
2466
2467        if (skb_is_gso(skb)) {
2468                int err;
2469                __be16 l3_proto = vlan_get_protocol(skb);
2470
2471                err = skb_cow_head(skb, 0);
2472                if (err < 0)
2473                        return err;
2474
2475                mac_iocb_ptr->opcode = OPCODE_OB_MAC_TSO_IOCB;
2476                mac_iocb_ptr->flags3 |= OB_MAC_TSO_IOCB_IC;
2477                mac_iocb_ptr->frame_len = cpu_to_le32((u32)skb->len);
2478                mac_iocb_ptr->total_hdrs_len =
2479                    cpu_to_le16(skb_transport_offset(skb) + tcp_hdrlen(skb));
2480                mac_iocb_ptr->net_trans_offset =
2481                    cpu_to_le16(skb_network_offset(skb) |
2482                                skb_transport_offset(skb)
2483                                << OB_MAC_TRANSPORT_HDR_SHIFT);
2484                mac_iocb_ptr->mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
2485                mac_iocb_ptr->flags2 |= OB_MAC_TSO_IOCB_LSO;
2486                if (likely(l3_proto == htons(ETH_P_IP))) {
2487                        struct iphdr *iph = ip_hdr(skb);
2488
2489                        iph->check = 0;
2490                        mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP4;
2491                        tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
2492                                                                 iph->daddr, 0,
2493                                                                 IPPROTO_TCP,
2494                                                                 0);
2495                } else if (l3_proto == htons(ETH_P_IPV6)) {
2496                        mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP6;
2497                        tcp_hdr(skb)->check =
2498                            ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
2499                                             &ipv6_hdr(skb)->daddr,
2500                                             0, IPPROTO_TCP, 0);
2501                }
2502                return 1;
2503        }
2504        return 0;
2505}
2506
2507static void ql_hw_csum_setup(struct sk_buff *skb,
2508                             struct ob_mac_tso_iocb_req *mac_iocb_ptr)
2509{
2510        int len;
2511        struct iphdr *iph = ip_hdr(skb);
2512        __sum16 *check;
2513
2514        mac_iocb_ptr->opcode = OPCODE_OB_MAC_TSO_IOCB;
2515        mac_iocb_ptr->frame_len = cpu_to_le32((u32)skb->len);
2516        mac_iocb_ptr->net_trans_offset =
2517                cpu_to_le16(skb_network_offset(skb) |
2518                skb_transport_offset(skb) << OB_MAC_TRANSPORT_HDR_SHIFT);
2519
2520        mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP4;
2521        len = (ntohs(iph->tot_len) - (iph->ihl << 2));
2522        if (likely(iph->protocol == IPPROTO_TCP)) {
2523                check = &(tcp_hdr(skb)->check);
2524                mac_iocb_ptr->flags2 |= OB_MAC_TSO_IOCB_TC;
2525                mac_iocb_ptr->total_hdrs_len =
2526                    cpu_to_le16(skb_transport_offset(skb) +
2527                                (tcp_hdr(skb)->doff << 2));
2528        } else {
2529                check = &(udp_hdr(skb)->check);
2530                mac_iocb_ptr->flags2 |= OB_MAC_TSO_IOCB_UC;
2531                mac_iocb_ptr->total_hdrs_len =
2532                    cpu_to_le16(skb_transport_offset(skb) +
2533                                sizeof(struct udphdr));
2534        }
2535        *check = ~csum_tcpudp_magic(iph->saddr,
2536                                    iph->daddr, len, iph->protocol, 0);
2537}
2538
2539static netdev_tx_t qlge_send(struct sk_buff *skb, struct net_device *ndev)
2540{
2541        struct tx_ring_desc *tx_ring_desc;
2542        struct ob_mac_iocb_req *mac_iocb_ptr;
2543        struct ql_adapter *qdev = netdev_priv(ndev);
2544        int tso;
2545        struct tx_ring *tx_ring;
2546        u32 tx_ring_idx = (u32)skb->queue_mapping;
2547
2548        tx_ring = &qdev->tx_ring[tx_ring_idx];
2549
2550        if (skb_padto(skb, ETH_ZLEN))
2551                return NETDEV_TX_OK;
2552
2553        if (unlikely(atomic_read(&tx_ring->tx_count) < 2)) {
2554                netif_info(qdev, tx_queued, qdev->ndev,
2555                           "%s: BUG! shutting down tx queue %d due to lack of resources.\n",
2556                           __func__, tx_ring_idx);
2557                netif_stop_subqueue(ndev, tx_ring->wq_id);
2558                tx_ring->tx_errors++;
2559                return NETDEV_TX_BUSY;
2560        }
2561        tx_ring_desc = &tx_ring->q[tx_ring->prod_idx];
2562        mac_iocb_ptr = tx_ring_desc->queue_entry;
2563        memset((void *)mac_iocb_ptr, 0, sizeof(*mac_iocb_ptr));
2564
2565        mac_iocb_ptr->opcode = OPCODE_OB_MAC_IOCB;
2566        mac_iocb_ptr->tid = tx_ring_desc->index;
2567        /* We use the upper 32-bits to store the tx queue for this IO.
2568         * When we get the completion we can use it to establish the context.
2569         */
2570        mac_iocb_ptr->txq_idx = tx_ring_idx;
2571        tx_ring_desc->skb = skb;
2572
2573        mac_iocb_ptr->frame_len = cpu_to_le16((u16)skb->len);
2574
2575        if (skb_vlan_tag_present(skb)) {
2576                netif_printk(qdev, tx_queued, KERN_DEBUG, qdev->ndev,
2577                             "Adding a vlan tag %d.\n", skb_vlan_tag_get(skb));
2578                mac_iocb_ptr->flags3 |= OB_MAC_IOCB_V;
2579                mac_iocb_ptr->vlan_tci = cpu_to_le16(skb_vlan_tag_get(skb));
2580        }
2581        tso = ql_tso(skb, (struct ob_mac_tso_iocb_req *)mac_iocb_ptr);
2582        if (tso < 0) {
2583                dev_kfree_skb_any(skb);
2584                return NETDEV_TX_OK;
2585        } else if (unlikely(!tso) && (skb->ip_summed == CHECKSUM_PARTIAL)) {
2586                ql_hw_csum_setup(skb,
2587                                 (struct ob_mac_tso_iocb_req *)mac_iocb_ptr);
2588        }
2589        if (ql_map_send(qdev, mac_iocb_ptr, skb, tx_ring_desc) !=
2590                        NETDEV_TX_OK) {
2591                netif_err(qdev, tx_queued, qdev->ndev,
2592                          "Could not map the segments.\n");
2593                tx_ring->tx_errors++;
2594                return NETDEV_TX_BUSY;
2595        }
2596        QL_DUMP_OB_MAC_IOCB(mac_iocb_ptr);
2597        tx_ring->prod_idx++;
2598        if (tx_ring->prod_idx == tx_ring->wq_len)
2599                tx_ring->prod_idx = 0;
2600        wmb();
2601
2602        ql_write_db_reg_relaxed(tx_ring->prod_idx, tx_ring->prod_idx_db_reg);
2603        netif_printk(qdev, tx_queued, KERN_DEBUG, qdev->ndev,
2604                     "tx queued, slot %d, len %d\n",
2605                     tx_ring->prod_idx, skb->len);
2606
2607        atomic_dec(&tx_ring->tx_count);
2608
2609        if (unlikely(atomic_read(&tx_ring->tx_count) < 2)) {
2610                netif_stop_subqueue(ndev, tx_ring->wq_id);
2611                if ((atomic_read(&tx_ring->tx_count) > (tx_ring->wq_len / 4)))
2612                        /*
2613                         * The queue got stopped because the tx_ring was full.
2614                         * Wake it up, because it's now at least 25% empty.
2615                         */
2616                        netif_wake_subqueue(qdev->ndev, tx_ring->wq_id);
2617        }
2618        return NETDEV_TX_OK;
2619}
2620
2621static void ql_free_shadow_space(struct ql_adapter *qdev)
2622{
2623        if (qdev->rx_ring_shadow_reg_area) {
2624                dma_free_coherent(&qdev->pdev->dev,
2625                                  PAGE_SIZE,
2626                                  qdev->rx_ring_shadow_reg_area,
2627                                  qdev->rx_ring_shadow_reg_dma);
2628                qdev->rx_ring_shadow_reg_area = NULL;
2629        }
2630        if (qdev->tx_ring_shadow_reg_area) {
2631                dma_free_coherent(&qdev->pdev->dev,
2632                                  PAGE_SIZE,
2633                                  qdev->tx_ring_shadow_reg_area,
2634                                  qdev->tx_ring_shadow_reg_dma);
2635                qdev->tx_ring_shadow_reg_area = NULL;
2636        }
2637}
2638
2639static int ql_alloc_shadow_space(struct ql_adapter *qdev)
2640{
2641        qdev->rx_ring_shadow_reg_area =
2642                dma_alloc_coherent(&qdev->pdev->dev, PAGE_SIZE,
2643                                   &qdev->rx_ring_shadow_reg_dma, GFP_ATOMIC);
2644        if (!qdev->rx_ring_shadow_reg_area) {
2645                netif_err(qdev, ifup, qdev->ndev,
2646                          "Allocation of RX shadow space failed.\n");
2647                return -ENOMEM;
2648        }
2649
2650        qdev->tx_ring_shadow_reg_area =
2651                dma_alloc_coherent(&qdev->pdev->dev, PAGE_SIZE,
2652                                   &qdev->tx_ring_shadow_reg_dma, GFP_ATOMIC);
2653        if (!qdev->tx_ring_shadow_reg_area) {
2654                netif_err(qdev, ifup, qdev->ndev,
2655                          "Allocation of TX shadow space failed.\n");
2656                goto err_wqp_sh_area;
2657        }
2658        return 0;
2659
2660err_wqp_sh_area:
2661        dma_free_coherent(&qdev->pdev->dev,
2662                          PAGE_SIZE,
2663                          qdev->rx_ring_shadow_reg_area,
2664                          qdev->rx_ring_shadow_reg_dma);
2665        return -ENOMEM;
2666}
2667
2668static void ql_init_tx_ring(struct ql_adapter *qdev, struct tx_ring *tx_ring)
2669{
2670        struct tx_ring_desc *tx_ring_desc;
2671        int i;
2672        struct ob_mac_iocb_req *mac_iocb_ptr;
2673
2674        mac_iocb_ptr = tx_ring->wq_base;
2675        tx_ring_desc = tx_ring->q;
2676        for (i = 0; i < tx_ring->wq_len; i++) {
2677                tx_ring_desc->index = i;
2678                tx_ring_desc->skb = NULL;
2679                tx_ring_desc->queue_entry = mac_iocb_ptr;
2680                mac_iocb_ptr++;
2681                tx_ring_desc++;
2682        }
2683        atomic_set(&tx_ring->tx_count, tx_ring->wq_len);
2684}
2685
2686static void ql_free_tx_resources(struct ql_adapter *qdev,
2687                                 struct tx_ring *tx_ring)
2688{
2689        if (tx_ring->wq_base) {
2690                dma_free_coherent(&qdev->pdev->dev, tx_ring->wq_size,
2691                                  tx_ring->wq_base, tx_ring->wq_base_dma);
2692                tx_ring->wq_base = NULL;
2693        }
2694        kfree(tx_ring->q);
2695        tx_ring->q = NULL;
2696}
2697
2698static int ql_alloc_tx_resources(struct ql_adapter *qdev,
2699                                 struct tx_ring *tx_ring)
2700{
2701        tx_ring->wq_base =
2702            dma_alloc_coherent(&qdev->pdev->dev, tx_ring->wq_size,
2703                               &tx_ring->wq_base_dma, GFP_ATOMIC);
2704
2705        if (!tx_ring->wq_base ||
2706            tx_ring->wq_base_dma & WQ_ADDR_ALIGN)
2707                goto pci_alloc_err;
2708
2709        tx_ring->q =
2710            kmalloc_array(tx_ring->wq_len, sizeof(struct tx_ring_desc),
2711                          GFP_KERNEL);
2712        if (!tx_ring->q)
2713                goto err;
2714
2715        return 0;
2716err:
2717        dma_free_coherent(&qdev->pdev->dev, tx_ring->wq_size,
2718                          tx_ring->wq_base, tx_ring->wq_base_dma);
2719        tx_ring->wq_base = NULL;
2720pci_alloc_err:
2721        netif_err(qdev, ifup, qdev->ndev, "tx_ring alloc failed.\n");
2722        return -ENOMEM;
2723}
2724
2725static void ql_free_lbq_buffers(struct ql_adapter *qdev, struct rx_ring *rx_ring)
2726{
2727        struct qlge_bq *lbq = &rx_ring->lbq;
2728        unsigned int last_offset;
2729
2730        last_offset = ql_lbq_block_size(qdev) - qdev->lbq_buf_size;
2731        while (lbq->next_to_clean != lbq->next_to_use) {
2732                struct qlge_bq_desc *lbq_desc =
2733                        &lbq->queue[lbq->next_to_clean];
2734
2735                if (lbq_desc->p.pg_chunk.offset == last_offset)
2736                        dma_unmap_page(&qdev->pdev->dev, lbq_desc->dma_addr,
2737                                       ql_lbq_block_size(qdev),
2738                                       DMA_FROM_DEVICE);
2739                put_page(lbq_desc->p.pg_chunk.page);
2740
2741                lbq->next_to_clean = QLGE_BQ_WRAP(lbq->next_to_clean + 1);
2742        }
2743
2744        if (rx_ring->master_chunk.page) {
2745                dma_unmap_page(&qdev->pdev->dev, rx_ring->chunk_dma_addr,
2746                               ql_lbq_block_size(qdev), DMA_FROM_DEVICE);
2747                put_page(rx_ring->master_chunk.page);
2748                rx_ring->master_chunk.page = NULL;
2749        }
2750}
2751
2752static void ql_free_sbq_buffers(struct ql_adapter *qdev, struct rx_ring *rx_ring)
2753{
2754        int i;
2755
2756        for (i = 0; i < QLGE_BQ_LEN; i++) {
2757                struct qlge_bq_desc *sbq_desc = &rx_ring->sbq.queue[i];
2758
2759                if (!sbq_desc) {
2760                        netif_err(qdev, ifup, qdev->ndev,
2761                                  "sbq_desc %d is NULL.\n", i);
2762                        return;
2763                }
2764                if (sbq_desc->p.skb) {
2765                        dma_unmap_single(&qdev->pdev->dev, sbq_desc->dma_addr,
2766                                         SMALL_BUF_MAP_SIZE,
2767                                         DMA_FROM_DEVICE);
2768                        dev_kfree_skb(sbq_desc->p.skb);
2769                        sbq_desc->p.skb = NULL;
2770                }
2771        }
2772}
2773
2774/* Free all large and small rx buffers associated
2775 * with the completion queues for this device.
2776 */
2777static void ql_free_rx_buffers(struct ql_adapter *qdev)
2778{
2779        int i;
2780
2781        for (i = 0; i < qdev->rx_ring_count; i++) {
2782                struct rx_ring *rx_ring = &qdev->rx_ring[i];
2783
2784                if (rx_ring->lbq.queue)
2785                        ql_free_lbq_buffers(qdev, rx_ring);
2786                if (rx_ring->sbq.queue)
2787                        ql_free_sbq_buffers(qdev, rx_ring);
2788        }
2789}
2790
2791static void ql_alloc_rx_buffers(struct ql_adapter *qdev)
2792{
2793        int i;
2794
2795        for (i = 0; i < qdev->rss_ring_count; i++)
2796                ql_update_buffer_queues(&qdev->rx_ring[i], GFP_KERNEL,
2797                                        HZ / 2);
2798}
2799
2800static int qlge_init_bq(struct qlge_bq *bq)
2801{
2802        struct rx_ring *rx_ring = QLGE_BQ_CONTAINER(bq);
2803        struct ql_adapter *qdev = rx_ring->qdev;
2804        struct qlge_bq_desc *bq_desc;
2805        __le64 *buf_ptr;
2806        int i;
2807
2808        bq->base = dma_alloc_coherent(&qdev->pdev->dev, QLGE_BQ_SIZE,
2809                                      &bq->base_dma, GFP_ATOMIC);
2810        if (!bq->base) {
2811                netif_err(qdev, ifup, qdev->ndev,
2812                          "ring %u %s allocation failed.\n", rx_ring->cq_id,
2813                          bq_type_name[bq->type]);
2814                return -ENOMEM;
2815        }
2816
2817        bq->queue = kmalloc_array(QLGE_BQ_LEN, sizeof(struct qlge_bq_desc),
2818                                  GFP_KERNEL);
2819        if (!bq->queue)
2820                return -ENOMEM;
2821
2822        buf_ptr = bq->base;
2823        bq_desc = &bq->queue[0];
2824        for (i = 0; i < QLGE_BQ_LEN; i++, buf_ptr++, bq_desc++) {
2825                bq_desc->p.skb = NULL;
2826                bq_desc->index = i;
2827                bq_desc->buf_ptr = buf_ptr;
2828        }
2829
2830        return 0;
2831}
2832
2833static void ql_free_rx_resources(struct ql_adapter *qdev,
2834                                 struct rx_ring *rx_ring)
2835{
2836        /* Free the small buffer queue. */
2837        if (rx_ring->sbq.base) {
2838                dma_free_coherent(&qdev->pdev->dev, QLGE_BQ_SIZE,
2839                                  rx_ring->sbq.base, rx_ring->sbq.base_dma);
2840                rx_ring->sbq.base = NULL;
2841        }
2842
2843        /* Free the small buffer queue control blocks. */
2844        kfree(rx_ring->sbq.queue);
2845        rx_ring->sbq.queue = NULL;
2846
2847        /* Free the large buffer queue. */
2848        if (rx_ring->lbq.base) {
2849                dma_free_coherent(&qdev->pdev->dev, QLGE_BQ_SIZE,
2850                                  rx_ring->lbq.base, rx_ring->lbq.base_dma);
2851                rx_ring->lbq.base = NULL;
2852        }
2853
2854        /* Free the large buffer queue control blocks. */
2855        kfree(rx_ring->lbq.queue);
2856        rx_ring->lbq.queue = NULL;
2857
2858        /* Free the rx queue. */
2859        if (rx_ring->cq_base) {
2860                dma_free_coherent(&qdev->pdev->dev,
2861                                  rx_ring->cq_size,
2862                                  rx_ring->cq_base, rx_ring->cq_base_dma);
2863                rx_ring->cq_base = NULL;
2864        }
2865}
2866
2867/* Allocate queues and buffers for this completions queue based
2868 * on the values in the parameter structure.
2869 */
2870static int ql_alloc_rx_resources(struct ql_adapter *qdev,
2871                                 struct rx_ring *rx_ring)
2872{
2873
2874        /*
2875         * Allocate the completion queue for this rx_ring.
2876         */
2877        rx_ring->cq_base =
2878            dma_alloc_coherent(&qdev->pdev->dev, rx_ring->cq_size,
2879                               &rx_ring->cq_base_dma, GFP_ATOMIC);
2880
2881        if (!rx_ring->cq_base) {
2882                netif_err(qdev, ifup, qdev->ndev, "rx_ring alloc failed.\n");
2883                return -ENOMEM;
2884        }
2885
2886        if (rx_ring->cq_id < qdev->rss_ring_count &&
2887            (qlge_init_bq(&rx_ring->sbq) || qlge_init_bq(&rx_ring->lbq))) {
2888                ql_free_rx_resources(qdev, rx_ring);
2889                return -ENOMEM;
2890        }
2891
2892        return 0;
2893}
2894
2895static void ql_tx_ring_clean(struct ql_adapter *qdev)
2896{
2897        struct tx_ring *tx_ring;
2898        struct tx_ring_desc *tx_ring_desc;
2899        int i, j;
2900
2901        /*
2902         * Loop through all queues and free
2903         * any resources.
2904         */
2905        for (j = 0; j < qdev->tx_ring_count; j++) {
2906                tx_ring = &qdev->tx_ring[j];
2907                for (i = 0; i < tx_ring->wq_len; i++) {
2908                        tx_ring_desc = &tx_ring->q[i];
2909                        if (tx_ring_desc && tx_ring_desc->skb) {
2910                                netif_err(qdev, ifdown, qdev->ndev,
2911                                          "Freeing lost SKB %p, from queue %d, index %d.\n",
2912                                          tx_ring_desc->skb, j,
2913                                          tx_ring_desc->index);
2914                                ql_unmap_send(qdev, tx_ring_desc,
2915                                              tx_ring_desc->map_cnt);
2916                                dev_kfree_skb(tx_ring_desc->skb);
2917                                tx_ring_desc->skb = NULL;
2918                        }
2919                }
2920        }
2921}
2922
2923static void ql_free_mem_resources(struct ql_adapter *qdev)
2924{
2925        int i;
2926
2927        for (i = 0; i < qdev->tx_ring_count; i++)
2928                ql_free_tx_resources(qdev, &qdev->tx_ring[i]);
2929        for (i = 0; i < qdev->rx_ring_count; i++)
2930                ql_free_rx_resources(qdev, &qdev->rx_ring[i]);
2931        ql_free_shadow_space(qdev);
2932}
2933
2934static int ql_alloc_mem_resources(struct ql_adapter *qdev)
2935{
2936        int i;
2937
2938        /* Allocate space for our shadow registers and such. */
2939        if (ql_alloc_shadow_space(qdev))
2940                return -ENOMEM;
2941
2942        for (i = 0; i < qdev->rx_ring_count; i++) {
2943                if (ql_alloc_rx_resources(qdev, &qdev->rx_ring[i]) != 0) {
2944                        netif_err(qdev, ifup, qdev->ndev,
2945                                  "RX resource allocation failed.\n");
2946                        goto err_mem;
2947                }
2948        }
2949        /* Allocate tx queue resources */
2950        for (i = 0; i < qdev->tx_ring_count; i++) {
2951                if (ql_alloc_tx_resources(qdev, &qdev->tx_ring[i]) != 0) {
2952                        netif_err(qdev, ifup, qdev->ndev,
2953                                  "TX resource allocation failed.\n");
2954                        goto err_mem;
2955                }
2956        }
2957        return 0;
2958
2959err_mem:
2960        ql_free_mem_resources(qdev);
2961        return -ENOMEM;
2962}
2963
2964/* Set up the rx ring control block and pass it to the chip.
2965 * The control block is defined as
2966 * "Completion Queue Initialization Control Block", or cqicb.
2967 */
2968static int ql_start_rx_ring(struct ql_adapter *qdev, struct rx_ring *rx_ring)
2969{
2970        struct cqicb *cqicb = &rx_ring->cqicb;
2971        void *shadow_reg = qdev->rx_ring_shadow_reg_area +
2972                (rx_ring->cq_id * RX_RING_SHADOW_SPACE);
2973        u64 shadow_reg_dma = qdev->rx_ring_shadow_reg_dma +
2974                (rx_ring->cq_id * RX_RING_SHADOW_SPACE);
2975        void __iomem *doorbell_area =
2976            qdev->doorbell_area + (DB_PAGE_SIZE * (128 + rx_ring->cq_id));
2977        int err = 0;
2978        u64 tmp;
2979        __le64 *base_indirect_ptr;
2980        int page_entries;
2981
2982        /* Set up the shadow registers for this ring. */
2983        rx_ring->prod_idx_sh_reg = shadow_reg;
2984        rx_ring->prod_idx_sh_reg_dma = shadow_reg_dma;
2985        *rx_ring->prod_idx_sh_reg = 0;
2986        shadow_reg += sizeof(u64);
2987        shadow_reg_dma += sizeof(u64);
2988        rx_ring->lbq.base_indirect = shadow_reg;
2989        rx_ring->lbq.base_indirect_dma = shadow_reg_dma;
2990        shadow_reg += (sizeof(u64) * MAX_DB_PAGES_PER_BQ(QLGE_BQ_LEN));
2991        shadow_reg_dma += (sizeof(u64) * MAX_DB_PAGES_PER_BQ(QLGE_BQ_LEN));
2992        rx_ring->sbq.base_indirect = shadow_reg;
2993        rx_ring->sbq.base_indirect_dma = shadow_reg_dma;
2994
2995        /* PCI doorbell mem area + 0x00 for consumer index register */
2996        rx_ring->cnsmr_idx_db_reg = (u32 __iomem *)doorbell_area;
2997        rx_ring->cnsmr_idx = 0;
2998        rx_ring->curr_entry = rx_ring->cq_base;
2999
3000        /* PCI doorbell mem area + 0x04 for valid register */
3001        rx_ring->valid_db_reg = doorbell_area + 0x04;
3002
3003        /* PCI doorbell mem area + 0x18 for large buffer consumer */
3004        rx_ring->lbq.prod_idx_db_reg = (u32 __iomem *)(doorbell_area + 0x18);
3005
3006        /* PCI doorbell mem area + 0x1c */
3007        rx_ring->sbq.prod_idx_db_reg = (u32 __iomem *)(doorbell_area + 0x1c);
3008
3009        memset((void *)cqicb, 0, sizeof(struct cqicb));
3010        cqicb->msix_vect = rx_ring->irq;
3011
3012        cqicb->len = cpu_to_le16(QLGE_FIT16(rx_ring->cq_len) | LEN_V |
3013                                 LEN_CPP_CONT);
3014
3015        cqicb->addr = cpu_to_le64(rx_ring->cq_base_dma);
3016
3017        cqicb->prod_idx_addr = cpu_to_le64(rx_ring->prod_idx_sh_reg_dma);
3018
3019        /*
3020         * Set up the control block load flags.
3021         */
3022        cqicb->flags = FLAGS_LC |       /* Load queue base address */
3023            FLAGS_LV |          /* Load MSI-X vector */
3024            FLAGS_LI;           /* Load irq delay values */
3025        if (rx_ring->cq_id < qdev->rss_ring_count) {
3026                cqicb->flags |= FLAGS_LL;       /* Load lbq values */
3027                tmp = (u64)rx_ring->lbq.base_dma;
3028                base_indirect_ptr = rx_ring->lbq.base_indirect;
3029                page_entries = 0;
3030                do {
3031                        *base_indirect_ptr = cpu_to_le64(tmp);
3032                        tmp += DB_PAGE_SIZE;
3033                        base_indirect_ptr++;
3034                        page_entries++;
3035                } while (page_entries < MAX_DB_PAGES_PER_BQ(QLGE_BQ_LEN));
3036                cqicb->lbq_addr = cpu_to_le64(rx_ring->lbq.base_indirect_dma);
3037                cqicb->lbq_buf_size =
3038                        cpu_to_le16(QLGE_FIT16(qdev->lbq_buf_size));
3039                cqicb->lbq_len = cpu_to_le16(QLGE_FIT16(QLGE_BQ_LEN));
3040                rx_ring->lbq.next_to_use = 0;
3041                rx_ring->lbq.next_to_clean = 0;
3042
3043                cqicb->flags |= FLAGS_LS;       /* Load sbq values */
3044                tmp = (u64)rx_ring->sbq.base_dma;
3045                base_indirect_ptr = rx_ring->sbq.base_indirect;
3046                page_entries = 0;
3047                do {
3048                        *base_indirect_ptr = cpu_to_le64(tmp);
3049                        tmp += DB_PAGE_SIZE;
3050                        base_indirect_ptr++;
3051                        page_entries++;
3052                } while (page_entries < MAX_DB_PAGES_PER_BQ(QLGE_BQ_LEN));
3053                cqicb->sbq_addr =
3054                    cpu_to_le64(rx_ring->sbq.base_indirect_dma);
3055                cqicb->sbq_buf_size = cpu_to_le16(SMALL_BUFFER_SIZE);
3056                cqicb->sbq_len = cpu_to_le16(QLGE_FIT16(QLGE_BQ_LEN));
3057                rx_ring->sbq.next_to_use = 0;
3058                rx_ring->sbq.next_to_clean = 0;
3059        }
3060        if (rx_ring->cq_id < qdev->rss_ring_count) {
3061                /* Inbound completion handling rx_rings run in
3062                 * separate NAPI contexts.
3063                 */
3064                netif_napi_add(qdev->ndev, &rx_ring->napi, ql_napi_poll_msix,
3065                               64);
3066                cqicb->irq_delay = cpu_to_le16(qdev->rx_coalesce_usecs);
3067                cqicb->pkt_delay = cpu_to_le16(qdev->rx_max_coalesced_frames);
3068        } else {
3069                cqicb->irq_delay = cpu_to_le16(qdev->tx_coalesce_usecs);
3070                cqicb->pkt_delay = cpu_to_le16(qdev->tx_max_coalesced_frames);
3071        }
3072        err = ql_write_cfg(qdev, cqicb, sizeof(struct cqicb),
3073                           CFG_LCQ, rx_ring->cq_id);
3074        if (err) {
3075                netif_err(qdev, ifup, qdev->ndev, "Failed to load CQICB.\n");
3076                return err;
3077        }
3078        return err;
3079}
3080
3081static int ql_start_tx_ring(struct ql_adapter *qdev, struct tx_ring *tx_ring)
3082{
3083        struct wqicb *wqicb = (struct wqicb *)tx_ring;
3084        void __iomem *doorbell_area =
3085            qdev->doorbell_area + (DB_PAGE_SIZE * tx_ring->wq_id);
3086        void *shadow_reg = qdev->tx_ring_shadow_reg_area +
3087            (tx_ring->wq_id * sizeof(u64));
3088        u64 shadow_reg_dma = qdev->tx_ring_shadow_reg_dma +
3089            (tx_ring->wq_id * sizeof(u64));
3090        int err = 0;
3091
3092        /*
3093         * Assign doorbell registers for this tx_ring.
3094         */
3095        /* TX PCI doorbell mem area for tx producer index */
3096        tx_ring->prod_idx_db_reg = (u32 __iomem *)doorbell_area;
3097        tx_ring->prod_idx = 0;
3098        /* TX PCI doorbell mem area + 0x04 */
3099        tx_ring->valid_db_reg = doorbell_area + 0x04;
3100
3101        /*
3102         * Assign shadow registers for this tx_ring.
3103         */
3104        tx_ring->cnsmr_idx_sh_reg = shadow_reg;
3105        tx_ring->cnsmr_idx_sh_reg_dma = shadow_reg_dma;
3106
3107        wqicb->len = cpu_to_le16(tx_ring->wq_len | Q_LEN_V | Q_LEN_CPP_CONT);
3108        wqicb->flags = cpu_to_le16(Q_FLAGS_LC |
3109                                   Q_FLAGS_LB | Q_FLAGS_LI | Q_FLAGS_LO);
3110        wqicb->cq_id_rss = cpu_to_le16(tx_ring->cq_id);
3111        wqicb->rid = 0;
3112        wqicb->addr = cpu_to_le64(tx_ring->wq_base_dma);
3113
3114        wqicb->cnsmr_idx_addr = cpu_to_le64(tx_ring->cnsmr_idx_sh_reg_dma);
3115
3116        ql_init_tx_ring(qdev, tx_ring);
3117
3118        err = ql_write_cfg(qdev, wqicb, sizeof(*wqicb), CFG_LRQ,
3119                           (u16)tx_ring->wq_id);
3120        if (err) {
3121                netif_err(qdev, ifup, qdev->ndev, "Failed to load tx_ring.\n");
3122                return err;
3123        }
3124        return err;
3125}
3126
3127static void ql_disable_msix(struct ql_adapter *qdev)
3128{
3129        if (test_bit(QL_MSIX_ENABLED, &qdev->flags)) {
3130                pci_disable_msix(qdev->pdev);
3131                clear_bit(QL_MSIX_ENABLED, &qdev->flags);
3132                kfree(qdev->msi_x_entry);
3133                qdev->msi_x_entry = NULL;
3134        } else if (test_bit(QL_MSI_ENABLED, &qdev->flags)) {
3135                pci_disable_msi(qdev->pdev);
3136                clear_bit(QL_MSI_ENABLED, &qdev->flags);
3137        }
3138}
3139
3140/* We start by trying to get the number of vectors
3141 * stored in qdev->intr_count. If we don't get that
3142 * many then we reduce the count and try again.
3143 */
3144static void ql_enable_msix(struct ql_adapter *qdev)
3145{
3146        int i, err;
3147
3148        /* Get the MSIX vectors. */
3149        if (qlge_irq_type == MSIX_IRQ) {
3150                /* Try to alloc space for the msix struct,
3151                 * if it fails then go to MSI/legacy.
3152                 */
3153                qdev->msi_x_entry = kcalloc(qdev->intr_count,
3154                                            sizeof(struct msix_entry),
3155                                            GFP_KERNEL);
3156                if (!qdev->msi_x_entry) {
3157                        qlge_irq_type = MSI_IRQ;
3158                        goto msi;
3159                }
3160
3161                for (i = 0; i < qdev->intr_count; i++)
3162                        qdev->msi_x_entry[i].entry = i;
3163
3164                err = pci_enable_msix_range(qdev->pdev, qdev->msi_x_entry,
3165                                            1, qdev->intr_count);
3166                if (err < 0) {
3167                        kfree(qdev->msi_x_entry);
3168                        qdev->msi_x_entry = NULL;
3169                        netif_warn(qdev, ifup, qdev->ndev,
3170                                   "MSI-X Enable failed, trying MSI.\n");
3171                        qlge_irq_type = MSI_IRQ;
3172                } else {
3173                        qdev->intr_count = err;
3174                        set_bit(QL_MSIX_ENABLED, &qdev->flags);
3175                        netif_info(qdev, ifup, qdev->ndev,
3176                                   "MSI-X Enabled, got %d vectors.\n",
3177                                   qdev->intr_count);
3178                        return;
3179                }
3180        }
3181msi:
3182        qdev->intr_count = 1;
3183        if (qlge_irq_type == MSI_IRQ) {
3184                if (pci_alloc_irq_vectors(qdev->pdev, 1, 1, PCI_IRQ_MSI) >= 0) {
3185                        set_bit(QL_MSI_ENABLED, &qdev->flags);
3186                        netif_info(qdev, ifup, qdev->ndev,
3187                                   "Running with MSI interrupts.\n");
3188                        return;
3189                }
3190        }
3191        qlge_irq_type = LEG_IRQ;
3192        set_bit(QL_LEGACY_ENABLED, &qdev->flags);
3193        netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
3194                     "Running with legacy interrupts.\n");
3195}
3196
3197/* Each vector services 1 RSS ring and and 1 or more
3198 * TX completion rings.  This function loops through
3199 * the TX completion rings and assigns the vector that
3200 * will service it.  An example would be if there are
3201 * 2 vectors (so 2 RSS rings) and 8 TX completion rings.
3202 * This would mean that vector 0 would service RSS ring 0
3203 * and TX completion rings 0,1,2 and 3.  Vector 1 would
3204 * service RSS ring 1 and TX completion rings 4,5,6 and 7.
3205 */
3206static void ql_set_tx_vect(struct ql_adapter *qdev)
3207{
3208        int i, j, vect;
3209        u32 tx_rings_per_vector = qdev->tx_ring_count / qdev->intr_count;
3210
3211        if (likely(test_bit(QL_MSIX_ENABLED, &qdev->flags))) {
3212                /* Assign irq vectors to TX rx_rings.*/
3213                for (vect = 0, j = 0, i = qdev->rss_ring_count;
3214                                         i < qdev->rx_ring_count; i++) {
3215                        if (j == tx_rings_per_vector) {
3216                                vect++;
3217                                j = 0;
3218                        }
3219                        qdev->rx_ring[i].irq = vect;
3220                        j++;
3221                }
3222        } else {
3223                /* For single vector all rings have an irq
3224                 * of zero.
3225                 */
3226                for (i = 0; i < qdev->rx_ring_count; i++)
3227                        qdev->rx_ring[i].irq = 0;
3228        }
3229}
3230
3231/* Set the interrupt mask for this vector.  Each vector
3232 * will service 1 RSS ring and 1 or more TX completion
3233 * rings.  This function sets up a bit mask per vector
3234 * that indicates which rings it services.
3235 */
3236static void ql_set_irq_mask(struct ql_adapter *qdev, struct intr_context *ctx)
3237{
3238        int j, vect = ctx->intr;
3239        u32 tx_rings_per_vector = qdev->tx_ring_count / qdev->intr_count;
3240
3241        if (likely(test_bit(QL_MSIX_ENABLED, &qdev->flags))) {
3242                /* Add the RSS ring serviced by this vector
3243                 * to the mask.
3244                 */
3245                ctx->irq_mask = (1 << qdev->rx_ring[vect].cq_id);
3246                /* Add the TX ring(s) serviced by this vector
3247                 * to the mask.
3248                 */
3249                for (j = 0; j < tx_rings_per_vector; j++) {
3250                        ctx->irq_mask |=
3251                        (1 << qdev->rx_ring[qdev->rss_ring_count +
3252                        (vect * tx_rings_per_vector) + j].cq_id);
3253                }
3254        } else {
3255                /* For single vector we just shift each queue's
3256                 * ID into the mask.
3257                 */
3258                for (j = 0; j < qdev->rx_ring_count; j++)
3259                        ctx->irq_mask |= (1 << qdev->rx_ring[j].cq_id);
3260        }
3261}
3262
3263/*
3264 * Here we build the intr_context structures based on
3265 * our rx_ring count and intr vector count.
3266 * The intr_context structure is used to hook each vector
3267 * to possibly different handlers.
3268 */
3269static void ql_resolve_queues_to_irqs(struct ql_adapter *qdev)
3270{
3271        int i = 0;
3272        struct intr_context *intr_context = &qdev->intr_context[0];
3273
3274        if (likely(test_bit(QL_MSIX_ENABLED, &qdev->flags))) {
3275                /* Each rx_ring has it's
3276                 * own intr_context since we have separate
3277                 * vectors for each queue.
3278                 */
3279                for (i = 0; i < qdev->intr_count; i++, intr_context++) {
3280                        qdev->rx_ring[i].irq = i;
3281                        intr_context->intr = i;
3282                        intr_context->qdev = qdev;
3283                        /* Set up this vector's bit-mask that indicates
3284                         * which queues it services.
3285                         */
3286                        ql_set_irq_mask(qdev, intr_context);
3287                        /*
3288                         * We set up each vectors enable/disable/read bits so
3289                         * there's no bit/mask calculations in the critical path.
3290                         */
3291                        intr_context->intr_en_mask =
3292                            INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
3293                            INTR_EN_TYPE_ENABLE | INTR_EN_IHD_MASK | INTR_EN_IHD
3294                            | i;
3295                        intr_context->intr_dis_mask =
3296                            INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
3297                            INTR_EN_TYPE_DISABLE | INTR_EN_IHD_MASK |
3298                            INTR_EN_IHD | i;
3299                        intr_context->intr_read_mask =
3300                            INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
3301                            INTR_EN_TYPE_READ | INTR_EN_IHD_MASK | INTR_EN_IHD |
3302                            i;
3303                        if (i == 0) {
3304                                /* The first vector/queue handles
3305                                 * broadcast/multicast, fatal errors,
3306                                 * and firmware events.  This in addition
3307                                 * to normal inbound NAPI processing.
3308                                 */
3309                                intr_context->handler = qlge_isr;
3310                                sprintf(intr_context->name, "%s-rx-%d",
3311                                        qdev->ndev->name, i);
3312                        } else {
3313                                /*
3314                                 * Inbound queues handle unicast frames only.
3315                                 */
3316                                intr_context->handler = qlge_msix_rx_isr;
3317                                sprintf(intr_context->name, "%s-rx-%d",
3318                                        qdev->ndev->name, i);
3319                        }
3320                }
3321        } else {
3322                /*
3323                 * All rx_rings use the same intr_context since
3324                 * there is only one vector.
3325                 */
3326                intr_context->intr = 0;
3327                intr_context->qdev = qdev;
3328                /*
3329                 * We set up each vectors enable/disable/read bits so
3330                 * there's no bit/mask calculations in the critical path.
3331                 */
3332                intr_context->intr_en_mask =
3333                    INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK | INTR_EN_TYPE_ENABLE;
3334                intr_context->intr_dis_mask =
3335                    INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
3336                    INTR_EN_TYPE_DISABLE;
3337                if (test_bit(QL_LEGACY_ENABLED, &qdev->flags)) {
3338                        /* Experience shows that when using INTx interrupts,
3339                         * the device does not always auto-mask INTR_EN_EN.
3340                         * Moreover, masking INTR_EN_EN manually does not
3341                         * immediately prevent interrupt generation.
3342                         */
3343                        intr_context->intr_en_mask |= INTR_EN_EI << 16 |
3344                                INTR_EN_EI;
3345                        intr_context->intr_dis_mask |= INTR_EN_EI << 16;
3346                }
3347                intr_context->intr_read_mask =
3348                    INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK | INTR_EN_TYPE_READ;
3349                /*
3350                 * Single interrupt means one handler for all rings.
3351                 */
3352                intr_context->handler = qlge_isr;
3353                sprintf(intr_context->name, "%s-single_irq", qdev->ndev->name);
3354                /* Set up this vector's bit-mask that indicates
3355                 * which queues it services. In this case there is
3356                 * a single vector so it will service all RSS and
3357                 * TX completion rings.
3358                 */
3359                ql_set_irq_mask(qdev, intr_context);
3360        }
3361        /* Tell the TX completion rings which MSIx vector
3362         * they will be using.
3363         */
3364        ql_set_tx_vect(qdev);
3365}
3366
3367static void ql_free_irq(struct ql_adapter *qdev)
3368{
3369        int i;
3370        struct intr_context *intr_context = &qdev->intr_context[0];
3371
3372        for (i = 0; i < qdev->intr_count; i++, intr_context++) {
3373                if (intr_context->hooked) {
3374                        if (test_bit(QL_MSIX_ENABLED, &qdev->flags)) {
3375                                free_irq(qdev->msi_x_entry[i].vector,
3376                                         &qdev->rx_ring[i]);
3377                        } else {
3378                                free_irq(qdev->pdev->irq, &qdev->rx_ring[0]);
3379                        }
3380                }
3381        }
3382        ql_disable_msix(qdev);
3383}
3384
3385static int ql_request_irq(struct ql_adapter *qdev)
3386{
3387        int i;
3388        int status = 0;
3389        struct pci_dev *pdev = qdev->pdev;
3390        struct intr_context *intr_context = &qdev->intr_context[0];
3391
3392        ql_resolve_queues_to_irqs(qdev);
3393
3394        for (i = 0; i < qdev->intr_count; i++, intr_context++) {
3395                if (test_bit(QL_MSIX_ENABLED, &qdev->flags)) {
3396                        status = request_irq(qdev->msi_x_entry[i].vector,
3397                                             intr_context->handler,
3398                                             0,
3399                                             intr_context->name,
3400                                             &qdev->rx_ring[i]);
3401                        if (status) {
3402                                netif_err(qdev, ifup, qdev->ndev,
3403                                          "Failed request for MSIX interrupt %d.\n",
3404                                          i);
3405                                goto err_irq;
3406                        }
3407                } else {
3408                        netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
3409                                     "trying msi or legacy interrupts.\n");
3410                        netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
3411                                     "%s: irq = %d.\n", __func__, pdev->irq);
3412                        netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
3413                                     "%s: context->name = %s.\n", __func__,
3414                                     intr_context->name);
3415                        netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
3416                                     "%s: dev_id = 0x%p.\n", __func__,
3417                                     &qdev->rx_ring[0]);
3418                        status =
3419                            request_irq(pdev->irq, qlge_isr,
3420                                        test_bit(QL_MSI_ENABLED, &qdev->flags)
3421                                                ? 0
3422                                                : IRQF_SHARED,
3423                                        intr_context->name, &qdev->rx_ring[0]);
3424                        if (status)
3425                                goto err_irq;
3426
3427                        netif_err(qdev, ifup, qdev->ndev,
3428                                  "Hooked intr 0, queue type RX_Q, with name %s.\n",
3429                                  intr_context->name);
3430                }
3431                intr_context->hooked = 1;
3432        }
3433        return status;
3434err_irq:
3435        netif_err(qdev, ifup, qdev->ndev, "Failed to get the interrupts!!!\n");
3436        ql_free_irq(qdev);
3437        return status;
3438}
3439
3440static int ql_start_rss(struct ql_adapter *qdev)
3441{
3442        static const u8 init_hash_seed[] = {
3443                0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
3444                0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0,
3445                0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b, 0x30, 0xb4,
3446                0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, 0xf2, 0x0c,
3447                0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa
3448        };
3449        struct ricb *ricb = &qdev->ricb;
3450        int status = 0;
3451        int i;
3452        u8 *hash_id = (u8 *)ricb->hash_cq_id;
3453
3454        memset((void *)ricb, 0, sizeof(*ricb));
3455
3456        ricb->base_cq = RSS_L4K;
3457        ricb->flags =
3458                (RSS_L6K | RSS_LI | RSS_LB | RSS_LM | RSS_RT4 | RSS_RT6);
3459        ricb->mask = cpu_to_le16((u16)(0x3ff));
3460
3461        /*
3462         * Fill out the Indirection Table.
3463         */
3464        for (i = 0; i < 1024; i++)
3465                hash_id[i] = (i & (qdev->rss_ring_count - 1));
3466
3467        memcpy((void *)&ricb->ipv6_hash_key[0], init_hash_seed, 40);
3468        memcpy((void *)&ricb->ipv4_hash_key[0], init_hash_seed, 16);
3469
3470        status = ql_write_cfg(qdev, ricb, sizeof(*ricb), CFG_LR, 0);
3471        if (status) {
3472                netif_err(qdev, ifup, qdev->ndev, "Failed to load RICB.\n");
3473                return status;
3474        }
3475        return status;
3476}
3477
3478static int ql_clear_routing_entries(struct ql_adapter *qdev)
3479{
3480        int i, status = 0;
3481
3482        status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
3483        if (status)
3484                return status;
3485        /* Clear all the entries in the routing table. */
3486        for (i = 0; i < 16; i++) {
3487                status = ql_set_routing_reg(qdev, i, 0, 0);
3488                if (status) {
3489                        netif_err(qdev, ifup, qdev->ndev,
3490                                  "Failed to init routing register for CAM packets.\n");
3491                        break;
3492                }
3493        }
3494        ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
3495        return status;
3496}
3497
3498/* Initialize the frame-to-queue routing. */
3499static int ql_route_initialize(struct ql_adapter *qdev)
3500{
3501        int status = 0;
3502
3503        /* Clear all the entries in the routing table. */
3504        status = ql_clear_routing_entries(qdev);
3505        if (status)
3506                return status;
3507
3508        status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
3509        if (status)
3510                return status;
3511
3512        status = ql_set_routing_reg(qdev, RT_IDX_IP_CSUM_ERR_SLOT,
3513                                    RT_IDX_IP_CSUM_ERR, 1);
3514        if (status) {
3515                netif_err(qdev, ifup, qdev->ndev,
3516                          "Failed to init routing register for IP CSUM error packets.\n");
3517                goto exit;
3518        }
3519        status = ql_set_routing_reg(qdev, RT_IDX_TCP_UDP_CSUM_ERR_SLOT,
3520                                    RT_IDX_TU_CSUM_ERR, 1);
3521        if (status) {
3522                netif_err(qdev, ifup, qdev->ndev,
3523                          "Failed to init routing register for TCP/UDP CSUM error packets.\n");
3524                goto exit;
3525        }
3526        status = ql_set_routing_reg(qdev, RT_IDX_BCAST_SLOT, RT_IDX_BCAST, 1);
3527        if (status) {
3528                netif_err(qdev, ifup, qdev->ndev,
3529                          "Failed to init routing register for broadcast packets.\n");
3530                goto exit;
3531        }
3532        /* If we have more than one inbound queue, then turn on RSS in the
3533         * routing block.
3534         */
3535        if (qdev->rss_ring_count > 1) {
3536                status = ql_set_routing_reg(qdev, RT_IDX_RSS_MATCH_SLOT,
3537                                            RT_IDX_RSS_MATCH, 1);
3538                if (status) {
3539                        netif_err(qdev, ifup, qdev->ndev,
3540                                  "Failed to init routing register for MATCH RSS packets.\n");
3541                        goto exit;
3542                }
3543        }
3544
3545        status = ql_set_routing_reg(qdev, RT_IDX_CAM_HIT_SLOT,
3546                                    RT_IDX_CAM_HIT, 1);
3547        if (status)
3548                netif_err(qdev, ifup, qdev->ndev,
3549                          "Failed to init routing register for CAM packets.\n");
3550exit:
3551        ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
3552        return status;
3553}
3554
3555int ql_cam_route_initialize(struct ql_adapter *qdev)
3556{
3557        int status, set;
3558
3559        /* If check if the link is up and use to
3560         * determine if we are setting or clearing
3561         * the MAC address in the CAM.
3562         */
3563        set = ql_read32(qdev, STS);
3564        set &= qdev->port_link_up;
3565        status = ql_set_mac_addr(qdev, set);
3566        if (status) {
3567                netif_err(qdev, ifup, qdev->ndev, "Failed to init mac address.\n");
3568                return status;
3569        }
3570
3571        status = ql_route_initialize(qdev);
3572        if (status)
3573                netif_err(qdev, ifup, qdev->ndev, "Failed to init routing table.\n");
3574
3575        return status;
3576}
3577
3578static int ql_adapter_initialize(struct ql_adapter *qdev)
3579{
3580        u32 value, mask;
3581        int i;
3582        int status = 0;
3583
3584        /*
3585         * Set up the System register to halt on errors.
3586         */
3587        value = SYS_EFE | SYS_FAE;
3588        mask = value << 16;
3589        ql_write32(qdev, SYS, mask | value);
3590
3591        /* Set the default queue, and VLAN behavior. */
3592        value = NIC_RCV_CFG_DFQ;
3593        mask = NIC_RCV_CFG_DFQ_MASK;
3594        if (qdev->ndev->features & NETIF_F_HW_VLAN_CTAG_RX) {
3595                value |= NIC_RCV_CFG_RV;
3596                mask |= (NIC_RCV_CFG_RV << 16);
3597        }
3598        ql_write32(qdev, NIC_RCV_CFG, (mask | value));
3599
3600        /* Set the MPI interrupt to enabled. */
3601        ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16) | INTR_MASK_PI);
3602
3603        /* Enable the function, set pagesize, enable error checking. */
3604        value = FSC_FE | FSC_EPC_INBOUND | FSC_EPC_OUTBOUND |
3605            FSC_EC | FSC_VM_PAGE_4K;
3606        value |= SPLT_SETTING;
3607
3608        /* Set/clear header splitting. */
3609        mask = FSC_VM_PAGESIZE_MASK |
3610            FSC_DBL_MASK | FSC_DBRST_MASK | (value << 16);
3611        ql_write32(qdev, FSC, mask | value);
3612
3613        ql_write32(qdev, SPLT_HDR, SPLT_LEN);
3614
3615        /* Set RX packet routing to use port/pci function on which the
3616         * packet arrived on in addition to usual frame routing.
3617         * This is helpful on bonding where both interfaces can have
3618         * the same MAC address.
3619         */
3620        ql_write32(qdev, RST_FO, RST_FO_RR_MASK | RST_FO_RR_RCV_FUNC_CQ);
3621        /* Reroute all packets to our Interface.
3622         * They may have been routed to MPI firmware
3623         * due to WOL.
3624         */
3625        value = ql_read32(qdev, MGMT_RCV_CFG);
3626        value &= ~MGMT_RCV_CFG_RM;
3627        mask = 0xffff0000;
3628
3629        /* Sticky reg needs clearing due to WOL. */
3630        ql_write32(qdev, MGMT_RCV_CFG, mask);
3631        ql_write32(qdev, MGMT_RCV_CFG, mask | value);
3632
3633        /* Default WOL is enable on Mezz cards */
3634        if (qdev->pdev->subsystem_device == 0x0068 ||
3635            qdev->pdev->subsystem_device == 0x0180)
3636                qdev->wol = WAKE_MAGIC;
3637
3638        /* Start up the rx queues. */
3639        for (i = 0; i < qdev->rx_ring_count; i++) {
3640                status = ql_start_rx_ring(qdev, &qdev->rx_ring[i]);
3641                if (status) {
3642                        netif_err(qdev, ifup, qdev->ndev,
3643                                  "Failed to start rx ring[%d].\n", i);
3644                        return status;
3645                }
3646        }
3647
3648        /* If there is more than one inbound completion queue
3649         * then download a RICB to configure RSS.
3650         */
3651        if (qdev->rss_ring_count > 1) {
3652                status = ql_start_rss(qdev);
3653                if (status) {
3654                        netif_err(qdev, ifup, qdev->ndev, "Failed to start RSS.\n");
3655                        return status;
3656                }
3657        }
3658
3659        /* Start up the tx queues. */
3660        for (i = 0; i < qdev->tx_ring_count; i++) {
3661                status = ql_start_tx_ring(qdev, &qdev->tx_ring[i]);
3662                if (status) {
3663                        netif_err(qdev, ifup, qdev->ndev,
3664                                  "Failed to start tx ring[%d].\n", i);
3665                        return status;
3666                }
3667        }
3668
3669        /* Initialize the port and set the max framesize. */
3670        status = qdev->nic_ops->port_initialize(qdev);
3671        if (status)
3672                netif_err(qdev, ifup, qdev->ndev, "Failed to start port.\n");
3673
3674        /* Set up the MAC address and frame routing filter. */
3675        status = ql_cam_route_initialize(qdev);
3676        if (status) {
3677                netif_err(qdev, ifup, qdev->ndev,
3678                          "Failed to init CAM/Routing tables.\n");
3679                return status;
3680        }
3681
3682        /* Start NAPI for the RSS queues. */
3683        for (i = 0; i < qdev->rss_ring_count; i++)
3684                napi_enable(&qdev->rx_ring[i].napi);
3685
3686        return status;
3687}
3688
3689/* Issue soft reset to chip. */
3690static int ql_adapter_reset(struct ql_adapter *qdev)
3691{
3692        u32 value;
3693        int status = 0;
3694        unsigned long end_jiffies;
3695
3696        /* Clear all the entries in the routing table. */
3697        status = ql_clear_routing_entries(qdev);
3698        if (status) {
3699                netif_err(qdev, ifup, qdev->ndev, "Failed to clear routing bits.\n");
3700                return status;
3701        }
3702
3703        /* Check if bit is set then skip the mailbox command and
3704         * clear the bit, else we are in normal reset process.
3705         */
3706        if (!test_bit(QL_ASIC_RECOVERY, &qdev->flags)) {
3707                /* Stop management traffic. */
3708                ql_mb_set_mgmnt_traffic_ctl(qdev, MB_SET_MPI_TFK_STOP);
3709
3710                /* Wait for the NIC and MGMNT FIFOs to empty. */
3711                ql_wait_fifo_empty(qdev);
3712        } else {
3713                clear_bit(QL_ASIC_RECOVERY, &qdev->flags);
3714        }
3715
3716        ql_write32(qdev, RST_FO, (RST_FO_FR << 16) | RST_FO_FR);
3717
3718        end_jiffies = jiffies + usecs_to_jiffies(30);
3719        do {
3720                value = ql_read32(qdev, RST_FO);
3721                if ((value & RST_FO_FR) == 0)
3722                        break;
3723                cpu_relax();
3724        } while (time_before(jiffies, end_jiffies));
3725
3726        if (value & RST_FO_FR) {
3727                netif_err(qdev, ifdown, qdev->ndev,
3728                          "ETIMEDOUT!!! errored out of resetting the chip!\n");
3729                status = -ETIMEDOUT;
3730        }
3731
3732        /* Resume management traffic. */
3733        ql_mb_set_mgmnt_traffic_ctl(qdev, MB_SET_MPI_TFK_RESUME);
3734        return status;
3735}
3736
3737static void ql_display_dev_info(struct net_device *ndev)
3738{
3739        struct ql_adapter *qdev = netdev_priv(ndev);
3740
3741        netif_info(qdev, probe, qdev->ndev,
3742                   "Function #%d, Port %d, NIC Roll %d, NIC Rev = %d, "
3743                   "XG Roll = %d, XG Rev = %d.\n",
3744                   qdev->func,
3745                   qdev->port,
3746                   qdev->chip_rev_id & 0x0000000f,
3747                   qdev->chip_rev_id >> 4 & 0x0000000f,
3748                   qdev->chip_rev_id >> 8 & 0x0000000f,
3749                   qdev->chip_rev_id >> 12 & 0x0000000f);
3750        netif_info(qdev, probe, qdev->ndev,
3751                   "MAC address %pM\n", ndev->dev_addr);
3752}
3753
3754static int ql_wol(struct ql_adapter *qdev)
3755{
3756        int status = 0;
3757        u32 wol = MB_WOL_DISABLE;
3758
3759        /* The CAM is still intact after a reset, but if we
3760         * are doing WOL, then we may need to program the
3761         * routing regs. We would also need to issue the mailbox
3762         * commands to instruct the MPI what to do per the ethtool
3763         * settings.
3764         */
3765
3766        if (qdev->wol & (WAKE_ARP | WAKE_MAGICSECURE | WAKE_PHY | WAKE_UCAST |
3767                        WAKE_MCAST | WAKE_BCAST)) {
3768                netif_err(qdev, ifdown, qdev->ndev,
3769                          "Unsupported WOL parameter. qdev->wol = 0x%x.\n",
3770                          qdev->wol);
3771                return -EINVAL;
3772        }
3773
3774        if (qdev->wol & WAKE_MAGIC) {
3775                status = ql_mb_wol_set_magic(qdev, 1);
3776                if (status) {
3777                        netif_err(qdev, ifdown, qdev->ndev,
3778                                  "Failed to set magic packet on %s.\n",
3779                                  qdev->ndev->name);
3780                        return status;
3781                }
3782                netif_info(qdev, drv, qdev->ndev,
3783                           "Enabled magic packet successfully on %s.\n",
3784                           qdev->ndev->name);
3785
3786                wol |= MB_WOL_MAGIC_PKT;
3787        }
3788
3789        if (qdev->wol) {
3790                wol |= MB_WOL_MODE_ON;
3791                status = ql_mb_wol_mode(qdev, wol);
3792                netif_err(qdev, drv, qdev->ndev,
3793                          "WOL %s (wol code 0x%x) on %s\n",
3794                          (status == 0) ? "Successfully set" : "Failed",
3795                          wol, qdev->ndev->name);
3796        }
3797
3798        return status;
3799}
3800
3801static void ql_cancel_all_work_sync(struct ql_adapter *qdev)
3802{
3803
3804        /* Don't kill the reset worker thread if we
3805         * are in the process of recovery.
3806         */
3807        if (test_bit(QL_ADAPTER_UP, &qdev->flags))
3808                cancel_delayed_work_sync(&qdev->asic_reset_work);
3809        cancel_delayed_work_sync(&qdev->mpi_reset_work);
3810        cancel_delayed_work_sync(&qdev->mpi_work);
3811        cancel_delayed_work_sync(&qdev->mpi_idc_work);
3812        cancel_delayed_work_sync(&qdev->mpi_core_to_log);
3813        cancel_delayed_work_sync(&qdev->mpi_port_cfg_work);
3814}
3815
3816static int ql_adapter_down(struct ql_adapter *qdev)
3817{
3818        int i, status = 0;
3819
3820        ql_link_off(qdev);
3821
3822        ql_cancel_all_work_sync(qdev);
3823
3824        for (i = 0; i < qdev->rss_ring_count; i++)
3825                napi_disable(&qdev->rx_ring[i].napi);
3826
3827        clear_bit(QL_ADAPTER_UP, &qdev->flags);
3828
3829        ql_disable_interrupts(qdev);
3830
3831        ql_tx_ring_clean(qdev);
3832
3833        /* Call netif_napi_del() from common point.
3834         */
3835        for (i = 0; i < qdev->rss_ring_count; i++)
3836                netif_napi_del(&qdev->rx_ring[i].napi);
3837
3838        status = ql_adapter_reset(qdev);
3839        if (status)
3840                netif_err(qdev, ifdown, qdev->ndev, "reset(func #%d) FAILED!\n",
3841                          qdev->func);
3842        ql_free_rx_buffers(qdev);
3843
3844        return status;
3845}
3846
3847static int ql_adapter_up(struct ql_adapter *qdev)
3848{
3849        int err = 0;
3850
3851        err = ql_adapter_initialize(qdev);
3852        if (err) {
3853                netif_info(qdev, ifup, qdev->ndev, "Unable to initialize adapter.\n");
3854                goto err_init;
3855        }
3856        set_bit(QL_ADAPTER_UP, &qdev->flags);
3857        ql_alloc_rx_buffers(qdev);
3858        /* If the port is initialized and the
3859         * link is up the turn on the carrier.
3860         */
3861        if ((ql_read32(qdev, STS) & qdev->port_init) &&
3862            (ql_read32(qdev, STS) & qdev->port_link_up))
3863                ql_link_on(qdev);
3864        /* Restore rx mode. */
3865        clear_bit(QL_ALLMULTI, &qdev->flags);
3866        clear_bit(QL_PROMISCUOUS, &qdev->flags);
3867        qlge_set_multicast_list(qdev->ndev);
3868
3869        /* Restore vlan setting. */
3870        qlge_restore_vlan(qdev);
3871
3872        ql_enable_interrupts(qdev);
3873        ql_enable_all_completion_interrupts(qdev);
3874        netif_tx_start_all_queues(qdev->ndev);
3875
3876        return 0;
3877err_init:
3878        ql_adapter_reset(qdev);
3879        return err;
3880}
3881
3882static void ql_release_adapter_resources(struct ql_adapter *qdev)
3883{
3884        ql_free_mem_resources(qdev);
3885        ql_free_irq(qdev);
3886}
3887
3888static int ql_get_adapter_resources(struct ql_adapter *qdev)
3889{
3890        if (ql_alloc_mem_resources(qdev)) {
3891                netif_err(qdev, ifup, qdev->ndev, "Unable to  allocate memory.\n");
3892                return -ENOMEM;
3893        }
3894        return ql_request_irq(qdev);
3895}
3896
3897static int qlge_close(struct net_device *ndev)
3898{
3899        struct ql_adapter *qdev = netdev_priv(ndev);
3900        int i;
3901
3902        /* If we hit pci_channel_io_perm_failure
3903         * failure condition, then we already
3904         * brought the adapter down.
3905         */
3906        if (test_bit(QL_EEH_FATAL, &qdev->flags)) {
3907                netif_err(qdev, drv, qdev->ndev, "EEH fatal did unload.\n");
3908                clear_bit(QL_EEH_FATAL, &qdev->flags);
3909                return 0;
3910        }
3911
3912        /*
3913         * Wait for device to recover from a reset.
3914         * (Rarely happens, but possible.)
3915         */
3916        while (!test_bit(QL_ADAPTER_UP, &qdev->flags))
3917                msleep(1);
3918
3919        /* Make sure refill_work doesn't re-enable napi */
3920        for (i = 0; i < qdev->rss_ring_count; i++)
3921                cancel_delayed_work_sync(&qdev->rx_ring[i].refill_work);
3922
3923        ql_adapter_down(qdev);
3924        ql_release_adapter_resources(qdev);
3925        return 0;
3926}
3927
3928static void qlge_set_lb_size(struct ql_adapter *qdev)
3929{
3930        if (qdev->ndev->mtu <= 1500)
3931                qdev->lbq_buf_size = LARGE_BUFFER_MIN_SIZE;
3932        else
3933                qdev->lbq_buf_size = LARGE_BUFFER_MAX_SIZE;
3934        qdev->lbq_buf_order = get_order(qdev->lbq_buf_size);
3935}
3936
3937static int ql_configure_rings(struct ql_adapter *qdev)
3938{
3939        int i;
3940        struct rx_ring *rx_ring;
3941        struct tx_ring *tx_ring;
3942        int cpu_cnt = min(MAX_CPUS, (int)num_online_cpus());
3943
3944        /* In a perfect world we have one RSS ring for each CPU
3945         * and each has it's own vector.  To do that we ask for
3946         * cpu_cnt vectors.  ql_enable_msix() will adjust the
3947         * vector count to what we actually get.  We then
3948         * allocate an RSS ring for each.
3949         * Essentially, we are doing min(cpu_count, msix_vector_count).
3950         */
3951        qdev->intr_count = cpu_cnt;
3952        ql_enable_msix(qdev);
3953        /* Adjust the RSS ring count to the actual vector count. */
3954        qdev->rss_ring_count = qdev->intr_count;
3955        qdev->tx_ring_count = cpu_cnt;
3956        qdev->rx_ring_count = qdev->tx_ring_count + qdev->rss_ring_count;
3957
3958        for (i = 0; i < qdev->tx_ring_count; i++) {
3959                tx_ring = &qdev->tx_ring[i];
3960                memset((void *)tx_ring, 0, sizeof(*tx_ring));
3961                tx_ring->qdev = qdev;
3962                tx_ring->wq_id = i;
3963                tx_ring->wq_len = qdev->tx_ring_size;
3964                tx_ring->wq_size =
3965                    tx_ring->wq_len * sizeof(struct ob_mac_iocb_req);
3966
3967                /*
3968                 * The completion queue ID for the tx rings start
3969                 * immediately after the rss rings.
3970                 */
3971                tx_ring->cq_id = qdev->rss_ring_count + i;
3972        }
3973
3974        for (i = 0; i < qdev->rx_ring_count; i++) {
3975                rx_ring = &qdev->rx_ring[i];
3976                memset((void *)rx_ring, 0, sizeof(*rx_ring));
3977                rx_ring->qdev = qdev;
3978                rx_ring->cq_id = i;
3979                rx_ring->cpu = i % cpu_cnt;     /* CPU to run handler on. */
3980                if (i < qdev->rss_ring_count) {
3981                        /*
3982                         * Inbound (RSS) queues.
3983                         */
3984                        rx_ring->cq_len = qdev->rx_ring_size;
3985                        rx_ring->cq_size =
3986                            rx_ring->cq_len * sizeof(struct ql_net_rsp_iocb);
3987                        rx_ring->lbq.type = QLGE_LB;
3988                        rx_ring->sbq.type = QLGE_SB;
3989                        INIT_DELAYED_WORK(&rx_ring->refill_work,
3990                                          &qlge_slow_refill);
3991                } else {
3992                        /*
3993                         * Outbound queue handles outbound completions only.
3994                         */
3995                        /* outbound cq is same size as tx_ring it services. */
3996                        rx_ring->cq_len = qdev->tx_ring_size;
3997                        rx_ring->cq_size =
3998                            rx_ring->cq_len * sizeof(struct ql_net_rsp_iocb);
3999                }
4000        }
4001        return 0;
4002}
4003
4004static int qlge_open(struct net_device *ndev)
4005{
4006        int err = 0;
4007        struct ql_adapter *qdev = netdev_priv(ndev);
4008
4009        err = ql_adapter_reset(qdev);
4010        if (err)
4011                return err;
4012
4013        qlge_set_lb_size(qdev);
4014        err = ql_configure_rings(qdev);
4015        if (err)
4016                return err;
4017
4018        err = ql_get_adapter_resources(qdev);
4019        if (err)
4020                goto error_up;
4021
4022        err = ql_adapter_up(qdev);
4023        if (err)
4024                goto error_up;
4025
4026        return err;
4027
4028error_up:
4029        ql_release_adapter_resources(qdev);
4030        return err;
4031}
4032
4033static int ql_change_rx_buffers(struct ql_adapter *qdev)
4034{
4035        int status;
4036
4037        /* Wait for an outstanding reset to complete. */
4038        if (!test_bit(QL_ADAPTER_UP, &qdev->flags)) {
4039                int i = 4;
4040
4041                while (--i && !test_bit(QL_ADAPTER_UP, &qdev->flags)) {
4042                        netif_err(qdev, ifup, qdev->ndev,
4043                                  "Waiting for adapter UP...\n");
4044                        ssleep(1);
4045                }
4046
4047                if (!i) {
4048                        netif_err(qdev, ifup, qdev->ndev,
4049                                  "Timed out waiting for adapter UP\n");
4050                        return -ETIMEDOUT;
4051                }
4052        }
4053
4054        status = ql_adapter_down(qdev);
4055        if (status)
4056                goto error;
4057
4058        qlge_set_lb_size(qdev);
4059
4060        status = ql_adapter_up(qdev);
4061        if (status)
4062                goto error;
4063
4064        return status;
4065error:
4066        netif_alert(qdev, ifup, qdev->ndev,
4067                    "Driver up/down cycle failed, closing device.\n");
4068        set_bit(QL_ADAPTER_UP, &qdev->flags);
4069        dev_close(qdev->ndev);
4070        return status;
4071}
4072
4073static int qlge_change_mtu(struct net_device *ndev, int new_mtu)
4074{
4075        struct ql_adapter *qdev = netdev_priv(ndev);
4076        int status;
4077
4078        if (ndev->mtu == 1500 && new_mtu == 9000)
4079                netif_err(qdev, ifup, qdev->ndev, "Changing to jumbo MTU.\n");
4080        else if (ndev->mtu == 9000 && new_mtu == 1500)
4081                netif_err(qdev, ifup, qdev->ndev, "Changing to normal MTU.\n");
4082        else
4083                return -EINVAL;
4084
4085        queue_delayed_work(qdev->workqueue,
4086                           &qdev->mpi_port_cfg_work, 3 * HZ);
4087
4088        ndev->mtu = new_mtu;
4089
4090        if (!netif_running(qdev->ndev))
4091                return 0;
4092
4093        status = ql_change_rx_buffers(qdev);
4094        if (status) {
4095                netif_err(qdev, ifup, qdev->ndev,
4096                          "Changing MTU failed.\n");
4097        }
4098
4099        return status;
4100}
4101
4102static struct net_device_stats *qlge_get_stats(struct net_device
4103                                               *ndev)
4104{
4105        struct ql_adapter *qdev = netdev_priv(ndev);
4106        struct rx_ring *rx_ring = &qdev->rx_ring[0];
4107        struct tx_ring *tx_ring = &qdev->tx_ring[0];
4108        unsigned long pkts, mcast, dropped, errors, bytes;
4109        int i;
4110
4111        /* Get RX stats. */
4112        pkts = mcast = dropped = errors = bytes = 0;
4113        for (i = 0; i < qdev->rss_ring_count; i++, rx_ring++) {
4114                pkts += rx_ring->rx_packets;
4115                bytes += rx_ring->rx_bytes;
4116                dropped += rx_ring->rx_dropped;
4117                errors += rx_ring->rx_errors;
4118                mcast += rx_ring->rx_multicast;
4119        }
4120        ndev->stats.rx_packets = pkts;
4121        ndev->stats.rx_bytes = bytes;
4122        ndev->stats.rx_dropped = dropped;
4123        ndev->stats.rx_errors = errors;
4124        ndev->stats.multicast = mcast;
4125
4126        /* Get TX stats. */
4127        pkts = errors = bytes = 0;
4128        for (i = 0; i < qdev->tx_ring_count; i++, tx_ring++) {
4129                pkts += tx_ring->tx_packets;
4130                bytes += tx_ring->tx_bytes;
4131                errors += tx_ring->tx_errors;
4132        }
4133        ndev->stats.tx_packets = pkts;
4134        ndev->stats.tx_bytes = bytes;
4135        ndev->stats.tx_errors = errors;
4136        return &ndev->stats;
4137}
4138
4139static void qlge_set_multicast_list(struct net_device *ndev)
4140{
4141        struct ql_adapter *qdev = netdev_priv(ndev);
4142        struct netdev_hw_addr *ha;
4143        int i, status;
4144
4145        status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
4146        if (status)
4147                return;
4148        /*
4149         * Set or clear promiscuous mode if a
4150         * transition is taking place.
4151         */
4152        if (ndev->flags & IFF_PROMISC) {
4153                if (!test_bit(QL_PROMISCUOUS, &qdev->flags)) {
4154                        if (ql_set_routing_reg
4155                            (qdev, RT_IDX_PROMISCUOUS_SLOT, RT_IDX_VALID, 1)) {
4156                                netif_err(qdev, hw, qdev->ndev,
4157                                          "Failed to set promiscuous mode.\n");
4158                        } else {
4159                                set_bit(QL_PROMISCUOUS, &qdev->flags);
4160                        }
4161                }
4162        } else {
4163                if (test_bit(QL_PROMISCUOUS, &qdev->flags)) {
4164                        if (ql_set_routing_reg
4165                            (qdev, RT_IDX_PROMISCUOUS_SLOT, RT_IDX_VALID, 0)) {
4166                                netif_err(qdev, hw, qdev->ndev,
4167                                          "Failed to clear promiscuous mode.\n");
4168                        } else {
4169                                clear_bit(QL_PROMISCUOUS, &qdev->flags);
4170                        }
4171                }
4172        }
4173
4174        /*
4175         * Set or clear all multicast mode if a
4176         * transition is taking place.
4177         */
4178        if ((ndev->flags & IFF_ALLMULTI) ||
4179            (netdev_mc_count(ndev) > MAX_MULTICAST_ENTRIES)) {
4180                if (!test_bit(QL_ALLMULTI, &qdev->flags)) {
4181                        if (ql_set_routing_reg
4182                            (qdev, RT_IDX_ALLMULTI_SLOT, RT_IDX_MCAST, 1)) {
4183                                netif_err(qdev, hw, qdev->ndev,
4184                                          "Failed to set all-multi mode.\n");
4185                        } else {
4186                                set_bit(QL_ALLMULTI, &qdev->flags);
4187                        }
4188                }
4189        } else {
4190                if (test_bit(QL_ALLMULTI, &qdev->flags)) {
4191                        if (ql_set_routing_reg
4192                            (qdev, RT_IDX_ALLMULTI_SLOT, RT_IDX_MCAST, 0)) {
4193                                netif_err(qdev, hw, qdev->ndev,
4194                                          "Failed to clear all-multi mode.\n");
4195                        } else {
4196                                clear_bit(QL_ALLMULTI, &qdev->flags);
4197                        }
4198                }
4199        }
4200
4201        if (!netdev_mc_empty(ndev)) {
4202                status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
4203                if (status)
4204                        goto exit;
4205                i = 0;
4206                netdev_for_each_mc_addr(ha, ndev) {
4207                        if (ql_set_mac_addr_reg(qdev, (u8 *)ha->addr,
4208                                                MAC_ADDR_TYPE_MULTI_MAC, i)) {
4209                                netif_err(qdev, hw, qdev->ndev,
4210                                          "Failed to loadmulticast address.\n");
4211                                ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
4212                                goto exit;
4213                        }
4214                        i++;
4215                }
4216                ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
4217                if (ql_set_routing_reg
4218                    (qdev, RT_IDX_MCAST_MATCH_SLOT, RT_IDX_MCAST_MATCH, 1)) {
4219                        netif_err(qdev, hw, qdev->ndev,
4220                                  "Failed to set multicast match mode.\n");
4221                } else {
4222                        set_bit(QL_ALLMULTI, &qdev->flags);
4223                }
4224        }
4225exit:
4226        ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
4227}
4228
4229static int qlge_set_mac_address(struct net_device *ndev, void *p)
4230{
4231        struct ql_adapter *qdev = netdev_priv(ndev);
4232        struct sockaddr *addr = p;
4233        int status;
4234
4235        if (!is_valid_ether_addr(addr->sa_data))
4236                return -EADDRNOTAVAIL;
4237        memcpy(ndev->dev_addr, addr->sa_data, ndev->addr_len);
4238        /* Update local copy of current mac address. */
4239        memcpy(qdev->current_mac_addr, ndev->dev_addr, ndev->addr_len);
4240
4241        status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
4242        if (status)
4243                return status;
4244        status = ql_set_mac_addr_reg(qdev, (u8 *)ndev->dev_addr,
4245                                     MAC_ADDR_TYPE_CAM_MAC,
4246                                     qdev->func * MAX_CQ);
4247        if (status)
4248                netif_err(qdev, hw, qdev->ndev, "Failed to load MAC address.\n");
4249        ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
4250        return status;
4251}
4252
4253static void qlge_tx_timeout(struct net_device *ndev, unsigned int txqueue)
4254{
4255        struct ql_adapter *qdev = netdev_priv(ndev);
4256
4257        ql_queue_asic_error(qdev);
4258}
4259
4260static void ql_asic_reset_work(struct work_struct *work)
4261{
4262        struct ql_adapter *qdev =
4263            container_of(work, struct ql_adapter, asic_reset_work.work);
4264        int status;
4265
4266        rtnl_lock();
4267        status = ql_adapter_down(qdev);
4268        if (status)
4269                goto error;
4270
4271        status = ql_adapter_up(qdev);
4272        if (status)
4273                goto error;
4274
4275        /* Restore rx mode. */
4276        clear_bit(QL_ALLMULTI, &qdev->flags);
4277        clear_bit(QL_PROMISCUOUS, &qdev->flags);
4278        qlge_set_multicast_list(qdev->ndev);
4279
4280        rtnl_unlock();
4281        return;
4282error:
4283        netif_alert(qdev, ifup, qdev->ndev,
4284                    "Driver up/down cycle failed, closing device\n");
4285
4286        set_bit(QL_ADAPTER_UP, &qdev->flags);
4287        dev_close(qdev->ndev);
4288        rtnl_unlock();
4289}
4290
4291static const struct nic_operations qla8012_nic_ops = {
4292        .get_flash              = ql_get_8012_flash_params,
4293        .port_initialize        = ql_8012_port_initialize,
4294};
4295
4296static const struct nic_operations qla8000_nic_ops = {
4297        .get_flash              = ql_get_8000_flash_params,
4298        .port_initialize        = ql_8000_port_initialize,
4299};
4300
4301/* Find the pcie function number for the other NIC
4302 * on this chip.  Since both NIC functions share a
4303 * common firmware we have the lowest enabled function
4304 * do any common work.  Examples would be resetting
4305 * after a fatal firmware error, or doing a firmware
4306 * coredump.
4307 */
4308static int ql_get_alt_pcie_func(struct ql_adapter *qdev)
4309{
4310        int status = 0;
4311        u32 temp;
4312        u32 nic_func1, nic_func2;
4313
4314        status = ql_read_mpi_reg(qdev, MPI_TEST_FUNC_PORT_CFG,
4315                                 &temp);
4316        if (status)
4317                return status;
4318
4319        nic_func1 = ((temp >> MPI_TEST_NIC1_FUNC_SHIFT) &
4320                        MPI_TEST_NIC_FUNC_MASK);
4321        nic_func2 = ((temp >> MPI_TEST_NIC2_FUNC_SHIFT) &
4322                        MPI_TEST_NIC_FUNC_MASK);
4323
4324        if (qdev->func == nic_func1)
4325                qdev->alt_func = nic_func2;
4326        else if (qdev->func == nic_func2)
4327                qdev->alt_func = nic_func1;
4328        else
4329                status = -EIO;
4330
4331        return status;
4332}
4333
4334static int ql_get_board_info(struct ql_adapter *qdev)
4335{
4336        int status;
4337
4338        qdev->func =
4339            (ql_read32(qdev, STS) & STS_FUNC_ID_MASK) >> STS_FUNC_ID_SHIFT;
4340        if (qdev->func > 3)
4341                return -EIO;
4342
4343        status = ql_get_alt_pcie_func(qdev);
4344        if (status)
4345                return status;
4346
4347        qdev->port = (qdev->func < qdev->alt_func) ? 0 : 1;
4348        if (qdev->port) {
4349                qdev->xg_sem_mask = SEM_XGMAC1_MASK;
4350                qdev->port_link_up = STS_PL1;
4351                qdev->port_init = STS_PI1;
4352                qdev->mailbox_in = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC2_MBI;
4353                qdev->mailbox_out = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC2_MBO;
4354        } else {
4355                qdev->xg_sem_mask = SEM_XGMAC0_MASK;
4356                qdev->port_link_up = STS_PL0;
4357                qdev->port_init = STS_PI0;
4358                qdev->mailbox_in = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC0_MBI;
4359                qdev->mailbox_out = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC0_MBO;
4360        }
4361        qdev->chip_rev_id = ql_read32(qdev, REV_ID);
4362        qdev->device_id = qdev->pdev->device;
4363        if (qdev->device_id == QLGE_DEVICE_ID_8012)
4364                qdev->nic_ops = &qla8012_nic_ops;
4365        else if (qdev->device_id == QLGE_DEVICE_ID_8000)
4366                qdev->nic_ops = &qla8000_nic_ops;
4367        return status;
4368}
4369
4370static void ql_release_all(struct pci_dev *pdev)
4371{
4372        struct net_device *ndev = pci_get_drvdata(pdev);
4373        struct ql_adapter *qdev = netdev_priv(ndev);
4374
4375        if (qdev->workqueue) {
4376                destroy_workqueue(qdev->workqueue);
4377                qdev->workqueue = NULL;
4378        }
4379
4380        if (qdev->reg_base)
4381                iounmap(qdev->reg_base);
4382        if (qdev->doorbell_area)
4383                iounmap(qdev->doorbell_area);
4384        vfree(qdev->mpi_coredump);
4385        pci_release_regions(pdev);
4386}
4387
4388static int ql_init_device(struct pci_dev *pdev, struct net_device *ndev,
4389                          int cards_found)
4390{
4391        struct ql_adapter *qdev = netdev_priv(ndev);
4392        int err = 0;
4393
4394        memset((void *)qdev, 0, sizeof(*qdev));
4395        err = pci_enable_device(pdev);
4396        if (err) {
4397                dev_err(&pdev->dev, "PCI device enable failed.\n");
4398                return err;
4399        }
4400
4401        qdev->ndev = ndev;
4402        qdev->pdev = pdev;
4403        pci_set_drvdata(pdev, ndev);
4404
4405        /* Set PCIe read request size */
4406        err = pcie_set_readrq(pdev, 4096);
4407        if (err) {
4408                dev_err(&pdev->dev, "Set readrq failed.\n");
4409                goto err_out1;
4410        }
4411
4412        err = pci_request_regions(pdev, DRV_NAME);
4413        if (err) {
4414                dev_err(&pdev->dev, "PCI region request failed.\n");
4415                return err;
4416        }
4417
4418        pci_set_master(pdev);
4419        if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
4420                set_bit(QL_DMA64, &qdev->flags);
4421                err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
4422        } else {
4423                err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
4424                if (!err)
4425                        err = dma_set_coherent_mask(&pdev->dev,
4426                                                    DMA_BIT_MASK(32));
4427        }
4428
4429        if (err) {
4430                dev_err(&pdev->dev, "No usable DMA configuration.\n");
4431                goto err_out2;
4432        }
4433
4434        /* Set PCIe reset type for EEH to fundamental. */
4435        pdev->needs_freset = 1;
4436        pci_save_state(pdev);
4437        qdev->reg_base =
4438                ioremap(pci_resource_start(pdev, 1), pci_resource_len(pdev, 1));
4439        if (!qdev->reg_base) {
4440                dev_err(&pdev->dev, "Register mapping failed.\n");
4441                err = -ENOMEM;
4442                goto err_out2;
4443        }
4444
4445        qdev->doorbell_area_size = pci_resource_len(pdev, 3);
4446        qdev->doorbell_area =
4447                ioremap(pci_resource_start(pdev, 3), pci_resource_len(pdev, 3));
4448        if (!qdev->doorbell_area) {
4449                dev_err(&pdev->dev, "Doorbell register mapping failed.\n");
4450                err = -ENOMEM;
4451                goto err_out2;
4452        }
4453
4454        err = ql_get_board_info(qdev);
4455        if (err) {
4456                dev_err(&pdev->dev, "Register access failed.\n");
4457                err = -EIO;
4458                goto err_out2;
4459        }
4460        qdev->msg_enable = netif_msg_init(debug, default_msg);
4461        spin_lock_init(&qdev->stats_lock);
4462
4463        if (qlge_mpi_coredump) {
4464                qdev->mpi_coredump =
4465                        vmalloc(sizeof(struct ql_mpi_coredump));
4466                if (!qdev->mpi_coredump) {
4467                        err = -ENOMEM;
4468                        goto err_out2;
4469                }
4470                if (qlge_force_coredump)
4471                        set_bit(QL_FRC_COREDUMP, &qdev->flags);
4472        }
4473        /* make sure the EEPROM is good */
4474        err = qdev->nic_ops->get_flash(qdev);
4475        if (err) {
4476                dev_err(&pdev->dev, "Invalid FLASH.\n");
4477                goto err_out2;
4478        }
4479
4480        /* Keep local copy of current mac address. */
4481        memcpy(qdev->current_mac_addr, ndev->dev_addr, ndev->addr_len);
4482
4483        /* Set up the default ring sizes. */
4484        qdev->tx_ring_size = NUM_TX_RING_ENTRIES;
4485        qdev->rx_ring_size = NUM_RX_RING_ENTRIES;
4486
4487        /* Set up the coalescing parameters. */
4488        qdev->rx_coalesce_usecs = DFLT_COALESCE_WAIT;
4489        qdev->tx_coalesce_usecs = DFLT_COALESCE_WAIT;
4490        qdev->rx_max_coalesced_frames = DFLT_INTER_FRAME_WAIT;
4491        qdev->tx_max_coalesced_frames = DFLT_INTER_FRAME_WAIT;
4492
4493        /*
4494         * Set up the operating parameters.
4495         */
4496        qdev->workqueue = alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM,
4497                                                  ndev->name);
4498        if (!qdev->workqueue) {
4499                err = -ENOMEM;
4500                goto err_out2;
4501        }
4502
4503        INIT_DELAYED_WORK(&qdev->asic_reset_work, ql_asic_reset_work);
4504        INIT_DELAYED_WORK(&qdev->mpi_reset_work, ql_mpi_reset_work);
4505        INIT_DELAYED_WORK(&qdev->mpi_work, ql_mpi_work);
4506        INIT_DELAYED_WORK(&qdev->mpi_port_cfg_work, ql_mpi_port_cfg_work);
4507        INIT_DELAYED_WORK(&qdev->mpi_idc_work, ql_mpi_idc_work);
4508        INIT_DELAYED_WORK(&qdev->mpi_core_to_log, ql_mpi_core_to_log);
4509        init_completion(&qdev->ide_completion);
4510        mutex_init(&qdev->mpi_mutex);
4511
4512        if (!cards_found) {
4513                dev_info(&pdev->dev, "%s\n", DRV_STRING);
4514                dev_info(&pdev->dev, "Driver name: %s, Version: %s.\n",
4515                         DRV_NAME, DRV_VERSION);
4516        }
4517        return 0;
4518err_out2:
4519        ql_release_all(pdev);
4520err_out1:
4521        pci_disable_device(pdev);
4522        return err;
4523}
4524
4525static const struct net_device_ops qlge_netdev_ops = {
4526        .ndo_open               = qlge_open,
4527        .ndo_stop               = qlge_close,
4528        .ndo_start_xmit         = qlge_send,
4529        .ndo_change_mtu         = qlge_change_mtu,
4530        .ndo_get_stats          = qlge_get_stats,
4531        .ndo_set_rx_mode        = qlge_set_multicast_list,
4532        .ndo_set_mac_address    = qlge_set_mac_address,
4533        .ndo_validate_addr      = eth_validate_addr,
4534        .ndo_tx_timeout         = qlge_tx_timeout,
4535        .ndo_set_features       = qlge_set_features,
4536        .ndo_vlan_rx_add_vid    = qlge_vlan_rx_add_vid,
4537        .ndo_vlan_rx_kill_vid   = qlge_vlan_rx_kill_vid,
4538};
4539
4540static void ql_timer(struct timer_list *t)
4541{
4542        struct ql_adapter *qdev = from_timer(qdev, t, timer);
4543        u32 var = 0;
4544
4545        var = ql_read32(qdev, STS);
4546        if (pci_channel_offline(qdev->pdev)) {
4547                netif_err(qdev, ifup, qdev->ndev, "EEH STS = 0x%.08x.\n", var);
4548                return;
4549        }
4550
4551        mod_timer(&qdev->timer, jiffies + (5 * HZ));
4552}
4553
4554static int qlge_probe(struct pci_dev *pdev,
4555                      const struct pci_device_id *pci_entry)
4556{
4557        struct net_device *ndev = NULL;
4558        struct ql_adapter *qdev = NULL;
4559        static int cards_found;
4560        int err = 0;
4561
4562        ndev = alloc_etherdev_mq(sizeof(struct ql_adapter),
4563                                 min(MAX_CPUS,
4564                                     netif_get_num_default_rss_queues()));
4565        if (!ndev)
4566                return -ENOMEM;
4567
4568        err = ql_init_device(pdev, ndev, cards_found);
4569        if (err < 0) {
4570                free_netdev(ndev);
4571                return err;
4572        }
4573
4574        qdev = netdev_priv(ndev);
4575        SET_NETDEV_DEV(ndev, &pdev->dev);
4576        ndev->hw_features = NETIF_F_SG |
4577                            NETIF_F_IP_CSUM |
4578                            NETIF_F_TSO |
4579                            NETIF_F_TSO_ECN |
4580                            NETIF_F_HW_VLAN_CTAG_TX |
4581                            NETIF_F_HW_VLAN_CTAG_RX |
4582                            NETIF_F_HW_VLAN_CTAG_FILTER |
4583                            NETIF_F_RXCSUM;
4584        ndev->features = ndev->hw_features;
4585        ndev->vlan_features = ndev->hw_features;
4586        /* vlan gets same features (except vlan filter) */
4587        ndev->vlan_features &= ~(NETIF_F_HW_VLAN_CTAG_FILTER |
4588                                 NETIF_F_HW_VLAN_CTAG_TX |
4589                                 NETIF_F_HW_VLAN_CTAG_RX);
4590
4591        if (test_bit(QL_DMA64, &qdev->flags))
4592                ndev->features |= NETIF_F_HIGHDMA;
4593
4594        /*
4595         * Set up net_device structure.
4596         */
4597        ndev->tx_queue_len = qdev->tx_ring_size;
4598        ndev->irq = pdev->irq;
4599
4600        ndev->netdev_ops = &qlge_netdev_ops;
4601        ndev->ethtool_ops = &qlge_ethtool_ops;
4602        ndev->watchdog_timeo = 10 * HZ;
4603
4604        /* MTU range: this driver only supports 1500 or 9000, so this only
4605         * filters out values above or below, and we'll rely on
4606         * qlge_change_mtu to make sure only 1500 or 9000 are allowed
4607         */
4608        ndev->min_mtu = ETH_DATA_LEN;
4609        ndev->max_mtu = 9000;
4610
4611        err = register_netdev(ndev);
4612        if (err) {
4613                dev_err(&pdev->dev, "net device registration failed.\n");
4614                ql_release_all(pdev);
4615                pci_disable_device(pdev);
4616                free_netdev(ndev);
4617                return err;
4618        }
4619        /* Start up the timer to trigger EEH if
4620         * the bus goes dead
4621         */
4622        timer_setup(&qdev->timer, ql_timer, TIMER_DEFERRABLE);
4623        mod_timer(&qdev->timer, jiffies + (5 * HZ));
4624        ql_link_off(qdev);
4625        ql_display_dev_info(ndev);
4626        atomic_set(&qdev->lb_count, 0);
4627        cards_found++;
4628        return 0;
4629}
4630
4631netdev_tx_t ql_lb_send(struct sk_buff *skb, struct net_device *ndev)
4632{
4633        return qlge_send(skb, ndev);
4634}
4635
4636int ql_clean_lb_rx_ring(struct rx_ring *rx_ring, int budget)
4637{
4638        return ql_clean_inbound_rx_ring(rx_ring, budget);
4639}
4640
4641static void qlge_remove(struct pci_dev *pdev)
4642{
4643        struct net_device *ndev = pci_get_drvdata(pdev);
4644        struct ql_adapter *qdev = netdev_priv(ndev);
4645
4646        del_timer_sync(&qdev->timer);
4647        ql_cancel_all_work_sync(qdev);
4648        unregister_netdev(ndev);
4649        ql_release_all(pdev);
4650        pci_disable_device(pdev);
4651        free_netdev(ndev);
4652}
4653
4654/* Clean up resources without touching hardware. */
4655static void ql_eeh_close(struct net_device *ndev)
4656{
4657        int i;
4658        struct ql_adapter *qdev = netdev_priv(ndev);
4659
4660        if (netif_carrier_ok(ndev)) {
4661                netif_carrier_off(ndev);
4662                netif_stop_queue(ndev);
4663        }
4664
4665        /* Disabling the timer */
4666        ql_cancel_all_work_sync(qdev);
4667
4668        for (i = 0; i < qdev->rss_ring_count; i++)
4669                netif_napi_del(&qdev->rx_ring[i].napi);
4670
4671        clear_bit(QL_ADAPTER_UP, &qdev->flags);
4672        ql_tx_ring_clean(qdev);
4673        ql_free_rx_buffers(qdev);
4674        ql_release_adapter_resources(qdev);
4675}
4676
4677/*
4678 * This callback is called by the PCI subsystem whenever
4679 * a PCI bus error is detected.
4680 */
4681static pci_ers_result_t qlge_io_error_detected(struct pci_dev *pdev,
4682                                               pci_channel_state_t state)
4683{
4684        struct net_device *ndev = pci_get_drvdata(pdev);
4685        struct ql_adapter *qdev = netdev_priv(ndev);
4686
4687        switch (state) {
4688        case pci_channel_io_normal:
4689                return PCI_ERS_RESULT_CAN_RECOVER;
4690        case pci_channel_io_frozen:
4691                netif_device_detach(ndev);
4692                del_timer_sync(&qdev->timer);
4693                if (netif_running(ndev))
4694                        ql_eeh_close(ndev);
4695                pci_disable_device(pdev);
4696                return PCI_ERS_RESULT_NEED_RESET;
4697        case pci_channel_io_perm_failure:
4698                dev_err(&pdev->dev,
4699                        "%s: pci_channel_io_perm_failure.\n", __func__);
4700                del_timer_sync(&qdev->timer);
4701                ql_eeh_close(ndev);
4702                set_bit(QL_EEH_FATAL, &qdev->flags);
4703                return PCI_ERS_RESULT_DISCONNECT;
4704        }
4705
4706        /* Request a slot reset. */
4707        return PCI_ERS_RESULT_NEED_RESET;
4708}
4709
4710/*
4711 * This callback is called after the PCI buss has been reset.
4712 * Basically, this tries to restart the card from scratch.
4713 * This is a shortened version of the device probe/discovery code,
4714 * it resembles the first-half of the () routine.
4715 */
4716static pci_ers_result_t qlge_io_slot_reset(struct pci_dev *pdev)
4717{
4718        struct net_device *ndev = pci_get_drvdata(pdev);
4719        struct ql_adapter *qdev = netdev_priv(ndev);
4720
4721        pdev->error_state = pci_channel_io_normal;
4722
4723        pci_restore_state(pdev);
4724        if (pci_enable_device(pdev)) {
4725                netif_err(qdev, ifup, qdev->ndev,
4726                          "Cannot re-enable PCI device after reset.\n");
4727                return PCI_ERS_RESULT_DISCONNECT;
4728        }
4729        pci_set_master(pdev);
4730
4731        if (ql_adapter_reset(qdev)) {
4732                netif_err(qdev, drv, qdev->ndev, "reset FAILED!\n");
4733                set_bit(QL_EEH_FATAL, &qdev->flags);
4734                return PCI_ERS_RESULT_DISCONNECT;
4735        }
4736
4737        return PCI_ERS_RESULT_RECOVERED;
4738}
4739
4740static void qlge_io_resume(struct pci_dev *pdev)
4741{
4742        struct net_device *ndev = pci_get_drvdata(pdev);
4743        struct ql_adapter *qdev = netdev_priv(ndev);
4744        int err = 0;
4745
4746        if (netif_running(ndev)) {
4747                err = qlge_open(ndev);
4748                if (err) {
4749                        netif_err(qdev, ifup, qdev->ndev,
4750                                  "Device initialization failed after reset.\n");
4751                        return;
4752                }
4753        } else {
4754                netif_err(qdev, ifup, qdev->ndev,
4755                          "Device was not running prior to EEH.\n");
4756        }
4757        mod_timer(&qdev->timer, jiffies + (5 * HZ));
4758        netif_device_attach(ndev);
4759}
4760
4761static const struct pci_error_handlers qlge_err_handler = {
4762        .error_detected = qlge_io_error_detected,
4763        .slot_reset = qlge_io_slot_reset,
4764        .resume = qlge_io_resume,
4765};
4766
4767static int __maybe_unused qlge_suspend(struct device *dev_d)
4768{
4769        struct net_device *ndev = dev_get_drvdata(dev_d);
4770        struct ql_adapter *qdev = netdev_priv(ndev);
4771        int err;
4772
4773        netif_device_detach(ndev);
4774        del_timer_sync(&qdev->timer);
4775
4776        if (netif_running(ndev)) {
4777                err = ql_adapter_down(qdev);
4778                if (!err)
4779                        return err;
4780        }
4781
4782        ql_wol(qdev);
4783
4784        return 0;
4785}
4786
4787static int __maybe_unused qlge_resume(struct device *dev_d)
4788{
4789        struct net_device *ndev = dev_get_drvdata(dev_d);
4790        struct ql_adapter *qdev = netdev_priv(ndev);
4791        int err;
4792
4793        pci_set_master(to_pci_dev(dev_d));
4794
4795        device_wakeup_disable(dev_d);
4796
4797        if (netif_running(ndev)) {
4798                err = ql_adapter_up(qdev);
4799                if (err)
4800                        return err;
4801        }
4802
4803        mod_timer(&qdev->timer, jiffies + (5 * HZ));
4804        netif_device_attach(ndev);
4805
4806        return 0;
4807}
4808
4809static void qlge_shutdown(struct pci_dev *pdev)
4810{
4811        qlge_suspend(&pdev->dev);
4812}
4813
4814static SIMPLE_DEV_PM_OPS(qlge_pm_ops, qlge_suspend, qlge_resume);
4815
4816static struct pci_driver qlge_driver = {
4817        .name = DRV_NAME,
4818        .id_table = qlge_pci_tbl,
4819        .probe = qlge_probe,
4820        .remove = qlge_remove,
4821        .driver.pm = &qlge_pm_ops,
4822        .shutdown = qlge_shutdown,
4823        .err_handler = &qlge_err_handler
4824};
4825
4826module_pci_driver(qlge_driver);
4827