linux/drivers/net/benet/be_main.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2005 - 2011 Emulex
   3 * All rights reserved.
   4 *
   5 * This program is free software; you can redistribute it and/or
   6 * modify it under the terms of the GNU General Public License version 2
   7 * as published by the Free Software Foundation.  The full GNU General
   8 * Public License is included in this distribution in the file called COPYING.
   9 *
  10 * Contact Information:
  11 * linux-drivers@emulex.com
  12 *
  13 * Emulex
  14 * 3333 Susan Street
  15 * Costa Mesa, CA 92626
  16 */
  17
  18#include <linux/prefetch.h>
  19#include "be.h"
  20#include "be_cmds.h"
  21#include <asm/div64.h>
  22
  23MODULE_VERSION(DRV_VER);
  24MODULE_DEVICE_TABLE(pci, be_dev_ids);
  25MODULE_DESCRIPTION(DRV_DESC " " DRV_VER);
  26MODULE_AUTHOR("ServerEngines Corporation");
  27MODULE_LICENSE("GPL");
  28
  29static ushort rx_frag_size = 2048;
  30static unsigned int num_vfs;
  31module_param(rx_frag_size, ushort, S_IRUGO);
  32module_param(num_vfs, uint, S_IRUGO);
  33MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data.");
  34MODULE_PARM_DESC(num_vfs, "Number of PCI VFs to initialize");
  35
  36static DEFINE_PCI_DEVICE_TABLE(be_dev_ids) = {
  37        { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) },
  38        { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID2) },
  39        { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) },
  40        { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) },
  41        { PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID3)},
  42        { PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID4)},
  43        { 0 }
  44};
  45MODULE_DEVICE_TABLE(pci, be_dev_ids);
  46/* UE Status Low CSR */
  47static const char * const ue_status_low_desc[] = {
  48        "CEV",
  49        "CTX",
  50        "DBUF",
  51        "ERX",
  52        "Host",
  53        "MPU",
  54        "NDMA",
  55        "PTC ",
  56        "RDMA ",
  57        "RXF ",
  58        "RXIPS ",
  59        "RXULP0 ",
  60        "RXULP1 ",
  61        "RXULP2 ",
  62        "TIM ",
  63        "TPOST ",
  64        "TPRE ",
  65        "TXIPS ",
  66        "TXULP0 ",
  67        "TXULP1 ",
  68        "UC ",
  69        "WDMA ",
  70        "TXULP2 ",
  71        "HOST1 ",
  72        "P0_OB_LINK ",
  73        "P1_OB_LINK ",
  74        "HOST_GPIO ",
  75        "MBOX ",
  76        "AXGMAC0",
  77        "AXGMAC1",
  78        "JTAG",
  79        "MPU_INTPEND"
  80};
  81/* UE Status High CSR */
  82static const char * const ue_status_hi_desc[] = {
  83        "LPCMEMHOST",
  84        "MGMT_MAC",
  85        "PCS0ONLINE",
  86        "MPU_IRAM",
  87        "PCS1ONLINE",
  88        "PCTL0",
  89        "PCTL1",
  90        "PMEM",
  91        "RR",
  92        "TXPB",
  93        "RXPP",
  94        "XAUI",
  95        "TXP",
  96        "ARM",
  97        "IPC",
  98        "HOST2",
  99        "HOST3",
 100        "HOST4",
 101        "HOST5",
 102        "HOST6",
 103        "HOST7",
 104        "HOST8",
 105        "HOST9",
 106        "NETC",
 107        "Unknown",
 108        "Unknown",
 109        "Unknown",
 110        "Unknown",
 111        "Unknown",
 112        "Unknown",
 113        "Unknown",
 114        "Unknown"
 115};
 116
 117static void be_queue_free(struct be_adapter *adapter, struct be_queue_info *q)
 118{
 119        struct be_dma_mem *mem = &q->dma_mem;
 120        if (mem->va)
 121                dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
 122                                  mem->dma);
 123}
 124
 125static int be_queue_alloc(struct be_adapter *adapter, struct be_queue_info *q,
 126                u16 len, u16 entry_size)
 127{
 128        struct be_dma_mem *mem = &q->dma_mem;
 129
 130        memset(q, 0, sizeof(*q));
 131        q->len = len;
 132        q->entry_size = entry_size;
 133        mem->size = len * entry_size;
 134        mem->va = dma_alloc_coherent(&adapter->pdev->dev, mem->size, &mem->dma,
 135                                     GFP_KERNEL);
 136        if (!mem->va)
 137                return -1;
 138        memset(mem->va, 0, mem->size);
 139        return 0;
 140}
 141
 142static void be_intr_set(struct be_adapter *adapter, bool enable)
 143{
 144        u8 __iomem *addr = adapter->pcicfg + PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET;
 145        u32 reg = ioread32(addr);
 146        u32 enabled = reg & MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
 147
 148        if (adapter->eeh_err)
 149                return;
 150
 151        if (!enabled && enable)
 152                reg |= MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
 153        else if (enabled && !enable)
 154                reg &= ~MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
 155        else
 156                return;
 157
 158        iowrite32(reg, addr);
 159}
 160
 161static void be_rxq_notify(struct be_adapter *adapter, u16 qid, u16 posted)
 162{
 163        u32 val = 0;
 164        val |= qid & DB_RQ_RING_ID_MASK;
 165        val |= posted << DB_RQ_NUM_POSTED_SHIFT;
 166
 167        wmb();
 168        iowrite32(val, adapter->db + DB_RQ_OFFSET);
 169}
 170
 171static void be_txq_notify(struct be_adapter *adapter, u16 qid, u16 posted)
 172{
 173        u32 val = 0;
 174        val |= qid & DB_TXULP_RING_ID_MASK;
 175        val |= (posted & DB_TXULP_NUM_POSTED_MASK) << DB_TXULP_NUM_POSTED_SHIFT;
 176
 177        wmb();
 178        iowrite32(val, adapter->db + DB_TXULP1_OFFSET);
 179}
 180
 181static void be_eq_notify(struct be_adapter *adapter, u16 qid,
 182                bool arm, bool clear_int, u16 num_popped)
 183{
 184        u32 val = 0;
 185        val |= qid & DB_EQ_RING_ID_MASK;
 186        val |= ((qid & DB_EQ_RING_ID_EXT_MASK) <<
 187                        DB_EQ_RING_ID_EXT_MASK_SHIFT);
 188
 189        if (adapter->eeh_err)
 190                return;
 191
 192        if (arm)
 193                val |= 1 << DB_EQ_REARM_SHIFT;
 194        if (clear_int)
 195                val |= 1 << DB_EQ_CLR_SHIFT;
 196        val |= 1 << DB_EQ_EVNT_SHIFT;
 197        val |= num_popped << DB_EQ_NUM_POPPED_SHIFT;
 198        iowrite32(val, adapter->db + DB_EQ_OFFSET);
 199}
 200
 201void be_cq_notify(struct be_adapter *adapter, u16 qid, bool arm, u16 num_popped)
 202{
 203        u32 val = 0;
 204        val |= qid & DB_CQ_RING_ID_MASK;
 205        val |= ((qid & DB_CQ_RING_ID_EXT_MASK) <<
 206                        DB_CQ_RING_ID_EXT_MASK_SHIFT);
 207
 208        if (adapter->eeh_err)
 209                return;
 210
 211        if (arm)
 212                val |= 1 << DB_CQ_REARM_SHIFT;
 213        val |= num_popped << DB_CQ_NUM_POPPED_SHIFT;
 214        iowrite32(val, adapter->db + DB_CQ_OFFSET);
 215}
 216
 217static int be_mac_addr_set(struct net_device *netdev, void *p)
 218{
 219        struct be_adapter *adapter = netdev_priv(netdev);
 220        struct sockaddr *addr = p;
 221        int status = 0;
 222
 223        if (!is_valid_ether_addr(addr->sa_data))
 224                return -EADDRNOTAVAIL;
 225
 226        /* MAC addr configuration will be done in hardware for VFs
 227         * by their corresponding PFs. Just copy to netdev addr here
 228         */
 229        if (!be_physfn(adapter))
 230                goto netdev_addr;
 231
 232        status = be_cmd_pmac_del(adapter, adapter->if_handle,
 233                                adapter->pmac_id, 0);
 234        if (status)
 235                return status;
 236
 237        status = be_cmd_pmac_add(adapter, (u8 *)addr->sa_data,
 238                                adapter->if_handle, &adapter->pmac_id, 0);
 239netdev_addr:
 240        if (!status)
 241                memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
 242
 243        return status;
 244}
 245
 246static void populate_be2_stats(struct be_adapter *adapter)
 247{
 248
 249        struct be_drv_stats *drvs = &adapter->drv_stats;
 250        struct be_pmem_stats *pmem_sts = be_pmem_stats_from_cmd(adapter);
 251        struct be_port_rxf_stats_v0 *port_stats =
 252                be_port_rxf_stats_from_cmd(adapter);
 253        struct be_rxf_stats_v0 *rxf_stats =
 254                be_rxf_stats_from_cmd(adapter);
 255
 256        drvs->rx_pause_frames = port_stats->rx_pause_frames;
 257        drvs->rx_crc_errors = port_stats->rx_crc_errors;
 258        drvs->rx_control_frames = port_stats->rx_control_frames;
 259        drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
 260        drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
 261        drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
 262        drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
 263        drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
 264        drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
 265        drvs->rxpp_fifo_overflow_drop = port_stats->rx_fifo_overflow;
 266        drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
 267        drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
 268        drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
 269        drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
 270        drvs->rx_input_fifo_overflow_drop =
 271                port_stats->rx_input_fifo_overflow;
 272        drvs->rx_dropped_header_too_small =
 273                port_stats->rx_dropped_header_too_small;
 274        drvs->rx_address_match_errors =
 275                port_stats->rx_address_match_errors;
 276        drvs->rx_alignment_symbol_errors =
 277                port_stats->rx_alignment_symbol_errors;
 278
 279        drvs->tx_pauseframes = port_stats->tx_pauseframes;
 280        drvs->tx_controlframes = port_stats->tx_controlframes;
 281
 282        if (adapter->port_num)
 283                drvs->jabber_events =
 284                        rxf_stats->port1_jabber_events;
 285        else
 286                drvs->jabber_events =
 287                        rxf_stats->port0_jabber_events;
 288        drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
 289        drvs->rx_drops_no_txpb = rxf_stats->rx_drops_no_txpb;
 290        drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
 291        drvs->rx_drops_invalid_ring = rxf_stats->rx_drops_invalid_ring;
 292        drvs->forwarded_packets = rxf_stats->forwarded_packets;
 293        drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
 294        drvs->rx_drops_no_tpre_descr =
 295                rxf_stats->rx_drops_no_tpre_descr;
 296        drvs->rx_drops_too_many_frags =
 297                rxf_stats->rx_drops_too_many_frags;
 298        adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
 299}
 300
 301static void populate_be3_stats(struct be_adapter *adapter)
 302{
 303        struct be_drv_stats *drvs = &adapter->drv_stats;
 304        struct be_pmem_stats *pmem_sts = be_pmem_stats_from_cmd(adapter);
 305
 306        struct be_rxf_stats_v1 *rxf_stats =
 307                be_rxf_stats_from_cmd(adapter);
 308        struct be_port_rxf_stats_v1 *port_stats =
 309                be_port_rxf_stats_from_cmd(adapter);
 310
 311        drvs->rx_priority_pause_frames = 0;
 312        drvs->pmem_fifo_overflow_drop = 0;
 313        drvs->rx_pause_frames = port_stats->rx_pause_frames;
 314        drvs->rx_crc_errors = port_stats->rx_crc_errors;
 315        drvs->rx_control_frames = port_stats->rx_control_frames;
 316        drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
 317        drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
 318        drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
 319        drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
 320        drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
 321        drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
 322        drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
 323        drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
 324        drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
 325        drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
 326        drvs->rx_dropped_header_too_small =
 327                port_stats->rx_dropped_header_too_small;
 328        drvs->rx_input_fifo_overflow_drop =
 329                port_stats->rx_input_fifo_overflow_drop;
 330        drvs->rx_address_match_errors =
 331                port_stats->rx_address_match_errors;
 332        drvs->rx_alignment_symbol_errors =
 333                port_stats->rx_alignment_symbol_errors;
 334        drvs->rxpp_fifo_overflow_drop =
 335                port_stats->rxpp_fifo_overflow_drop;
 336        drvs->tx_pauseframes = port_stats->tx_pauseframes;
 337        drvs->tx_controlframes = port_stats->tx_controlframes;
 338        drvs->jabber_events = port_stats->jabber_events;
 339        drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
 340        drvs->rx_drops_no_txpb = rxf_stats->rx_drops_no_txpb;
 341        drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
 342        drvs->rx_drops_invalid_ring = rxf_stats->rx_drops_invalid_ring;
 343        drvs->forwarded_packets = rxf_stats->forwarded_packets;
 344        drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
 345        drvs->rx_drops_no_tpre_descr =
 346                rxf_stats->rx_drops_no_tpre_descr;
 347        drvs->rx_drops_too_many_frags =
 348                rxf_stats->rx_drops_too_many_frags;
 349        adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
 350}
 351
 352static void populate_lancer_stats(struct be_adapter *adapter)
 353{
 354
 355        struct be_drv_stats *drvs = &adapter->drv_stats;
 356        struct lancer_cmd_pport_stats *pport_stats = pport_stats_from_cmd
 357                                                (adapter);
 358        drvs->rx_priority_pause_frames = 0;
 359        drvs->pmem_fifo_overflow_drop = 0;
 360        drvs->rx_pause_frames =
 361                make_64bit_val(pport_stats->rx_pause_frames_hi,
 362                                 pport_stats->rx_pause_frames_lo);
 363        drvs->rx_crc_errors = make_64bit_val(pport_stats->rx_crc_errors_hi,
 364                                                pport_stats->rx_crc_errors_lo);
 365        drvs->rx_control_frames =
 366                        make_64bit_val(pport_stats->rx_control_frames_hi,
 367                        pport_stats->rx_control_frames_lo);
 368        drvs->rx_in_range_errors = pport_stats->rx_in_range_errors;
 369        drvs->rx_frame_too_long =
 370                make_64bit_val(pport_stats->rx_internal_mac_errors_hi,
 371                                        pport_stats->rx_frames_too_long_lo);
 372        drvs->rx_dropped_runt = pport_stats->rx_dropped_runt;
 373        drvs->rx_ip_checksum_errs = pport_stats->rx_ip_checksum_errors;
 374        drvs->rx_tcp_checksum_errs = pport_stats->rx_tcp_checksum_errors;
 375        drvs->rx_udp_checksum_errs = pport_stats->rx_udp_checksum_errors;
 376        drvs->rx_dropped_tcp_length =
 377                                pport_stats->rx_dropped_invalid_tcp_length;
 378        drvs->rx_dropped_too_small = pport_stats->rx_dropped_too_small;
 379        drvs->rx_dropped_too_short = pport_stats->rx_dropped_too_short;
 380        drvs->rx_out_range_errors = pport_stats->rx_out_of_range_errors;
 381        drvs->rx_dropped_header_too_small =
 382                                pport_stats->rx_dropped_header_too_small;
 383        drvs->rx_input_fifo_overflow_drop = pport_stats->rx_fifo_overflow;
 384        drvs->rx_address_match_errors = pport_stats->rx_address_match_errors;
 385        drvs->rx_alignment_symbol_errors =
 386                make_64bit_val(pport_stats->rx_symbol_errors_hi,
 387                                pport_stats->rx_symbol_errors_lo);
 388        drvs->rxpp_fifo_overflow_drop = pport_stats->rx_fifo_overflow;
 389        drvs->tx_pauseframes = make_64bit_val(pport_stats->tx_pause_frames_hi,
 390                                        pport_stats->tx_pause_frames_lo);
 391        drvs->tx_controlframes =
 392                make_64bit_val(pport_stats->tx_control_frames_hi,
 393                                pport_stats->tx_control_frames_lo);
 394        drvs->jabber_events = pport_stats->rx_jabbers;
 395        drvs->rx_drops_no_pbuf = 0;
 396        drvs->rx_drops_no_txpb = 0;
 397        drvs->rx_drops_no_erx_descr = 0;
 398        drvs->rx_drops_invalid_ring = pport_stats->rx_drops_invalid_queue;
 399        drvs->forwarded_packets = make_64bit_val(pport_stats->num_forwards_hi,
 400                                                pport_stats->num_forwards_lo);
 401        drvs->rx_drops_mtu = make_64bit_val(pport_stats->rx_drops_mtu_hi,
 402                                                pport_stats->rx_drops_mtu_lo);
 403        drvs->rx_drops_no_tpre_descr = 0;
 404        drvs->rx_drops_too_many_frags =
 405                make_64bit_val(pport_stats->rx_drops_too_many_frags_hi,
 406                                pport_stats->rx_drops_too_many_frags_lo);
 407}
 408
 409void be_parse_stats(struct be_adapter *adapter)
 410{
 411        if (adapter->generation == BE_GEN3) {
 412                if (lancer_chip(adapter))
 413                        populate_lancer_stats(adapter);
 414                 else
 415                        populate_be3_stats(adapter);
 416        } else {
 417                populate_be2_stats(adapter);
 418        }
 419}
 420
 421void netdev_stats_update(struct be_adapter *adapter)
 422{
 423        struct be_drv_stats *drvs = &adapter->drv_stats;
 424        struct net_device_stats *dev_stats = &adapter->netdev->stats;
 425        struct be_rx_obj *rxo;
 426        struct be_tx_obj *txo;
 427        unsigned long pkts = 0, bytes = 0, mcast = 0, drops = 0;
 428        int i;
 429
 430        for_all_rx_queues(adapter, rxo, i) {
 431                pkts += rx_stats(rxo)->rx_pkts;
 432                bytes += rx_stats(rxo)->rx_bytes;
 433                mcast += rx_stats(rxo)->rx_mcast_pkts;
 434                drops += rx_stats(rxo)->rx_dropped;
 435                /*  no space in linux buffers: best possible approximation */
 436                if (adapter->generation == BE_GEN3) {
 437                        if (!(lancer_chip(adapter))) {
 438                                struct be_erx_stats_v1 *erx =
 439                                        be_erx_stats_from_cmd(adapter);
 440                                drops += erx->rx_drops_no_fragments[rxo->q.id];
 441                        }
 442                } else {
 443                        struct be_erx_stats_v0 *erx =
 444                                        be_erx_stats_from_cmd(adapter);
 445                        drops += erx->rx_drops_no_fragments[rxo->q.id];
 446                }
 447        }
 448        dev_stats->rx_packets = pkts;
 449        dev_stats->rx_bytes = bytes;
 450        dev_stats->multicast = mcast;
 451        dev_stats->rx_dropped = drops;
 452
 453        pkts = bytes = 0;
 454        for_all_tx_queues(adapter, txo, i) {
 455                pkts += tx_stats(txo)->be_tx_pkts;
 456                bytes += tx_stats(txo)->be_tx_bytes;
 457        }
 458        dev_stats->tx_packets = pkts;
 459        dev_stats->tx_bytes = bytes;
 460
 461        /* bad pkts received */
 462        dev_stats->rx_errors = drvs->rx_crc_errors +
 463                drvs->rx_alignment_symbol_errors +
 464                drvs->rx_in_range_errors +
 465                drvs->rx_out_range_errors +
 466                drvs->rx_frame_too_long +
 467                drvs->rx_dropped_too_small +
 468                drvs->rx_dropped_too_short +
 469                drvs->rx_dropped_header_too_small +
 470                drvs->rx_dropped_tcp_length +
 471                drvs->rx_dropped_runt +
 472                drvs->rx_tcp_checksum_errs +
 473                drvs->rx_ip_checksum_errs +
 474                drvs->rx_udp_checksum_errs;
 475
 476        /* detailed rx errors */
 477        dev_stats->rx_length_errors = drvs->rx_in_range_errors +
 478                drvs->rx_out_range_errors +
 479                drvs->rx_frame_too_long;
 480
 481        dev_stats->rx_crc_errors = drvs->rx_crc_errors;
 482
 483        /* frame alignment errors */
 484        dev_stats->rx_frame_errors = drvs->rx_alignment_symbol_errors;
 485
 486        /* receiver fifo overrun */
 487        /* drops_no_pbuf is no per i/f, it's per BE card */
 488        dev_stats->rx_fifo_errors = drvs->rxpp_fifo_overflow_drop +
 489                                drvs->rx_input_fifo_overflow_drop +
 490                                drvs->rx_drops_no_pbuf;
 491}
 492
 493void be_link_status_update(struct be_adapter *adapter, bool link_up)
 494{
 495        struct net_device *netdev = adapter->netdev;
 496
 497        /* If link came up or went down */
 498        if (adapter->link_up != link_up) {
 499                adapter->link_speed = -1;
 500                if (link_up) {
 501                        netif_carrier_on(netdev);
 502                        printk(KERN_INFO "%s: Link up\n", netdev->name);
 503                } else {
 504                        netif_carrier_off(netdev);
 505                        printk(KERN_INFO "%s: Link down\n", netdev->name);
 506                }
 507                adapter->link_up = link_up;
 508        }
 509}
 510
 511/* Update the EQ delay n BE based on the RX frags consumed / sec */
 512static void be_rx_eqd_update(struct be_adapter *adapter, struct be_rx_obj *rxo)
 513{
 514        struct be_eq_obj *rx_eq = &rxo->rx_eq;
 515        struct be_rx_stats *stats = &rxo->stats;
 516        ulong now = jiffies;
 517        u32 eqd;
 518
 519        if (!rx_eq->enable_aic)
 520                return;
 521
 522        /* Wrapped around */
 523        if (time_before(now, stats->rx_fps_jiffies)) {
 524                stats->rx_fps_jiffies = now;
 525                return;
 526        }
 527
 528        /* Update once a second */
 529        if ((now - stats->rx_fps_jiffies) < HZ)
 530                return;
 531
 532        stats->rx_fps = (stats->rx_frags - stats->prev_rx_frags) /
 533                        ((now - stats->rx_fps_jiffies) / HZ);
 534
 535        stats->rx_fps_jiffies = now;
 536        stats->prev_rx_frags = stats->rx_frags;
 537        eqd = stats->rx_fps / 110000;
 538        eqd = eqd << 3;
 539        if (eqd > rx_eq->max_eqd)
 540                eqd = rx_eq->max_eqd;
 541        if (eqd < rx_eq->min_eqd)
 542                eqd = rx_eq->min_eqd;
 543        if (eqd < 10)
 544                eqd = 0;
 545        if (eqd != rx_eq->cur_eqd)
 546                be_cmd_modify_eqd(adapter, rx_eq->q.id, eqd);
 547
 548        rx_eq->cur_eqd = eqd;
 549}
 550
 551static u32 be_calc_rate(u64 bytes, unsigned long ticks)
 552{
 553        u64 rate = bytes;
 554
 555        do_div(rate, ticks / HZ);
 556        rate <<= 3;                     /* bytes/sec -> bits/sec */
 557        do_div(rate, 1000000ul);        /* MB/Sec */
 558
 559        return rate;
 560}
 561
 562static void be_tx_rate_update(struct be_tx_obj *txo)
 563{
 564        struct be_tx_stats *stats = tx_stats(txo);
 565        ulong now = jiffies;
 566
 567        /* Wrapped around? */
 568        if (time_before(now, stats->be_tx_jiffies)) {
 569                stats->be_tx_jiffies = now;
 570                return;
 571        }
 572
 573        /* Update tx rate once in two seconds */
 574        if ((now - stats->be_tx_jiffies) > 2 * HZ) {
 575                stats->be_tx_rate = be_calc_rate(stats->be_tx_bytes
 576                                                  - stats->be_tx_bytes_prev,
 577                                                 now - stats->be_tx_jiffies);
 578                stats->be_tx_jiffies = now;
 579                stats->be_tx_bytes_prev = stats->be_tx_bytes;
 580        }
 581}
 582
 583static void be_tx_stats_update(struct be_tx_obj *txo,
 584                        u32 wrb_cnt, u32 copied, u32 gso_segs, bool stopped)
 585{
 586        struct be_tx_stats *stats = tx_stats(txo);
 587
 588        stats->be_tx_reqs++;
 589        stats->be_tx_wrbs += wrb_cnt;
 590        stats->be_tx_bytes += copied;
 591        stats->be_tx_pkts += (gso_segs ? gso_segs : 1);
 592        if (stopped)
 593                stats->be_tx_stops++;
 594}
 595
 596/* Determine number of WRB entries needed to xmit data in an skb */
 597static u32 wrb_cnt_for_skb(struct be_adapter *adapter, struct sk_buff *skb,
 598                                                                bool *dummy)
 599{
 600        int cnt = (skb->len > skb->data_len);
 601
 602        cnt += skb_shinfo(skb)->nr_frags;
 603
 604        /* to account for hdr wrb */
 605        cnt++;
 606        if (lancer_chip(adapter) || !(cnt & 1)) {
 607                *dummy = false;
 608        } else {
 609                /* add a dummy to make it an even num */
 610                cnt++;
 611                *dummy = true;
 612        }
 613        BUG_ON(cnt > BE_MAX_TX_FRAG_COUNT);
 614        return cnt;
 615}
 616
 617static inline void wrb_fill(struct be_eth_wrb *wrb, u64 addr, int len)
 618{
 619        wrb->frag_pa_hi = upper_32_bits(addr);
 620        wrb->frag_pa_lo = addr & 0xFFFFFFFF;
 621        wrb->frag_len = len & ETH_WRB_FRAG_LEN_MASK;
 622}
 623
 624static void wrb_fill_hdr(struct be_adapter *adapter, struct be_eth_hdr_wrb *hdr,
 625                struct sk_buff *skb, u32 wrb_cnt, u32 len)
 626{
 627        u8 vlan_prio = 0;
 628        u16 vlan_tag = 0;
 629
 630        memset(hdr, 0, sizeof(*hdr));
 631
 632        AMAP_SET_BITS(struct amap_eth_hdr_wrb, crc, hdr, 1);
 633
 634        if (skb_is_gso(skb)) {
 635                AMAP_SET_BITS(struct amap_eth_hdr_wrb, lso, hdr, 1);
 636                AMAP_SET_BITS(struct amap_eth_hdr_wrb, lso_mss,
 637                        hdr, skb_shinfo(skb)->gso_size);
 638                if (skb_is_gso_v6(skb) && !lancer_chip(adapter))
 639                        AMAP_SET_BITS(struct amap_eth_hdr_wrb, lso6, hdr, 1);
 640                if (lancer_chip(adapter) && adapter->sli_family  ==
 641                                                        LANCER_A0_SLI_FAMILY) {
 642                        AMAP_SET_BITS(struct amap_eth_hdr_wrb, ipcs, hdr, 1);
 643                        if (is_tcp_pkt(skb))
 644                                AMAP_SET_BITS(struct amap_eth_hdr_wrb,
 645                                                                tcpcs, hdr, 1);
 646                        else if (is_udp_pkt(skb))
 647                                AMAP_SET_BITS(struct amap_eth_hdr_wrb,
 648                                                                udpcs, hdr, 1);
 649                }
 650        } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
 651                if (is_tcp_pkt(skb))
 652                        AMAP_SET_BITS(struct amap_eth_hdr_wrb, tcpcs, hdr, 1);
 653                else if (is_udp_pkt(skb))
 654                        AMAP_SET_BITS(struct amap_eth_hdr_wrb, udpcs, hdr, 1);
 655        }
 656
 657        if (vlan_tx_tag_present(skb)) {
 658                AMAP_SET_BITS(struct amap_eth_hdr_wrb, vlan, hdr, 1);
 659                vlan_tag = vlan_tx_tag_get(skb);
 660                vlan_prio = (vlan_tag & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
 661                /* If vlan priority provided by OS is NOT in available bmap */
 662                if (!(adapter->vlan_prio_bmap & (1 << vlan_prio)))
 663                        vlan_tag = (vlan_tag & ~VLAN_PRIO_MASK) |
 664                                        adapter->recommended_prio;
 665                AMAP_SET_BITS(struct amap_eth_hdr_wrb, vlan_tag, hdr, vlan_tag);
 666        }
 667
 668        AMAP_SET_BITS(struct amap_eth_hdr_wrb, event, hdr, 1);
 669        AMAP_SET_BITS(struct amap_eth_hdr_wrb, complete, hdr, 1);
 670        AMAP_SET_BITS(struct amap_eth_hdr_wrb, num_wrb, hdr, wrb_cnt);
 671        AMAP_SET_BITS(struct amap_eth_hdr_wrb, len, hdr, len);
 672}
 673
 674static void unmap_tx_frag(struct device *dev, struct be_eth_wrb *wrb,
 675                bool unmap_single)
 676{
 677        dma_addr_t dma;
 678
 679        be_dws_le_to_cpu(wrb, sizeof(*wrb));
 680
 681        dma = (u64)wrb->frag_pa_hi << 32 | (u64)wrb->frag_pa_lo;
 682        if (wrb->frag_len) {
 683                if (unmap_single)
 684                        dma_unmap_single(dev, dma, wrb->frag_len,
 685                                         DMA_TO_DEVICE);
 686                else
 687                        dma_unmap_page(dev, dma, wrb->frag_len, DMA_TO_DEVICE);
 688        }
 689}
 690
 691static int make_tx_wrbs(struct be_adapter *adapter, struct be_queue_info *txq,
 692                struct sk_buff *skb, u32 wrb_cnt, bool dummy_wrb)
 693{
 694        dma_addr_t busaddr;
 695        int i, copied = 0;
 696        struct device *dev = &adapter->pdev->dev;
 697        struct sk_buff *first_skb = skb;
 698        struct be_eth_wrb *wrb;
 699        struct be_eth_hdr_wrb *hdr;
 700        bool map_single = false;
 701        u16 map_head;
 702
 703        hdr = queue_head_node(txq);
 704        queue_head_inc(txq);
 705        map_head = txq->head;
 706
 707        if (skb->len > skb->data_len) {
 708                int len = skb_headlen(skb);
 709                busaddr = dma_map_single(dev, skb->data, len, DMA_TO_DEVICE);
 710                if (dma_mapping_error(dev, busaddr))
 711                        goto dma_err;
 712                map_single = true;
 713                wrb = queue_head_node(txq);
 714                wrb_fill(wrb, busaddr, len);
 715                be_dws_cpu_to_le(wrb, sizeof(*wrb));
 716                queue_head_inc(txq);
 717                copied += len;
 718        }
 719
 720        for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
 721                struct skb_frag_struct *frag =
 722                        &skb_shinfo(skb)->frags[i];
 723                busaddr = dma_map_page(dev, frag->page, frag->page_offset,
 724                                       frag->size, DMA_TO_DEVICE);
 725                if (dma_mapping_error(dev, busaddr))
 726                        goto dma_err;
 727                wrb = queue_head_node(txq);
 728                wrb_fill(wrb, busaddr, frag->size);
 729                be_dws_cpu_to_le(wrb, sizeof(*wrb));
 730                queue_head_inc(txq);
 731                copied += frag->size;
 732        }
 733
 734        if (dummy_wrb) {
 735                wrb = queue_head_node(txq);
 736                wrb_fill(wrb, 0, 0);
 737                be_dws_cpu_to_le(wrb, sizeof(*wrb));
 738                queue_head_inc(txq);
 739        }
 740
 741        wrb_fill_hdr(adapter, hdr, first_skb, wrb_cnt, copied);
 742        be_dws_cpu_to_le(hdr, sizeof(*hdr));
 743
 744        return copied;
 745dma_err:
 746        txq->head = map_head;
 747        while (copied) {
 748                wrb = queue_head_node(txq);
 749                unmap_tx_frag(dev, wrb, map_single);
 750                map_single = false;
 751                copied -= wrb->frag_len;
 752                queue_head_inc(txq);
 753        }
 754        return 0;
 755}
 756
 757static netdev_tx_t be_xmit(struct sk_buff *skb,
 758                        struct net_device *netdev)
 759{
 760        struct be_adapter *adapter = netdev_priv(netdev);
 761        struct be_tx_obj *txo = &adapter->tx_obj[skb_get_queue_mapping(skb)];
 762        struct be_queue_info *txq = &txo->q;
 763        u32 wrb_cnt = 0, copied = 0;
 764        u32 start = txq->head;
 765        bool dummy_wrb, stopped = false;
 766
 767        wrb_cnt = wrb_cnt_for_skb(adapter, skb, &dummy_wrb);
 768
 769        copied = make_tx_wrbs(adapter, txq, skb, wrb_cnt, dummy_wrb);
 770        if (copied) {
 771                /* record the sent skb in the sent_skb table */
 772                BUG_ON(txo->sent_skb_list[start]);
 773                txo->sent_skb_list[start] = skb;
 774
 775                /* Ensure txq has space for the next skb; Else stop the queue
 776                 * *BEFORE* ringing the tx doorbell, so that we serialze the
 777                 * tx compls of the current transmit which'll wake up the queue
 778                 */
 779                atomic_add(wrb_cnt, &txq->used);
 780                if ((BE_MAX_TX_FRAG_COUNT + atomic_read(&txq->used)) >=
 781                                                                txq->len) {
 782                        netif_stop_subqueue(netdev, skb_get_queue_mapping(skb));
 783                        stopped = true;
 784                }
 785
 786                be_txq_notify(adapter, txq->id, wrb_cnt);
 787
 788                be_tx_stats_update(txo, wrb_cnt, copied,
 789                                skb_shinfo(skb)->gso_segs, stopped);
 790        } else {
 791                txq->head = start;
 792                dev_kfree_skb_any(skb);
 793        }
 794        return NETDEV_TX_OK;
 795}
 796
 797static int be_change_mtu(struct net_device *netdev, int new_mtu)
 798{
 799        struct be_adapter *adapter = netdev_priv(netdev);
 800        if (new_mtu < BE_MIN_MTU ||
 801                        new_mtu > (BE_MAX_JUMBO_FRAME_SIZE -
 802                                        (ETH_HLEN + ETH_FCS_LEN))) {
 803                dev_info(&adapter->pdev->dev,
 804                        "MTU must be between %d and %d bytes\n",
 805                        BE_MIN_MTU,
 806                        (BE_MAX_JUMBO_FRAME_SIZE - (ETH_HLEN + ETH_FCS_LEN)));
 807                return -EINVAL;
 808        }
 809        dev_info(&adapter->pdev->dev, "MTU changed from %d to %d bytes\n",
 810                        netdev->mtu, new_mtu);
 811        netdev->mtu = new_mtu;
 812        return 0;
 813}
 814
 815/*
 816 * A max of 64 (BE_NUM_VLANS_SUPPORTED) vlans can be configured in BE.
 817 * If the user configures more, place BE in vlan promiscuous mode.
 818 */
 819static int be_vid_config(struct be_adapter *adapter, bool vf, u32 vf_num)
 820{
 821        u16 vtag[BE_NUM_VLANS_SUPPORTED];
 822        u16 ntags = 0, i;
 823        int status = 0;
 824        u32 if_handle;
 825
 826        if (vf) {
 827                if_handle = adapter->vf_cfg[vf_num].vf_if_handle;
 828                vtag[0] = cpu_to_le16(adapter->vf_cfg[vf_num].vf_vlan_tag);
 829                status = be_cmd_vlan_config(adapter, if_handle, vtag, 1, 1, 0);
 830        }
 831
 832        if (adapter->vlans_added <= adapter->max_vlans)  {
 833                /* Construct VLAN Table to give to HW */
 834                for (i = 0; i < VLAN_N_VID; i++) {
 835                        if (adapter->vlan_tag[i]) {
 836                                vtag[ntags] = cpu_to_le16(i);
 837                                ntags++;
 838                        }
 839                }
 840                status = be_cmd_vlan_config(adapter, adapter->if_handle,
 841                                        vtag, ntags, 1, 0);
 842        } else {
 843                status = be_cmd_vlan_config(adapter, adapter->if_handle,
 844                                        NULL, 0, 1, 1);
 845        }
 846
 847        return status;
 848}
 849
 850static void be_vlan_add_vid(struct net_device *netdev, u16 vid)
 851{
 852        struct be_adapter *adapter = netdev_priv(netdev);
 853
 854        adapter->vlans_added++;
 855        if (!be_physfn(adapter))
 856                return;
 857
 858        adapter->vlan_tag[vid] = 1;
 859        if (adapter->vlans_added <= (adapter->max_vlans + 1))
 860                be_vid_config(adapter, false, 0);
 861}
 862
 863static void be_vlan_rem_vid(struct net_device *netdev, u16 vid)
 864{
 865        struct be_adapter *adapter = netdev_priv(netdev);
 866
 867        adapter->vlans_added--;
 868
 869        if (!be_physfn(adapter))
 870                return;
 871
 872        adapter->vlan_tag[vid] = 0;
 873        if (adapter->vlans_added <= adapter->max_vlans)
 874                be_vid_config(adapter, false, 0);
 875}
 876
 877static void be_set_multicast_list(struct net_device *netdev)
 878{
 879        struct be_adapter *adapter = netdev_priv(netdev);
 880
 881        if (netdev->flags & IFF_PROMISC) {
 882                be_cmd_promiscuous_config(adapter, true);
 883                adapter->promiscuous = true;
 884                goto done;
 885        }
 886
 887        /* BE was previously in promiscuous mode; disable it */
 888        if (adapter->promiscuous) {
 889                adapter->promiscuous = false;
 890                be_cmd_promiscuous_config(adapter, false);
 891        }
 892
 893        /* Enable multicast promisc if num configured exceeds what we support */
 894        if (netdev->flags & IFF_ALLMULTI ||
 895            netdev_mc_count(netdev) > BE_MAX_MC) {
 896                be_cmd_multicast_set(adapter, adapter->if_handle, NULL,
 897                                &adapter->mc_cmd_mem);
 898                goto done;
 899        }
 900
 901        be_cmd_multicast_set(adapter, adapter->if_handle, netdev,
 902                &adapter->mc_cmd_mem);
 903done:
 904        return;
 905}
 906
 907static int be_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
 908{
 909        struct be_adapter *adapter = netdev_priv(netdev);
 910        int status;
 911
 912        if (!adapter->sriov_enabled)
 913                return -EPERM;
 914
 915        if (!is_valid_ether_addr(mac) || (vf >= num_vfs))
 916                return -EINVAL;
 917
 918        if (adapter->vf_cfg[vf].vf_pmac_id != BE_INVALID_PMAC_ID)
 919                status = be_cmd_pmac_del(adapter,
 920                                        adapter->vf_cfg[vf].vf_if_handle,
 921                                        adapter->vf_cfg[vf].vf_pmac_id, vf + 1);
 922
 923        status = be_cmd_pmac_add(adapter, mac,
 924                                adapter->vf_cfg[vf].vf_if_handle,
 925                                &adapter->vf_cfg[vf].vf_pmac_id, vf + 1);
 926
 927        if (status)
 928                dev_err(&adapter->pdev->dev, "MAC %pM set on VF %d Failed\n",
 929                                mac, vf);
 930        else
 931                memcpy(adapter->vf_cfg[vf].vf_mac_addr, mac, ETH_ALEN);
 932
 933        return status;
 934}
 935
 936static int be_get_vf_config(struct net_device *netdev, int vf,
 937                        struct ifla_vf_info *vi)
 938{
 939        struct be_adapter *adapter = netdev_priv(netdev);
 940
 941        if (!adapter->sriov_enabled)
 942                return -EPERM;
 943
 944        if (vf >= num_vfs)
 945                return -EINVAL;
 946
 947        vi->vf = vf;
 948        vi->tx_rate = adapter->vf_cfg[vf].vf_tx_rate;
 949        vi->vlan = adapter->vf_cfg[vf].vf_vlan_tag;
 950        vi->qos = 0;
 951        memcpy(&vi->mac, adapter->vf_cfg[vf].vf_mac_addr, ETH_ALEN);
 952
 953        return 0;
 954}
 955
 956static int be_set_vf_vlan(struct net_device *netdev,
 957                        int vf, u16 vlan, u8 qos)
 958{
 959        struct be_adapter *adapter = netdev_priv(netdev);
 960        int status = 0;
 961
 962        if (!adapter->sriov_enabled)
 963                return -EPERM;
 964
 965        if ((vf >= num_vfs) || (vlan > 4095))
 966                return -EINVAL;
 967
 968        if (vlan) {
 969                adapter->vf_cfg[vf].vf_vlan_tag = vlan;
 970                adapter->vlans_added++;
 971        } else {
 972                adapter->vf_cfg[vf].vf_vlan_tag = 0;
 973                adapter->vlans_added--;
 974        }
 975
 976        status = be_vid_config(adapter, true, vf);
 977
 978        if (status)
 979                dev_info(&adapter->pdev->dev,
 980                                "VLAN %d config on VF %d failed\n", vlan, vf);
 981        return status;
 982}
 983
 984static int be_set_vf_tx_rate(struct net_device *netdev,
 985                        int vf, int rate)
 986{
 987        struct be_adapter *adapter = netdev_priv(netdev);
 988        int status = 0;
 989
 990        if (!adapter->sriov_enabled)
 991                return -EPERM;
 992
 993        if ((vf >= num_vfs) || (rate < 0))
 994                return -EINVAL;
 995
 996        if (rate > 10000)
 997                rate = 10000;
 998
 999        adapter->vf_cfg[vf].vf_tx_rate = rate;
1000        status = be_cmd_set_qos(adapter, rate / 10, vf + 1);
1001
1002        if (status)
1003                dev_info(&adapter->pdev->dev,
1004                                "tx rate %d on VF %d failed\n", rate, vf);
1005        return status;
1006}
1007
1008static void be_rx_rate_update(struct be_rx_obj *rxo)
1009{
1010        struct be_rx_stats *stats = &rxo->stats;
1011        ulong now = jiffies;
1012
1013        /* Wrapped around */
1014        if (time_before(now, stats->rx_jiffies)) {
1015                stats->rx_jiffies = now;
1016                return;
1017        }
1018
1019        /* Update the rate once in two seconds */
1020        if ((now - stats->rx_jiffies) < 2 * HZ)
1021                return;
1022
1023        stats->rx_rate = be_calc_rate(stats->rx_bytes - stats->rx_bytes_prev,
1024                                now - stats->rx_jiffies);
1025        stats->rx_jiffies = now;
1026        stats->rx_bytes_prev = stats->rx_bytes;
1027}
1028
1029static void be_rx_stats_update(struct be_rx_obj *rxo,
1030                struct be_rx_compl_info *rxcp)
1031{
1032        struct be_rx_stats *stats = &rxo->stats;
1033
1034        stats->rx_compl++;
1035        stats->rx_frags += rxcp->num_rcvd;
1036        stats->rx_bytes += rxcp->pkt_size;
1037        stats->rx_pkts++;
1038        if (rxcp->pkt_type == BE_MULTICAST_PACKET)
1039                stats->rx_mcast_pkts++;
1040        if (rxcp->err)
1041                stats->rxcp_err++;
1042}
1043
1044static inline bool csum_passed(struct be_rx_compl_info *rxcp)
1045{
1046        /* L4 checksum is not reliable for non TCP/UDP packets.
1047         * Also ignore ipcksm for ipv6 pkts */
1048        return (rxcp->tcpf || rxcp->udpf) && rxcp->l4_csum &&
1049                                (rxcp->ip_csum || rxcp->ipv6);
1050}
1051
1052static struct be_rx_page_info *
1053get_rx_page_info(struct be_adapter *adapter,
1054                struct be_rx_obj *rxo,
1055                u16 frag_idx)
1056{
1057        struct be_rx_page_info *rx_page_info;
1058        struct be_queue_info *rxq = &rxo->q;
1059
1060        rx_page_info = &rxo->page_info_tbl[frag_idx];
1061        BUG_ON(!rx_page_info->page);
1062
1063        if (rx_page_info->last_page_user) {
1064                dma_unmap_page(&adapter->pdev->dev,
1065                               dma_unmap_addr(rx_page_info, bus),
1066                               adapter->big_page_size, DMA_FROM_DEVICE);
1067                rx_page_info->last_page_user = false;
1068        }
1069
1070        atomic_dec(&rxq->used);
1071        return rx_page_info;
1072}
1073
1074/* Throwaway the data in the Rx completion */
1075static void be_rx_compl_discard(struct be_adapter *adapter,
1076                struct be_rx_obj *rxo,
1077                struct be_rx_compl_info *rxcp)
1078{
1079        struct be_queue_info *rxq = &rxo->q;
1080        struct be_rx_page_info *page_info;
1081        u16 i, num_rcvd = rxcp->num_rcvd;
1082
1083        for (i = 0; i < num_rcvd; i++) {
1084                page_info = get_rx_page_info(adapter, rxo, rxcp->rxq_idx);
1085                put_page(page_info->page);
1086                memset(page_info, 0, sizeof(*page_info));
1087                index_inc(&rxcp->rxq_idx, rxq->len);
1088        }
1089}
1090
1091/*
1092 * skb_fill_rx_data forms a complete skb for an ether frame
1093 * indicated by rxcp.
1094 */
1095static void skb_fill_rx_data(struct be_adapter *adapter, struct be_rx_obj *rxo,
1096                        struct sk_buff *skb, struct be_rx_compl_info *rxcp)
1097{
1098        struct be_queue_info *rxq = &rxo->q;
1099        struct be_rx_page_info *page_info;
1100        u16 i, j;
1101        u16 hdr_len, curr_frag_len, remaining;
1102        u8 *start;
1103
1104        page_info = get_rx_page_info(adapter, rxo, rxcp->rxq_idx);
1105        start = page_address(page_info->page) + page_info->page_offset;
1106        prefetch(start);
1107
1108        /* Copy data in the first descriptor of this completion */
1109        curr_frag_len = min(rxcp->pkt_size, rx_frag_size);
1110
1111        /* Copy the header portion into skb_data */
1112        hdr_len = min(BE_HDR_LEN, curr_frag_len);
1113        memcpy(skb->data, start, hdr_len);
1114        skb->len = curr_frag_len;
1115        if (curr_frag_len <= BE_HDR_LEN) { /* tiny packet */
1116                /* Complete packet has now been moved to data */
1117                put_page(page_info->page);
1118                skb->data_len = 0;
1119                skb->tail += curr_frag_len;
1120        } else {
1121                skb_shinfo(skb)->nr_frags = 1;
1122                skb_shinfo(skb)->frags[0].page = page_info->page;
1123                skb_shinfo(skb)->frags[0].page_offset =
1124                                        page_info->page_offset + hdr_len;
1125                skb_shinfo(skb)->frags[0].size = curr_frag_len - hdr_len;
1126                skb->data_len = curr_frag_len - hdr_len;
1127                skb->tail += hdr_len;
1128        }
1129        page_info->page = NULL;
1130
1131        if (rxcp->pkt_size <= rx_frag_size) {
1132                BUG_ON(rxcp->num_rcvd != 1);
1133                return;
1134        }
1135
1136        /* More frags present for this completion */
1137        index_inc(&rxcp->rxq_idx, rxq->len);
1138        remaining = rxcp->pkt_size - curr_frag_len;
1139        for (i = 1, j = 0; i < rxcp->num_rcvd; i++) {
1140                page_info = get_rx_page_info(adapter, rxo, rxcp->rxq_idx);
1141                curr_frag_len = min(remaining, rx_frag_size);
1142
1143                /* Coalesce all frags from the same physical page in one slot */
1144                if (page_info->page_offset == 0) {
1145                        /* Fresh page */
1146                        j++;
1147                        skb_shinfo(skb)->frags[j].page = page_info->page;
1148                        skb_shinfo(skb)->frags[j].page_offset =
1149                                                        page_info->page_offset;
1150                        skb_shinfo(skb)->frags[j].size = 0;
1151                        skb_shinfo(skb)->nr_frags++;
1152                } else {
1153                        put_page(page_info->page);
1154                }
1155
1156                skb_shinfo(skb)->frags[j].size += curr_frag_len;
1157                skb->len += curr_frag_len;
1158                skb->data_len += curr_frag_len;
1159
1160                remaining -= curr_frag_len;
1161                index_inc(&rxcp->rxq_idx, rxq->len);
1162                page_info->page = NULL;
1163        }
1164        BUG_ON(j > MAX_SKB_FRAGS);
1165}
1166
1167/* Process the RX completion indicated by rxcp when GRO is disabled */
1168static void be_rx_compl_process(struct be_adapter *adapter,
1169                        struct be_rx_obj *rxo,
1170                        struct be_rx_compl_info *rxcp)
1171{
1172        struct net_device *netdev = adapter->netdev;
1173        struct sk_buff *skb;
1174
1175        skb = netdev_alloc_skb_ip_align(netdev, BE_HDR_LEN);
1176        if (unlikely(!skb)) {
1177                rxo->stats.rx_dropped++;
1178                be_rx_compl_discard(adapter, rxo, rxcp);
1179                return;
1180        }
1181
1182        skb_fill_rx_data(adapter, rxo, skb, rxcp);
1183
1184        if (likely((netdev->features & NETIF_F_RXCSUM) && csum_passed(rxcp)))
1185                skb->ip_summed = CHECKSUM_UNNECESSARY;
1186        else
1187                skb_checksum_none_assert(skb);
1188
1189        skb->truesize = skb->len + sizeof(struct sk_buff);
1190        skb->protocol = eth_type_trans(skb, netdev);
1191        if (adapter->netdev->features & NETIF_F_RXHASH)
1192                skb->rxhash = rxcp->rss_hash;
1193
1194
1195        if (unlikely(rxcp->vlanf))
1196                __vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
1197
1198        netif_receive_skb(skb);
1199}
1200
1201/* Process the RX completion indicated by rxcp when GRO is enabled */
1202static void be_rx_compl_process_gro(struct be_adapter *adapter,
1203                struct be_rx_obj *rxo,
1204                struct be_rx_compl_info *rxcp)
1205{
1206        struct be_rx_page_info *page_info;
1207        struct sk_buff *skb = NULL;
1208        struct be_queue_info *rxq = &rxo->q;
1209        struct be_eq_obj *eq_obj =  &rxo->rx_eq;
1210        u16 remaining, curr_frag_len;
1211        u16 i, j;
1212
1213        skb = napi_get_frags(&eq_obj->napi);
1214        if (!skb) {
1215                be_rx_compl_discard(adapter, rxo, rxcp);
1216                return;
1217        }
1218
1219        remaining = rxcp->pkt_size;
1220        for (i = 0, j = -1; i < rxcp->num_rcvd; i++) {
1221                page_info = get_rx_page_info(adapter, rxo, rxcp->rxq_idx);
1222
1223                curr_frag_len = min(remaining, rx_frag_size);
1224
1225                /* Coalesce all frags from the same physical page in one slot */
1226                if (i == 0 || page_info->page_offset == 0) {
1227                        /* First frag or Fresh page */
1228                        j++;
1229                        skb_shinfo(skb)->frags[j].page = page_info->page;
1230                        skb_shinfo(skb)->frags[j].page_offset =
1231                                                        page_info->page_offset;
1232                        skb_shinfo(skb)->frags[j].size = 0;
1233                } else {
1234                        put_page(page_info->page);
1235                }
1236                skb_shinfo(skb)->frags[j].size += curr_frag_len;
1237
1238                remaining -= curr_frag_len;
1239                index_inc(&rxcp->rxq_idx, rxq->len);
1240                memset(page_info, 0, sizeof(*page_info));
1241        }
1242        BUG_ON(j > MAX_SKB_FRAGS);
1243
1244        skb_shinfo(skb)->nr_frags = j + 1;
1245        skb->len = rxcp->pkt_size;
1246        skb->data_len = rxcp->pkt_size;
1247        skb->truesize += rxcp->pkt_size;
1248        skb->ip_summed = CHECKSUM_UNNECESSARY;
1249        if (adapter->netdev->features & NETIF_F_RXHASH)
1250                skb->rxhash = rxcp->rss_hash;
1251
1252        if (unlikely(rxcp->vlanf))
1253                __vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
1254
1255        napi_gro_frags(&eq_obj->napi);
1256}
1257
1258static void be_parse_rx_compl_v1(struct be_adapter *adapter,
1259                                struct be_eth_rx_compl *compl,
1260                                struct be_rx_compl_info *rxcp)
1261{
1262        rxcp->pkt_size =
1263                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, pktsize, compl);
1264        rxcp->vlanf = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vtp, compl);
1265        rxcp->err = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, err, compl);
1266        rxcp->tcpf = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, tcpf, compl);
1267        rxcp->udpf = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, udpf, compl);
1268        rxcp->ip_csum =
1269                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, ipcksm, compl);
1270        rxcp->l4_csum =
1271                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, l4_cksm, compl);
1272        rxcp->ipv6 =
1273                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, ip_version, compl);
1274        rxcp->rxq_idx =
1275                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, fragndx, compl);
1276        rxcp->num_rcvd =
1277                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, numfrags, compl);
1278        rxcp->pkt_type =
1279                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, cast_enc, compl);
1280        rxcp->rss_hash =
1281                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, rsshash, rxcp);
1282        if (rxcp->vlanf) {
1283                rxcp->vtm = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vtm,
1284                                          compl);
1285                rxcp->vlan_tag = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vlan_tag,
1286                                               compl);
1287        }
1288}
1289
1290static void be_parse_rx_compl_v0(struct be_adapter *adapter,
1291                                struct be_eth_rx_compl *compl,
1292                                struct be_rx_compl_info *rxcp)
1293{
1294        rxcp->pkt_size =
1295                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, pktsize, compl);
1296        rxcp->vlanf = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vtp, compl);
1297        rxcp->err = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, err, compl);
1298        rxcp->tcpf = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, tcpf, compl);
1299        rxcp->udpf = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, udpf, compl);
1300        rxcp->ip_csum =
1301                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, ipcksm, compl);
1302        rxcp->l4_csum =
1303                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, l4_cksm, compl);
1304        rxcp->ipv6 =
1305                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, ip_version, compl);
1306        rxcp->rxq_idx =
1307                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, fragndx, compl);
1308        rxcp->num_rcvd =
1309                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, numfrags, compl);
1310        rxcp->pkt_type =
1311                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, cast_enc, compl);
1312        rxcp->rss_hash =
1313                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, rsshash, rxcp);
1314        if (rxcp->vlanf) {
1315                rxcp->vtm = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vtm,
1316                                          compl);
1317                rxcp->vlan_tag = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vlan_tag,
1318                                               compl);
1319        }
1320}
1321
1322static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo)
1323{
1324        struct be_eth_rx_compl *compl = queue_tail_node(&rxo->cq);
1325        struct be_rx_compl_info *rxcp = &rxo->rxcp;
1326        struct be_adapter *adapter = rxo->adapter;
1327
1328        /* For checking the valid bit it is Ok to use either definition as the
1329         * valid bit is at the same position in both v0 and v1 Rx compl */
1330        if (compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] == 0)
1331                return NULL;
1332
1333        rmb();
1334        be_dws_le_to_cpu(compl, sizeof(*compl));
1335
1336        if (adapter->be3_native)
1337                be_parse_rx_compl_v1(adapter, compl, rxcp);
1338        else
1339                be_parse_rx_compl_v0(adapter, compl, rxcp);
1340
1341        if (rxcp->vlanf) {
1342                /* vlanf could be wrongly set in some cards.
1343                 * ignore if vtm is not set */
1344                if ((adapter->function_mode & 0x400) && !rxcp->vtm)
1345                        rxcp->vlanf = 0;
1346
1347                if (!lancer_chip(adapter))
1348                        rxcp->vlan_tag = swab16(rxcp->vlan_tag);
1349
1350                if (((adapter->pvid & VLAN_VID_MASK) ==
1351                     (rxcp->vlan_tag & VLAN_VID_MASK)) &&
1352                    !adapter->vlan_tag[rxcp->vlan_tag])
1353                        rxcp->vlanf = 0;
1354        }
1355
1356        /* As the compl has been parsed, reset it; we wont touch it again */
1357        compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] = 0;
1358
1359        queue_tail_inc(&rxo->cq);
1360        return rxcp;
1361}
1362
1363static inline struct page *be_alloc_pages(u32 size, gfp_t gfp)
1364{
1365        u32 order = get_order(size);
1366
1367        if (order > 0)
1368                gfp |= __GFP_COMP;
1369        return  alloc_pages(gfp, order);
1370}
1371
1372/*
1373 * Allocate a page, split it to fragments of size rx_frag_size and post as
1374 * receive buffers to BE
1375 */
1376static void be_post_rx_frags(struct be_rx_obj *rxo, gfp_t gfp)
1377{
1378        struct be_adapter *adapter = rxo->adapter;
1379        struct be_rx_page_info *page_info_tbl = rxo->page_info_tbl;
1380        struct be_rx_page_info *page_info = NULL, *prev_page_info = NULL;
1381        struct be_queue_info *rxq = &rxo->q;
1382        struct page *pagep = NULL;
1383        struct be_eth_rx_d *rxd;
1384        u64 page_dmaaddr = 0, frag_dmaaddr;
1385        u32 posted, page_offset = 0;
1386
1387        page_info = &rxo->page_info_tbl[rxq->head];
1388        for (posted = 0; posted < MAX_RX_POST && !page_info->page; posted++) {
1389                if (!pagep) {
1390                        pagep = be_alloc_pages(adapter->big_page_size, gfp);
1391                        if (unlikely(!pagep)) {
1392                                rxo->stats.rx_post_fail++;
1393                                break;
1394                        }
1395                        page_dmaaddr = dma_map_page(&adapter->pdev->dev, pagep,
1396                                                    0, adapter->big_page_size,
1397                                                    DMA_FROM_DEVICE);
1398                        page_info->page_offset = 0;
1399                } else {
1400                        get_page(pagep);
1401                        page_info->page_offset = page_offset + rx_frag_size;
1402                }
1403                page_offset = page_info->page_offset;
1404                page_info->page = pagep;
1405                dma_unmap_addr_set(page_info, bus, page_dmaaddr);
1406                frag_dmaaddr = page_dmaaddr + page_info->page_offset;
1407
1408                rxd = queue_head_node(rxq);
1409                rxd->fragpa_lo = cpu_to_le32(frag_dmaaddr & 0xFFFFFFFF);
1410                rxd->fragpa_hi = cpu_to_le32(upper_32_bits(frag_dmaaddr));
1411
1412                /* Any space left in the current big page for another frag? */
1413                if ((page_offset + rx_frag_size + rx_frag_size) >
1414                                        adapter->big_page_size) {
1415                        pagep = NULL;
1416                        page_info->last_page_user = true;
1417                }
1418
1419                prev_page_info = page_info;
1420                queue_head_inc(rxq);
1421                page_info = &page_info_tbl[rxq->head];
1422        }
1423        if (pagep)
1424                prev_page_info->last_page_user = true;
1425
1426        if (posted) {
1427                atomic_add(posted, &rxq->used);
1428                be_rxq_notify(adapter, rxq->id, posted);
1429        } else if (atomic_read(&rxq->used) == 0) {
1430                /* Let be_worker replenish when memory is available */
1431                rxo->rx_post_starved = true;
1432        }
1433}
1434
1435static struct be_eth_tx_compl *be_tx_compl_get(struct be_queue_info *tx_cq)
1436{
1437        struct be_eth_tx_compl *txcp = queue_tail_node(tx_cq);
1438
1439        if (txcp->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] == 0)
1440                return NULL;
1441
1442        rmb();
1443        be_dws_le_to_cpu(txcp, sizeof(*txcp));
1444
1445        txcp->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] = 0;
1446
1447        queue_tail_inc(tx_cq);
1448        return txcp;
1449}
1450
1451static u16 be_tx_compl_process(struct be_adapter *adapter,
1452                struct be_tx_obj *txo, u16 last_index)
1453{
1454        struct be_queue_info *txq = &txo->q;
1455        struct be_eth_wrb *wrb;
1456        struct sk_buff **sent_skbs = txo->sent_skb_list;
1457        struct sk_buff *sent_skb;
1458        u16 cur_index, num_wrbs = 1; /* account for hdr wrb */
1459        bool unmap_skb_hdr = true;
1460
1461        sent_skb = sent_skbs[txq->tail];
1462        BUG_ON(!sent_skb);
1463        sent_skbs[txq->tail] = NULL;
1464
1465        /* skip header wrb */
1466        queue_tail_inc(txq);
1467
1468        do {
1469                cur_index = txq->tail;
1470                wrb = queue_tail_node(txq);
1471                unmap_tx_frag(&adapter->pdev->dev, wrb,
1472                              (unmap_skb_hdr && skb_headlen(sent_skb)));
1473                unmap_skb_hdr = false;
1474
1475                num_wrbs++;
1476                queue_tail_inc(txq);
1477        } while (cur_index != last_index);
1478
1479        kfree_skb(sent_skb);
1480        return num_wrbs;
1481}
1482
1483static inline struct be_eq_entry *event_get(struct be_eq_obj *eq_obj)
1484{
1485        struct be_eq_entry *eqe = queue_tail_node(&eq_obj->q);
1486
1487        if (!eqe->evt)
1488                return NULL;
1489
1490        rmb();
1491        eqe->evt = le32_to_cpu(eqe->evt);
1492        queue_tail_inc(&eq_obj->q);
1493        return eqe;
1494}
1495
1496static int event_handle(struct be_adapter *adapter,
1497                        struct be_eq_obj *eq_obj,
1498                        bool rearm)
1499{
1500        struct be_eq_entry *eqe;
1501        u16 num = 0;
1502
1503        while ((eqe = event_get(eq_obj)) != NULL) {
1504                eqe->evt = 0;
1505                num++;
1506        }
1507
1508        /* Deal with any spurious interrupts that come
1509         * without events
1510         */
1511        if (!num)
1512                rearm = true;
1513
1514        be_eq_notify(adapter, eq_obj->q.id, rearm, true, num);
1515        if (num)
1516                napi_schedule(&eq_obj->napi);
1517
1518        return num;
1519}
1520
1521/* Just read and notify events without processing them.
1522 * Used at the time of destroying event queues */
1523static void be_eq_clean(struct be_adapter *adapter,
1524                        struct be_eq_obj *eq_obj)
1525{
1526        struct be_eq_entry *eqe;
1527        u16 num = 0;
1528
1529        while ((eqe = event_get(eq_obj)) != NULL) {
1530                eqe->evt = 0;
1531                num++;
1532        }
1533
1534        if (num)
1535                be_eq_notify(adapter, eq_obj->q.id, false, true, num);
1536}
1537
1538static void be_rx_q_clean(struct be_adapter *adapter, struct be_rx_obj *rxo)
1539{
1540        struct be_rx_page_info *page_info;
1541        struct be_queue_info *rxq = &rxo->q;
1542        struct be_queue_info *rx_cq = &rxo->cq;
1543        struct be_rx_compl_info *rxcp;
1544        u16 tail;
1545
1546        /* First cleanup pending rx completions */
1547        while ((rxcp = be_rx_compl_get(rxo)) != NULL) {
1548                be_rx_compl_discard(adapter, rxo, rxcp);
1549                be_cq_notify(adapter, rx_cq->id, false, 1);
1550        }
1551
1552        /* Then free posted rx buffer that were not used */
1553        tail = (rxq->head + rxq->len - atomic_read(&rxq->used)) % rxq->len;
1554        for (; atomic_read(&rxq->used) > 0; index_inc(&tail, rxq->len)) {
1555                page_info = get_rx_page_info(adapter, rxo, tail);
1556                put_page(page_info->page);
1557                memset(page_info, 0, sizeof(*page_info));
1558        }
1559        BUG_ON(atomic_read(&rxq->used));
1560        rxq->tail = rxq->head = 0;
1561}
1562
1563static void be_tx_compl_clean(struct be_adapter *adapter,
1564                                struct be_tx_obj *txo)
1565{
1566        struct be_queue_info *tx_cq = &txo->cq;
1567        struct be_queue_info *txq = &txo->q;
1568        struct be_eth_tx_compl *txcp;
1569        u16 end_idx, cmpl = 0, timeo = 0, num_wrbs = 0;
1570        struct sk_buff **sent_skbs = txo->sent_skb_list;
1571        struct sk_buff *sent_skb;
1572        bool dummy_wrb;
1573
1574        /* Wait for a max of 200ms for all the tx-completions to arrive. */
1575        do {
1576                while ((txcp = be_tx_compl_get(tx_cq))) {
1577                        end_idx = AMAP_GET_BITS(struct amap_eth_tx_compl,
1578                                        wrb_index, txcp);
1579                        num_wrbs += be_tx_compl_process(adapter, txo, end_idx);
1580                        cmpl++;
1581                }
1582                if (cmpl) {
1583                        be_cq_notify(adapter, tx_cq->id, false, cmpl);
1584                        atomic_sub(num_wrbs, &txq->used);
1585                        cmpl = 0;
1586                        num_wrbs = 0;
1587                }
1588
1589                if (atomic_read(&txq->used) == 0 || ++timeo > 200)
1590                        break;
1591
1592                mdelay(1);
1593        } while (true);
1594
1595        if (atomic_read(&txq->used))
1596                dev_err(&adapter->pdev->dev, "%d pending tx-completions\n",
1597                        atomic_read(&txq->used));
1598
1599        /* free posted tx for which compls will never arrive */
1600        while (atomic_read(&txq->used)) {
1601                sent_skb = sent_skbs[txq->tail];
1602                end_idx = txq->tail;
1603                index_adv(&end_idx,
1604                        wrb_cnt_for_skb(adapter, sent_skb, &dummy_wrb) - 1,
1605                        txq->len);
1606                num_wrbs = be_tx_compl_process(adapter, txo, end_idx);
1607                atomic_sub(num_wrbs, &txq->used);
1608        }
1609}
1610
1611static void be_mcc_queues_destroy(struct be_adapter *adapter)
1612{
1613        struct be_queue_info *q;
1614
1615        q = &adapter->mcc_obj.q;
1616        if (q->created)
1617                be_cmd_q_destroy(adapter, q, QTYPE_MCCQ);
1618        be_queue_free(adapter, q);
1619
1620        q = &adapter->mcc_obj.cq;
1621        if (q->created)
1622                be_cmd_q_destroy(adapter, q, QTYPE_CQ);
1623        be_queue_free(adapter, q);
1624}
1625
1626/* Must be called only after TX qs are created as MCC shares TX EQ */
1627static int be_mcc_queues_create(struct be_adapter *adapter)
1628{
1629        struct be_queue_info *q, *cq;
1630
1631        /* Alloc MCC compl queue */
1632        cq = &adapter->mcc_obj.cq;
1633        if (be_queue_alloc(adapter, cq, MCC_CQ_LEN,
1634                        sizeof(struct be_mcc_compl)))
1635                goto err;
1636
1637        /* Ask BE to create MCC compl queue; share TX's eq */
1638        if (be_cmd_cq_create(adapter, cq, &adapter->tx_eq.q, false, true, 0))
1639                goto mcc_cq_free;
1640
1641        /* Alloc MCC queue */
1642        q = &adapter->mcc_obj.q;
1643        if (be_queue_alloc(adapter, q, MCC_Q_LEN, sizeof(struct be_mcc_wrb)))
1644                goto mcc_cq_destroy;
1645
1646        /* Ask BE to create MCC queue */
1647        if (be_cmd_mccq_create(adapter, q, cq))
1648                goto mcc_q_free;
1649
1650        return 0;
1651
1652mcc_q_free:
1653        be_queue_free(adapter, q);
1654mcc_cq_destroy:
1655        be_cmd_q_destroy(adapter, cq, QTYPE_CQ);
1656mcc_cq_free:
1657        be_queue_free(adapter, cq);
1658err:
1659        return -1;
1660}
1661
1662static void be_tx_queues_destroy(struct be_adapter *adapter)
1663{
1664        struct be_queue_info *q;
1665        struct be_tx_obj *txo;
1666        u8 i;
1667
1668        for_all_tx_queues(adapter, txo, i) {
1669                q = &txo->q;
1670                if (q->created)
1671                        be_cmd_q_destroy(adapter, q, QTYPE_TXQ);
1672                be_queue_free(adapter, q);
1673
1674                q = &txo->cq;
1675                if (q->created)
1676                        be_cmd_q_destroy(adapter, q, QTYPE_CQ);
1677                be_queue_free(adapter, q);
1678        }
1679
1680        /* Clear any residual events */
1681        be_eq_clean(adapter, &adapter->tx_eq);
1682
1683        q = &adapter->tx_eq.q;
1684        if (q->created)
1685                be_cmd_q_destroy(adapter, q, QTYPE_EQ);
1686        be_queue_free(adapter, q);
1687}
1688
1689/* One TX event queue is shared by all TX compl qs */
1690static int be_tx_queues_create(struct be_adapter *adapter)
1691{
1692        struct be_queue_info *eq, *q, *cq;
1693        struct be_tx_obj *txo;
1694        u8 i;
1695
1696        adapter->tx_eq.max_eqd = 0;
1697        adapter->tx_eq.min_eqd = 0;
1698        adapter->tx_eq.cur_eqd = 96;
1699        adapter->tx_eq.enable_aic = false;
1700
1701        eq = &adapter->tx_eq.q;
1702        if (be_queue_alloc(adapter, eq, EVNT_Q_LEN,
1703                sizeof(struct be_eq_entry)))
1704                return -1;
1705
1706        if (be_cmd_eq_create(adapter, eq, adapter->tx_eq.cur_eqd))
1707                goto err;
1708        adapter->tx_eq.eq_idx = adapter->eq_next_idx++;
1709
1710        for_all_tx_queues(adapter, txo, i) {
1711                cq = &txo->cq;
1712                if (be_queue_alloc(adapter, cq, TX_CQ_LEN,
1713                        sizeof(struct be_eth_tx_compl)))
1714                        goto err;
1715
1716                if (be_cmd_cq_create(adapter, cq, eq, false, false, 3))
1717                        goto err;
1718
1719                q = &txo->q;
1720                if (be_queue_alloc(adapter, q, TX_Q_LEN,
1721                        sizeof(struct be_eth_wrb)))
1722                        goto err;
1723
1724                if (be_cmd_txq_create(adapter, q, cq))
1725                        goto err;
1726        }
1727        return 0;
1728
1729err:
1730        be_tx_queues_destroy(adapter);
1731        return -1;
1732}
1733
1734static void be_rx_queues_destroy(struct be_adapter *adapter)
1735{
1736        struct be_queue_info *q;
1737        struct be_rx_obj *rxo;
1738        int i;
1739
1740        for_all_rx_queues(adapter, rxo, i) {
1741                be_queue_free(adapter, &rxo->q);
1742
1743                q = &rxo->cq;
1744                if (q->created)
1745                        be_cmd_q_destroy(adapter, q, QTYPE_CQ);
1746                be_queue_free(adapter, q);
1747
1748                q = &rxo->rx_eq.q;
1749                if (q->created)
1750                        be_cmd_q_destroy(adapter, q, QTYPE_EQ);
1751                be_queue_free(adapter, q);
1752        }
1753}
1754
1755static u32 be_num_rxqs_want(struct be_adapter *adapter)
1756{
1757        if ((adapter->function_caps & BE_FUNCTION_CAPS_RSS) &&
1758                !adapter->sriov_enabled && !(adapter->function_mode & 0x400)) {
1759                return 1 + MAX_RSS_QS; /* one default non-RSS queue */
1760        } else {
1761                dev_warn(&adapter->pdev->dev,
1762                        "No support for multiple RX queues\n");
1763                return 1;
1764        }
1765}
1766
1767static int be_rx_queues_create(struct be_adapter *adapter)
1768{
1769        struct be_queue_info *eq, *q, *cq;
1770        struct be_rx_obj *rxo;
1771        int rc, i;
1772
1773        adapter->num_rx_qs = min(be_num_rxqs_want(adapter),
1774                                msix_enabled(adapter) ?
1775                                        adapter->num_msix_vec - 1 : 1);
1776        if (adapter->num_rx_qs != MAX_RX_QS)
1777                dev_warn(&adapter->pdev->dev,
1778                        "Can create only %d RX queues", adapter->num_rx_qs);
1779
1780        adapter->big_page_size = (1 << get_order(rx_frag_size)) * PAGE_SIZE;
1781        for_all_rx_queues(adapter, rxo, i) {
1782                rxo->adapter = adapter;
1783                rxo->rx_eq.max_eqd = BE_MAX_EQD;
1784                rxo->rx_eq.enable_aic = true;
1785
1786                /* EQ */
1787                eq = &rxo->rx_eq.q;
1788                rc = be_queue_alloc(adapter, eq, EVNT_Q_LEN,
1789                                        sizeof(struct be_eq_entry));
1790                if (rc)
1791                        goto err;
1792
1793                rc = be_cmd_eq_create(adapter, eq, rxo->rx_eq.cur_eqd);
1794                if (rc)
1795                        goto err;
1796
1797                rxo->rx_eq.eq_idx = adapter->eq_next_idx++;
1798
1799                /* CQ */
1800                cq = &rxo->cq;
1801                rc = be_queue_alloc(adapter, cq, RX_CQ_LEN,
1802                                sizeof(struct be_eth_rx_compl));
1803                if (rc)
1804                        goto err;
1805
1806                rc = be_cmd_cq_create(adapter, cq, eq, false, false, 3);
1807                if (rc)
1808                        goto err;
1809
1810                /* Rx Q - will be created in be_open() */
1811                q = &rxo->q;
1812                rc = be_queue_alloc(adapter, q, RX_Q_LEN,
1813                                sizeof(struct be_eth_rx_d));
1814                if (rc)
1815                        goto err;
1816
1817        }
1818
1819        return 0;
1820err:
1821        be_rx_queues_destroy(adapter);
1822        return -1;
1823}
1824
1825static bool event_peek(struct be_eq_obj *eq_obj)
1826{
1827        struct be_eq_entry *eqe = queue_tail_node(&eq_obj->q);
1828        if (!eqe->evt)
1829                return false;
1830        else
1831                return true;
1832}
1833
1834static irqreturn_t be_intx(int irq, void *dev)
1835{
1836        struct be_adapter *adapter = dev;
1837        struct be_rx_obj *rxo;
1838        int isr, i, tx = 0 , rx = 0;
1839
1840        if (lancer_chip(adapter)) {
1841                if (event_peek(&adapter->tx_eq))
1842                        tx = event_handle(adapter, &adapter->tx_eq, false);
1843                for_all_rx_queues(adapter, rxo, i) {
1844                        if (event_peek(&rxo->rx_eq))
1845                                rx |= event_handle(adapter, &rxo->rx_eq, true);
1846                }
1847
1848                if (!(tx || rx))
1849                        return IRQ_NONE;
1850
1851        } else {
1852                isr = ioread32(adapter->csr + CEV_ISR0_OFFSET +
1853                        (adapter->tx_eq.q.id / 8) * CEV_ISR_SIZE);
1854                if (!isr)
1855                        return IRQ_NONE;
1856
1857                if ((1 << adapter->tx_eq.eq_idx & isr))
1858                        event_handle(adapter, &adapter->tx_eq, false);
1859
1860                for_all_rx_queues(adapter, rxo, i) {
1861                        if ((1 << rxo->rx_eq.eq_idx & isr))
1862                                event_handle(adapter, &rxo->rx_eq, true);
1863                }
1864        }
1865
1866        return IRQ_HANDLED;
1867}
1868
1869static irqreturn_t be_msix_rx(int irq, void *dev)
1870{
1871        struct be_rx_obj *rxo = dev;
1872        struct be_adapter *adapter = rxo->adapter;
1873
1874        event_handle(adapter, &rxo->rx_eq, true);
1875
1876        return IRQ_HANDLED;
1877}
1878
1879static irqreturn_t be_msix_tx_mcc(int irq, void *dev)
1880{
1881        struct be_adapter *adapter = dev;
1882
1883        event_handle(adapter, &adapter->tx_eq, false);
1884
1885        return IRQ_HANDLED;
1886}
1887
1888static inline bool do_gro(struct be_rx_compl_info *rxcp)
1889{
1890        return (rxcp->tcpf && !rxcp->err) ? true : false;
1891}
1892
1893static int be_poll_rx(struct napi_struct *napi, int budget)
1894{
1895        struct be_eq_obj *rx_eq = container_of(napi, struct be_eq_obj, napi);
1896        struct be_rx_obj *rxo = container_of(rx_eq, struct be_rx_obj, rx_eq);
1897        struct be_adapter *adapter = rxo->adapter;
1898        struct be_queue_info *rx_cq = &rxo->cq;
1899        struct be_rx_compl_info *rxcp;
1900        u32 work_done;
1901
1902        rxo->stats.rx_polls++;
1903        for (work_done = 0; work_done < budget; work_done++) {
1904                rxcp = be_rx_compl_get(rxo);
1905                if (!rxcp)
1906                        break;
1907
1908                /* Ignore flush completions */
1909                if (rxcp->num_rcvd && rxcp->pkt_size) {
1910                        if (do_gro(rxcp))
1911                                be_rx_compl_process_gro(adapter, rxo, rxcp);
1912                        else
1913                                be_rx_compl_process(adapter, rxo, rxcp);
1914                } else if (rxcp->pkt_size == 0) {
1915                        be_rx_compl_discard(adapter, rxo, rxcp);
1916                }
1917
1918                be_rx_stats_update(rxo, rxcp);
1919        }
1920
1921        /* Refill the queue */
1922        if (atomic_read(&rxo->q.used) < RX_FRAGS_REFILL_WM)
1923                be_post_rx_frags(rxo, GFP_ATOMIC);
1924
1925        /* All consumed */
1926        if (work_done < budget) {
1927                napi_complete(napi);
1928                be_cq_notify(adapter, rx_cq->id, true, work_done);
1929        } else {
1930                /* More to be consumed; continue with interrupts disabled */
1931                be_cq_notify(adapter, rx_cq->id, false, work_done);
1932        }
1933        return work_done;
1934}
1935
1936/* As TX and MCC share the same EQ check for both TX and MCC completions.
1937 * For TX/MCC we don't honour budget; consume everything
1938 */
1939static int be_poll_tx_mcc(struct napi_struct *napi, int budget)
1940{
1941        struct be_eq_obj *tx_eq = container_of(napi, struct be_eq_obj, napi);
1942        struct be_adapter *adapter =
1943                container_of(tx_eq, struct be_adapter, tx_eq);
1944        struct be_tx_obj *txo;
1945        struct be_eth_tx_compl *txcp;
1946        int tx_compl, mcc_compl, status = 0;
1947        u8 i;
1948        u16 num_wrbs;
1949
1950        for_all_tx_queues(adapter, txo, i) {
1951                tx_compl = 0;
1952                num_wrbs = 0;
1953                while ((txcp = be_tx_compl_get(&txo->cq))) {
1954                        num_wrbs += be_tx_compl_process(adapter, txo,
1955                                AMAP_GET_BITS(struct amap_eth_tx_compl,
1956                                        wrb_index, txcp));
1957                        tx_compl++;
1958                }
1959                if (tx_compl) {
1960                        be_cq_notify(adapter, txo->cq.id, true, tx_compl);
1961
1962                        atomic_sub(num_wrbs, &txo->q.used);
1963
1964                        /* As Tx wrbs have been freed up, wake up netdev queue
1965                         * if it was stopped due to lack of tx wrbs.  */
1966                        if (__netif_subqueue_stopped(adapter->netdev, i) &&
1967                                atomic_read(&txo->q.used) < txo->q.len / 2) {
1968                                netif_wake_subqueue(adapter->netdev, i);
1969                        }
1970
1971                        adapter->drv_stats.be_tx_events++;
1972                        txo->stats.be_tx_compl += tx_compl;
1973                }
1974        }
1975
1976        mcc_compl = be_process_mcc(adapter, &status);
1977
1978        if (mcc_compl) {
1979                struct be_mcc_obj *mcc_obj = &adapter->mcc_obj;
1980                be_cq_notify(adapter, mcc_obj->cq.id, true, mcc_compl);
1981        }
1982
1983        napi_complete(napi);
1984
1985        be_eq_notify(adapter, tx_eq->q.id, true, false, 0);
1986        return 1;
1987}
1988
1989void be_detect_dump_ue(struct be_adapter *adapter)
1990{
1991        u32 ue_status_lo, ue_status_hi, ue_status_lo_mask, ue_status_hi_mask;
1992        u32 i;
1993
1994        pci_read_config_dword(adapter->pdev,
1995                                PCICFG_UE_STATUS_LOW, &ue_status_lo);
1996        pci_read_config_dword(adapter->pdev,
1997                                PCICFG_UE_STATUS_HIGH, &ue_status_hi);
1998        pci_read_config_dword(adapter->pdev,
1999                                PCICFG_UE_STATUS_LOW_MASK, &ue_status_lo_mask);
2000        pci_read_config_dword(adapter->pdev,
2001                                PCICFG_UE_STATUS_HI_MASK, &ue_status_hi_mask);
2002
2003        ue_status_lo = (ue_status_lo & (~ue_status_lo_mask));
2004        ue_status_hi = (ue_status_hi & (~ue_status_hi_mask));
2005
2006        if (ue_status_lo || ue_status_hi) {
2007                adapter->ue_detected = true;
2008                adapter->eeh_err = true;
2009                dev_err(&adapter->pdev->dev, "UE Detected!!\n");
2010        }
2011
2012        if (ue_status_lo) {
2013                for (i = 0; ue_status_lo; ue_status_lo >>= 1, i++) {
2014                        if (ue_status_lo & 1)
2015                                dev_err(&adapter->pdev->dev,
2016                                "UE: %s bit set\n", ue_status_low_desc[i]);
2017                }
2018        }
2019        if (ue_status_hi) {
2020                for (i = 0; ue_status_hi; ue_status_hi >>= 1, i++) {
2021                        if (ue_status_hi & 1)
2022                                dev_err(&adapter->pdev->dev,
2023                                "UE: %s bit set\n", ue_status_hi_desc[i]);
2024                }
2025        }
2026
2027}
2028
2029static void be_worker(struct work_struct *work)
2030{
2031        struct be_adapter *adapter =
2032                container_of(work, struct be_adapter, work.work);
2033        struct be_rx_obj *rxo;
2034        struct be_tx_obj *txo;
2035        int i;
2036
2037        if (!adapter->ue_detected && !lancer_chip(adapter))
2038                be_detect_dump_ue(adapter);
2039
2040        /* when interrupts are not yet enabled, just reap any pending
2041        * mcc completions */
2042        if (!netif_running(adapter->netdev)) {
2043                int mcc_compl, status = 0;
2044
2045                mcc_compl = be_process_mcc(adapter, &status);
2046
2047                if (mcc_compl) {
2048                        struct be_mcc_obj *mcc_obj = &adapter->mcc_obj;
2049                        be_cq_notify(adapter, mcc_obj->cq.id, false, mcc_compl);
2050                }
2051
2052                goto reschedule;
2053        }
2054
2055        if (!adapter->stats_cmd_sent) {
2056                if (lancer_chip(adapter))
2057                        lancer_cmd_get_pport_stats(adapter,
2058                                                &adapter->stats_cmd);
2059                else
2060                        be_cmd_get_stats(adapter, &adapter->stats_cmd);
2061        }
2062
2063        for_all_tx_queues(adapter, txo, i)
2064                be_tx_rate_update(txo);
2065
2066        for_all_rx_queues(adapter, rxo, i) {
2067                be_rx_rate_update(rxo);
2068                be_rx_eqd_update(adapter, rxo);
2069
2070                if (rxo->rx_post_starved) {
2071                        rxo->rx_post_starved = false;
2072                        be_post_rx_frags(rxo, GFP_KERNEL);
2073                }
2074        }
2075
2076reschedule:
2077        adapter->work_counter++;
2078        schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000));
2079}
2080
2081static void be_msix_disable(struct be_adapter *adapter)
2082{
2083        if (msix_enabled(adapter)) {
2084                pci_disable_msix(adapter->pdev);
2085                adapter->num_msix_vec = 0;
2086        }
2087}
2088
2089static void be_msix_enable(struct be_adapter *adapter)
2090{
2091#define BE_MIN_MSIX_VECTORS     (1 + 1) /* Rx + Tx */
2092        int i, status, num_vec;
2093
2094        num_vec = be_num_rxqs_want(adapter) + 1;
2095
2096        for (i = 0; i < num_vec; i++)
2097                adapter->msix_entries[i].entry = i;
2098
2099        status = pci_enable_msix(adapter->pdev, adapter->msix_entries, num_vec);
2100        if (status == 0) {
2101                goto done;
2102        } else if (status >= BE_MIN_MSIX_VECTORS) {
2103                num_vec = status;
2104                if (pci_enable_msix(adapter->pdev, adapter->msix_entries,
2105                                num_vec) == 0)
2106                        goto done;
2107        }
2108        return;
2109done:
2110        adapter->num_msix_vec = num_vec;
2111        return;
2112}
2113
2114static void be_sriov_enable(struct be_adapter *adapter)
2115{
2116        be_check_sriov_fn_type(adapter);
2117#ifdef CONFIG_PCI_IOV
2118        if (be_physfn(adapter) && num_vfs) {
2119                int status, pos;
2120                u16 nvfs;
2121
2122                pos = pci_find_ext_capability(adapter->pdev,
2123                                                PCI_EXT_CAP_ID_SRIOV);
2124                pci_read_config_word(adapter->pdev,
2125                                        pos + PCI_SRIOV_TOTAL_VF, &nvfs);
2126
2127                if (num_vfs > nvfs) {
2128                        dev_info(&adapter->pdev->dev,
2129                                        "Device supports %d VFs and not %d\n",
2130                                        nvfs, num_vfs);
2131                        num_vfs = nvfs;
2132                }
2133
2134                status = pci_enable_sriov(adapter->pdev, num_vfs);
2135                adapter->sriov_enabled = status ? false : true;
2136        }
2137#endif
2138}
2139
2140static void be_sriov_disable(struct be_adapter *adapter)
2141{
2142#ifdef CONFIG_PCI_IOV
2143        if (adapter->sriov_enabled) {
2144                pci_disable_sriov(adapter->pdev);
2145                adapter->sriov_enabled = false;
2146        }
2147#endif
2148}
2149
2150static inline int be_msix_vec_get(struct be_adapter *adapter,
2151                                        struct be_eq_obj *eq_obj)
2152{
2153        return adapter->msix_entries[eq_obj->eq_idx].vector;
2154}
2155
2156static int be_request_irq(struct be_adapter *adapter,
2157                struct be_eq_obj *eq_obj,
2158                void *handler, char *desc, void *context)
2159{
2160        struct net_device *netdev = adapter->netdev;
2161        int vec;
2162
2163        sprintf(eq_obj->desc, "%s-%s", netdev->name, desc);
2164        vec = be_msix_vec_get(adapter, eq_obj);
2165        return request_irq(vec, handler, 0, eq_obj->desc, context);
2166}
2167
2168static void be_free_irq(struct be_adapter *adapter, struct be_eq_obj *eq_obj,
2169                        void *context)
2170{
2171        int vec = be_msix_vec_get(adapter, eq_obj);
2172        free_irq(vec, context);
2173}
2174
2175static int be_msix_register(struct be_adapter *adapter)
2176{
2177        struct be_rx_obj *rxo;
2178        int status, i;
2179        char qname[10];
2180
2181        status = be_request_irq(adapter, &adapter->tx_eq, be_msix_tx_mcc, "tx",
2182                                adapter);
2183        if (status)
2184                goto err;
2185
2186        for_all_rx_queues(adapter, rxo, i) {
2187                sprintf(qname, "rxq%d", i);
2188                status = be_request_irq(adapter, &rxo->rx_eq, be_msix_rx,
2189                                qname, rxo);
2190                if (status)
2191                        goto err_msix;
2192        }
2193
2194        return 0;
2195
2196err_msix:
2197        be_free_irq(adapter, &adapter->tx_eq, adapter);
2198
2199        for (i--, rxo = &adapter->rx_obj[i]; i >= 0; i--, rxo--)
2200                be_free_irq(adapter, &rxo->rx_eq, rxo);
2201
2202err:
2203        dev_warn(&adapter->pdev->dev,
2204                "MSIX Request IRQ failed - err %d\n", status);
2205        be_msix_disable(adapter);
2206        return status;
2207}
2208
2209static int be_irq_register(struct be_adapter *adapter)
2210{
2211        struct net_device *netdev = adapter->netdev;
2212        int status;
2213
2214        if (msix_enabled(adapter)) {
2215                status = be_msix_register(adapter);
2216                if (status == 0)
2217                        goto done;
2218                /* INTx is not supported for VF */
2219                if (!be_physfn(adapter))
2220                        return status;
2221        }
2222
2223        /* INTx */
2224        netdev->irq = adapter->pdev->irq;
2225        status = request_irq(netdev->irq, be_intx, IRQF_SHARED, netdev->name,
2226                        adapter);
2227        if (status) {
2228                dev_err(&adapter->pdev->dev,
2229                        "INTx request IRQ failed - err %d\n", status);
2230                return status;
2231        }
2232done:
2233        adapter->isr_registered = true;
2234        return 0;
2235}
2236
2237static void be_irq_unregister(struct be_adapter *adapter)
2238{
2239        struct net_device *netdev = adapter->netdev;
2240        struct be_rx_obj *rxo;
2241        int i;
2242
2243        if (!adapter->isr_registered)
2244                return;
2245
2246        /* INTx */
2247        if (!msix_enabled(adapter)) {
2248                free_irq(netdev->irq, adapter);
2249                goto done;
2250        }
2251
2252        /* MSIx */
2253        be_free_irq(adapter, &adapter->tx_eq, adapter);
2254
2255        for_all_rx_queues(adapter, rxo, i)
2256                be_free_irq(adapter, &rxo->rx_eq, rxo);
2257
2258done:
2259        adapter->isr_registered = false;
2260}
2261
2262static void be_rx_queues_clear(struct be_adapter *adapter)
2263{
2264        struct be_queue_info *q;
2265        struct be_rx_obj *rxo;
2266        int i;
2267
2268        for_all_rx_queues(adapter, rxo, i) {
2269                q = &rxo->q;
2270                if (q->created) {
2271                        be_cmd_rxq_destroy(adapter, q);
2272                        /* After the rxq is invalidated, wait for a grace time
2273                         * of 1ms for all dma to end and the flush compl to
2274                         * arrive
2275                         */
2276                        mdelay(1);
2277                        be_rx_q_clean(adapter, rxo);
2278                }
2279
2280                /* Clear any residual events */
2281                q = &rxo->rx_eq.q;
2282                if (q->created)
2283                        be_eq_clean(adapter, &rxo->rx_eq);
2284        }
2285}
2286
2287static int be_close(struct net_device *netdev)
2288{
2289        struct be_adapter *adapter = netdev_priv(netdev);
2290        struct be_rx_obj *rxo;
2291        struct be_tx_obj *txo;
2292        struct be_eq_obj *tx_eq = &adapter->tx_eq;
2293        int vec, i;
2294
2295        be_async_mcc_disable(adapter);
2296
2297        netif_carrier_off(netdev);
2298        adapter->link_up = false;
2299
2300        if (!lancer_chip(adapter))
2301                be_intr_set(adapter, false);
2302
2303        for_all_rx_queues(adapter, rxo, i)
2304                napi_disable(&rxo->rx_eq.napi);
2305
2306        napi_disable(&tx_eq->napi);
2307
2308        if (lancer_chip(adapter)) {
2309                be_cq_notify(adapter, adapter->mcc_obj.cq.id, false, 0);
2310                for_all_rx_queues(adapter, rxo, i)
2311                         be_cq_notify(adapter, rxo->cq.id, false, 0);
2312                for_all_tx_queues(adapter, txo, i)
2313                         be_cq_notify(adapter, txo->cq.id, false, 0);
2314        }
2315
2316        if (msix_enabled(adapter)) {
2317                vec = be_msix_vec_get(adapter, tx_eq);
2318                synchronize_irq(vec);
2319
2320                for_all_rx_queues(adapter, rxo, i) {
2321                        vec = be_msix_vec_get(adapter, &rxo->rx_eq);
2322                        synchronize_irq(vec);
2323                }
2324        } else {
2325                synchronize_irq(netdev->irq);
2326        }
2327        be_irq_unregister(adapter);
2328
2329        /* Wait for all pending tx completions to arrive so that
2330         * all tx skbs are freed.
2331         */
2332        for_all_tx_queues(adapter, txo, i)
2333                be_tx_compl_clean(adapter, txo);
2334
2335        be_rx_queues_clear(adapter);
2336        return 0;
2337}
2338
2339static int be_rx_queues_setup(struct be_adapter *adapter)
2340{
2341        struct be_rx_obj *rxo;
2342        int rc, i;
2343        u8 rsstable[MAX_RSS_QS];
2344
2345        for_all_rx_queues(adapter, rxo, i) {
2346                rc = be_cmd_rxq_create(adapter, &rxo->q, rxo->cq.id,
2347                        rx_frag_size, BE_MAX_JUMBO_FRAME_SIZE,
2348                        adapter->if_handle,
2349                        (i > 0) ? 1 : 0/* rss enable */, &rxo->rss_id);
2350                if (rc)
2351                        return rc;
2352        }
2353
2354        if (be_multi_rxq(adapter)) {
2355                for_all_rss_queues(adapter, rxo, i)
2356                        rsstable[i] = rxo->rss_id;
2357
2358                rc = be_cmd_rss_config(adapter, rsstable,
2359                        adapter->num_rx_qs - 1);
2360                if (rc)
2361                        return rc;
2362        }
2363
2364        /* First time posting */
2365        for_all_rx_queues(adapter, rxo, i) {
2366                be_post_rx_frags(rxo, GFP_KERNEL);
2367                napi_enable(&rxo->rx_eq.napi);
2368        }
2369        return 0;
2370}
2371
2372static int be_open(struct net_device *netdev)
2373{
2374        struct be_adapter *adapter = netdev_priv(netdev);
2375        struct be_eq_obj *tx_eq = &adapter->tx_eq;
2376        struct be_rx_obj *rxo;
2377        bool link_up;
2378        int status, i;
2379        u8 mac_speed;
2380        u16 link_speed;
2381
2382        status = be_rx_queues_setup(adapter);
2383        if (status)
2384                goto err;
2385
2386        napi_enable(&tx_eq->napi);
2387
2388        be_irq_register(adapter);
2389
2390        if (!lancer_chip(adapter))
2391                be_intr_set(adapter, true);
2392
2393        /* The evt queues are created in unarmed state; arm them */
2394        for_all_rx_queues(adapter, rxo, i) {
2395                be_eq_notify(adapter, rxo->rx_eq.q.id, true, false, 0);
2396                be_cq_notify(adapter, rxo->cq.id, true, 0);
2397        }
2398        be_eq_notify(adapter, tx_eq->q.id, true, false, 0);
2399
2400        /* Now that interrupts are on we can process async mcc */
2401        be_async_mcc_enable(adapter);
2402
2403        status = be_cmd_link_status_query(adapter, &link_up, &mac_speed,
2404                        &link_speed, 0);
2405        if (status)
2406                goto err;
2407        be_link_status_update(adapter, link_up);
2408
2409        if (be_physfn(adapter)) {
2410                status = be_vid_config(adapter, false, 0);
2411                if (status)
2412                        goto err;
2413
2414                status = be_cmd_set_flow_control(adapter,
2415                                adapter->tx_fc, adapter->rx_fc);
2416                if (status)
2417                        goto err;
2418        }
2419
2420        return 0;
2421err:
2422        be_close(adapter->netdev);
2423        return -EIO;
2424}
2425
2426static int be_setup_wol(struct be_adapter *adapter, bool enable)
2427{
2428        struct be_dma_mem cmd;
2429        int status = 0;
2430        u8 mac[ETH_ALEN];
2431
2432        memset(mac, 0, ETH_ALEN);
2433
2434        cmd.size = sizeof(struct be_cmd_req_acpi_wol_magic_config);
2435        cmd.va = dma_alloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
2436                                    GFP_KERNEL);
2437        if (cmd.va == NULL)
2438                return -1;
2439        memset(cmd.va, 0, cmd.size);
2440
2441        if (enable) {
2442                status = pci_write_config_dword(adapter->pdev,
2443                        PCICFG_PM_CONTROL_OFFSET, PCICFG_PM_CONTROL_MASK);
2444                if (status) {
2445                        dev_err(&adapter->pdev->dev,
2446                                "Could not enable Wake-on-lan\n");
2447                        dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va,
2448                                          cmd.dma);
2449                        return status;
2450                }
2451                status = be_cmd_enable_magic_wol(adapter,
2452                                adapter->netdev->dev_addr, &cmd);
2453                pci_enable_wake(adapter->pdev, PCI_D3hot, 1);
2454                pci_enable_wake(adapter->pdev, PCI_D3cold, 1);
2455        } else {
2456                status = be_cmd_enable_magic_wol(adapter, mac, &cmd);
2457                pci_enable_wake(adapter->pdev, PCI_D3hot, 0);
2458                pci_enable_wake(adapter->pdev, PCI_D3cold, 0);
2459        }
2460
2461        dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma);
2462        return status;
2463}
2464
2465/*
2466 * Generate a seed MAC address from the PF MAC Address using jhash.
2467 * MAC Address for VFs are assigned incrementally starting from the seed.
2468 * These addresses are programmed in the ASIC by the PF and the VF driver
2469 * queries for the MAC address during its probe.
2470 */
2471static inline int be_vf_eth_addr_config(struct be_adapter *adapter)
2472{
2473        u32 vf = 0;
2474        int status = 0;
2475        u8 mac[ETH_ALEN];
2476
2477        be_vf_eth_addr_generate(adapter, mac);
2478
2479        for (vf = 0; vf < num_vfs; vf++) {
2480                status = be_cmd_pmac_add(adapter, mac,
2481                                        adapter->vf_cfg[vf].vf_if_handle,
2482                                        &adapter->vf_cfg[vf].vf_pmac_id,
2483                                        vf + 1);
2484                if (status)
2485                        dev_err(&adapter->pdev->dev,
2486                                "Mac address add failed for VF %d\n", vf);
2487                else
2488                        memcpy(adapter->vf_cfg[vf].vf_mac_addr, mac, ETH_ALEN);
2489
2490                mac[5] += 1;
2491        }
2492        return status;
2493}
2494
2495static inline void be_vf_eth_addr_rem(struct be_adapter *adapter)
2496{
2497        u32 vf;
2498
2499        for (vf = 0; vf < num_vfs; vf++) {
2500                if (adapter->vf_cfg[vf].vf_pmac_id != BE_INVALID_PMAC_ID)
2501                        be_cmd_pmac_del(adapter,
2502                                        adapter->vf_cfg[vf].vf_if_handle,
2503                                        adapter->vf_cfg[vf].vf_pmac_id, vf + 1);
2504        }
2505}
2506
2507static int be_setup(struct be_adapter *adapter)
2508{
2509        struct net_device *netdev = adapter->netdev;
2510        u32 cap_flags, en_flags, vf = 0;
2511        int status;
2512        u8 mac[ETH_ALEN];
2513
2514        be_cmd_req_native_mode(adapter);
2515
2516        cap_flags = en_flags = BE_IF_FLAGS_UNTAGGED |
2517                                BE_IF_FLAGS_BROADCAST |
2518                                BE_IF_FLAGS_MULTICAST;
2519
2520        if (be_physfn(adapter)) {
2521                cap_flags |= BE_IF_FLAGS_MCAST_PROMISCUOUS |
2522                                BE_IF_FLAGS_PROMISCUOUS |
2523                                BE_IF_FLAGS_PASS_L3L4_ERRORS;
2524                en_flags |= BE_IF_FLAGS_PASS_L3L4_ERRORS;
2525
2526                if (adapter->function_caps & BE_FUNCTION_CAPS_RSS) {
2527                        cap_flags |= BE_IF_FLAGS_RSS;
2528                        en_flags |= BE_IF_FLAGS_RSS;
2529                }
2530        }
2531
2532        status = be_cmd_if_create(adapter, cap_flags, en_flags,
2533                        netdev->dev_addr, false/* pmac_invalid */,
2534                        &adapter->if_handle, &adapter->pmac_id, 0);
2535        if (status != 0)
2536                goto do_none;
2537
2538        if (be_physfn(adapter)) {
2539                if (adapter->sriov_enabled) {
2540                        while (vf < num_vfs) {
2541                                cap_flags = en_flags = BE_IF_FLAGS_UNTAGGED |
2542                                                        BE_IF_FLAGS_BROADCAST;
2543                                status = be_cmd_if_create(adapter, cap_flags,
2544                                        en_flags, mac, true,
2545                                        &adapter->vf_cfg[vf].vf_if_handle,
2546                                        NULL, vf+1);
2547                                if (status) {
2548                                        dev_err(&adapter->pdev->dev,
2549                                        "Interface Create failed for VF %d\n",
2550                                        vf);
2551                                        goto if_destroy;
2552                                }
2553                                adapter->vf_cfg[vf].vf_pmac_id =
2554                                                        BE_INVALID_PMAC_ID;
2555                                vf++;
2556                        }
2557                }
2558        } else {
2559                status = be_cmd_mac_addr_query(adapter, mac,
2560                        MAC_ADDRESS_TYPE_NETWORK, false, adapter->if_handle);
2561                if (!status) {
2562                        memcpy(adapter->netdev->dev_addr, mac, ETH_ALEN);
2563                        memcpy(adapter->netdev->perm_addr, mac, ETH_ALEN);
2564                }
2565        }
2566
2567        status = be_tx_queues_create(adapter);
2568        if (status != 0)
2569                goto if_destroy;
2570
2571        status = be_rx_queues_create(adapter);
2572        if (status != 0)
2573                goto tx_qs_destroy;
2574
2575        /* Allow all priorities by default. A GRP5 evt may modify this */
2576        adapter->vlan_prio_bmap = 0xff;
2577
2578        status = be_mcc_queues_create(adapter);
2579        if (status != 0)
2580                goto rx_qs_destroy;
2581
2582        adapter->link_speed = -1;
2583
2584        return 0;
2585
2586rx_qs_destroy:
2587        be_rx_queues_destroy(adapter);
2588tx_qs_destroy:
2589        be_tx_queues_destroy(adapter);
2590if_destroy:
2591        if (be_physfn(adapter) && adapter->sriov_enabled)
2592                for (vf = 0; vf < num_vfs; vf++)
2593                        if (adapter->vf_cfg[vf].vf_if_handle)
2594                                be_cmd_if_destroy(adapter,
2595                                        adapter->vf_cfg[vf].vf_if_handle,
2596                                        vf + 1);
2597        be_cmd_if_destroy(adapter, adapter->if_handle, 0);
2598do_none:
2599        return status;
2600}
2601
2602static int be_clear(struct be_adapter *adapter)
2603{
2604        int vf;
2605
2606        if (be_physfn(adapter) && adapter->sriov_enabled)
2607                be_vf_eth_addr_rem(adapter);
2608
2609        be_mcc_queues_destroy(adapter);
2610        be_rx_queues_destroy(adapter);
2611        be_tx_queues_destroy(adapter);
2612        adapter->eq_next_idx = 0;
2613
2614        if (be_physfn(adapter) && adapter->sriov_enabled)
2615                for (vf = 0; vf < num_vfs; vf++)
2616                        if (adapter->vf_cfg[vf].vf_if_handle)
2617                                be_cmd_if_destroy(adapter,
2618                                        adapter->vf_cfg[vf].vf_if_handle,
2619                                        vf + 1);
2620
2621        be_cmd_if_destroy(adapter, adapter->if_handle,  0);
2622
2623        adapter->be3_native = 0;
2624
2625        /* tell fw we're done with firing cmds */
2626        be_cmd_fw_clean(adapter);
2627        return 0;
2628}
2629
2630
2631#define FW_FILE_HDR_SIGN        "ServerEngines Corp. "
2632static bool be_flash_redboot(struct be_adapter *adapter,
2633                        const u8 *p, u32 img_start, int image_size,
2634                        int hdr_size)
2635{
2636        u32 crc_offset;
2637        u8 flashed_crc[4];
2638        int status;
2639
2640        crc_offset = hdr_size + img_start + image_size - 4;
2641
2642        p += crc_offset;
2643
2644        status = be_cmd_get_flash_crc(adapter, flashed_crc,
2645                        (image_size - 4));
2646        if (status) {
2647                dev_err(&adapter->pdev->dev,
2648                "could not get crc from flash, not flashing redboot\n");
2649                return false;
2650        }
2651
2652        /*update redboot only if crc does not match*/
2653        if (!memcmp(flashed_crc, p, 4))
2654                return false;
2655        else
2656                return true;
2657}
2658
2659static int be_flash_data(struct be_adapter *adapter,
2660                        const struct firmware *fw,
2661                        struct be_dma_mem *flash_cmd, int num_of_images)
2662
2663{
2664        int status = 0, i, filehdr_size = 0;
2665        u32 total_bytes = 0, flash_op;
2666        int num_bytes;
2667        const u8 *p = fw->data;
2668        struct be_cmd_write_flashrom *req = flash_cmd->va;
2669        const struct flash_comp *pflashcomp;
2670        int num_comp;
2671
2672        static const struct flash_comp gen3_flash_types[9] = {
2673                { FLASH_iSCSI_PRIMARY_IMAGE_START_g3, IMG_TYPE_ISCSI_ACTIVE,
2674                        FLASH_IMAGE_MAX_SIZE_g3},
2675                { FLASH_REDBOOT_START_g3, IMG_TYPE_REDBOOT,
2676                        FLASH_REDBOOT_IMAGE_MAX_SIZE_g3},
2677                { FLASH_iSCSI_BIOS_START_g3, IMG_TYPE_BIOS,
2678                        FLASH_BIOS_IMAGE_MAX_SIZE_g3},
2679                { FLASH_PXE_BIOS_START_g3, IMG_TYPE_PXE_BIOS,
2680                        FLASH_BIOS_IMAGE_MAX_SIZE_g3},
2681                { FLASH_FCoE_BIOS_START_g3, IMG_TYPE_FCOE_BIOS,
2682                        FLASH_BIOS_IMAGE_MAX_SIZE_g3},
2683                { FLASH_iSCSI_BACKUP_IMAGE_START_g3, IMG_TYPE_ISCSI_BACKUP,
2684                        FLASH_IMAGE_MAX_SIZE_g3},
2685                { FLASH_FCoE_PRIMARY_IMAGE_START_g3, IMG_TYPE_FCOE_FW_ACTIVE,
2686                        FLASH_IMAGE_MAX_SIZE_g3},
2687                { FLASH_FCoE_BACKUP_IMAGE_START_g3, IMG_TYPE_FCOE_FW_BACKUP,
2688                        FLASH_IMAGE_MAX_SIZE_g3},
2689                { FLASH_NCSI_START_g3, IMG_TYPE_NCSI_FW,
2690                        FLASH_NCSI_IMAGE_MAX_SIZE_g3}
2691        };
2692        static const struct flash_comp gen2_flash_types[8] = {
2693                { FLASH_iSCSI_PRIMARY_IMAGE_START_g2, IMG_TYPE_ISCSI_ACTIVE,
2694                        FLASH_IMAGE_MAX_SIZE_g2},
2695                { FLASH_REDBOOT_START_g2, IMG_TYPE_REDBOOT,
2696                        FLASH_REDBOOT_IMAGE_MAX_SIZE_g2},
2697                { FLASH_iSCSI_BIOS_START_g2, IMG_TYPE_BIOS,
2698                        FLASH_BIOS_IMAGE_MAX_SIZE_g2},
2699                { FLASH_PXE_BIOS_START_g2, IMG_TYPE_PXE_BIOS,
2700                        FLASH_BIOS_IMAGE_MAX_SIZE_g2},
2701                { FLASH_FCoE_BIOS_START_g2, IMG_TYPE_FCOE_BIOS,
2702                        FLASH_BIOS_IMAGE_MAX_SIZE_g2},
2703                { FLASH_iSCSI_BACKUP_IMAGE_START_g2, IMG_TYPE_ISCSI_BACKUP,
2704                        FLASH_IMAGE_MAX_SIZE_g2},
2705                { FLASH_FCoE_PRIMARY_IMAGE_START_g2, IMG_TYPE_FCOE_FW_ACTIVE,
2706                        FLASH_IMAGE_MAX_SIZE_g2},
2707                { FLASH_FCoE_BACKUP_IMAGE_START_g2, IMG_TYPE_FCOE_FW_BACKUP,
2708                         FLASH_IMAGE_MAX_SIZE_g2}
2709        };
2710
2711        if (adapter->generation == BE_GEN3) {
2712                pflashcomp = gen3_flash_types;
2713                filehdr_size = sizeof(struct flash_file_hdr_g3);
2714                num_comp = ARRAY_SIZE(gen3_flash_types);
2715        } else {
2716                pflashcomp = gen2_flash_types;
2717                filehdr_size = sizeof(struct flash_file_hdr_g2);
2718                num_comp = ARRAY_SIZE(gen2_flash_types);
2719        }
2720        for (i = 0; i < num_comp; i++) {
2721                if ((pflashcomp[i].optype == IMG_TYPE_NCSI_FW) &&
2722                                memcmp(adapter->fw_ver, "3.102.148.0", 11) < 0)
2723                        continue;
2724                if ((pflashcomp[i].optype == IMG_TYPE_REDBOOT) &&
2725                        (!be_flash_redboot(adapter, fw->data,
2726                        pflashcomp[i].offset, pflashcomp[i].size, filehdr_size +
2727                        (num_of_images * sizeof(struct image_hdr)))))
2728                        continue;
2729                p = fw->data;
2730                p += filehdr_size + pflashcomp[i].offset
2731                        + (num_of_images * sizeof(struct image_hdr));
2732        if (p + pflashcomp[i].size > fw->data + fw->size)
2733                return -1;
2734        total_bytes = pflashcomp[i].size;
2735                while (total_bytes) {
2736                        if (total_bytes > 32*1024)
2737                                num_bytes = 32*1024;
2738                        else
2739                                num_bytes = total_bytes;
2740                        total_bytes -= num_bytes;
2741
2742                        if (!total_bytes)
2743                                flash_op = FLASHROM_OPER_FLASH;
2744                        else
2745                                flash_op = FLASHROM_OPER_SAVE;
2746                        memcpy(req->params.data_buf, p, num_bytes);
2747                        p += num_bytes;
2748                        status = be_cmd_write_flashrom(adapter, flash_cmd,
2749                                pflashcomp[i].optype, flash_op, num_bytes);
2750                        if (status) {
2751                                dev_err(&adapter->pdev->dev,
2752                                        "cmd to write to flash rom failed.\n");
2753                                return -1;
2754                        }
2755                }
2756        }
2757        return 0;
2758}
2759
2760static int get_ufigen_type(struct flash_file_hdr_g2 *fhdr)
2761{
2762        if (fhdr == NULL)
2763                return 0;
2764        if (fhdr->build[0] == '3')
2765                return BE_GEN3;
2766        else if (fhdr->build[0] == '2')
2767                return BE_GEN2;
2768        else
2769                return 0;
2770}
2771
2772static int lancer_fw_download(struct be_adapter *adapter,
2773                                const struct firmware *fw)
2774{
2775#define LANCER_FW_DOWNLOAD_CHUNK      (32 * 1024)
2776#define LANCER_FW_DOWNLOAD_LOCATION   "/prg"
2777        struct be_dma_mem flash_cmd;
2778        const u8 *data_ptr = NULL;
2779        u8 *dest_image_ptr = NULL;
2780        size_t image_size = 0;
2781        u32 chunk_size = 0;
2782        u32 data_written = 0;
2783        u32 offset = 0;
2784        int status = 0;
2785        u8 add_status = 0;
2786
2787        if (!IS_ALIGNED(fw->size, sizeof(u32))) {
2788                dev_err(&adapter->pdev->dev,
2789                        "FW Image not properly aligned. "
2790                        "Length must be 4 byte aligned.\n");
2791                status = -EINVAL;
2792                goto lancer_fw_exit;
2793        }
2794
2795        flash_cmd.size = sizeof(struct lancer_cmd_req_write_object)
2796                                + LANCER_FW_DOWNLOAD_CHUNK;
2797        flash_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, flash_cmd.size,
2798                                                &flash_cmd.dma, GFP_KERNEL);
2799        if (!flash_cmd.va) {
2800                status = -ENOMEM;
2801                dev_err(&adapter->pdev->dev,
2802                        "Memory allocation failure while flashing\n");
2803                goto lancer_fw_exit;
2804        }
2805
2806        dest_image_ptr = flash_cmd.va +
2807                                sizeof(struct lancer_cmd_req_write_object);
2808        image_size = fw->size;
2809        data_ptr = fw->data;
2810
2811        while (image_size) {
2812                chunk_size = min_t(u32, image_size, LANCER_FW_DOWNLOAD_CHUNK);
2813
2814                /* Copy the image chunk content. */
2815                memcpy(dest_image_ptr, data_ptr, chunk_size);
2816
2817                status = lancer_cmd_write_object(adapter, &flash_cmd,
2818                                chunk_size, offset, LANCER_FW_DOWNLOAD_LOCATION,
2819                                &data_written, &add_status);
2820
2821                if (status)
2822                        break;
2823
2824                offset += data_written;
2825                data_ptr += data_written;
2826                image_size -= data_written;
2827        }
2828
2829        if (!status) {
2830                /* Commit the FW written */
2831                status = lancer_cmd_write_object(adapter, &flash_cmd,
2832                                        0, offset, LANCER_FW_DOWNLOAD_LOCATION,
2833                                        &data_written, &add_status);
2834        }
2835
2836        dma_free_coherent(&adapter->pdev->dev, flash_cmd.size, flash_cmd.va,
2837                                flash_cmd.dma);
2838        if (status) {
2839                dev_err(&adapter->pdev->dev,
2840                        "Firmware load error. "
2841                        "Status code: 0x%x Additional Status: 0x%x\n",
2842                        status, add_status);
2843                goto lancer_fw_exit;
2844        }
2845
2846        dev_info(&adapter->pdev->dev, "Firmware flashed successfully\n");
2847lancer_fw_exit:
2848        return status;
2849}
2850
2851static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw)
2852{
2853        struct flash_file_hdr_g2 *fhdr;
2854        struct flash_file_hdr_g3 *fhdr3;
2855        struct image_hdr *img_hdr_ptr = NULL;
2856        struct be_dma_mem flash_cmd;
2857        const u8 *p;
2858        int status = 0, i = 0, num_imgs = 0;
2859
2860        p = fw->data;
2861        fhdr = (struct flash_file_hdr_g2 *) p;
2862
2863        flash_cmd.size = sizeof(struct be_cmd_write_flashrom) + 32*1024;
2864        flash_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, flash_cmd.size,
2865                                          &flash_cmd.dma, GFP_KERNEL);
2866        if (!flash_cmd.va) {
2867                status = -ENOMEM;
2868                dev_err(&adapter->pdev->dev,
2869                        "Memory allocation failure while flashing\n");
2870                goto be_fw_exit;
2871        }
2872
2873        if ((adapter->generation == BE_GEN3) &&
2874                        (get_ufigen_type(fhdr) == BE_GEN3)) {
2875                fhdr3 = (struct flash_file_hdr_g3 *) fw->data;
2876                num_imgs = le32_to_cpu(fhdr3->num_imgs);
2877                for (i = 0; i < num_imgs; i++) {
2878                        img_hdr_ptr = (struct image_hdr *) (fw->data +
2879                                        (sizeof(struct flash_file_hdr_g3) +
2880                                         i * sizeof(struct image_hdr)));
2881                        if (le32_to_cpu(img_hdr_ptr->imageid) == 1)
2882                                status = be_flash_data(adapter, fw, &flash_cmd,
2883                                                        num_imgs);
2884                }
2885        } else if ((adapter->generation == BE_GEN2) &&
2886                        (get_ufigen_type(fhdr) == BE_GEN2)) {
2887                status = be_flash_data(adapter, fw, &flash_cmd, 0);
2888        } else {
2889                dev_err(&adapter->pdev->dev,
2890                        "UFI and Interface are not compatible for flashing\n");
2891                status = -1;
2892        }
2893
2894        dma_free_coherent(&adapter->pdev->dev, flash_cmd.size, flash_cmd.va,
2895                          flash_cmd.dma);
2896        if (status) {
2897                dev_err(&adapter->pdev->dev, "Firmware load error\n");
2898                goto be_fw_exit;
2899        }
2900
2901        dev_info(&adapter->pdev->dev, "Firmware flashed successfully\n");
2902
2903be_fw_exit:
2904        return status;
2905}
2906
2907int be_load_fw(struct be_adapter *adapter, u8 *fw_file)
2908{
2909        const struct firmware *fw;
2910        int status;
2911
2912        if (!netif_running(adapter->netdev)) {
2913                dev_err(&adapter->pdev->dev,
2914                        "Firmware load not allowed (interface is down)\n");
2915                return -1;
2916        }
2917
2918        status = request_firmware(&fw, fw_file, &adapter->pdev->dev);
2919        if (status)
2920                goto fw_exit;
2921
2922        dev_info(&adapter->pdev->dev, "Flashing firmware file %s\n", fw_file);
2923
2924        if (lancer_chip(adapter))
2925                status = lancer_fw_download(adapter, fw);
2926        else
2927                status = be_fw_download(adapter, fw);
2928
2929fw_exit:
2930        release_firmware(fw);
2931        return status;
2932}
2933
2934static struct net_device_ops be_netdev_ops = {
2935        .ndo_open               = be_open,
2936        .ndo_stop               = be_close,
2937        .ndo_start_xmit         = be_xmit,
2938        .ndo_set_rx_mode        = be_set_multicast_list,
2939        .ndo_set_mac_address    = be_mac_addr_set,
2940        .ndo_change_mtu         = be_change_mtu,
2941        .ndo_validate_addr      = eth_validate_addr,
2942        .ndo_vlan_rx_add_vid    = be_vlan_add_vid,
2943        .ndo_vlan_rx_kill_vid   = be_vlan_rem_vid,
2944        .ndo_set_vf_mac         = be_set_vf_mac,
2945        .ndo_set_vf_vlan        = be_set_vf_vlan,
2946        .ndo_set_vf_tx_rate     = be_set_vf_tx_rate,
2947        .ndo_get_vf_config      = be_get_vf_config
2948};
2949
2950static void be_netdev_init(struct net_device *netdev)
2951{
2952        struct be_adapter *adapter = netdev_priv(netdev);
2953        struct be_rx_obj *rxo;
2954        int i;
2955
2956        netdev->hw_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
2957                NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |
2958                NETIF_F_HW_VLAN_TX;
2959        if (be_multi_rxq(adapter))
2960                netdev->hw_features |= NETIF_F_RXHASH;
2961
2962        netdev->features |= netdev->hw_features |
2963                NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_FILTER;
2964
2965        netdev->vlan_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
2966                NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
2967
2968        netdev->flags |= IFF_MULTICAST;
2969
2970        /* Default settings for Rx and Tx flow control */
2971        adapter->rx_fc = true;
2972        adapter->tx_fc = true;
2973
2974        netif_set_gso_max_size(netdev, 65535);
2975
2976        BE_SET_NETDEV_OPS(netdev, &be_netdev_ops);
2977
2978        SET_ETHTOOL_OPS(netdev, &be_ethtool_ops);
2979
2980        for_all_rx_queues(adapter, rxo, i)
2981                netif_napi_add(netdev, &rxo->rx_eq.napi, be_poll_rx,
2982                                BE_NAPI_WEIGHT);
2983
2984        netif_napi_add(netdev, &adapter->tx_eq.napi, be_poll_tx_mcc,
2985                BE_NAPI_WEIGHT);
2986}
2987
2988static void be_unmap_pci_bars(struct be_adapter *adapter)
2989{
2990        if (adapter->csr)
2991                iounmap(adapter->csr);
2992        if (adapter->db)
2993                iounmap(adapter->db);
2994        if (adapter->pcicfg && be_physfn(adapter))
2995                iounmap(adapter->pcicfg);
2996}
2997
2998static int be_map_pci_bars(struct be_adapter *adapter)
2999{
3000        u8 __iomem *addr;
3001        int pcicfg_reg, db_reg;
3002
3003        if (lancer_chip(adapter)) {
3004                addr = ioremap_nocache(pci_resource_start(adapter->pdev, 0),
3005                        pci_resource_len(adapter->pdev, 0));
3006                if (addr == NULL)
3007                        return -ENOMEM;
3008                adapter->db = addr;
3009                return 0;
3010        }
3011
3012        if (be_physfn(adapter)) {
3013                addr = ioremap_nocache(pci_resource_start(adapter->pdev, 2),
3014                                pci_resource_len(adapter->pdev, 2));
3015                if (addr == NULL)
3016                        return -ENOMEM;
3017                adapter->csr = addr;
3018        }
3019
3020        if (adapter->generation == BE_GEN2) {
3021                pcicfg_reg = 1;
3022                db_reg = 4;
3023        } else {
3024                pcicfg_reg = 0;
3025                if (be_physfn(adapter))
3026                        db_reg = 4;
3027                else
3028                        db_reg = 0;
3029        }
3030        addr = ioremap_nocache(pci_resource_start(adapter->pdev, db_reg),
3031                                pci_resource_len(adapter->pdev, db_reg));
3032        if (addr == NULL)
3033                goto pci_map_err;
3034        adapter->db = addr;
3035
3036        if (be_physfn(adapter)) {
3037                addr = ioremap_nocache(
3038                                pci_resource_start(adapter->pdev, pcicfg_reg),
3039                                pci_resource_len(adapter->pdev, pcicfg_reg));
3040                if (addr == NULL)
3041                        goto pci_map_err;
3042                adapter->pcicfg = addr;
3043        } else
3044                adapter->pcicfg = adapter->db + SRIOV_VF_PCICFG_OFFSET;
3045
3046        return 0;
3047pci_map_err:
3048        be_unmap_pci_bars(adapter);
3049        return -ENOMEM;
3050}
3051
3052
3053static void be_ctrl_cleanup(struct be_adapter *adapter)
3054{
3055        struct be_dma_mem *mem = &adapter->mbox_mem_alloced;
3056
3057        be_unmap_pci_bars(adapter);
3058
3059        if (mem->va)
3060                dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
3061                                  mem->dma);
3062
3063        mem = &adapter->mc_cmd_mem;
3064        if (mem->va)
3065                dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
3066                                  mem->dma);
3067}
3068
3069static int be_ctrl_init(struct be_adapter *adapter)
3070{
3071        struct be_dma_mem *mbox_mem_alloc = &adapter->mbox_mem_alloced;
3072        struct be_dma_mem *mbox_mem_align = &adapter->mbox_mem;
3073        struct be_dma_mem *mc_cmd_mem = &adapter->mc_cmd_mem;
3074        int status;
3075
3076        status = be_map_pci_bars(adapter);
3077        if (status)
3078                goto done;
3079
3080        mbox_mem_alloc->size = sizeof(struct be_mcc_mailbox) + 16;
3081        mbox_mem_alloc->va = dma_alloc_coherent(&adapter->pdev->dev,
3082                                                mbox_mem_alloc->size,
3083                                                &mbox_mem_alloc->dma,
3084                                                GFP_KERNEL);
3085        if (!mbox_mem_alloc->va) {
3086                status = -ENOMEM;
3087                goto unmap_pci_bars;
3088        }
3089
3090        mbox_mem_align->size = sizeof(struct be_mcc_mailbox);
3091        mbox_mem_align->va = PTR_ALIGN(mbox_mem_alloc->va, 16);
3092        mbox_mem_align->dma = PTR_ALIGN(mbox_mem_alloc->dma, 16);
3093        memset(mbox_mem_align->va, 0, sizeof(struct be_mcc_mailbox));
3094
3095        mc_cmd_mem->size = sizeof(struct be_cmd_req_mcast_mac_config);
3096        mc_cmd_mem->va = dma_alloc_coherent(&adapter->pdev->dev,
3097                                            mc_cmd_mem->size, &mc_cmd_mem->dma,
3098                                            GFP_KERNEL);
3099        if (mc_cmd_mem->va == NULL) {
3100                status = -ENOMEM;
3101                goto free_mbox;
3102        }
3103        memset(mc_cmd_mem->va, 0, mc_cmd_mem->size);
3104
3105        mutex_init(&adapter->mbox_lock);
3106        spin_lock_init(&adapter->mcc_lock);
3107        spin_lock_init(&adapter->mcc_cq_lock);
3108
3109        init_completion(&adapter->flash_compl);
3110        pci_save_state(adapter->pdev);
3111        return 0;
3112
3113free_mbox:
3114        dma_free_coherent(&adapter->pdev->dev, mbox_mem_alloc->size,
3115                          mbox_mem_alloc->va, mbox_mem_alloc->dma);
3116
3117unmap_pci_bars:
3118        be_unmap_pci_bars(adapter);
3119
3120done:
3121        return status;
3122}
3123
3124static void be_stats_cleanup(struct be_adapter *adapter)
3125{
3126        struct be_dma_mem *cmd = &adapter->stats_cmd;
3127
3128        if (cmd->va)
3129                dma_free_coherent(&adapter->pdev->dev, cmd->size,
3130                                  cmd->va, cmd->dma);
3131}
3132
3133static int be_stats_init(struct be_adapter *adapter)
3134{
3135        struct be_dma_mem *cmd = &adapter->stats_cmd;
3136
3137        if (adapter->generation == BE_GEN2) {
3138                cmd->size = sizeof(struct be_cmd_req_get_stats_v0);
3139        } else {
3140                if (lancer_chip(adapter))
3141                        cmd->size = sizeof(struct lancer_cmd_req_pport_stats);
3142                else
3143                        cmd->size = sizeof(struct be_cmd_req_get_stats_v1);
3144        }
3145        cmd->va = dma_alloc_coherent(&adapter->pdev->dev, cmd->size, &cmd->dma,
3146                                     GFP_KERNEL);
3147        if (cmd->va == NULL)
3148                return -1;
3149        memset(cmd->va, 0, cmd->size);
3150        return 0;
3151}
3152
3153static void __devexit be_remove(struct pci_dev *pdev)
3154{
3155        struct be_adapter *adapter = pci_get_drvdata(pdev);
3156
3157        if (!adapter)
3158                return;
3159
3160        cancel_delayed_work_sync(&adapter->work);
3161
3162        unregister_netdev(adapter->netdev);
3163
3164        be_clear(adapter);
3165
3166        be_stats_cleanup(adapter);
3167
3168        be_ctrl_cleanup(adapter);
3169
3170        kfree(adapter->vf_cfg);
3171        be_sriov_disable(adapter);
3172
3173        be_msix_disable(adapter);
3174
3175        pci_set_drvdata(pdev, NULL);
3176        pci_release_regions(pdev);
3177        pci_disable_device(pdev);
3178
3179        free_netdev(adapter->netdev);
3180}
3181
3182static int be_get_config(struct be_adapter *adapter)
3183{
3184        int status;
3185        u8 mac[ETH_ALEN];
3186
3187        status = be_cmd_get_fw_ver(adapter, adapter->fw_ver);
3188        if (status)
3189                return status;
3190
3191        status = be_cmd_query_fw_cfg(adapter, &adapter->port_num,
3192                        &adapter->function_mode, &adapter->function_caps);
3193        if (status)
3194                return status;
3195
3196        memset(mac, 0, ETH_ALEN);
3197
3198        /* A default permanent address is given to each VF for Lancer*/
3199        if (be_physfn(adapter) || lancer_chip(adapter)) {
3200                status = be_cmd_mac_addr_query(adapter, mac,
3201                        MAC_ADDRESS_TYPE_NETWORK, true /*permanent */, 0);
3202
3203                if (status)
3204                        return status;
3205
3206                if (!is_valid_ether_addr(mac))
3207                        return -EADDRNOTAVAIL;
3208
3209                memcpy(adapter->netdev->dev_addr, mac, ETH_ALEN);
3210                memcpy(adapter->netdev->perm_addr, mac, ETH_ALEN);
3211        }
3212
3213        if (adapter->function_mode & 0x400)
3214                adapter->max_vlans = BE_NUM_VLANS_SUPPORTED/4;
3215        else
3216                adapter->max_vlans = BE_NUM_VLANS_SUPPORTED;
3217
3218        status = be_cmd_get_cntl_attributes(adapter);
3219        if (status)
3220                return status;
3221
3222        if ((num_vfs && adapter->sriov_enabled) ||
3223                (adapter->function_mode & 0x400) ||
3224                lancer_chip(adapter) || !be_physfn(adapter)) {
3225                adapter->num_tx_qs = 1;
3226                netif_set_real_num_tx_queues(adapter->netdev,
3227                        adapter->num_tx_qs);
3228        } else {
3229                adapter->num_tx_qs = MAX_TX_QS;
3230        }
3231
3232        return 0;
3233}
3234
3235static int be_dev_family_check(struct be_adapter *adapter)
3236{
3237        struct pci_dev *pdev = adapter->pdev;
3238        u32 sli_intf = 0, if_type;
3239
3240        switch (pdev->device) {
3241        case BE_DEVICE_ID1:
3242        case OC_DEVICE_ID1:
3243                adapter->generation = BE_GEN2;
3244                break;
3245        case BE_DEVICE_ID2:
3246        case OC_DEVICE_ID2:
3247                adapter->generation = BE_GEN3;
3248                break;
3249        case OC_DEVICE_ID3:
3250        case OC_DEVICE_ID4:
3251                pci_read_config_dword(pdev, SLI_INTF_REG_OFFSET, &sli_intf);
3252                if_type = (sli_intf & SLI_INTF_IF_TYPE_MASK) >>
3253                                                SLI_INTF_IF_TYPE_SHIFT;
3254
3255                if (((sli_intf & SLI_INTF_VALID_MASK) != SLI_INTF_VALID) ||
3256                        if_type != 0x02) {
3257                        dev_err(&pdev->dev, "SLI_INTF reg val is not valid\n");
3258                        return -EINVAL;
3259                }
3260                adapter->sli_family = ((sli_intf & SLI_INTF_FAMILY_MASK) >>
3261                                         SLI_INTF_FAMILY_SHIFT);
3262                adapter->generation = BE_GEN3;
3263                break;
3264        default:
3265                adapter->generation = 0;
3266        }
3267        return 0;
3268}
3269
3270static int lancer_wait_ready(struct be_adapter *adapter)
3271{
3272#define SLIPORT_READY_TIMEOUT 500
3273        u32 sliport_status;
3274        int status = 0, i;
3275
3276        for (i = 0; i < SLIPORT_READY_TIMEOUT; i++) {
3277                sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
3278                if (sliport_status & SLIPORT_STATUS_RDY_MASK)
3279                        break;
3280
3281                msleep(20);
3282        }
3283
3284        if (i == SLIPORT_READY_TIMEOUT)
3285                status = -1;
3286
3287        return status;
3288}
3289
3290static int lancer_test_and_set_rdy_state(struct be_adapter *adapter)
3291{
3292        int status;
3293        u32 sliport_status, err, reset_needed;
3294        status = lancer_wait_ready(adapter);
3295        if (!status) {
3296                sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
3297                err = sliport_status & SLIPORT_STATUS_ERR_MASK;
3298                reset_needed = sliport_status & SLIPORT_STATUS_RN_MASK;
3299                if (err && reset_needed) {
3300                        iowrite32(SLI_PORT_CONTROL_IP_MASK,
3301                                        adapter->db + SLIPORT_CONTROL_OFFSET);
3302
3303                        /* check adapter has corrected the error */
3304                        status = lancer_wait_ready(adapter);
3305                        sliport_status = ioread32(adapter->db +
3306                                                        SLIPORT_STATUS_OFFSET);
3307                        sliport_status &= (SLIPORT_STATUS_ERR_MASK |
3308                                                SLIPORT_STATUS_RN_MASK);
3309                        if (status || sliport_status)
3310                                status = -1;
3311                } else if (err || reset_needed) {
3312                        status = -1;
3313                }
3314        }
3315        return status;
3316}
3317
3318static int __devinit be_probe(struct pci_dev *pdev,
3319                        const struct pci_device_id *pdev_id)
3320{
3321        int status = 0;
3322        struct be_adapter *adapter;
3323        struct net_device *netdev;
3324
3325        status = pci_enable_device(pdev);
3326        if (status)
3327                goto do_none;
3328
3329        status = pci_request_regions(pdev, DRV_NAME);
3330        if (status)
3331                goto disable_dev;
3332        pci_set_master(pdev);
3333
3334        netdev = alloc_etherdev_mq(sizeof(struct be_adapter), MAX_TX_QS);
3335        if (netdev == NULL) {
3336                status = -ENOMEM;
3337                goto rel_reg;
3338        }
3339        adapter = netdev_priv(netdev);
3340        adapter->pdev = pdev;
3341        pci_set_drvdata(pdev, adapter);
3342
3343        status = be_dev_family_check(adapter);
3344        if (status)
3345                goto free_netdev;
3346
3347        adapter->netdev = netdev;
3348        SET_NETDEV_DEV(netdev, &pdev->dev);
3349
3350        status = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64));
3351        if (!status) {
3352                netdev->features |= NETIF_F_HIGHDMA;
3353        } else {
3354                status = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
3355                if (status) {
3356                        dev_err(&pdev->dev, "Could not set PCI DMA Mask\n");
3357                        goto free_netdev;
3358                }
3359        }
3360
3361        be_sriov_enable(adapter);
3362        if (adapter->sriov_enabled) {
3363                adapter->vf_cfg = kcalloc(num_vfs,
3364                        sizeof(struct be_vf_cfg), GFP_KERNEL);
3365
3366                if (!adapter->vf_cfg)
3367                        goto free_netdev;
3368        }
3369
3370        status = be_ctrl_init(adapter);
3371        if (status)
3372                goto free_vf_cfg;
3373
3374        if (lancer_chip(adapter)) {
3375                status = lancer_test_and_set_rdy_state(adapter);
3376                if (status) {
3377                        dev_err(&pdev->dev, "Adapter in non recoverable error\n");
3378                        goto ctrl_clean;
3379                }
3380        }
3381
3382        /* sync up with fw's ready state */
3383        if (be_physfn(adapter)) {
3384                status = be_cmd_POST(adapter);
3385                if (status)
3386                        goto ctrl_clean;
3387        }
3388
3389        /* tell fw we're ready to fire cmds */
3390        status = be_cmd_fw_init(adapter);
3391        if (status)
3392                goto ctrl_clean;
3393
3394        status = be_cmd_reset_function(adapter);
3395        if (status)
3396                goto ctrl_clean;
3397
3398        status = be_stats_init(adapter);
3399        if (status)
3400                goto ctrl_clean;
3401
3402        status = be_get_config(adapter);
3403        if (status)
3404                goto stats_clean;
3405
3406        /* The INTR bit may be set in the card when probed by a kdump kernel
3407         * after a crash.
3408         */
3409        if (!lancer_chip(adapter))
3410                be_intr_set(adapter, false);
3411
3412        be_msix_enable(adapter);
3413
3414        INIT_DELAYED_WORK(&adapter->work, be_worker);
3415
3416        status = be_setup(adapter);
3417        if (status)
3418                goto msix_disable;
3419
3420        be_netdev_init(netdev);
3421        status = register_netdev(netdev);
3422        if (status != 0)
3423                goto unsetup;
3424        netif_carrier_off(netdev);
3425
3426        if (be_physfn(adapter) && adapter->sriov_enabled) {
3427                u8 mac_speed;
3428                bool link_up;
3429                u16 vf, lnk_speed;
3430
3431                if (!lancer_chip(adapter)) {
3432                        status = be_vf_eth_addr_config(adapter);
3433                        if (status)
3434                                goto unreg_netdev;
3435                }
3436
3437                for (vf = 0; vf < num_vfs; vf++) {
3438                        status = be_cmd_link_status_query(adapter, &link_up,
3439                                        &mac_speed, &lnk_speed, vf + 1);
3440                        if (!status)
3441                                adapter->vf_cfg[vf].vf_tx_rate = lnk_speed * 10;
3442                        else
3443                                goto unreg_netdev;
3444                }
3445        }
3446
3447        dev_info(&pdev->dev, "%s port %d\n", nic_name(pdev), adapter->port_num);
3448
3449        schedule_delayed_work(&adapter->work, msecs_to_jiffies(100));
3450        return 0;
3451
3452unreg_netdev:
3453        unregister_netdev(netdev);
3454unsetup:
3455        be_clear(adapter);
3456msix_disable:
3457        be_msix_disable(adapter);
3458stats_clean:
3459        be_stats_cleanup(adapter);
3460ctrl_clean:
3461        be_ctrl_cleanup(adapter);
3462free_vf_cfg:
3463        kfree(adapter->vf_cfg);
3464free_netdev:
3465        be_sriov_disable(adapter);
3466        free_netdev(netdev);
3467        pci_set_drvdata(pdev, NULL);
3468rel_reg:
3469        pci_release_regions(pdev);
3470disable_dev:
3471        pci_disable_device(pdev);
3472do_none:
3473        dev_err(&pdev->dev, "%s initialization failed\n", nic_name(pdev));
3474        return status;
3475}
3476
3477static int be_suspend(struct pci_dev *pdev, pm_message_t state)
3478{
3479        struct be_adapter *adapter = pci_get_drvdata(pdev);
3480        struct net_device *netdev =  adapter->netdev;
3481
3482        cancel_delayed_work_sync(&adapter->work);
3483        if (adapter->wol)
3484                be_setup_wol(adapter, true);
3485
3486        netif_device_detach(netdev);
3487        if (netif_running(netdev)) {
3488                rtnl_lock();
3489                be_close(netdev);
3490                rtnl_unlock();
3491        }
3492        be_cmd_get_flow_control(adapter, &adapter->tx_fc, &adapter->rx_fc);
3493        be_clear(adapter);
3494
3495        be_msix_disable(adapter);
3496        pci_save_state(pdev);
3497        pci_disable_device(pdev);
3498        pci_set_power_state(pdev, pci_choose_state(pdev, state));
3499        return 0;
3500}
3501
3502static int be_resume(struct pci_dev *pdev)
3503{
3504        int status = 0;
3505        struct be_adapter *adapter = pci_get_drvdata(pdev);
3506        struct net_device *netdev =  adapter->netdev;
3507
3508        netif_device_detach(netdev);
3509
3510        status = pci_enable_device(pdev);
3511        if (status)
3512                return status;
3513
3514        pci_set_power_state(pdev, 0);
3515        pci_restore_state(pdev);
3516
3517        be_msix_enable(adapter);
3518        /* tell fw we're ready to fire cmds */
3519        status = be_cmd_fw_init(adapter);
3520        if (status)
3521                return status;
3522
3523        be_setup(adapter);
3524        if (netif_running(netdev)) {
3525                rtnl_lock();
3526                be_open(netdev);
3527                rtnl_unlock();
3528        }
3529        netif_device_attach(netdev);
3530
3531        if (adapter->wol)
3532                be_setup_wol(adapter, false);
3533
3534        schedule_delayed_work(&adapter->work, msecs_to_jiffies(100));
3535        return 0;
3536}
3537
3538/*
3539 * An FLR will stop BE from DMAing any data.
3540 */
3541static void be_shutdown(struct pci_dev *pdev)
3542{
3543        struct be_adapter *adapter = pci_get_drvdata(pdev);
3544
3545        if (!adapter)
3546                return;
3547
3548        cancel_delayed_work_sync(&adapter->work);
3549
3550        netif_device_detach(adapter->netdev);
3551
3552        if (adapter->wol)
3553                be_setup_wol(adapter, true);
3554
3555        be_cmd_reset_function(adapter);
3556
3557        pci_disable_device(pdev);
3558}
3559
3560static pci_ers_result_t be_eeh_err_detected(struct pci_dev *pdev,
3561                                pci_channel_state_t state)
3562{
3563        struct be_adapter *adapter = pci_get_drvdata(pdev);
3564        struct net_device *netdev =  adapter->netdev;
3565
3566        dev_err(&adapter->pdev->dev, "EEH error detected\n");
3567
3568        adapter->eeh_err = true;
3569
3570        netif_device_detach(netdev);
3571
3572        if (netif_running(netdev)) {
3573                rtnl_lock();
3574                be_close(netdev);
3575                rtnl_unlock();
3576        }
3577        be_clear(adapter);
3578
3579        if (state == pci_channel_io_perm_failure)
3580                return PCI_ERS_RESULT_DISCONNECT;
3581
3582        pci_disable_device(pdev);
3583
3584        return PCI_ERS_RESULT_NEED_RESET;
3585}
3586
3587static pci_ers_result_t be_eeh_reset(struct pci_dev *pdev)
3588{
3589        struct be_adapter *adapter = pci_get_drvdata(pdev);
3590        int status;
3591
3592        dev_info(&adapter->pdev->dev, "EEH reset\n");
3593        adapter->eeh_err = false;
3594
3595        status = pci_enable_device(pdev);
3596        if (status)
3597                return PCI_ERS_RESULT_DISCONNECT;
3598
3599        pci_set_master(pdev);
3600        pci_set_power_state(pdev, 0);
3601        pci_restore_state(pdev);
3602
3603        /* Check if card is ok and fw is ready */
3604        status = be_cmd_POST(adapter);
3605        if (status)
3606                return PCI_ERS_RESULT_DISCONNECT;
3607
3608        return PCI_ERS_RESULT_RECOVERED;
3609}
3610
3611static void be_eeh_resume(struct pci_dev *pdev)
3612{
3613        int status = 0;
3614        struct be_adapter *adapter = pci_get_drvdata(pdev);
3615        struct net_device *netdev =  adapter->netdev;
3616
3617        dev_info(&adapter->pdev->dev, "EEH resume\n");
3618
3619        pci_save_state(pdev);
3620
3621        /* tell fw we're ready to fire cmds */
3622        status = be_cmd_fw_init(adapter);
3623        if (status)
3624                goto err;
3625
3626        status = be_setup(adapter);
3627        if (status)
3628                goto err;
3629
3630        if (netif_running(netdev)) {
3631                status = be_open(netdev);
3632                if (status)
3633                        goto err;
3634        }
3635        netif_device_attach(netdev);
3636        return;
3637err:
3638        dev_err(&adapter->pdev->dev, "EEH resume failed\n");
3639}
3640
3641static struct pci_error_handlers be_eeh_handlers = {
3642        .error_detected = be_eeh_err_detected,
3643        .slot_reset = be_eeh_reset,
3644        .resume = be_eeh_resume,
3645};
3646
3647static struct pci_driver be_driver = {
3648        .name = DRV_NAME,
3649        .id_table = be_dev_ids,
3650        .probe = be_probe,
3651        .remove = be_remove,
3652        .suspend = be_suspend,
3653        .resume = be_resume,
3654        .shutdown = be_shutdown,
3655        .err_handler = &be_eeh_handlers
3656};
3657
3658static int __init be_init_module(void)
3659{
3660        if (rx_frag_size != 8192 && rx_frag_size != 4096 &&
3661            rx_frag_size != 2048) {
3662                printk(KERN_WARNING DRV_NAME
3663                        " : Module param rx_frag_size must be 2048/4096/8192."
3664                        " Using 2048\n");
3665                rx_frag_size = 2048;
3666        }
3667
3668        return pci_register_driver(&be_driver);
3669}
3670module_init(be_init_module);
3671
3672static void __exit be_exit_module(void)
3673{
3674        pci_unregister_driver(&be_driver);
3675}
3676module_exit(be_exit_module);
3677