linux/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
<<
>>
Prefs
   1/*
   2 * This file is part of the Chelsio T4 Ethernet driver for Linux.
   3 *
   4 * Copyright (c) 2003-2010 Chelsio Communications, Inc. All rights reserved.
   5 *
   6 * This software is available to you under a choice of one of two
   7 * licenses.  You may choose to be licensed under the terms of the GNU
   8 * General Public License (GPL) Version 2, available from the file
   9 * COPYING in the main directory of this source tree, or the
  10 * OpenIB.org BSD license below:
  11 *
  12 *     Redistribution and use in source and binary forms, with or
  13 *     without modification, are permitted provided that the following
  14 *     conditions are met:
  15 *
  16 *      - Redistributions of source code must retain the above
  17 *        copyright notice, this list of conditions and the following
  18 *        disclaimer.
  19 *
  20 *      - Redistributions in binary form must reproduce the above
  21 *        copyright notice, this list of conditions and the following
  22 *        disclaimer in the documentation and/or other materials
  23 *        provided with the distribution.
  24 *
  25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  26 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  28 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  29 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  30 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  31 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  32 * SOFTWARE.
  33 */
  34
  35#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  36
  37#include <linux/bitmap.h>
  38#include <linux/crc32.h>
  39#include <linux/ctype.h>
  40#include <linux/debugfs.h>
  41#include <linux/err.h>
  42#include <linux/etherdevice.h>
  43#include <linux/firmware.h>
  44#include <linux/if.h>
  45#include <linux/if_vlan.h>
  46#include <linux/init.h>
  47#include <linux/log2.h>
  48#include <linux/mdio.h>
  49#include <linux/module.h>
  50#include <linux/moduleparam.h>
  51#include <linux/mutex.h>
  52#include <linux/netdevice.h>
  53#include <linux/pci.h>
  54#include <linux/aer.h>
  55#include <linux/rtnetlink.h>
  56#include <linux/sched.h>
  57#include <linux/seq_file.h>
  58#include <linux/sockios.h>
  59#include <linux/vmalloc.h>
  60#include <linux/workqueue.h>
  61#include <net/neighbour.h>
  62#include <net/netevent.h>
  63#include <net/addrconf.h>
  64#include <asm/uaccess.h>
  65
  66#include "cxgb4.h"
  67#include "t4_regs.h"
  68#include "t4_msg.h"
  69#include "t4fw_api.h"
  70#include "l2t.h"
  71
  72#include <../drivers/net/bonding/bonding.h>
  73
  74#ifdef DRV_VERSION
  75#undef DRV_VERSION
  76#endif
  77#define DRV_VERSION "2.0.0-ko"
  78#define DRV_DESC "Chelsio T4/T5 Network Driver"
  79
  80/*
  81 * Max interrupt hold-off timer value in us.  Queues fall back to this value
  82 * under extreme memory pressure so it's largish to give the system time to
  83 * recover.
  84 */
  85#define MAX_SGE_TIMERVAL 200U
  86
  87enum {
  88        /*
  89         * Physical Function provisioning constants.
  90         */
  91        PFRES_NVI = 4,                  /* # of Virtual Interfaces */
  92        PFRES_NETHCTRL = 128,           /* # of EQs used for ETH or CTRL Qs */
  93        PFRES_NIQFLINT = 128,           /* # of ingress Qs/w Free List(s)/intr
  94                                         */
  95        PFRES_NEQ = 256,                /* # of egress queues */
  96        PFRES_NIQ = 0,                  /* # of ingress queues */
  97        PFRES_TC = 0,                   /* PCI-E traffic class */
  98        PFRES_NEXACTF = 128,            /* # of exact MPS filters */
  99
 100        PFRES_R_CAPS = FW_CMD_CAP_PF,
 101        PFRES_WX_CAPS = FW_CMD_CAP_PF,
 102
 103#ifdef CONFIG_PCI_IOV
 104        /*
 105         * Virtual Function provisioning constants.  We need two extra Ingress
 106         * Queues with Interrupt capability to serve as the VF's Firmware
 107         * Event Queue and Forwarded Interrupt Queue (when using MSI mode) --
 108         * neither will have Free Lists associated with them).  For each
 109         * Ethernet/Control Egress Queue and for each Free List, we need an
 110         * Egress Context.
 111         */
 112        VFRES_NPORTS = 1,               /* # of "ports" per VF */
 113        VFRES_NQSETS = 2,               /* # of "Queue Sets" per VF */
 114
 115        VFRES_NVI = VFRES_NPORTS,       /* # of Virtual Interfaces */
 116        VFRES_NETHCTRL = VFRES_NQSETS,  /* # of EQs used for ETH or CTRL Qs */
 117        VFRES_NIQFLINT = VFRES_NQSETS+2,/* # of ingress Qs/w Free List(s)/intr */
 118        VFRES_NEQ = VFRES_NQSETS*2,     /* # of egress queues */
 119        VFRES_NIQ = 0,                  /* # of non-fl/int ingress queues */
 120        VFRES_TC = 0,                   /* PCI-E traffic class */
 121        VFRES_NEXACTF = 16,             /* # of exact MPS filters */
 122
 123        VFRES_R_CAPS = FW_CMD_CAP_DMAQ|FW_CMD_CAP_VF|FW_CMD_CAP_PORT,
 124        VFRES_WX_CAPS = FW_CMD_CAP_DMAQ|FW_CMD_CAP_VF,
 125#endif
 126};
 127
 128/*
 129 * Provide a Port Access Rights Mask for the specified PF/VF.  This is very
 130 * static and likely not to be useful in the long run.  We really need to
 131 * implement some form of persistent configuration which the firmware
 132 * controls.
 133 */
 134static unsigned int pfvfres_pmask(struct adapter *adapter,
 135                                  unsigned int pf, unsigned int vf)
 136{
 137        unsigned int portn, portvec;
 138
 139        /*
 140         * Give PF's access to all of the ports.
 141         */
 142        if (vf == 0)
 143                return FW_PFVF_CMD_PMASK_MASK;
 144
 145        /*
 146         * For VFs, we'll assign them access to the ports based purely on the
 147         * PF.  We assign active ports in order, wrapping around if there are
 148         * fewer active ports than PFs: e.g. active port[pf % nports].
 149         * Unfortunately the adapter's port_info structs haven't been
 150         * initialized yet so we have to compute this.
 151         */
 152        if (adapter->params.nports == 0)
 153                return 0;
 154
 155        portn = pf % adapter->params.nports;
 156        portvec = adapter->params.portvec;
 157        for (;;) {
 158                /*
 159                 * Isolate the lowest set bit in the port vector.  If we're at
 160                 * the port number that we want, return that as the pmask.
 161                 * otherwise mask that bit out of the port vector and
 162                 * decrement our port number ...
 163                 */
 164                unsigned int pmask = portvec ^ (portvec & (portvec-1));
 165                if (portn == 0)
 166                        return pmask;
 167                portn--;
 168                portvec &= ~pmask;
 169        }
 170        /*NOTREACHED*/
 171}
 172
 173enum {
 174        MAX_TXQ_ENTRIES      = 16384,
 175        MAX_CTRL_TXQ_ENTRIES = 1024,
 176        MAX_RSPQ_ENTRIES     = 16384,
 177        MAX_RX_BUFFERS       = 16384,
 178        MIN_TXQ_ENTRIES      = 32,
 179        MIN_CTRL_TXQ_ENTRIES = 32,
 180        MIN_RSPQ_ENTRIES     = 128,
 181        MIN_FL_ENTRIES       = 16
 182};
 183
 184/* Host shadow copy of ingress filter entry.  This is in host native format
 185 * and doesn't match the ordering or bit order, etc. of the hardware of the
 186 * firmware command.  The use of bit-field structure elements is purely to
 187 * remind ourselves of the field size limitations and save memory in the case
 188 * where the filter table is large.
 189 */
 190struct filter_entry {
 191        /* Administrative fields for filter.
 192         */
 193        u32 valid:1;            /* filter allocated and valid */
 194        u32 locked:1;           /* filter is administratively locked */
 195
 196        u32 pending:1;          /* filter action is pending firmware reply */
 197        u32 smtidx:8;           /* Source MAC Table index for smac */
 198        struct l2t_entry *l2t;  /* Layer Two Table entry for dmac */
 199
 200        /* The filter itself.  Most of this is a straight copy of information
 201         * provided by the extended ioctl().  Some fields are translated to
 202         * internal forms -- for instance the Ingress Queue ID passed in from
 203         * the ioctl() is translated into the Absolute Ingress Queue ID.
 204         */
 205        struct ch_filter_specification fs;
 206};
 207
 208#define DFLT_MSG_ENABLE (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK | \
 209                         NETIF_MSG_TIMER | NETIF_MSG_IFDOWN | NETIF_MSG_IFUP |\
 210                         NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR)
 211
 212#define CH_DEVICE(devid, data) { PCI_VDEVICE(CHELSIO, devid), (data) }
 213
 214static DEFINE_PCI_DEVICE_TABLE(cxgb4_pci_tbl) = {
 215        CH_DEVICE(0xa000, 0),  /* PE10K */
 216        CH_DEVICE(0x4001, -1),
 217        CH_DEVICE(0x4002, -1),
 218        CH_DEVICE(0x4003, -1),
 219        CH_DEVICE(0x4004, -1),
 220        CH_DEVICE(0x4005, -1),
 221        CH_DEVICE(0x4006, -1),
 222        CH_DEVICE(0x4007, -1),
 223        CH_DEVICE(0x4008, -1),
 224        CH_DEVICE(0x4009, -1),
 225        CH_DEVICE(0x400a, -1),
 226        CH_DEVICE(0x4401, 4),
 227        CH_DEVICE(0x4402, 4),
 228        CH_DEVICE(0x4403, 4),
 229        CH_DEVICE(0x4404, 4),
 230        CH_DEVICE(0x4405, 4),
 231        CH_DEVICE(0x4406, 4),
 232        CH_DEVICE(0x4407, 4),
 233        CH_DEVICE(0x4408, 4),
 234        CH_DEVICE(0x4409, 4),
 235        CH_DEVICE(0x440a, 4),
 236        CH_DEVICE(0x440d, 4),
 237        CH_DEVICE(0x440e, 4),
 238        CH_DEVICE(0x5001, 4),
 239        CH_DEVICE(0x5002, 4),
 240        CH_DEVICE(0x5003, 4),
 241        CH_DEVICE(0x5004, 4),
 242        CH_DEVICE(0x5005, 4),
 243        CH_DEVICE(0x5006, 4),
 244        CH_DEVICE(0x5007, 4),
 245        CH_DEVICE(0x5008, 4),
 246        CH_DEVICE(0x5009, 4),
 247        CH_DEVICE(0x500A, 4),
 248        CH_DEVICE(0x500B, 4),
 249        CH_DEVICE(0x500C, 4),
 250        CH_DEVICE(0x500D, 4),
 251        CH_DEVICE(0x500E, 4),
 252        CH_DEVICE(0x500F, 4),
 253        CH_DEVICE(0x5010, 4),
 254        CH_DEVICE(0x5011, 4),
 255        CH_DEVICE(0x5012, 4),
 256        CH_DEVICE(0x5013, 4),
 257        CH_DEVICE(0x5401, 4),
 258        CH_DEVICE(0x5402, 4),
 259        CH_DEVICE(0x5403, 4),
 260        CH_DEVICE(0x5404, 4),
 261        CH_DEVICE(0x5405, 4),
 262        CH_DEVICE(0x5406, 4),
 263        CH_DEVICE(0x5407, 4),
 264        CH_DEVICE(0x5408, 4),
 265        CH_DEVICE(0x5409, 4),
 266        CH_DEVICE(0x540A, 4),
 267        CH_DEVICE(0x540B, 4),
 268        CH_DEVICE(0x540C, 4),
 269        CH_DEVICE(0x540D, 4),
 270        CH_DEVICE(0x540E, 4),
 271        CH_DEVICE(0x540F, 4),
 272        CH_DEVICE(0x5410, 4),
 273        CH_DEVICE(0x5411, 4),
 274        CH_DEVICE(0x5412, 4),
 275        CH_DEVICE(0x5413, 4),
 276        { 0, }
 277};
 278
 279#define FW_FNAME "cxgb4/t4fw.bin"
 280#define FW5_FNAME "cxgb4/t5fw.bin"
 281#define FW_CFNAME "cxgb4/t4-config.txt"
 282#define FW5_CFNAME "cxgb4/t5-config.txt"
 283
 284MODULE_DESCRIPTION(DRV_DESC);
 285MODULE_AUTHOR("Chelsio Communications");
 286MODULE_LICENSE("Dual BSD/GPL");
 287MODULE_VERSION(DRV_VERSION);
 288MODULE_DEVICE_TABLE(pci, cxgb4_pci_tbl);
 289MODULE_FIRMWARE(FW_FNAME);
 290MODULE_FIRMWARE(FW5_FNAME);
 291
 292/*
 293 * Normally we're willing to become the firmware's Master PF but will be happy
 294 * if another PF has already become the Master and initialized the adapter.
 295 * Setting "force_init" will cause this driver to forcibly establish itself as
 296 * the Master PF and initialize the adapter.
 297 */
 298static uint force_init;
 299
 300module_param(force_init, uint, 0644);
 301MODULE_PARM_DESC(force_init, "Forcibly become Master PF and initialize adapter");
 302
 303/*
 304 * Normally if the firmware we connect to has Configuration File support, we
 305 * use that and only fall back to the old Driver-based initialization if the
 306 * Configuration File fails for some reason.  If force_old_init is set, then
 307 * we'll always use the old Driver-based initialization sequence.
 308 */
 309static uint force_old_init;
 310
 311module_param(force_old_init, uint, 0644);
 312MODULE_PARM_DESC(force_old_init, "Force old initialization sequence");
 313
 314static int dflt_msg_enable = DFLT_MSG_ENABLE;
 315
 316module_param(dflt_msg_enable, int, 0644);
 317MODULE_PARM_DESC(dflt_msg_enable, "Chelsio T4 default message enable bitmap");
 318
 319/*
 320 * The driver uses the best interrupt scheme available on a platform in the
 321 * order MSI-X, MSI, legacy INTx interrupts.  This parameter determines which
 322 * of these schemes the driver may consider as follows:
 323 *
 324 * msi = 2: choose from among all three options
 325 * msi = 1: only consider MSI and INTx interrupts
 326 * msi = 0: force INTx interrupts
 327 */
 328static int msi = 2;
 329
 330module_param(msi, int, 0644);
 331MODULE_PARM_DESC(msi, "whether to use INTx (0), MSI (1) or MSI-X (2)");
 332
 333/*
 334 * Queue interrupt hold-off timer values.  Queues default to the first of these
 335 * upon creation.
 336 */
 337static unsigned int intr_holdoff[SGE_NTIMERS - 1] = { 5, 10, 20, 50, 100 };
 338
 339module_param_array(intr_holdoff, uint, NULL, 0644);
 340MODULE_PARM_DESC(intr_holdoff, "values for queue interrupt hold-off timers "
 341                 "0..4 in microseconds");
 342
 343static unsigned int intr_cnt[SGE_NCOUNTERS - 1] = { 4, 8, 16 };
 344
 345module_param_array(intr_cnt, uint, NULL, 0644);
 346MODULE_PARM_DESC(intr_cnt,
 347                 "thresholds 1..3 for queue interrupt packet counters");
 348
 349/*
 350 * Normally we tell the chip to deliver Ingress Packets into our DMA buffers
 351 * offset by 2 bytes in order to have the IP headers line up on 4-byte
 352 * boundaries.  This is a requirement for many architectures which will throw
 353 * a machine check fault if an attempt is made to access one of the 4-byte IP
 354 * header fields on a non-4-byte boundary.  And it's a major performance issue
 355 * even on some architectures which allow it like some implementations of the
 356 * x86 ISA.  However, some architectures don't mind this and for some very
 357 * edge-case performance sensitive applications (like forwarding large volumes
 358 * of small packets), setting this DMA offset to 0 will decrease the number of
 359 * PCI-E Bus transfers enough to measurably affect performance.
 360 */
 361static int rx_dma_offset = 2;
 362
 363static bool vf_acls;
 364
 365#ifdef CONFIG_PCI_IOV
 366module_param(vf_acls, bool, 0644);
 367MODULE_PARM_DESC(vf_acls, "if set enable virtualization L2 ACL enforcement");
 368
 369/* Configure the number of PCI-E Virtual Function which are to be instantiated
 370 * on SR-IOV Capable Physical Functions.
 371 */
 372static unsigned int num_vf[NUM_OF_PF_WITH_SRIOV];
 373
 374module_param_array(num_vf, uint, NULL, 0644);
 375MODULE_PARM_DESC(num_vf, "number of VFs for each of PFs 0-3");
 376#endif
 377
 378/*
 379 * The filter TCAM has a fixed portion and a variable portion.  The fixed
 380 * portion can match on source/destination IP IPv4/IPv6 addresses and TCP/UDP
 381 * ports.  The variable portion is 36 bits which can include things like Exact
 382 * Match MAC Index (9 bits), Ether Type (16 bits), IP Protocol (8 bits),
 383 * [Inner] VLAN Tag (17 bits), etc. which, if all were somehow selected, would
 384 * far exceed the 36-bit budget for this "compressed" header portion of the
 385 * filter.  Thus, we have a scarce resource which must be carefully managed.
 386 *
 387 * By default we set this up to mostly match the set of filter matching
 388 * capabilities of T3 but with accommodations for some of T4's more
 389 * interesting features:
 390 *
 391 *   { IP Fragment (1), MPS Match Type (3), IP Protocol (8),
 392 *     [Inner] VLAN (17), Port (3), FCoE (1) }
 393 */
 394enum {
 395        TP_VLAN_PRI_MAP_DEFAULT = HW_TPL_FR_MT_PR_IV_P_FC,
 396        TP_VLAN_PRI_MAP_FIRST = FCOE_SHIFT,
 397        TP_VLAN_PRI_MAP_LAST = FRAGMENTATION_SHIFT,
 398};
 399
 400static unsigned int tp_vlan_pri_map = TP_VLAN_PRI_MAP_DEFAULT;
 401
 402module_param(tp_vlan_pri_map, uint, 0644);
 403MODULE_PARM_DESC(tp_vlan_pri_map, "global compressed filter configuration");
 404
 405static struct dentry *cxgb4_debugfs_root;
 406
 407static LIST_HEAD(adapter_list);
 408static DEFINE_MUTEX(uld_mutex);
 409/* Adapter list to be accessed from atomic context */
 410static LIST_HEAD(adap_rcu_list);
 411static DEFINE_SPINLOCK(adap_rcu_lock);
 412static struct cxgb4_uld_info ulds[CXGB4_ULD_MAX];
 413static const char *uld_str[] = { "RDMA", "iSCSI" };
 414
 415static void link_report(struct net_device *dev)
 416{
 417        if (!netif_carrier_ok(dev))
 418                netdev_info(dev, "link down\n");
 419        else {
 420                static const char *fc[] = { "no", "Rx", "Tx", "Tx/Rx" };
 421
 422                const char *s = "10Mbps";
 423                const struct port_info *p = netdev_priv(dev);
 424
 425                switch (p->link_cfg.speed) {
 426                case SPEED_10000:
 427                        s = "10Gbps";
 428                        break;
 429                case SPEED_1000:
 430                        s = "1000Mbps";
 431                        break;
 432                case SPEED_100:
 433                        s = "100Mbps";
 434                        break;
 435                }
 436
 437                netdev_info(dev, "link up, %s, full-duplex, %s PAUSE\n", s,
 438                            fc[p->link_cfg.fc]);
 439        }
 440}
 441
 442void t4_os_link_changed(struct adapter *adapter, int port_id, int link_stat)
 443{
 444        struct net_device *dev = adapter->port[port_id];
 445
 446        /* Skip changes from disabled ports. */
 447        if (netif_running(dev) && link_stat != netif_carrier_ok(dev)) {
 448                if (link_stat)
 449                        netif_carrier_on(dev);
 450                else
 451                        netif_carrier_off(dev);
 452
 453                link_report(dev);
 454        }
 455}
 456
 457void t4_os_portmod_changed(const struct adapter *adap, int port_id)
 458{
 459        static const char *mod_str[] = {
 460                NULL, "LR", "SR", "ER", "passive DA", "active DA", "LRM"
 461        };
 462
 463        const struct net_device *dev = adap->port[port_id];
 464        const struct port_info *pi = netdev_priv(dev);
 465
 466        if (pi->mod_type == FW_PORT_MOD_TYPE_NONE)
 467                netdev_info(dev, "port module unplugged\n");
 468        else if (pi->mod_type < ARRAY_SIZE(mod_str))
 469                netdev_info(dev, "%s module inserted\n", mod_str[pi->mod_type]);
 470}
 471
 472/*
 473 * Configure the exact and hash address filters to handle a port's multicast
 474 * and secondary unicast MAC addresses.
 475 */
 476static int set_addr_filters(const struct net_device *dev, bool sleep)
 477{
 478        u64 mhash = 0;
 479        u64 uhash = 0;
 480        bool free = true;
 481        u16 filt_idx[7];
 482        const u8 *addr[7];
 483        int ret, naddr = 0;
 484        const struct netdev_hw_addr *ha;
 485        int uc_cnt = netdev_uc_count(dev);
 486        int mc_cnt = netdev_mc_count(dev);
 487        const struct port_info *pi = netdev_priv(dev);
 488        unsigned int mb = pi->adapter->fn;
 489
 490        /* first do the secondary unicast addresses */
 491        netdev_for_each_uc_addr(ha, dev) {
 492                addr[naddr++] = ha->addr;
 493                if (--uc_cnt == 0 || naddr >= ARRAY_SIZE(addr)) {
 494                        ret = t4_alloc_mac_filt(pi->adapter, mb, pi->viid, free,
 495                                        naddr, addr, filt_idx, &uhash, sleep);
 496                        if (ret < 0)
 497                                return ret;
 498
 499                        free = false;
 500                        naddr = 0;
 501                }
 502        }
 503
 504        /* next set up the multicast addresses */
 505        netdev_for_each_mc_addr(ha, dev) {
 506                addr[naddr++] = ha->addr;
 507                if (--mc_cnt == 0 || naddr >= ARRAY_SIZE(addr)) {
 508                        ret = t4_alloc_mac_filt(pi->adapter, mb, pi->viid, free,
 509                                        naddr, addr, filt_idx, &mhash, sleep);
 510                        if (ret < 0)
 511                                return ret;
 512
 513                        free = false;
 514                        naddr = 0;
 515                }
 516        }
 517
 518        return t4_set_addr_hash(pi->adapter, mb, pi->viid, uhash != 0,
 519                                uhash | mhash, sleep);
 520}
 521
 522int dbfifo_int_thresh = 10; /* 10 == 640 entry threshold */
 523module_param(dbfifo_int_thresh, int, 0644);
 524MODULE_PARM_DESC(dbfifo_int_thresh, "doorbell fifo interrupt threshold");
 525
 526/*
 527 * usecs to sleep while draining the dbfifo
 528 */
 529static int dbfifo_drain_delay = 1000;
 530module_param(dbfifo_drain_delay, int, 0644);
 531MODULE_PARM_DESC(dbfifo_drain_delay,
 532                 "usecs to sleep while draining the dbfifo");
 533
 534/*
 535 * Set Rx properties of a port, such as promiscruity, address filters, and MTU.
 536 * If @mtu is -1 it is left unchanged.
 537 */
 538static int set_rxmode(struct net_device *dev, int mtu, bool sleep_ok)
 539{
 540        int ret;
 541        struct port_info *pi = netdev_priv(dev);
 542
 543        ret = set_addr_filters(dev, sleep_ok);
 544        if (ret == 0)
 545                ret = t4_set_rxmode(pi->adapter, pi->adapter->fn, pi->viid, mtu,
 546                                    (dev->flags & IFF_PROMISC) ? 1 : 0,
 547                                    (dev->flags & IFF_ALLMULTI) ? 1 : 0, 1, -1,
 548                                    sleep_ok);
 549        return ret;
 550}
 551
 552static struct workqueue_struct *workq;
 553
 554/**
 555 *      link_start - enable a port
 556 *      @dev: the port to enable
 557 *
 558 *      Performs the MAC and PHY actions needed to enable a port.
 559 */
 560static int link_start(struct net_device *dev)
 561{
 562        int ret;
 563        struct port_info *pi = netdev_priv(dev);
 564        unsigned int mb = pi->adapter->fn;
 565
 566        /*
 567         * We do not set address filters and promiscuity here, the stack does
 568         * that step explicitly.
 569         */
 570        ret = t4_set_rxmode(pi->adapter, mb, pi->viid, dev->mtu, -1, -1, -1,
 571                            !!(dev->features & NETIF_F_HW_VLAN_CTAG_RX), true);
 572        if (ret == 0) {
 573                ret = t4_change_mac(pi->adapter, mb, pi->viid,
 574                                    pi->xact_addr_filt, dev->dev_addr, true,
 575                                    true);
 576                if (ret >= 0) {
 577                        pi->xact_addr_filt = ret;
 578                        ret = 0;
 579                }
 580        }
 581        if (ret == 0)
 582                ret = t4_link_start(pi->adapter, mb, pi->tx_chan,
 583                                    &pi->link_cfg);
 584        if (ret == 0)
 585                ret = t4_enable_vi(pi->adapter, mb, pi->viid, true, true);
 586        return ret;
 587}
 588
 589/* Clear a filter and release any of its resources that we own.  This also
 590 * clears the filter's "pending" status.
 591 */
 592static void clear_filter(struct adapter *adap, struct filter_entry *f)
 593{
 594        /* If the new or old filter have loopback rewriteing rules then we'll
 595         * need to free any existing Layer Two Table (L2T) entries of the old
 596         * filter rule.  The firmware will handle freeing up any Source MAC
 597         * Table (SMT) entries used for rewriting Source MAC Addresses in
 598         * loopback rules.
 599         */
 600        if (f->l2t)
 601                cxgb4_l2t_release(f->l2t);
 602
 603        /* The zeroing of the filter rule below clears the filter valid,
 604         * pending, locked flags, l2t pointer, etc. so it's all we need for
 605         * this operation.
 606         */
 607        memset(f, 0, sizeof(*f));
 608}
 609
 610/* Handle a filter write/deletion reply.
 611 */
 612static void filter_rpl(struct adapter *adap, const struct cpl_set_tcb_rpl *rpl)
 613{
 614        unsigned int idx = GET_TID(rpl);
 615        unsigned int nidx = idx - adap->tids.ftid_base;
 616        unsigned int ret;
 617        struct filter_entry *f;
 618
 619        if (idx >= adap->tids.ftid_base && nidx <
 620           (adap->tids.nftids + adap->tids.nsftids)) {
 621                idx = nidx;
 622                ret = GET_TCB_COOKIE(rpl->cookie);
 623                f = &adap->tids.ftid_tab[idx];
 624
 625                if (ret == FW_FILTER_WR_FLT_DELETED) {
 626                        /* Clear the filter when we get confirmation from the
 627                         * hardware that the filter has been deleted.
 628                         */
 629                        clear_filter(adap, f);
 630                } else if (ret == FW_FILTER_WR_SMT_TBL_FULL) {
 631                        dev_err(adap->pdev_dev, "filter %u setup failed due to full SMT\n",
 632                                idx);
 633                        clear_filter(adap, f);
 634                } else if (ret == FW_FILTER_WR_FLT_ADDED) {
 635                        f->smtidx = (be64_to_cpu(rpl->oldval) >> 24) & 0xff;
 636                        f->pending = 0;  /* asynchronous setup completed */
 637                        f->valid = 1;
 638                } else {
 639                        /* Something went wrong.  Issue a warning about the
 640                         * problem and clear everything out.
 641                         */
 642                        dev_err(adap->pdev_dev, "filter %u setup failed with error %u\n",
 643                                idx, ret);
 644                        clear_filter(adap, f);
 645                }
 646        }
 647}
 648
 649/* Response queue handler for the FW event queue.
 650 */
 651static int fwevtq_handler(struct sge_rspq *q, const __be64 *rsp,
 652                          const struct pkt_gl *gl)
 653{
 654        u8 opcode = ((const struct rss_header *)rsp)->opcode;
 655
 656        rsp++;                                          /* skip RSS header */
 657
 658        /* FW can send EGR_UPDATEs encapsulated in a CPL_FW4_MSG.
 659         */
 660        if (unlikely(opcode == CPL_FW4_MSG &&
 661           ((const struct cpl_fw4_msg *)rsp)->type == FW_TYPE_RSSCPL)) {
 662                rsp++;
 663                opcode = ((const struct rss_header *)rsp)->opcode;
 664                rsp++;
 665                if (opcode != CPL_SGE_EGR_UPDATE) {
 666                        dev_err(q->adap->pdev_dev, "unexpected FW4/CPL %#x on FW event queue\n"
 667                                , opcode);
 668                        goto out;
 669                }
 670        }
 671
 672        if (likely(opcode == CPL_SGE_EGR_UPDATE)) {
 673                const struct cpl_sge_egr_update *p = (void *)rsp;
 674                unsigned int qid = EGR_QID(ntohl(p->opcode_qid));
 675                struct sge_txq *txq;
 676
 677                txq = q->adap->sge.egr_map[qid - q->adap->sge.egr_start];
 678                txq->restarts++;
 679                if ((u8 *)txq < (u8 *)q->adap->sge.ofldtxq) {
 680                        struct sge_eth_txq *eq;
 681
 682                        eq = container_of(txq, struct sge_eth_txq, q);
 683                        netif_tx_wake_queue(eq->txq);
 684                } else {
 685                        struct sge_ofld_txq *oq;
 686
 687                        oq = container_of(txq, struct sge_ofld_txq, q);
 688                        tasklet_schedule(&oq->qresume_tsk);
 689                }
 690        } else if (opcode == CPL_FW6_MSG || opcode == CPL_FW4_MSG) {
 691                const struct cpl_fw6_msg *p = (void *)rsp;
 692
 693                if (p->type == 0)
 694                        t4_handle_fw_rpl(q->adap, p->data);
 695        } else if (opcode == CPL_L2T_WRITE_RPL) {
 696                const struct cpl_l2t_write_rpl *p = (void *)rsp;
 697
 698                do_l2t_write_rpl(q->adap, p);
 699        } else if (opcode == CPL_SET_TCB_RPL) {
 700                const struct cpl_set_tcb_rpl *p = (void *)rsp;
 701
 702                filter_rpl(q->adap, p);
 703        } else
 704                dev_err(q->adap->pdev_dev,
 705                        "unexpected CPL %#x on FW event queue\n", opcode);
 706out:
 707        return 0;
 708}
 709
 710/**
 711 *      uldrx_handler - response queue handler for ULD queues
 712 *      @q: the response queue that received the packet
 713 *      @rsp: the response queue descriptor holding the offload message
 714 *      @gl: the gather list of packet fragments
 715 *
 716 *      Deliver an ingress offload packet to a ULD.  All processing is done by
 717 *      the ULD, we just maintain statistics.
 718 */
 719static int uldrx_handler(struct sge_rspq *q, const __be64 *rsp,
 720                         const struct pkt_gl *gl)
 721{
 722        struct sge_ofld_rxq *rxq = container_of(q, struct sge_ofld_rxq, rspq);
 723
 724        /* FW can send CPLs encapsulated in a CPL_FW4_MSG.
 725         */
 726        if (((const struct rss_header *)rsp)->opcode == CPL_FW4_MSG &&
 727            ((const struct cpl_fw4_msg *)(rsp + 1))->type == FW_TYPE_RSSCPL)
 728                rsp += 2;
 729
 730        if (ulds[q->uld].rx_handler(q->adap->uld_handle[q->uld], rsp, gl)) {
 731                rxq->stats.nomem++;
 732                return -1;
 733        }
 734        if (gl == NULL)
 735                rxq->stats.imm++;
 736        else if (gl == CXGB4_MSG_AN)
 737                rxq->stats.an++;
 738        else
 739                rxq->stats.pkts++;
 740        return 0;
 741}
 742
 743static void disable_msi(struct adapter *adapter)
 744{
 745        if (adapter->flags & USING_MSIX) {
 746                pci_disable_msix(adapter->pdev);
 747                adapter->flags &= ~USING_MSIX;
 748        } else if (adapter->flags & USING_MSI) {
 749                pci_disable_msi(adapter->pdev);
 750                adapter->flags &= ~USING_MSI;
 751        }
 752}
 753
 754/*
 755 * Interrupt handler for non-data events used with MSI-X.
 756 */
 757static irqreturn_t t4_nondata_intr(int irq, void *cookie)
 758{
 759        struct adapter *adap = cookie;
 760
 761        u32 v = t4_read_reg(adap, MYPF_REG(PL_PF_INT_CAUSE));
 762        if (v & PFSW) {
 763                adap->swintr = 1;
 764                t4_write_reg(adap, MYPF_REG(PL_PF_INT_CAUSE), v);
 765        }
 766        t4_slow_intr_handler(adap);
 767        return IRQ_HANDLED;
 768}
 769
 770/*
 771 * Name the MSI-X interrupts.
 772 */
 773static void name_msix_vecs(struct adapter *adap)
 774{
 775        int i, j, msi_idx = 2, n = sizeof(adap->msix_info[0].desc);
 776
 777        /* non-data interrupts */
 778        snprintf(adap->msix_info[0].desc, n, "%s", adap->port[0]->name);
 779
 780        /* FW events */
 781        snprintf(adap->msix_info[1].desc, n, "%s-FWeventq",
 782                 adap->port[0]->name);
 783
 784        /* Ethernet queues */
 785        for_each_port(adap, j) {
 786                struct net_device *d = adap->port[j];
 787                const struct port_info *pi = netdev_priv(d);
 788
 789                for (i = 0; i < pi->nqsets; i++, msi_idx++)
 790                        snprintf(adap->msix_info[msi_idx].desc, n, "%s-Rx%d",
 791                                 d->name, i);
 792        }
 793
 794        /* offload queues */
 795        for_each_ofldrxq(&adap->sge, i)
 796                snprintf(adap->msix_info[msi_idx++].desc, n, "%s-ofld%d",
 797                         adap->port[0]->name, i);
 798
 799        for_each_rdmarxq(&adap->sge, i)
 800                snprintf(adap->msix_info[msi_idx++].desc, n, "%s-rdma%d",
 801                         adap->port[0]->name, i);
 802}
 803
 804static int request_msix_queue_irqs(struct adapter *adap)
 805{
 806        struct sge *s = &adap->sge;
 807        int err, ethqidx, ofldqidx = 0, rdmaqidx = 0, msi_index = 2;
 808
 809        err = request_irq(adap->msix_info[1].vec, t4_sge_intr_msix, 0,
 810                          adap->msix_info[1].desc, &s->fw_evtq);
 811        if (err)
 812                return err;
 813
 814        for_each_ethrxq(s, ethqidx) {
 815                err = request_irq(adap->msix_info[msi_index].vec,
 816                                  t4_sge_intr_msix, 0,
 817                                  adap->msix_info[msi_index].desc,
 818                                  &s->ethrxq[ethqidx].rspq);
 819                if (err)
 820                        goto unwind;
 821                msi_index++;
 822        }
 823        for_each_ofldrxq(s, ofldqidx) {
 824                err = request_irq(adap->msix_info[msi_index].vec,
 825                                  t4_sge_intr_msix, 0,
 826                                  adap->msix_info[msi_index].desc,
 827                                  &s->ofldrxq[ofldqidx].rspq);
 828                if (err)
 829                        goto unwind;
 830                msi_index++;
 831        }
 832        for_each_rdmarxq(s, rdmaqidx) {
 833                err = request_irq(adap->msix_info[msi_index].vec,
 834                                  t4_sge_intr_msix, 0,
 835                                  adap->msix_info[msi_index].desc,
 836                                  &s->rdmarxq[rdmaqidx].rspq);
 837                if (err)
 838                        goto unwind;
 839                msi_index++;
 840        }
 841        return 0;
 842
 843unwind:
 844        while (--rdmaqidx >= 0)
 845                free_irq(adap->msix_info[--msi_index].vec,
 846                         &s->rdmarxq[rdmaqidx].rspq);
 847        while (--ofldqidx >= 0)
 848                free_irq(adap->msix_info[--msi_index].vec,
 849                         &s->ofldrxq[ofldqidx].rspq);
 850        while (--ethqidx >= 0)
 851                free_irq(adap->msix_info[--msi_index].vec,
 852                         &s->ethrxq[ethqidx].rspq);
 853        free_irq(adap->msix_info[1].vec, &s->fw_evtq);
 854        return err;
 855}
 856
 857static void free_msix_queue_irqs(struct adapter *adap)
 858{
 859        int i, msi_index = 2;
 860        struct sge *s = &adap->sge;
 861
 862        free_irq(adap->msix_info[1].vec, &s->fw_evtq);
 863        for_each_ethrxq(s, i)
 864                free_irq(adap->msix_info[msi_index++].vec, &s->ethrxq[i].rspq);
 865        for_each_ofldrxq(s, i)
 866                free_irq(adap->msix_info[msi_index++].vec, &s->ofldrxq[i].rspq);
 867        for_each_rdmarxq(s, i)
 868                free_irq(adap->msix_info[msi_index++].vec, &s->rdmarxq[i].rspq);
 869}
 870
 871/**
 872 *      write_rss - write the RSS table for a given port
 873 *      @pi: the port
 874 *      @queues: array of queue indices for RSS
 875 *
 876 *      Sets up the portion of the HW RSS table for the port's VI to distribute
 877 *      packets to the Rx queues in @queues.
 878 */
 879static int write_rss(const struct port_info *pi, const u16 *queues)
 880{
 881        u16 *rss;
 882        int i, err;
 883        const struct sge_eth_rxq *q = &pi->adapter->sge.ethrxq[pi->first_qset];
 884
 885        rss = kmalloc(pi->rss_size * sizeof(u16), GFP_KERNEL);
 886        if (!rss)
 887                return -ENOMEM;
 888
 889        /* map the queue indices to queue ids */
 890        for (i = 0; i < pi->rss_size; i++, queues++)
 891                rss[i] = q[*queues].rspq.abs_id;
 892
 893        err = t4_config_rss_range(pi->adapter, pi->adapter->fn, pi->viid, 0,
 894                                  pi->rss_size, rss, pi->rss_size);
 895        kfree(rss);
 896        return err;
 897}
 898
 899/**
 900 *      setup_rss - configure RSS
 901 *      @adap: the adapter
 902 *
 903 *      Sets up RSS for each port.
 904 */
 905static int setup_rss(struct adapter *adap)
 906{
 907        int i, err;
 908
 909        for_each_port(adap, i) {
 910                const struct port_info *pi = adap2pinfo(adap, i);
 911
 912                err = write_rss(pi, pi->rss);
 913                if (err)
 914                        return err;
 915        }
 916        return 0;
 917}
 918
 919/*
 920 * Return the channel of the ingress queue with the given qid.
 921 */
 922static unsigned int rxq_to_chan(const struct sge *p, unsigned int qid)
 923{
 924        qid -= p->ingr_start;
 925        return netdev2pinfo(p->ingr_map[qid]->netdev)->tx_chan;
 926}
 927
 928/*
 929 * Wait until all NAPI handlers are descheduled.
 930 */
 931static void quiesce_rx(struct adapter *adap)
 932{
 933        int i;
 934
 935        for (i = 0; i < ARRAY_SIZE(adap->sge.ingr_map); i++) {
 936                struct sge_rspq *q = adap->sge.ingr_map[i];
 937
 938                if (q && q->handler)
 939                        napi_disable(&q->napi);
 940        }
 941}
 942
 943/*
 944 * Enable NAPI scheduling and interrupt generation for all Rx queues.
 945 */
 946static void enable_rx(struct adapter *adap)
 947{
 948        int i;
 949
 950        for (i = 0; i < ARRAY_SIZE(adap->sge.ingr_map); i++) {
 951                struct sge_rspq *q = adap->sge.ingr_map[i];
 952
 953                if (!q)
 954                        continue;
 955                if (q->handler)
 956                        napi_enable(&q->napi);
 957                /* 0-increment GTS to start the timer and enable interrupts */
 958                t4_write_reg(adap, MYPF_REG(SGE_PF_GTS),
 959                             SEINTARM(q->intr_params) |
 960                             INGRESSQID(q->cntxt_id));
 961        }
 962}
 963
 964/**
 965 *      setup_sge_queues - configure SGE Tx/Rx/response queues
 966 *      @adap: the adapter
 967 *
 968 *      Determines how many sets of SGE queues to use and initializes them.
 969 *      We support multiple queue sets per port if we have MSI-X, otherwise
 970 *      just one queue set per port.
 971 */
 972static int setup_sge_queues(struct adapter *adap)
 973{
 974        int err, msi_idx, i, j;
 975        struct sge *s = &adap->sge;
 976
 977        bitmap_zero(s->starving_fl, MAX_EGRQ);
 978        bitmap_zero(s->txq_maperr, MAX_EGRQ);
 979
 980        if (adap->flags & USING_MSIX)
 981                msi_idx = 1;         /* vector 0 is for non-queue interrupts */
 982        else {
 983                err = t4_sge_alloc_rxq(adap, &s->intrq, false, adap->port[0], 0,
 984                                       NULL, NULL);
 985                if (err)
 986                        return err;
 987                msi_idx = -((int)s->intrq.abs_id + 1);
 988        }
 989
 990        err = t4_sge_alloc_rxq(adap, &s->fw_evtq, true, adap->port[0],
 991                               msi_idx, NULL, fwevtq_handler);
 992        if (err) {
 993freeout:        t4_free_sge_resources(adap);
 994                return err;
 995        }
 996
 997        for_each_port(adap, i) {
 998                struct net_device *dev = adap->port[i];
 999                struct port_info *pi = netdev_priv(dev);
1000                struct sge_eth_rxq *q = &s->ethrxq[pi->first_qset];
1001                struct sge_eth_txq *t = &s->ethtxq[pi->first_qset];
1002
1003                for (j = 0; j < pi->nqsets; j++, q++) {
1004                        if (msi_idx > 0)
1005                                msi_idx++;
1006                        err = t4_sge_alloc_rxq(adap, &q->rspq, false, dev,
1007                                               msi_idx, &q->fl,
1008                                               t4_ethrx_handler);
1009                        if (err)
1010                                goto freeout;
1011                        q->rspq.idx = j;
1012                        memset(&q->stats, 0, sizeof(q->stats));
1013                }
1014                for (j = 0; j < pi->nqsets; j++, t++) {
1015                        err = t4_sge_alloc_eth_txq(adap, t, dev,
1016                                        netdev_get_tx_queue(dev, j),
1017                                        s->fw_evtq.cntxt_id);
1018                        if (err)
1019                                goto freeout;
1020                }
1021        }
1022
1023        j = s->ofldqsets / adap->params.nports; /* ofld queues per channel */
1024        for_each_ofldrxq(s, i) {
1025                struct sge_ofld_rxq *q = &s->ofldrxq[i];
1026                struct net_device *dev = adap->port[i / j];
1027
1028                if (msi_idx > 0)
1029                        msi_idx++;
1030                err = t4_sge_alloc_rxq(adap, &q->rspq, false, dev, msi_idx,
1031                                       &q->fl, uldrx_handler);
1032                if (err)
1033                        goto freeout;
1034                memset(&q->stats, 0, sizeof(q->stats));
1035                s->ofld_rxq[i] = q->rspq.abs_id;
1036                err = t4_sge_alloc_ofld_txq(adap, &s->ofldtxq[i], dev,
1037                                            s->fw_evtq.cntxt_id);
1038                if (err)
1039                        goto freeout;
1040        }
1041
1042        for_each_rdmarxq(s, i) {
1043                struct sge_ofld_rxq *q = &s->rdmarxq[i];
1044
1045                if (msi_idx > 0)
1046                        msi_idx++;
1047                err = t4_sge_alloc_rxq(adap, &q->rspq, false, adap->port[i],
1048                                       msi_idx, &q->fl, uldrx_handler);
1049                if (err)
1050                        goto freeout;
1051                memset(&q->stats, 0, sizeof(q->stats));
1052                s->rdma_rxq[i] = q->rspq.abs_id;
1053        }
1054
1055        for_each_port(adap, i) {
1056                /*
1057                 * Note that ->rdmarxq[i].rspq.cntxt_id below is 0 if we don't
1058                 * have RDMA queues, and that's the right value.
1059                 */
1060                err = t4_sge_alloc_ctrl_txq(adap, &s->ctrlq[i], adap->port[i],
1061                                            s->fw_evtq.cntxt_id,
1062                                            s->rdmarxq[i].rspq.cntxt_id);
1063                if (err)
1064                        goto freeout;
1065        }
1066
1067        t4_write_reg(adap, MPS_TRC_RSS_CONTROL,
1068                     RSSCONTROL(netdev2pinfo(adap->port[0])->tx_chan) |
1069                     QUEUENUMBER(s->ethrxq[0].rspq.abs_id));
1070        return 0;
1071}
1072
1073/*
1074 * Returns 0 if new FW was successfully loaded, a positive errno if a load was
1075 * started but failed, and a negative errno if flash load couldn't start.
1076 */
1077static int upgrade_fw(struct adapter *adap)
1078{
1079        int ret;
1080        u32 vers, exp_major;
1081        const struct fw_hdr *hdr;
1082        const struct firmware *fw;
1083        struct device *dev = adap->pdev_dev;
1084        char *fw_file_name;
1085
1086        switch (CHELSIO_CHIP_VERSION(adap->chip)) {
1087        case CHELSIO_T4:
1088                fw_file_name = FW_FNAME;
1089                exp_major = FW_VERSION_MAJOR;
1090                break;
1091        case CHELSIO_T5:
1092                fw_file_name = FW5_FNAME;
1093                exp_major = FW_VERSION_MAJOR_T5;
1094                break;
1095        default:
1096                dev_err(dev, "Unsupported chip type, %x\n", adap->chip);
1097                return -EINVAL;
1098        }
1099
1100        ret = request_firmware(&fw, fw_file_name, dev);
1101        if (ret < 0) {
1102                dev_err(dev, "unable to load firmware image %s, error %d\n",
1103                        fw_file_name, ret);
1104                return ret;
1105        }
1106
1107        hdr = (const struct fw_hdr *)fw->data;
1108        vers = ntohl(hdr->fw_ver);
1109        if (FW_HDR_FW_VER_MAJOR_GET(vers) != exp_major) {
1110                ret = -EINVAL;              /* wrong major version, won't do */
1111                goto out;
1112        }
1113
1114        /*
1115         * If the flash FW is unusable or we found something newer, load it.
1116         */
1117        if (FW_HDR_FW_VER_MAJOR_GET(adap->params.fw_vers) != exp_major ||
1118            vers > adap->params.fw_vers) {
1119                dev_info(dev, "upgrading firmware ...\n");
1120                ret = t4_fw_upgrade(adap, adap->mbox, fw->data, fw->size,
1121                                    /*force=*/false);
1122                if (!ret)
1123                        dev_info(dev,
1124                                 "firmware upgraded to version %pI4 from %s\n",
1125                                 &hdr->fw_ver, fw_file_name);
1126                else
1127                        dev_err(dev, "firmware upgrade failed! err=%d\n", -ret);
1128        } else {
1129                /*
1130                 * Tell our caller that we didn't upgrade the firmware.
1131                 */
1132                ret = -EINVAL;
1133        }
1134
1135out:    release_firmware(fw);
1136        return ret;
1137}
1138
1139/*
1140 * Allocate a chunk of memory using kmalloc or, if that fails, vmalloc.
1141 * The allocated memory is cleared.
1142 */
1143void *t4_alloc_mem(size_t size)
1144{
1145        void *p = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
1146
1147        if (!p)
1148                p = vzalloc(size);
1149        return p;
1150}
1151
1152/*
1153 * Free memory allocated through alloc_mem().
1154 */
1155static void t4_free_mem(void *addr)
1156{
1157        if (is_vmalloc_addr(addr))
1158                vfree(addr);
1159        else
1160                kfree(addr);
1161}
1162
1163/* Send a Work Request to write the filter at a specified index.  We construct
1164 * a Firmware Filter Work Request to have the work done and put the indicated
1165 * filter into "pending" mode which will prevent any further actions against
1166 * it till we get a reply from the firmware on the completion status of the
1167 * request.
1168 */
1169static int set_filter_wr(struct adapter *adapter, int fidx)
1170{
1171        struct filter_entry *f = &adapter->tids.ftid_tab[fidx];
1172        struct sk_buff *skb;
1173        struct fw_filter_wr *fwr;
1174        unsigned int ftid;
1175
1176        /* If the new filter requires loopback Destination MAC and/or VLAN
1177         * rewriting then we need to allocate a Layer 2 Table (L2T) entry for
1178         * the filter.
1179         */
1180        if (f->fs.newdmac || f->fs.newvlan) {
1181                /* allocate L2T entry for new filter */
1182                f->l2t = t4_l2t_alloc_switching(adapter->l2t);
1183                if (f->l2t == NULL)
1184                        return -EAGAIN;
1185                if (t4_l2t_set_switching(adapter, f->l2t, f->fs.vlan,
1186                                        f->fs.eport, f->fs.dmac)) {
1187                        cxgb4_l2t_release(f->l2t);
1188                        f->l2t = NULL;
1189                        return -ENOMEM;
1190                }
1191        }
1192
1193        ftid = adapter->tids.ftid_base + fidx;
1194
1195        skb = alloc_skb(sizeof(*fwr), GFP_KERNEL | __GFP_NOFAIL);
1196        fwr = (struct fw_filter_wr *)__skb_put(skb, sizeof(*fwr));
1197        memset(fwr, 0, sizeof(*fwr));
1198
1199        /* It would be nice to put most of the following in t4_hw.c but most
1200         * of the work is translating the cxgbtool ch_filter_specification
1201         * into the Work Request and the definition of that structure is
1202         * currently in cxgbtool.h which isn't appropriate to pull into the
1203         * common code.  We may eventually try to come up with a more neutral
1204         * filter specification structure but for now it's easiest to simply
1205         * put this fairly direct code in line ...
1206         */
1207        fwr->op_pkd = htonl(FW_WR_OP(FW_FILTER_WR));
1208        fwr->len16_pkd = htonl(FW_WR_LEN16(sizeof(*fwr)/16));
1209        fwr->tid_to_iq =
1210                htonl(V_FW_FILTER_WR_TID(ftid) |
1211                      V_FW_FILTER_WR_RQTYPE(f->fs.type) |
1212                      V_FW_FILTER_WR_NOREPLY(0) |
1213                      V_FW_FILTER_WR_IQ(f->fs.iq));
1214        fwr->del_filter_to_l2tix =
1215                htonl(V_FW_FILTER_WR_RPTTID(f->fs.rpttid) |
1216                      V_FW_FILTER_WR_DROP(f->fs.action == FILTER_DROP) |
1217                      V_FW_FILTER_WR_DIRSTEER(f->fs.dirsteer) |
1218                      V_FW_FILTER_WR_MASKHASH(f->fs.maskhash) |
1219                      V_FW_FILTER_WR_DIRSTEERHASH(f->fs.dirsteerhash) |
1220                      V_FW_FILTER_WR_LPBK(f->fs.action == FILTER_SWITCH) |
1221                      V_FW_FILTER_WR_DMAC(f->fs.newdmac) |
1222                      V_FW_FILTER_WR_SMAC(f->fs.newsmac) |
1223                      V_FW_FILTER_WR_INSVLAN(f->fs.newvlan == VLAN_INSERT ||
1224                                             f->fs.newvlan == VLAN_REWRITE) |
1225                      V_FW_FILTER_WR_RMVLAN(f->fs.newvlan == VLAN_REMOVE ||
1226                                            f->fs.newvlan == VLAN_REWRITE) |
1227                      V_FW_FILTER_WR_HITCNTS(f->fs.hitcnts) |
1228                      V_FW_FILTER_WR_TXCHAN(f->fs.eport) |
1229                      V_FW_FILTER_WR_PRIO(f->fs.prio) |
1230                      V_FW_FILTER_WR_L2TIX(f->l2t ? f->l2t->idx : 0));
1231        fwr->ethtype = htons(f->fs.val.ethtype);
1232        fwr->ethtypem = htons(f->fs.mask.ethtype);
1233        fwr->frag_to_ovlan_vldm =
1234                (V_FW_FILTER_WR_FRAG(f->fs.val.frag) |
1235                 V_FW_FILTER_WR_FRAGM(f->fs.mask.frag) |
1236                 V_FW_FILTER_WR_IVLAN_VLD(f->fs.val.ivlan_vld) |
1237                 V_FW_FILTER_WR_OVLAN_VLD(f->fs.val.ovlan_vld) |
1238                 V_FW_FILTER_WR_IVLAN_VLDM(f->fs.mask.ivlan_vld) |
1239                 V_FW_FILTER_WR_OVLAN_VLDM(f->fs.mask.ovlan_vld));
1240        fwr->smac_sel = 0;
1241        fwr->rx_chan_rx_rpl_iq =
1242                htons(V_FW_FILTER_WR_RX_CHAN(0) |
1243                      V_FW_FILTER_WR_RX_RPL_IQ(adapter->sge.fw_evtq.abs_id));
1244        fwr->maci_to_matchtypem =
1245                htonl(V_FW_FILTER_WR_MACI(f->fs.val.macidx) |
1246                      V_FW_FILTER_WR_MACIM(f->fs.mask.macidx) |
1247                      V_FW_FILTER_WR_FCOE(f->fs.val.fcoe) |
1248                      V_FW_FILTER_WR_FCOEM(f->fs.mask.fcoe) |
1249                      V_FW_FILTER_WR_PORT(f->fs.val.iport) |
1250                      V_FW_FILTER_WR_PORTM(f->fs.mask.iport) |
1251                      V_FW_FILTER_WR_MATCHTYPE(f->fs.val.matchtype) |
1252                      V_FW_FILTER_WR_MATCHTYPEM(f->fs.mask.matchtype));
1253        fwr->ptcl = f->fs.val.proto;
1254        fwr->ptclm = f->fs.mask.proto;
1255        fwr->ttyp = f->fs.val.tos;
1256        fwr->ttypm = f->fs.mask.tos;
1257        fwr->ivlan = htons(f->fs.val.ivlan);
1258        fwr->ivlanm = htons(f->fs.mask.ivlan);
1259        fwr->ovlan = htons(f->fs.val.ovlan);
1260        fwr->ovlanm = htons(f->fs.mask.ovlan);
1261        memcpy(fwr->lip, f->fs.val.lip, sizeof(fwr->lip));
1262        memcpy(fwr->lipm, f->fs.mask.lip, sizeof(fwr->lipm));
1263        memcpy(fwr->fip, f->fs.val.fip, sizeof(fwr->fip));
1264        memcpy(fwr->fipm, f->fs.mask.fip, sizeof(fwr->fipm));
1265        fwr->lp = htons(f->fs.val.lport);
1266        fwr->lpm = htons(f->fs.mask.lport);
1267        fwr->fp = htons(f->fs.val.fport);
1268        fwr->fpm = htons(f->fs.mask.fport);
1269        if (f->fs.newsmac)
1270                memcpy(fwr->sma, f->fs.smac, sizeof(fwr->sma));
1271
1272        /* Mark the filter as "pending" and ship off the Filter Work Request.
1273         * When we get the Work Request Reply we'll clear the pending status.
1274         */
1275        f->pending = 1;
1276        set_wr_txq(skb, CPL_PRIORITY_CONTROL, f->fs.val.iport & 0x3);
1277        t4_ofld_send(adapter, skb);
1278        return 0;
1279}
1280
1281/* Delete the filter at a specified index.
1282 */
1283static int del_filter_wr(struct adapter *adapter, int fidx)
1284{
1285        struct filter_entry *f = &adapter->tids.ftid_tab[fidx];
1286        struct sk_buff *skb;
1287        struct fw_filter_wr *fwr;
1288        unsigned int len, ftid;
1289
1290        len = sizeof(*fwr);
1291        ftid = adapter->tids.ftid_base + fidx;
1292
1293        skb = alloc_skb(len, GFP_KERNEL | __GFP_NOFAIL);
1294        fwr = (struct fw_filter_wr *)__skb_put(skb, len);
1295        t4_mk_filtdelwr(ftid, fwr, adapter->sge.fw_evtq.abs_id);
1296
1297        /* Mark the filter as "pending" and ship off the Filter Work Request.
1298         * When we get the Work Request Reply we'll clear the pending status.
1299         */
1300        f->pending = 1;
1301        t4_mgmt_tx(adapter, skb);
1302        return 0;
1303}
1304
1305static inline int is_offload(const struct adapter *adap)
1306{
1307        return adap->params.offload;
1308}
1309
1310/*
1311 * Implementation of ethtool operations.
1312 */
1313
1314static u32 get_msglevel(struct net_device *dev)
1315{
1316        return netdev2adap(dev)->msg_enable;
1317}
1318
1319static void set_msglevel(struct net_device *dev, u32 val)
1320{
1321        netdev2adap(dev)->msg_enable = val;
1322}
1323
1324static char stats_strings[][ETH_GSTRING_LEN] = {
1325        "TxOctetsOK         ",
1326        "TxFramesOK         ",
1327        "TxBroadcastFrames  ",
1328        "TxMulticastFrames  ",
1329        "TxUnicastFrames    ",
1330        "TxErrorFrames      ",
1331
1332        "TxFrames64         ",
1333        "TxFrames65To127    ",
1334        "TxFrames128To255   ",
1335        "TxFrames256To511   ",
1336        "TxFrames512To1023  ",
1337        "TxFrames1024To1518 ",
1338        "TxFrames1519ToMax  ",
1339
1340        "TxFramesDropped    ",
1341        "TxPauseFrames      ",
1342        "TxPPP0Frames       ",
1343        "TxPPP1Frames       ",
1344        "TxPPP2Frames       ",
1345        "TxPPP3Frames       ",
1346        "TxPPP4Frames       ",
1347        "TxPPP5Frames       ",
1348        "TxPPP6Frames       ",
1349        "TxPPP7Frames       ",
1350
1351        "RxOctetsOK         ",
1352        "RxFramesOK         ",
1353        "RxBroadcastFrames  ",
1354        "RxMulticastFrames  ",
1355        "RxUnicastFrames    ",
1356
1357        "RxFramesTooLong    ",
1358        "RxJabberErrors     ",
1359        "RxFCSErrors        ",
1360        "RxLengthErrors     ",
1361        "RxSymbolErrors     ",
1362        "RxRuntFrames       ",
1363
1364        "RxFrames64         ",
1365        "RxFrames65To127    ",
1366        "RxFrames128To255   ",
1367        "RxFrames256To511   ",
1368        "RxFrames512To1023  ",
1369        "RxFrames1024To1518 ",
1370        "RxFrames1519ToMax  ",
1371
1372        "RxPauseFrames      ",
1373        "RxPPP0Frames       ",
1374        "RxPPP1Frames       ",
1375        "RxPPP2Frames       ",
1376        "RxPPP3Frames       ",
1377        "RxPPP4Frames       ",
1378        "RxPPP5Frames       ",
1379        "RxPPP6Frames       ",
1380        "RxPPP7Frames       ",
1381
1382        "RxBG0FramesDropped ",
1383        "RxBG1FramesDropped ",
1384        "RxBG2FramesDropped ",
1385        "RxBG3FramesDropped ",
1386        "RxBG0FramesTrunc   ",
1387        "RxBG1FramesTrunc   ",
1388        "RxBG2FramesTrunc   ",
1389        "RxBG3FramesTrunc   ",
1390
1391        "TSO                ",
1392        "TxCsumOffload      ",
1393        "RxCsumGood         ",
1394        "VLANextractions    ",
1395        "VLANinsertions     ",
1396        "GROpackets         ",
1397        "GROmerged          ",
1398        "WriteCoalSuccess   ",
1399        "WriteCoalFail      ",
1400};
1401
1402static int get_sset_count(struct net_device *dev, int sset)
1403{
1404        switch (sset) {
1405        case ETH_SS_STATS:
1406                return ARRAY_SIZE(stats_strings);
1407        default:
1408                return -EOPNOTSUPP;
1409        }
1410}
1411
1412#define T4_REGMAP_SIZE (160 * 1024)
1413#define T5_REGMAP_SIZE (332 * 1024)
1414
1415static int get_regs_len(struct net_device *dev)
1416{
1417        struct adapter *adap = netdev2adap(dev);
1418        if (is_t4(adap->chip))
1419                return T4_REGMAP_SIZE;
1420        else
1421                return T5_REGMAP_SIZE;
1422}
1423
1424static int get_eeprom_len(struct net_device *dev)
1425{
1426        return EEPROMSIZE;
1427}
1428
1429static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1430{
1431        struct adapter *adapter = netdev2adap(dev);
1432
1433        strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
1434        strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1435        strlcpy(info->bus_info, pci_name(adapter->pdev),
1436                sizeof(info->bus_info));
1437
1438        if (adapter->params.fw_vers)
1439                snprintf(info->fw_version, sizeof(info->fw_version),
1440                        "%u.%u.%u.%u, TP %u.%u.%u.%u",
1441                        FW_HDR_FW_VER_MAJOR_GET(adapter->params.fw_vers),
1442                        FW_HDR_FW_VER_MINOR_GET(adapter->params.fw_vers),
1443                        FW_HDR_FW_VER_MICRO_GET(adapter->params.fw_vers),
1444                        FW_HDR_FW_VER_BUILD_GET(adapter->params.fw_vers),
1445                        FW_HDR_FW_VER_MAJOR_GET(adapter->params.tp_vers),
1446                        FW_HDR_FW_VER_MINOR_GET(adapter->params.tp_vers),
1447                        FW_HDR_FW_VER_MICRO_GET(adapter->params.tp_vers),
1448                        FW_HDR_FW_VER_BUILD_GET(adapter->params.tp_vers));
1449}
1450
1451static void get_strings(struct net_device *dev, u32 stringset, u8 *data)
1452{
1453        if (stringset == ETH_SS_STATS)
1454                memcpy(data, stats_strings, sizeof(stats_strings));
1455}
1456
1457/*
1458 * port stats maintained per queue of the port.  They should be in the same
1459 * order as in stats_strings above.
1460 */
1461struct queue_port_stats {
1462        u64 tso;
1463        u64 tx_csum;
1464        u64 rx_csum;
1465        u64 vlan_ex;
1466        u64 vlan_ins;
1467        u64 gro_pkts;
1468        u64 gro_merged;
1469};
1470
1471static void collect_sge_port_stats(const struct adapter *adap,
1472                const struct port_info *p, struct queue_port_stats *s)
1473{
1474        int i;
1475        const struct sge_eth_txq *tx = &adap->sge.ethtxq[p->first_qset];
1476        const struct sge_eth_rxq *rx = &adap->sge.ethrxq[p->first_qset];
1477
1478        memset(s, 0, sizeof(*s));
1479        for (i = 0; i < p->nqsets; i++, rx++, tx++) {
1480                s->tso += tx->tso;
1481                s->tx_csum += tx->tx_cso;
1482                s->rx_csum += rx->stats.rx_cso;
1483                s->vlan_ex += rx->stats.vlan_ex;
1484                s->vlan_ins += tx->vlan_ins;
1485                s->gro_pkts += rx->stats.lro_pkts;
1486                s->gro_merged += rx->stats.lro_merged;
1487        }
1488}
1489
1490static void get_stats(struct net_device *dev, struct ethtool_stats *stats,
1491                      u64 *data)
1492{
1493        struct port_info *pi = netdev_priv(dev);
1494        struct adapter *adapter = pi->adapter;
1495        u32 val1, val2;
1496
1497        t4_get_port_stats(adapter, pi->tx_chan, (struct port_stats *)data);
1498
1499        data += sizeof(struct port_stats) / sizeof(u64);
1500        collect_sge_port_stats(adapter, pi, (struct queue_port_stats *)data);
1501        data += sizeof(struct queue_port_stats) / sizeof(u64);
1502        if (!is_t4(adapter->chip)) {
1503                t4_write_reg(adapter, SGE_STAT_CFG, STATSOURCE_T5(7));
1504                val1 = t4_read_reg(adapter, SGE_STAT_TOTAL);
1505                val2 = t4_read_reg(adapter, SGE_STAT_MATCH);
1506                *data = val1 - val2;
1507                data++;
1508                *data = val2;
1509                data++;
1510        } else {
1511                memset(data, 0, 2 * sizeof(u64));
1512                *data += 2;
1513        }
1514}
1515
1516/*
1517 * Return a version number to identify the type of adapter.  The scheme is:
1518 * - bits 0..9: chip version
1519 * - bits 10..15: chip revision
1520 * - bits 16..23: register dump version
1521 */
1522static inline unsigned int mk_adap_vers(const struct adapter *ap)
1523{
1524        return CHELSIO_CHIP_VERSION(ap->chip) |
1525                (CHELSIO_CHIP_RELEASE(ap->chip) << 10) | (1 << 16);
1526}
1527
1528static void reg_block_dump(struct adapter *ap, void *buf, unsigned int start,
1529                           unsigned int end)
1530{
1531        u32 *p = buf + start;
1532
1533        for ( ; start <= end; start += sizeof(u32))
1534                *p++ = t4_read_reg(ap, start);
1535}
1536
1537static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
1538                     void *buf)
1539{
1540        static const unsigned int t4_reg_ranges[] = {
1541                0x1008, 0x1108,
1542                0x1180, 0x11b4,
1543                0x11fc, 0x123c,
1544                0x1300, 0x173c,
1545                0x1800, 0x18fc,
1546                0x3000, 0x30d8,
1547                0x30e0, 0x5924,
1548                0x5960, 0x59d4,
1549                0x5a00, 0x5af8,
1550                0x6000, 0x6098,
1551                0x6100, 0x6150,
1552                0x6200, 0x6208,
1553                0x6240, 0x6248,
1554                0x6280, 0x6338,
1555                0x6370, 0x638c,
1556                0x6400, 0x643c,
1557                0x6500, 0x6524,
1558                0x6a00, 0x6a38,
1559                0x6a60, 0x6a78,
1560                0x6b00, 0x6b84,
1561                0x6bf0, 0x6c84,
1562                0x6cf0, 0x6d84,
1563                0x6df0, 0x6e84,
1564                0x6ef0, 0x6f84,
1565                0x6ff0, 0x7084,
1566                0x70f0, 0x7184,
1567                0x71f0, 0x7284,
1568                0x72f0, 0x7384,
1569                0x73f0, 0x7450,
1570                0x7500, 0x7530,
1571                0x7600, 0x761c,
1572                0x7680, 0x76cc,
1573                0x7700, 0x7798,
1574                0x77c0, 0x77fc,
1575                0x7900, 0x79fc,
1576                0x7b00, 0x7c38,
1577                0x7d00, 0x7efc,
1578                0x8dc0, 0x8e1c,
1579                0x8e30, 0x8e78,
1580                0x8ea0, 0x8f6c,
1581                0x8fc0, 0x9074,
1582                0x90fc, 0x90fc,
1583                0x9400, 0x9458,
1584                0x9600, 0x96bc,
1585                0x9800, 0x9808,
1586                0x9820, 0x983c,
1587                0x9850, 0x9864,
1588                0x9c00, 0x9c6c,
1589                0x9c80, 0x9cec,
1590                0x9d00, 0x9d6c,
1591                0x9d80, 0x9dec,
1592                0x9e00, 0x9e6c,
1593                0x9e80, 0x9eec,
1594                0x9f00, 0x9f6c,
1595                0x9f80, 0x9fec,
1596                0xd004, 0xd03c,
1597                0xdfc0, 0xdfe0,
1598                0xe000, 0xea7c,
1599                0xf000, 0x11190,
1600                0x19040, 0x1906c,
1601                0x19078, 0x19080,
1602                0x1908c, 0x19124,
1603                0x19150, 0x191b0,
1604                0x191d0, 0x191e8,
1605                0x19238, 0x1924c,
1606                0x193f8, 0x19474,
1607                0x19490, 0x194f8,
1608                0x19800, 0x19f30,
1609                0x1a000, 0x1a06c,
1610                0x1a0b0, 0x1a120,
1611                0x1a128, 0x1a138,
1612                0x1a190, 0x1a1c4,
1613                0x1a1fc, 0x1a1fc,
1614                0x1e040, 0x1e04c,
1615                0x1e284, 0x1e28c,
1616                0x1e2c0, 0x1e2c0,
1617                0x1e2e0, 0x1e2e0,
1618                0x1e300, 0x1e384,
1619                0x1e3c0, 0x1e3c8,
1620                0x1e440, 0x1e44c,
1621                0x1e684, 0x1e68c,
1622                0x1e6c0, 0x1e6c0,
1623                0x1e6e0, 0x1e6e0,
1624                0x1e700, 0x1e784,
1625                0x1e7c0, 0x1e7c8,
1626                0x1e840, 0x1e84c,
1627                0x1ea84, 0x1ea8c,
1628                0x1eac0, 0x1eac0,
1629                0x1eae0, 0x1eae0,
1630                0x1eb00, 0x1eb84,
1631                0x1ebc0, 0x1ebc8,
1632                0x1ec40, 0x1ec4c,
1633                0x1ee84, 0x1ee8c,
1634                0x1eec0, 0x1eec0,
1635                0x1eee0, 0x1eee0,
1636                0x1ef00, 0x1ef84,
1637                0x1efc0, 0x1efc8,
1638                0x1f040, 0x1f04c,
1639                0x1f284, 0x1f28c,
1640                0x1f2c0, 0x1f2c0,
1641                0x1f2e0, 0x1f2e0,
1642                0x1f300, 0x1f384,
1643                0x1f3c0, 0x1f3c8,
1644                0x1f440, 0x1f44c,
1645                0x1f684, 0x1f68c,
1646                0x1f6c0, 0x1f6c0,
1647                0x1f6e0, 0x1f6e0,
1648                0x1f700, 0x1f784,
1649                0x1f7c0, 0x1f7c8,
1650                0x1f840, 0x1f84c,
1651                0x1fa84, 0x1fa8c,
1652                0x1fac0, 0x1fac0,
1653                0x1fae0, 0x1fae0,
1654                0x1fb00, 0x1fb84,
1655                0x1fbc0, 0x1fbc8,
1656                0x1fc40, 0x1fc4c,
1657                0x1fe84, 0x1fe8c,
1658                0x1fec0, 0x1fec0,
1659                0x1fee0, 0x1fee0,
1660                0x1ff00, 0x1ff84,
1661                0x1ffc0, 0x1ffc8,
1662                0x20000, 0x2002c,
1663                0x20100, 0x2013c,
1664                0x20190, 0x201c8,
1665                0x20200, 0x20318,
1666                0x20400, 0x20528,
1667                0x20540, 0x20614,
1668                0x21000, 0x21040,
1669                0x2104c, 0x21060,
1670                0x210c0, 0x210ec,
1671                0x21200, 0x21268,
1672                0x21270, 0x21284,
1673                0x212fc, 0x21388,
1674                0x21400, 0x21404,
1675                0x21500, 0x21518,
1676                0x2152c, 0x2153c,
1677                0x21550, 0x21554,
1678                0x21600, 0x21600,
1679                0x21608, 0x21628,
1680                0x21630, 0x2163c,
1681                0x21700, 0x2171c,
1682                0x21780, 0x2178c,
1683                0x21800, 0x21c38,
1684                0x21c80, 0x21d7c,
1685                0x21e00, 0x21e04,
1686                0x22000, 0x2202c,
1687                0x22100, 0x2213c,
1688                0x22190, 0x221c8,
1689                0x22200, 0x22318,
1690                0x22400, 0x22528,
1691                0x22540, 0x22614,
1692                0x23000, 0x23040,
1693                0x2304c, 0x23060,
1694                0x230c0, 0x230ec,
1695                0x23200, 0x23268,
1696                0x23270, 0x23284,
1697                0x232fc, 0x23388,
1698                0x23400, 0x23404,
1699                0x23500, 0x23518,
1700                0x2352c, 0x2353c,
1701                0x23550, 0x23554,
1702                0x23600, 0x23600,
1703                0x23608, 0x23628,
1704                0x23630, 0x2363c,
1705                0x23700, 0x2371c,
1706                0x23780, 0x2378c,
1707                0x23800, 0x23c38,
1708                0x23c80, 0x23d7c,
1709                0x23e00, 0x23e04,
1710                0x24000, 0x2402c,
1711                0x24100, 0x2413c,
1712                0x24190, 0x241c8,
1713                0x24200, 0x24318,
1714                0x24400, 0x24528,
1715                0x24540, 0x24614,
1716                0x25000, 0x25040,
1717                0x2504c, 0x25060,
1718                0x250c0, 0x250ec,
1719                0x25200, 0x25268,
1720                0x25270, 0x25284,
1721                0x252fc, 0x25388,
1722                0x25400, 0x25404,
1723                0x25500, 0x25518,
1724                0x2552c, 0x2553c,
1725                0x25550, 0x25554,
1726                0x25600, 0x25600,
1727                0x25608, 0x25628,
1728                0x25630, 0x2563c,
1729                0x25700, 0x2571c,
1730                0x25780, 0x2578c,
1731                0x25800, 0x25c38,
1732                0x25c80, 0x25d7c,
1733                0x25e00, 0x25e04,
1734                0x26000, 0x2602c,
1735                0x26100, 0x2613c,
1736                0x26190, 0x261c8,
1737                0x26200, 0x26318,
1738                0x26400, 0x26528,
1739                0x26540, 0x26614,
1740                0x27000, 0x27040,
1741                0x2704c, 0x27060,
1742                0x270c0, 0x270ec,
1743                0x27200, 0x27268,
1744                0x27270, 0x27284,
1745                0x272fc, 0x27388,
1746                0x27400, 0x27404,
1747                0x27500, 0x27518,
1748                0x2752c, 0x2753c,
1749                0x27550, 0x27554,
1750                0x27600, 0x27600,
1751                0x27608, 0x27628,
1752                0x27630, 0x2763c,
1753                0x27700, 0x2771c,
1754                0x27780, 0x2778c,
1755                0x27800, 0x27c38,
1756                0x27c80, 0x27d7c,
1757                0x27e00, 0x27e04
1758        };
1759
1760        static const unsigned int t5_reg_ranges[] = {
1761                0x1008, 0x1148,
1762                0x1180, 0x11b4,
1763                0x11fc, 0x123c,
1764                0x1280, 0x173c,
1765                0x1800, 0x18fc,
1766                0x3000, 0x3028,
1767                0x3060, 0x30d8,
1768                0x30e0, 0x30fc,
1769                0x3140, 0x357c,
1770                0x35a8, 0x35cc,
1771                0x35ec, 0x35ec,
1772                0x3600, 0x5624,
1773                0x56cc, 0x575c,
1774                0x580c, 0x5814,
1775                0x5890, 0x58bc,
1776                0x5940, 0x59dc,
1777                0x59fc, 0x5a18,
1778                0x5a60, 0x5a9c,
1779                0x5b9c, 0x5bfc,
1780                0x6000, 0x6040,
1781                0x6058, 0x614c,
1782                0x7700, 0x7798,
1783                0x77c0, 0x78fc,
1784                0x7b00, 0x7c54,
1785                0x7d00, 0x7efc,
1786                0x8dc0, 0x8de0,
1787                0x8df8, 0x8e84,
1788                0x8ea0, 0x8f84,
1789                0x8fc0, 0x90f8,
1790                0x9400, 0x9470,
1791                0x9600, 0x96f4,
1792                0x9800, 0x9808,
1793                0x9820, 0x983c,
1794                0x9850, 0x9864,
1795                0x9c00, 0x9c6c,
1796                0x9c80, 0x9cec,
1797                0x9d00, 0x9d6c,
1798                0x9d80, 0x9dec,
1799                0x9e00, 0x9e6c,
1800                0x9e80, 0x9eec,
1801                0x9f00, 0x9f6c,
1802                0x9f80, 0xa020,
1803                0xd004, 0xd03c,
1804                0xdfc0, 0xdfe0,
1805                0xe000, 0x11088,
1806                0x1109c, 0x1117c,
1807                0x11190, 0x11204,
1808                0x19040, 0x1906c,
1809                0x19078, 0x19080,
1810                0x1908c, 0x19124,
1811                0x19150, 0x191b0,
1812                0x191d0, 0x191e8,
1813                0x19238, 0x19290,
1814                0x193f8, 0x19474,
1815                0x19490, 0x194cc,
1816                0x194f0, 0x194f8,
1817                0x19c00, 0x19c60,
1818                0x19c94, 0x19e10,
1819                0x19e50, 0x19f34,
1820                0x19f40, 0x19f50,
1821                0x19f90, 0x19fe4,
1822                0x1a000, 0x1a06c,
1823                0x1a0b0, 0x1a120,
1824                0x1a128, 0x1a138,
1825                0x1a190, 0x1a1c4,
1826                0x1a1fc, 0x1a1fc,
1827                0x1e008, 0x1e00c,
1828                0x1e040, 0x1e04c,
1829                0x1e284, 0x1e290,
1830                0x1e2c0, 0x1e2c0,
1831                0x1e2e0, 0x1e2e0,
1832                0x1e300, 0x1e384,
1833                0x1e3c0, 0x1e3c8,
1834                0x1e408, 0x1e40c,
1835                0x1e440, 0x1e44c,
1836                0x1e684, 0x1e690,
1837                0x1e6c0, 0x1e6c0,
1838                0x1e6e0, 0x1e6e0,
1839                0x1e700, 0x1e784,
1840                0x1e7c0, 0x1e7c8,
1841                0x1e808, 0x1e80c,
1842                0x1e840, 0x1e84c,
1843                0x1ea84, 0x1ea90,
1844                0x1eac0, 0x1eac0,
1845                0x1eae0, 0x1eae0,
1846                0x1eb00, 0x1eb84,
1847                0x1ebc0, 0x1ebc8,
1848                0x1ec08, 0x1ec0c,
1849                0x1ec40, 0x1ec4c,
1850                0x1ee84, 0x1ee90,
1851                0x1eec0, 0x1eec0,
1852                0x1eee0, 0x1eee0,
1853                0x1ef00, 0x1ef84,
1854                0x1efc0, 0x1efc8,
1855                0x1f008, 0x1f00c,
1856                0x1f040, 0x1f04c,
1857                0x1f284, 0x1f290,
1858                0x1f2c0, 0x1f2c0,
1859                0x1f2e0, 0x1f2e0,
1860                0x1f300, 0x1f384,
1861                0x1f3c0, 0x1f3c8,
1862                0x1f408, 0x1f40c,
1863                0x1f440, 0x1f44c,
1864                0x1f684, 0x1f690,
1865                0x1f6c0, 0x1f6c0,
1866                0x1f6e0, 0x1f6e0,
1867                0x1f700, 0x1f784,
1868                0x1f7c0, 0x1f7c8,
1869                0x1f808, 0x1f80c,
1870                0x1f840, 0x1f84c,
1871                0x1fa84, 0x1fa90,
1872                0x1fac0, 0x1fac0,
1873                0x1fae0, 0x1fae0,
1874                0x1fb00, 0x1fb84,
1875                0x1fbc0, 0x1fbc8,
1876                0x1fc08, 0x1fc0c,
1877                0x1fc40, 0x1fc4c,
1878                0x1fe84, 0x1fe90,
1879                0x1fec0, 0x1fec0,
1880                0x1fee0, 0x1fee0,
1881                0x1ff00, 0x1ff84,
1882                0x1ffc0, 0x1ffc8,
1883                0x30000, 0x30030,
1884                0x30100, 0x30144,
1885                0x30190, 0x301d0,
1886                0x30200, 0x30318,
1887                0x30400, 0x3052c,
1888                0x30540, 0x3061c,
1889                0x30800, 0x30834,
1890                0x308c0, 0x30908,
1891                0x30910, 0x309ac,
1892                0x30a00, 0x30a04,
1893                0x30a0c, 0x30a2c,
1894                0x30a44, 0x30a50,
1895                0x30a74, 0x30c24,
1896                0x30d08, 0x30d14,
1897                0x30d1c, 0x30d20,
1898                0x30d3c, 0x30d50,
1899                0x31200, 0x3120c,
1900                0x31220, 0x31220,
1901                0x31240, 0x31240,
1902                0x31600, 0x31600,
1903                0x31608, 0x3160c,
1904                0x31a00, 0x31a1c,
1905                0x31e04, 0x31e20,
1906                0x31e38, 0x31e3c,
1907                0x31e80, 0x31e80,
1908                0x31e88, 0x31ea8,
1909                0x31eb0, 0x31eb4,
1910                0x31ec8, 0x31ed4,
1911                0x31fb8, 0x32004,
1912                0x32208, 0x3223c,
1913                0x32600, 0x32630,
1914                0x32a00, 0x32abc,
1915                0x32b00, 0x32b70,
1916                0x33000, 0x33048,
1917                0x33060, 0x3309c,
1918                0x330f0, 0x33148,
1919                0x33160, 0x3319c,
1920                0x331f0, 0x332e4,
1921                0x332f8, 0x333e4,
1922                0x333f8, 0x33448,
1923                0x33460, 0x3349c,
1924                0x334f0, 0x33548,
1925                0x33560, 0x3359c,
1926                0x335f0, 0x336e4,
1927                0x336f8, 0x337e4,
1928                0x337f8, 0x337fc,
1929                0x33814, 0x33814,
1930                0x3382c, 0x3382c,
1931                0x33880, 0x3388c,
1932                0x338e8, 0x338ec,
1933                0x33900, 0x33948,
1934                0x33960, 0x3399c,
1935                0x339f0, 0x33ae4,
1936                0x33af8, 0x33b10,
1937                0x33b28, 0x33b28,
1938                0x33b3c, 0x33b50,
1939                0x33bf0, 0x33c10,
1940                0x33c28, 0x33c28,
1941                0x33c3c, 0x33c50,
1942                0x33cf0, 0x33cfc,
1943                0x34000, 0x34030,
1944                0x34100, 0x34144,
1945                0x34190, 0x341d0,
1946                0x34200, 0x34318,
1947                0x34400, 0x3452c,
1948                0x34540, 0x3461c,
1949                0x34800, 0x34834,
1950                0x348c0, 0x34908,
1951                0x34910, 0x349ac,
1952                0x34a00, 0x34a04,
1953                0x34a0c, 0x34a2c,
1954                0x34a44, 0x34a50,
1955                0x34a74, 0x34c24,
1956                0x34d08, 0x34d14,
1957                0x34d1c, 0x34d20,
1958                0x34d3c, 0x34d50,
1959                0x35200, 0x3520c,
1960                0x35220, 0x35220,
1961                0x35240, 0x35240,
1962                0x35600, 0x35600,
1963                0x35608, 0x3560c,
1964                0x35a00, 0x35a1c,
1965                0x35e04, 0x35e20,
1966                0x35e38, 0x35e3c,
1967                0x35e80, 0x35e80,
1968                0x35e88, 0x35ea8,
1969                0x35eb0, 0x35eb4,
1970                0x35ec8, 0x35ed4,
1971                0x35fb8, 0x36004,
1972                0x36208, 0x3623c,
1973                0x36600, 0x36630,
1974                0x36a00, 0x36abc,
1975                0x36b00, 0x36b70,
1976                0x37000, 0x37048,
1977                0x37060, 0x3709c,
1978                0x370f0, 0x37148,
1979                0x37160, 0x3719c,
1980                0x371f0, 0x372e4,
1981                0x372f8, 0x373e4,
1982                0x373f8, 0x37448,
1983                0x37460, 0x3749c,
1984                0x374f0, 0x37548,
1985                0x37560, 0x3759c,
1986                0x375f0, 0x376e4,
1987                0x376f8, 0x377e4,
1988                0x377f8, 0x377fc,
1989                0x37814, 0x37814,
1990                0x3782c, 0x3782c,
1991                0x37880, 0x3788c,
1992                0x378e8, 0x378ec,
1993                0x37900, 0x37948,
1994                0x37960, 0x3799c,
1995                0x379f0, 0x37ae4,
1996                0x37af8, 0x37b10,
1997                0x37b28, 0x37b28,
1998                0x37b3c, 0x37b50,
1999                0x37bf0, 0x37c10,
2000                0x37c28, 0x37c28,
2001                0x37c3c, 0x37c50,
2002                0x37cf0, 0x37cfc,
2003                0x38000, 0x38030,
2004                0x38100, 0x38144,
2005                0x38190, 0x381d0,
2006                0x38200, 0x38318,
2007                0x38400, 0x3852c,
2008                0x38540, 0x3861c,
2009                0x38800, 0x38834,
2010                0x388c0, 0x38908,
2011                0x38910, 0x389ac,
2012                0x38a00, 0x38a04,
2013                0x38a0c, 0x38a2c,
2014                0x38a44, 0x38a50,
2015                0x38a74, 0x38c24,
2016                0x38d08, 0x38d14,
2017                0x38d1c, 0x38d20,
2018                0x38d3c, 0x38d50,
2019                0x39200, 0x3920c,
2020                0x39220, 0x39220,
2021                0x39240, 0x39240,
2022                0x39600, 0x39600,
2023                0x39608, 0x3960c,
2024                0x39a00, 0x39a1c,
2025                0x39e04, 0x39e20,
2026                0x39e38, 0x39e3c,
2027                0x39e80, 0x39e80,
2028                0x39e88, 0x39ea8,
2029                0x39eb0, 0x39eb4,
2030                0x39ec8, 0x39ed4,
2031                0x39fb8, 0x3a004,
2032                0x3a208, 0x3a23c,
2033                0x3a600, 0x3a630,
2034                0x3aa00, 0x3aabc,
2035                0x3ab00, 0x3ab70,
2036                0x3b000, 0x3b048,
2037                0x3b060, 0x3b09c,
2038                0x3b0f0, 0x3b148,
2039                0x3b160, 0x3b19c,
2040                0x3b1f0, 0x3b2e4,
2041                0x3b2f8, 0x3b3e4,
2042                0x3b3f8, 0x3b448,
2043                0x3b460, 0x3b49c,
2044                0x3b4f0, 0x3b548,
2045                0x3b560, 0x3b59c,
2046                0x3b5f0, 0x3b6e4,
2047                0x3b6f8, 0x3b7e4,
2048                0x3b7f8, 0x3b7fc,
2049                0x3b814, 0x3b814,
2050                0x3b82c, 0x3b82c,
2051                0x3b880, 0x3b88c,
2052                0x3b8e8, 0x3b8ec,
2053                0x3b900, 0x3b948,
2054                0x3b960, 0x3b99c,
2055                0x3b9f0, 0x3bae4,
2056                0x3baf8, 0x3bb10,
2057                0x3bb28, 0x3bb28,
2058                0x3bb3c, 0x3bb50,
2059                0x3bbf0, 0x3bc10,
2060                0x3bc28, 0x3bc28,
2061                0x3bc3c, 0x3bc50,
2062                0x3bcf0, 0x3bcfc,
2063                0x3c000, 0x3c030,
2064                0x3c100, 0x3c144,
2065                0x3c190, 0x3c1d0,
2066                0x3c200, 0x3c318,
2067                0x3c400, 0x3c52c,
2068                0x3c540, 0x3c61c,
2069                0x3c800, 0x3c834,
2070                0x3c8c0, 0x3c908,
2071                0x3c910, 0x3c9ac,
2072                0x3ca00, 0x3ca04,
2073                0x3ca0c, 0x3ca2c,
2074                0x3ca44, 0x3ca50,
2075                0x3ca74, 0x3cc24,
2076                0x3cd08, 0x3cd14,
2077                0x3cd1c, 0x3cd20,
2078                0x3cd3c, 0x3cd50,
2079                0x3d200, 0x3d20c,
2080                0x3d220, 0x3d220,
2081                0x3d240, 0x3d240,
2082                0x3d600, 0x3d600,
2083                0x3d608, 0x3d60c,
2084                0x3da00, 0x3da1c,
2085                0x3de04, 0x3de20,
2086                0x3de38, 0x3de3c,
2087                0x3de80, 0x3de80,
2088                0x3de88, 0x3dea8,
2089                0x3deb0, 0x3deb4,
2090                0x3dec8, 0x3ded4,
2091                0x3dfb8, 0x3e004,
2092                0x3e208, 0x3e23c,
2093                0x3e600, 0x3e630,
2094                0x3ea00, 0x3eabc,
2095                0x3eb00, 0x3eb70,
2096                0x3f000, 0x3f048,
2097                0x3f060, 0x3f09c,
2098                0x3f0f0, 0x3f148,
2099                0x3f160, 0x3f19c,
2100                0x3f1f0, 0x3f2e4,
2101                0x3f2f8, 0x3f3e4,
2102                0x3f3f8, 0x3f448,
2103                0x3f460, 0x3f49c,
2104                0x3f4f0, 0x3f548,
2105                0x3f560, 0x3f59c,
2106                0x3f5f0, 0x3f6e4,
2107                0x3f6f8, 0x3f7e4,
2108                0x3f7f8, 0x3f7fc,
2109                0x3f814, 0x3f814,
2110                0x3f82c, 0x3f82c,
2111                0x3f880, 0x3f88c,
2112                0x3f8e8, 0x3f8ec,
2113                0x3f900, 0x3f948,
2114                0x3f960, 0x3f99c,
2115                0x3f9f0, 0x3fae4,
2116                0x3faf8, 0x3fb10,
2117                0x3fb28, 0x3fb28,
2118                0x3fb3c, 0x3fb50,
2119                0x3fbf0, 0x3fc10,
2120                0x3fc28, 0x3fc28,
2121                0x3fc3c, 0x3fc50,
2122                0x3fcf0, 0x3fcfc,
2123                0x40000, 0x4000c,
2124                0x40040, 0x40068,
2125                0x40080, 0x40144,
2126                0x40180, 0x4018c,
2127                0x40200, 0x40298,
2128                0x402ac, 0x4033c,
2129                0x403f8, 0x403fc,
2130                0x41300, 0x413c4,
2131                0x41400, 0x4141c,
2132                0x41480, 0x414d0,
2133                0x44000, 0x44078,
2134                0x440c0, 0x44278,
2135                0x442c0, 0x44478,
2136                0x444c0, 0x44678,
2137                0x446c0, 0x44878,
2138                0x448c0, 0x449fc,
2139                0x45000, 0x45068,
2140                0x45080, 0x45084,
2141                0x450a0, 0x450b0,
2142                0x45200, 0x45268,
2143                0x45280, 0x45284,
2144                0x452a0, 0x452b0,
2145                0x460c0, 0x460e4,
2146                0x47000, 0x4708c,
2147                0x47200, 0x47250,
2148                0x47400, 0x47420,
2149                0x47600, 0x47618,
2150                0x47800, 0x47814,
2151                0x48000, 0x4800c,
2152                0x48040, 0x48068,
2153                0x48080, 0x48144,
2154                0x48180, 0x4818c,
2155                0x48200, 0x48298,
2156                0x482ac, 0x4833c,
2157                0x483f8, 0x483fc,
2158                0x49300, 0x493c4,
2159                0x49400, 0x4941c,
2160                0x49480, 0x494d0,
2161                0x4c000, 0x4c078,
2162                0x4c0c0, 0x4c278,
2163                0x4c2c0, 0x4c478,
2164                0x4c4c0, 0x4c678,
2165                0x4c6c0, 0x4c878,
2166                0x4c8c0, 0x4c9fc,
2167                0x4d000, 0x4d068,
2168                0x4d080, 0x4d084,
2169                0x4d0a0, 0x4d0b0,
2170                0x4d200, 0x4d268,
2171                0x4d280, 0x4d284,
2172                0x4d2a0, 0x4d2b0,
2173                0x4e0c0, 0x4e0e4,
2174                0x4f000, 0x4f08c,
2175                0x4f200, 0x4f250,
2176                0x4f400, 0x4f420,
2177                0x4f600, 0x4f618,
2178                0x4f800, 0x4f814,
2179                0x50000, 0x500cc,
2180                0x50400, 0x50400,
2181                0x50800, 0x508cc,
2182                0x50c00, 0x50c00,
2183                0x51000, 0x5101c,
2184                0x51300, 0x51308,
2185        };
2186
2187        int i;
2188        struct adapter *ap = netdev2adap(dev);
2189        static const unsigned int *reg_ranges;
2190        int arr_size = 0, buf_size = 0;
2191
2192        if (is_t4(ap->chip)) {
2193                reg_ranges = &t4_reg_ranges[0];
2194                arr_size = ARRAY_SIZE(t4_reg_ranges);
2195                buf_size = T4_REGMAP_SIZE;
2196        } else {
2197                reg_ranges = &t5_reg_ranges[0];
2198                arr_size = ARRAY_SIZE(t5_reg_ranges);
2199                buf_size = T5_REGMAP_SIZE;
2200        }
2201
2202        regs->version = mk_adap_vers(ap);
2203
2204        memset(buf, 0, buf_size);
2205        for (i = 0; i < arr_size; i += 2)
2206                reg_block_dump(ap, buf, reg_ranges[i], reg_ranges[i + 1]);
2207}
2208
2209static int restart_autoneg(struct net_device *dev)
2210{
2211        struct port_info *p = netdev_priv(dev);
2212
2213        if (!netif_running(dev))
2214                return -EAGAIN;
2215        if (p->link_cfg.autoneg != AUTONEG_ENABLE)
2216                return -EINVAL;
2217        t4_restart_aneg(p->adapter, p->adapter->fn, p->tx_chan);
2218        return 0;
2219}
2220
2221static int identify_port(struct net_device *dev,
2222                         enum ethtool_phys_id_state state)
2223{
2224        unsigned int val;
2225        struct adapter *adap = netdev2adap(dev);
2226
2227        if (state == ETHTOOL_ID_ACTIVE)
2228                val = 0xffff;
2229        else if (state == ETHTOOL_ID_INACTIVE)
2230                val = 0;
2231        else
2232                return -EINVAL;
2233
2234        return t4_identify_port(adap, adap->fn, netdev2pinfo(dev)->viid, val);
2235}
2236
2237static unsigned int from_fw_linkcaps(unsigned int type, unsigned int caps)
2238{
2239        unsigned int v = 0;
2240
2241        if (type == FW_PORT_TYPE_BT_SGMII || type == FW_PORT_TYPE_BT_XFI ||
2242            type == FW_PORT_TYPE_BT_XAUI) {
2243                v |= SUPPORTED_TP;
2244                if (caps & FW_PORT_CAP_SPEED_100M)
2245                        v |= SUPPORTED_100baseT_Full;
2246                if (caps & FW_PORT_CAP_SPEED_1G)
2247                        v |= SUPPORTED_1000baseT_Full;
2248                if (caps & FW_PORT_CAP_SPEED_10G)
2249                        v |= SUPPORTED_10000baseT_Full;
2250        } else if (type == FW_PORT_TYPE_KX4 || type == FW_PORT_TYPE_KX) {
2251                v |= SUPPORTED_Backplane;
2252                if (caps & FW_PORT_CAP_SPEED_1G)
2253                        v |= SUPPORTED_1000baseKX_Full;
2254                if (caps & FW_PORT_CAP_SPEED_10G)
2255                        v |= SUPPORTED_10000baseKX4_Full;
2256        } else if (type == FW_PORT_TYPE_KR)
2257                v |= SUPPORTED_Backplane | SUPPORTED_10000baseKR_Full;
2258        else if (type == FW_PORT_TYPE_BP_AP)
2259                v |= SUPPORTED_Backplane | SUPPORTED_10000baseR_FEC |
2260                     SUPPORTED_10000baseKR_Full | SUPPORTED_1000baseKX_Full;
2261        else if (type == FW_PORT_TYPE_BP4_AP)
2262                v |= SUPPORTED_Backplane | SUPPORTED_10000baseR_FEC |
2263                     SUPPORTED_10000baseKR_Full | SUPPORTED_1000baseKX_Full |
2264                     SUPPORTED_10000baseKX4_Full;
2265        else if (type == FW_PORT_TYPE_FIBER_XFI ||
2266                 type == FW_PORT_TYPE_FIBER_XAUI || type == FW_PORT_TYPE_SFP)
2267                v |= SUPPORTED_FIBRE;
2268
2269        if (caps & FW_PORT_CAP_ANEG)
2270                v |= SUPPORTED_Autoneg;
2271        return v;
2272}
2273
2274static unsigned int to_fw_linkcaps(unsigned int caps)
2275{
2276        unsigned int v = 0;
2277
2278        if (caps & ADVERTISED_100baseT_Full)
2279                v |= FW_PORT_CAP_SPEED_100M;
2280        if (caps & ADVERTISED_1000baseT_Full)
2281                v |= FW_PORT_CAP_SPEED_1G;
2282        if (caps & ADVERTISED_10000baseT_Full)
2283                v |= FW_PORT_CAP_SPEED_10G;
2284        return v;
2285}
2286
2287static int get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
2288{
2289        const struct port_info *p = netdev_priv(dev);
2290
2291        if (p->port_type == FW_PORT_TYPE_BT_SGMII ||
2292            p->port_type == FW_PORT_TYPE_BT_XFI ||
2293            p->port_type == FW_PORT_TYPE_BT_XAUI)
2294                cmd->port = PORT_TP;
2295        else if (p->port_type == FW_PORT_TYPE_FIBER_XFI ||
2296                 p->port_type == FW_PORT_TYPE_FIBER_XAUI)
2297                cmd->port = PORT_FIBRE;
2298        else if (p->port_type == FW_PORT_TYPE_SFP) {
2299                if (p->mod_type == FW_PORT_MOD_TYPE_TWINAX_PASSIVE ||
2300                    p->mod_type == FW_PORT_MOD_TYPE_TWINAX_ACTIVE)
2301                        cmd->port = PORT_DA;
2302                else
2303                        cmd->port = PORT_FIBRE;
2304        } else
2305                cmd->port = PORT_OTHER;
2306
2307        if (p->mdio_addr >= 0) {
2308                cmd->phy_address = p->mdio_addr;
2309                cmd->transceiver = XCVR_EXTERNAL;
2310                cmd->mdio_support = p->port_type == FW_PORT_TYPE_BT_SGMII ?
2311                        MDIO_SUPPORTS_C22 : MDIO_SUPPORTS_C45;
2312        } else {
2313                cmd->phy_address = 0;  /* not really, but no better option */
2314                cmd->transceiver = XCVR_INTERNAL;
2315                cmd->mdio_support = 0;
2316        }
2317
2318        cmd->supported = from_fw_linkcaps(p->port_type, p->link_cfg.supported);
2319        cmd->advertising = from_fw_linkcaps(p->port_type,
2320                                            p->link_cfg.advertising);
2321        ethtool_cmd_speed_set(cmd,
2322                              netif_carrier_ok(dev) ? p->link_cfg.speed : 0);
2323        cmd->duplex = DUPLEX_FULL;
2324        cmd->autoneg = p->link_cfg.autoneg;
2325        cmd->maxtxpkt = 0;
2326        cmd->maxrxpkt = 0;
2327        return 0;
2328}
2329
2330static unsigned int speed_to_caps(int speed)
2331{
2332        if (speed == SPEED_100)
2333                return FW_PORT_CAP_SPEED_100M;
2334        if (speed == SPEED_1000)
2335                return FW_PORT_CAP_SPEED_1G;
2336        if (speed == SPEED_10000)
2337                return FW_PORT_CAP_SPEED_10G;
2338        return 0;
2339}
2340
2341static int set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
2342{
2343        unsigned int cap;
2344        struct port_info *p = netdev_priv(dev);
2345        struct link_config *lc = &p->link_cfg;
2346        u32 speed = ethtool_cmd_speed(cmd);
2347
2348        if (cmd->duplex != DUPLEX_FULL)     /* only full-duplex supported */
2349                return -EINVAL;
2350
2351        if (!(lc->supported & FW_PORT_CAP_ANEG)) {
2352                /*
2353                 * PHY offers a single speed.  See if that's what's
2354                 * being requested.
2355                 */
2356                if (cmd->autoneg == AUTONEG_DISABLE &&
2357                    (lc->supported & speed_to_caps(speed)))
2358                        return 0;
2359                return -EINVAL;
2360        }
2361
2362        if (cmd->autoneg == AUTONEG_DISABLE) {
2363                cap = speed_to_caps(speed);
2364
2365                if (!(lc->supported & cap) || (speed == SPEED_1000) ||
2366                    (speed == SPEED_10000))
2367                        return -EINVAL;
2368                lc->requested_speed = cap;
2369                lc->advertising = 0;
2370        } else {
2371                cap = to_fw_linkcaps(cmd->advertising);
2372                if (!(lc->supported & cap))
2373                        return -EINVAL;
2374                lc->requested_speed = 0;
2375                lc->advertising = cap | FW_PORT_CAP_ANEG;
2376        }
2377        lc->autoneg = cmd->autoneg;
2378
2379        if (netif_running(dev))
2380                return t4_link_start(p->adapter, p->adapter->fn, p->tx_chan,
2381                                     lc);
2382        return 0;
2383}
2384
2385static void get_pauseparam(struct net_device *dev,
2386                           struct ethtool_pauseparam *epause)
2387{
2388        struct port_info *p = netdev_priv(dev);
2389
2390        epause->autoneg = (p->link_cfg.requested_fc & PAUSE_AUTONEG) != 0;
2391        epause->rx_pause = (p->link_cfg.fc & PAUSE_RX) != 0;
2392        epause->tx_pause = (p->link_cfg.fc & PAUSE_TX) != 0;
2393}
2394
2395static int set_pauseparam(struct net_device *dev,
2396                          struct ethtool_pauseparam *epause)
2397{
2398        struct port_info *p = netdev_priv(dev);
2399        struct link_config *lc = &p->link_cfg;
2400
2401        if (epause->autoneg == AUTONEG_DISABLE)
2402                lc->requested_fc = 0;
2403        else if (lc->supported & FW_PORT_CAP_ANEG)
2404                lc->requested_fc = PAUSE_AUTONEG;
2405        else
2406                return -EINVAL;
2407
2408        if (epause->rx_pause)
2409                lc->requested_fc |= PAUSE_RX;
2410        if (epause->tx_pause)
2411                lc->requested_fc |= PAUSE_TX;
2412        if (netif_running(dev))
2413                return t4_link_start(p->adapter, p->adapter->fn, p->tx_chan,
2414                                     lc);
2415        return 0;
2416}
2417
2418static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
2419{
2420        const struct port_info *pi = netdev_priv(dev);
2421        const struct sge *s = &pi->adapter->sge;
2422
2423        e->rx_max_pending = MAX_RX_BUFFERS;
2424        e->rx_mini_max_pending = MAX_RSPQ_ENTRIES;
2425        e->rx_jumbo_max_pending = 0;
2426        e->tx_max_pending = MAX_TXQ_ENTRIES;
2427
2428        e->rx_pending = s->ethrxq[pi->first_qset].fl.size - 8;
2429        e->rx_mini_pending = s->ethrxq[pi->first_qset].rspq.size;
2430        e->rx_jumbo_pending = 0;
2431        e->tx_pending = s->ethtxq[pi->first_qset].q.size;
2432}
2433
2434static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
2435{
2436        int i;
2437        const struct port_info *pi = netdev_priv(dev);
2438        struct adapter *adapter = pi->adapter;
2439        struct sge *s = &adapter->sge;
2440
2441        if (e->rx_pending > MAX_RX_BUFFERS || e->rx_jumbo_pending ||
2442            e->tx_pending > MAX_TXQ_ENTRIES ||
2443            e->rx_mini_pending > MAX_RSPQ_ENTRIES ||
2444            e->rx_mini_pending < MIN_RSPQ_ENTRIES ||
2445            e->rx_pending < MIN_FL_ENTRIES || e->tx_pending < MIN_TXQ_ENTRIES)
2446                return -EINVAL;
2447
2448        if (adapter->flags & FULL_INIT_DONE)
2449                return -EBUSY;
2450
2451        for (i = 0; i < pi->nqsets; ++i) {
2452                s->ethtxq[pi->first_qset + i].q.size = e->tx_pending;
2453                s->ethrxq[pi->first_qset + i].fl.size = e->rx_pending + 8;
2454                s->ethrxq[pi->first_qset + i].rspq.size = e->rx_mini_pending;
2455        }
2456        return 0;
2457}
2458
2459static int closest_timer(const struct sge *s, int time)
2460{
2461        int i, delta, match = 0, min_delta = INT_MAX;
2462
2463        for (i = 0; i < ARRAY_SIZE(s->timer_val); i++) {
2464                delta = time - s->timer_val[i];
2465                if (delta < 0)
2466                        delta = -delta;
2467                if (delta < min_delta) {
2468                        min_delta = delta;
2469                        match = i;
2470                }
2471        }
2472        return match;
2473}
2474
2475static int closest_thres(const struct sge *s, int thres)
2476{
2477        int i, delta, match = 0, min_delta = INT_MAX;
2478
2479        for (i = 0; i < ARRAY_SIZE(s->counter_val); i++) {
2480                delta = thres - s->counter_val[i];
2481                if (delta < 0)
2482                        delta = -delta;
2483                if (delta < min_delta) {
2484                        min_delta = delta;
2485                        match = i;
2486                }
2487        }
2488        return match;
2489}
2490
2491/*
2492 * Return a queue's interrupt hold-off time in us.  0 means no timer.
2493 */
2494static unsigned int qtimer_val(const struct adapter *adap,
2495                               const struct sge_rspq *q)
2496{
2497        unsigned int idx = q->intr_params >> 1;
2498
2499        return idx < SGE_NTIMERS ? adap->sge.timer_val[idx] : 0;
2500}
2501
2502/**
2503 *      set_rxq_intr_params - set a queue's interrupt holdoff parameters
2504 *      @adap: the adapter
2505 *      @q: the Rx queue
2506 *      @us: the hold-off time in us, or 0 to disable timer
2507 *      @cnt: the hold-off packet count, or 0 to disable counter
2508 *
2509 *      Sets an Rx queue's interrupt hold-off time and packet count.  At least
2510 *      one of the two needs to be enabled for the queue to generate interrupts.
2511 */
2512static int set_rxq_intr_params(struct adapter *adap, struct sge_rspq *q,
2513                               unsigned int us, unsigned int cnt)
2514{
2515        if ((us | cnt) == 0)
2516                cnt = 1;
2517
2518        if (cnt) {
2519                int err;
2520                u32 v, new_idx;
2521
2522                new_idx = closest_thres(&adap->sge, cnt);
2523                if (q->desc && q->pktcnt_idx != new_idx) {
2524                        /* the queue has already been created, update it */
2525                        v = FW_PARAMS_MNEM(FW_PARAMS_MNEM_DMAQ) |
2526                            FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DMAQ_IQ_INTCNTTHRESH) |
2527                            FW_PARAMS_PARAM_YZ(q->cntxt_id);
2528                        err = t4_set_params(adap, adap->fn, adap->fn, 0, 1, &v,
2529                                            &new_idx);
2530                        if (err)
2531                                return err;
2532                }
2533                q->pktcnt_idx = new_idx;
2534        }
2535
2536        us = us == 0 ? 6 : closest_timer(&adap->sge, us);
2537        q->intr_params = QINTR_TIMER_IDX(us) | (cnt > 0 ? QINTR_CNT_EN : 0);
2538        return 0;
2539}
2540
2541static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
2542{
2543        const struct port_info *pi = netdev_priv(dev);
2544        struct adapter *adap = pi->adapter;
2545        struct sge_rspq *q;
2546        int i;
2547        int r = 0;
2548
2549        for (i = pi->first_qset; i < pi->first_qset + pi->nqsets; i++) {
2550                q = &adap->sge.ethrxq[i].rspq;
2551                r = set_rxq_intr_params(adap, q, c->rx_coalesce_usecs,
2552                        c->rx_max_coalesced_frames);
2553                if (r) {
2554                        dev_err(&dev->dev, "failed to set coalesce %d\n", r);
2555                        break;
2556                }
2557        }
2558        return r;
2559}
2560
2561static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
2562{
2563        const struct port_info *pi = netdev_priv(dev);
2564        const struct adapter *adap = pi->adapter;
2565        const struct sge_rspq *rq = &adap->sge.ethrxq[pi->first_qset].rspq;
2566
2567        c->rx_coalesce_usecs = qtimer_val(adap, rq);
2568        c->rx_max_coalesced_frames = (rq->intr_params & QINTR_CNT_EN) ?
2569                adap->sge.counter_val[rq->pktcnt_idx] : 0;
2570        return 0;
2571}
2572
2573/**
2574 *      eeprom_ptov - translate a physical EEPROM address to virtual
2575 *      @phys_addr: the physical EEPROM address
2576 *      @fn: the PCI function number
2577 *      @sz: size of function-specific area
2578 *
2579 *      Translate a physical EEPROM address to virtual.  The first 1K is
2580 *      accessed through virtual addresses starting at 31K, the rest is
2581 *      accessed through virtual addresses starting at 0.
2582 *
2583 *      The mapping is as follows:
2584 *      [0..1K) -> [31K..32K)
2585 *      [1K..1K+A) -> [31K-A..31K)
2586 *      [1K+A..ES) -> [0..ES-A-1K)
2587 *
2588 *      where A = @fn * @sz, and ES = EEPROM size.
2589 */
2590static int eeprom_ptov(unsigned int phys_addr, unsigned int fn, unsigned int sz)
2591{
2592        fn *= sz;
2593        if (phys_addr < 1024)
2594                return phys_addr + (31 << 10);
2595        if (phys_addr < 1024 + fn)
2596                return 31744 - fn + phys_addr - 1024;
2597        if (phys_addr < EEPROMSIZE)
2598                return phys_addr - 1024 - fn;
2599        return -EINVAL;
2600}
2601
2602/*
2603 * The next two routines implement eeprom read/write from physical addresses.
2604 */
2605static int eeprom_rd_phys(struct adapter *adap, unsigned int phys_addr, u32 *v)
2606{
2607        int vaddr = eeprom_ptov(phys_addr, adap->fn, EEPROMPFSIZE);
2608
2609        if (vaddr >= 0)
2610                vaddr = pci_read_vpd(adap->pdev, vaddr, sizeof(u32), v);
2611        return vaddr < 0 ? vaddr : 0;
2612}
2613
2614static int eeprom_wr_phys(struct adapter *adap, unsigned int phys_addr, u32 v)
2615{
2616        int vaddr = eeprom_ptov(phys_addr, adap->fn, EEPROMPFSIZE);
2617
2618        if (vaddr >= 0)
2619                vaddr = pci_write_vpd(adap->pdev, vaddr, sizeof(u32), &v);
2620        return vaddr < 0 ? vaddr : 0;
2621}
2622
2623#define EEPROM_MAGIC 0x38E2F10C
2624
2625static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e,
2626                      u8 *data)
2627{
2628        int i, err = 0;
2629        struct adapter *adapter = netdev2adap(dev);
2630
2631        u8 *buf = kmalloc(EEPROMSIZE, GFP_KERNEL);
2632        if (!buf)
2633                return -ENOMEM;
2634
2635        e->magic = EEPROM_MAGIC;
2636        for (i = e->offset & ~3; !err && i < e->offset + e->len; i += 4)
2637                err = eeprom_rd_phys(adapter, i, (u32 *)&buf[i]);
2638
2639        if (!err)
2640                memcpy(data, buf + e->offset, e->len);
2641        kfree(buf);
2642        return err;
2643}
2644
2645static int set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
2646                      u8 *data)
2647{
2648        u8 *buf;
2649        int err = 0;
2650        u32 aligned_offset, aligned_len, *p;
2651        struct adapter *adapter = netdev2adap(dev);
2652
2653        if (eeprom->magic != EEPROM_MAGIC)
2654                return -EINVAL;
2655
2656        aligned_offset = eeprom->offset & ~3;
2657        aligned_len = (eeprom->len + (eeprom->offset & 3) + 3) & ~3;
2658
2659        if (adapter->fn > 0) {
2660                u32 start = 1024 + adapter->fn * EEPROMPFSIZE;
2661
2662                if (aligned_offset < start ||
2663                    aligned_offset + aligned_len > start + EEPROMPFSIZE)
2664                        return -EPERM;
2665        }
2666
2667        if (aligned_offset != eeprom->offset || aligned_len != eeprom->len) {
2668                /*
2669                 * RMW possibly needed for first or last words.
2670                 */
2671                buf = kmalloc(aligned_len, GFP_KERNEL);
2672                if (!buf)
2673                        return -ENOMEM;
2674                err = eeprom_rd_phys(adapter, aligned_offset, (u32 *)buf);
2675                if (!err && aligned_len > 4)
2676                        err = eeprom_rd_phys(adapter,
2677                                             aligned_offset + aligned_len - 4,
2678                                             (u32 *)&buf[aligned_len - 4]);
2679                if (err)
2680                        goto out;
2681                memcpy(buf + (eeprom->offset & 3), data, eeprom->len);
2682        } else
2683                buf = data;
2684
2685        err = t4_seeprom_wp(adapter, false);
2686        if (err)
2687                goto out;
2688
2689        for (p = (u32 *)buf; !err && aligned_len; aligned_len -= 4, p++) {
2690                err = eeprom_wr_phys(adapter, aligned_offset, *p);
2691                aligned_offset += 4;
2692        }
2693
2694        if (!err)
2695                err = t4_seeprom_wp(adapter, true);
2696out:
2697        if (buf != data)
2698                kfree(buf);
2699        return err;
2700}
2701
2702static int set_flash(struct net_device *netdev, struct ethtool_flash *ef)
2703{
2704        int ret;
2705        const struct firmware *fw;
2706        struct adapter *adap = netdev2adap(netdev);
2707
2708        ef->data[sizeof(ef->data) - 1] = '\0';
2709        ret = request_firmware(&fw, ef->data, adap->pdev_dev);
2710        if (ret < 0)
2711                return ret;
2712
2713        ret = t4_load_fw(adap, fw->data, fw->size);
2714        release_firmware(fw);
2715        if (!ret)
2716                dev_info(adap->pdev_dev, "loaded firmware %s\n", ef->data);
2717        return ret;
2718}
2719
2720#define WOL_SUPPORTED (WAKE_BCAST | WAKE_MAGIC)
2721#define BCAST_CRC 0xa0ccc1a6
2722
2723static void get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2724{
2725        wol->supported = WAKE_BCAST | WAKE_MAGIC;
2726        wol->wolopts = netdev2adap(dev)->wol;
2727        memset(&wol->sopass, 0, sizeof(wol->sopass));
2728}
2729
2730static int set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2731{
2732        int err = 0;
2733        struct port_info *pi = netdev_priv(dev);
2734
2735        if (wol->wolopts & ~WOL_SUPPORTED)
2736                return -EINVAL;
2737        t4_wol_magic_enable(pi->adapter, pi->tx_chan,
2738                            (wol->wolopts & WAKE_MAGIC) ? dev->dev_addr : NULL);
2739        if (wol->wolopts & WAKE_BCAST) {
2740                err = t4_wol_pat_enable(pi->adapter, pi->tx_chan, 0xfe, ~0ULL,
2741                                        ~0ULL, 0, false);
2742                if (!err)
2743                        err = t4_wol_pat_enable(pi->adapter, pi->tx_chan, 1,
2744                                                ~6ULL, ~0ULL, BCAST_CRC, true);
2745        } else
2746                t4_wol_pat_enable(pi->adapter, pi->tx_chan, 0, 0, 0, 0, false);
2747        return err;
2748}
2749
2750static int cxgb_set_features(struct net_device *dev, netdev_features_t features)
2751{
2752        const struct port_info *pi = netdev_priv(dev);
2753        netdev_features_t changed = dev->features ^ features;
2754        int err;
2755
2756        if (!(changed & NETIF_F_HW_VLAN_CTAG_RX))
2757                return 0;
2758
2759        err = t4_set_rxmode(pi->adapter, pi->adapter->fn, pi->viid, -1,
2760                            -1, -1, -1,
2761                            !!(features & NETIF_F_HW_VLAN_CTAG_RX), true);
2762        if (unlikely(err))
2763                dev->features = features ^ NETIF_F_HW_VLAN_CTAG_RX;
2764        return err;
2765}
2766
2767static u32 get_rss_table_size(struct net_device *dev)
2768{
2769        const struct port_info *pi = netdev_priv(dev);
2770
2771        return pi->rss_size;
2772}
2773
2774static int get_rss_table(struct net_device *dev, u32 *p)
2775{
2776        const struct port_info *pi = netdev_priv(dev);
2777        unsigned int n = pi->rss_size;
2778
2779        while (n--)
2780                p[n] = pi->rss[n];
2781        return 0;
2782}
2783
2784static int set_rss_table(struct net_device *dev, const u32 *p)
2785{
2786        unsigned int i;
2787        struct port_info *pi = netdev_priv(dev);
2788
2789        for (i = 0; i < pi->rss_size; i++)
2790                pi->rss[i] = p[i];
2791        if (pi->adapter->flags & FULL_INIT_DONE)
2792                return write_rss(pi, pi->rss);
2793        return 0;
2794}
2795
2796static int get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
2797                     u32 *rules)
2798{
2799        const struct port_info *pi = netdev_priv(dev);
2800
2801        switch (info->cmd) {
2802        case ETHTOOL_GRXFH: {
2803                unsigned int v = pi->rss_mode;
2804
2805                info->data = 0;
2806                switch (info->flow_type) {
2807                case TCP_V4_FLOW:
2808                        if (v & FW_RSS_VI_CONFIG_CMD_IP4FOURTUPEN)
2809                                info->data = RXH_IP_SRC | RXH_IP_DST |
2810                                             RXH_L4_B_0_1 | RXH_L4_B_2_3;
2811                        else if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN)
2812                                info->data = RXH_IP_SRC | RXH_IP_DST;
2813                        break;
2814                case UDP_V4_FLOW:
2815                        if ((v & FW_RSS_VI_CONFIG_CMD_IP4FOURTUPEN) &&
2816                            (v & FW_RSS_VI_CONFIG_CMD_UDPEN))
2817                                info->data = RXH_IP_SRC | RXH_IP_DST |
2818                                             RXH_L4_B_0_1 | RXH_L4_B_2_3;
2819                        else if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN)
2820                                info->data = RXH_IP_SRC | RXH_IP_DST;
2821                        break;
2822                case SCTP_V4_FLOW:
2823                case AH_ESP_V4_FLOW:
2824                case IPV4_FLOW:
2825                        if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN)
2826                                info->data = RXH_IP_SRC | RXH_IP_DST;
2827                        break;
2828                case TCP_V6_FLOW:
2829                        if (v & FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN)
2830                                info->data = RXH_IP_SRC | RXH_IP_DST |
2831                                             RXH_L4_B_0_1 | RXH_L4_B_2_3;
2832                        else if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN)
2833                                info->data = RXH_IP_SRC | RXH_IP_DST;
2834                        break;
2835                case UDP_V6_FLOW:
2836                        if ((v & FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN) &&
2837                            (v & FW_RSS_VI_CONFIG_CMD_UDPEN))
2838                                info->data = RXH_IP_SRC | RXH_IP_DST |
2839                                             RXH_L4_B_0_1 | RXH_L4_B_2_3;
2840                        else if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN)
2841                                info->data = RXH_IP_SRC | RXH_IP_DST;
2842                        break;
2843                case SCTP_V6_FLOW:
2844                case AH_ESP_V6_FLOW:
2845                case IPV6_FLOW:
2846                        if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN)
2847                                info->data = RXH_IP_SRC | RXH_IP_DST;
2848                        break;
2849                }
2850                return 0;
2851        }
2852        case ETHTOOL_GRXRINGS:
2853                info->data = pi->nqsets;
2854                return 0;
2855        }
2856        return -EOPNOTSUPP;
2857}
2858
2859static const struct ethtool_ops cxgb_ethtool_ops = {
2860        .get_settings      = get_settings,
2861        .set_settings      = set_settings,
2862        .get_drvinfo       = get_drvinfo,
2863        .get_msglevel      = get_msglevel,
2864        .set_msglevel      = set_msglevel,
2865        .get_ringparam     = get_sge_param,
2866        .set_ringparam     = set_sge_param,
2867        .get_coalesce      = get_coalesce,
2868        .set_coalesce      = set_coalesce,
2869        .get_eeprom_len    = get_eeprom_len,
2870        .get_eeprom        = get_eeprom,
2871        .set_eeprom        = set_eeprom,
2872        .get_pauseparam    = get_pauseparam,
2873        .set_pauseparam    = set_pauseparam,
2874        .get_link          = ethtool_op_get_link,
2875        .get_strings       = get_strings,
2876        .set_phys_id       = identify_port,
2877        .nway_reset        = restart_autoneg,
2878        .get_sset_count    = get_sset_count,
2879        .get_ethtool_stats = get_stats,
2880        .get_regs_len      = get_regs_len,
2881        .get_regs          = get_regs,
2882        .get_wol           = get_wol,
2883        .set_wol           = set_wol,
2884        .get_rxnfc         = get_rxnfc,
2885        .get_rxfh_indir_size = get_rss_table_size,
2886        .get_rxfh_indir    = get_rss_table,
2887        .set_rxfh_indir    = set_rss_table,
2888        .flash_device      = set_flash,
2889};
2890
2891/*
2892 * debugfs support
2893 */
2894static ssize_t mem_read(struct file *file, char __user *buf, size_t count,
2895                        loff_t *ppos)
2896{
2897        loff_t pos = *ppos;
2898        loff_t avail = file_inode(file)->i_size;
2899        unsigned int mem = (uintptr_t)file->private_data & 3;
2900        struct adapter *adap = file->private_data - mem;
2901
2902        if (pos < 0)
2903                return -EINVAL;
2904        if (pos >= avail)
2905                return 0;
2906        if (count > avail - pos)
2907                count = avail - pos;
2908
2909        while (count) {
2910                size_t len;
2911                int ret, ofst;
2912                __be32 data[16];
2913
2914                if ((mem == MEM_MC) || (mem == MEM_MC1))
2915                        ret = t4_mc_read(adap, mem % MEM_MC, pos, data, NULL);
2916                else
2917                        ret = t4_edc_read(adap, mem, pos, data, NULL);
2918                if (ret)
2919                        return ret;
2920
2921                ofst = pos % sizeof(data);
2922                len = min(count, sizeof(data) - ofst);
2923                if (copy_to_user(buf, (u8 *)data + ofst, len))
2924                        return -EFAULT;
2925
2926                buf += len;
2927                pos += len;
2928                count -= len;
2929        }
2930        count = pos - *ppos;
2931        *ppos = pos;
2932        return count;
2933}
2934
2935static const struct file_operations mem_debugfs_fops = {
2936        .owner   = THIS_MODULE,
2937        .open    = simple_open,
2938        .read    = mem_read,
2939        .llseek  = default_llseek,
2940};
2941
2942static void add_debugfs_mem(struct adapter *adap, const char *name,
2943                            unsigned int idx, unsigned int size_mb)
2944{
2945        struct dentry *de;
2946
2947        de = debugfs_create_file(name, S_IRUSR, adap->debugfs_root,
2948                                 (void *)adap + idx, &mem_debugfs_fops);
2949        if (de && de->d_inode)
2950                de->d_inode->i_size = size_mb << 20;
2951}
2952
2953static int setup_debugfs(struct adapter *adap)
2954{
2955        int i;
2956        u32 size;
2957
2958        if (IS_ERR_OR_NULL(adap->debugfs_root))
2959                return -1;
2960
2961        i = t4_read_reg(adap, MA_TARGET_MEM_ENABLE);
2962        if (i & EDRAM0_ENABLE) {
2963                size = t4_read_reg(adap, MA_EDRAM0_BAR);
2964                add_debugfs_mem(adap, "edc0", MEM_EDC0, EDRAM_SIZE_GET(size));
2965        }
2966        if (i & EDRAM1_ENABLE) {
2967                size = t4_read_reg(adap, MA_EDRAM1_BAR);
2968                add_debugfs_mem(adap, "edc1", MEM_EDC1, EDRAM_SIZE_GET(size));
2969        }
2970        if (is_t4(adap->chip)) {
2971                size = t4_read_reg(adap, MA_EXT_MEMORY_BAR);
2972                if (i & EXT_MEM_ENABLE)
2973                        add_debugfs_mem(adap, "mc", MEM_MC,
2974                                        EXT_MEM_SIZE_GET(size));
2975        } else {
2976                if (i & EXT_MEM_ENABLE) {
2977                        size = t4_read_reg(adap, MA_EXT_MEMORY_BAR);
2978                        add_debugfs_mem(adap, "mc0", MEM_MC0,
2979                                        EXT_MEM_SIZE_GET(size));
2980                }
2981                if (i & EXT_MEM1_ENABLE) {
2982                        size = t4_read_reg(adap, MA_EXT_MEMORY1_BAR);
2983                        add_debugfs_mem(adap, "mc1", MEM_MC1,
2984                                        EXT_MEM_SIZE_GET(size));
2985                }
2986        }
2987        if (adap->l2t)
2988                debugfs_create_file("l2t", S_IRUSR, adap->debugfs_root, adap,
2989                                    &t4_l2t_fops);
2990        return 0;
2991}
2992
2993/*
2994 * upper-layer driver support
2995 */
2996
2997/*
2998 * Allocate an active-open TID and set it to the supplied value.
2999 */
3000int cxgb4_alloc_atid(struct tid_info *t, void *data)
3001{
3002        int atid = -1;
3003
3004        spin_lock_bh(&t->atid_lock);
3005        if (t->afree) {
3006                union aopen_entry *p = t->afree;
3007
3008                atid = (p - t->atid_tab) + t->atid_base;
3009                t->afree = p->next;
3010                p->data = data;
3011                t->atids_in_use++;
3012        }
3013        spin_unlock_bh(&t->atid_lock);
3014        return atid;
3015}
3016EXPORT_SYMBOL(cxgb4_alloc_atid);
3017
3018/*
3019 * Release an active-open TID.
3020 */
3021void cxgb4_free_atid(struct tid_info *t, unsigned int atid)
3022{
3023        union aopen_entry *p = &t->atid_tab[atid - t->atid_base];
3024
3025        spin_lock_bh(&t->atid_lock);
3026        p->next = t->afree;
3027        t->afree = p;
3028        t->atids_in_use--;
3029        spin_unlock_bh(&t->atid_lock);
3030}
3031EXPORT_SYMBOL(cxgb4_free_atid);
3032
3033/*
3034 * Allocate a server TID and set it to the supplied value.
3035 */
3036int cxgb4_alloc_stid(struct tid_info *t, int family, void *data)
3037{
3038        int stid;
3039
3040        spin_lock_bh(&t->stid_lock);
3041        if (family == PF_INET) {
3042                stid = find_first_zero_bit(t->stid_bmap, t->nstids);
3043                if (stid < t->nstids)
3044                        __set_bit(stid, t->stid_bmap);
3045                else
3046                        stid = -1;
3047        } else {
3048                stid = bitmap_find_free_region(t->stid_bmap, t->nstids, 2);
3049                if (stid < 0)
3050                        stid = -1;
3051        }
3052        if (stid >= 0) {
3053                t->stid_tab[stid].data = data;
3054                stid += t->stid_base;
3055                t->stids_in_use++;
3056        }
3057        spin_unlock_bh(&t->stid_lock);
3058        return stid;
3059}
3060EXPORT_SYMBOL(cxgb4_alloc_stid);
3061
3062/* Allocate a server filter TID and set it to the supplied value.
3063 */
3064int cxgb4_alloc_sftid(struct tid_info *t, int family, void *data)
3065{
3066        int stid;
3067
3068        spin_lock_bh(&t->stid_lock);
3069        if (family == PF_INET) {
3070                stid = find_next_zero_bit(t->stid_bmap,
3071                                t->nstids + t->nsftids, t->nstids);
3072                if (stid < (t->nstids + t->nsftids))
3073                        __set_bit(stid, t->stid_bmap);
3074                else
3075                        stid = -1;
3076        } else {
3077                stid = -1;
3078        }
3079        if (stid >= 0) {
3080                t->stid_tab[stid].data = data;
3081                stid += t->stid_base;
3082                t->stids_in_use++;
3083        }
3084        spin_unlock_bh(&t->stid_lock);
3085        return stid;
3086}
3087EXPORT_SYMBOL(cxgb4_alloc_sftid);
3088
3089/* Release a server TID.
3090 */
3091void cxgb4_free_stid(struct tid_info *t, unsigned int stid, int family)
3092{
3093        stid -= t->stid_base;
3094        spin_lock_bh(&t->stid_lock);
3095        if (family == PF_INET)
3096                __clear_bit(stid, t->stid_bmap);
3097        else
3098                bitmap_release_region(t->stid_bmap, stid, 2);
3099        t->stid_tab[stid].data = NULL;
3100        t->stids_in_use--;
3101        spin_unlock_bh(&t->stid_lock);
3102}
3103EXPORT_SYMBOL(cxgb4_free_stid);
3104
3105/*
3106 * Populate a TID_RELEASE WR.  Caller must properly size the skb.
3107 */
3108static void mk_tid_release(struct sk_buff *skb, unsigned int chan,
3109                           unsigned int tid)
3110{
3111        struct cpl_tid_release *req;
3112
3113        set_wr_txq(skb, CPL_PRIORITY_SETUP, chan);
3114        req = (struct cpl_tid_release *)__skb_put(skb, sizeof(*req));
3115        INIT_TP_WR(req, tid);
3116        OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_TID_RELEASE, tid));
3117}
3118
3119/*
3120 * Queue a TID release request and if necessary schedule a work queue to
3121 * process it.
3122 */
3123static void cxgb4_queue_tid_release(struct tid_info *t, unsigned int chan,
3124                                    unsigned int tid)
3125{
3126        void **p = &t->tid_tab[tid];
3127        struct adapter *adap = container_of(t, struct adapter, tids);
3128
3129        spin_lock_bh(&adap->tid_release_lock);
3130        *p = adap->tid_release_head;
3131        /* Low 2 bits encode the Tx channel number */
3132        adap->tid_release_head = (void **)((uintptr_t)p | chan);
3133        if (!adap->tid_release_task_busy) {
3134                adap->tid_release_task_busy = true;
3135                queue_work(workq, &adap->tid_release_task);
3136        }
3137        spin_unlock_bh(&adap->tid_release_lock);
3138}
3139
3140/*
3141 * Process the list of pending TID release requests.
3142 */
3143static void process_tid_release_list(struct work_struct *work)
3144{
3145        struct sk_buff *skb;
3146        struct adapter *adap;
3147
3148        adap = container_of(work, struct adapter, tid_release_task);
3149
3150        spin_lock_bh(&adap->tid_release_lock);
3151        while (adap->tid_release_head) {
3152                void **p = adap->tid_release_head;
3153                unsigned int chan = (uintptr_t)p & 3;
3154                p = (void *)p - chan;
3155
3156                adap->tid_release_head = *p;
3157                *p = NULL;
3158                spin_unlock_bh(&adap->tid_release_lock);
3159
3160                while (!(skb = alloc_skb(sizeof(struct cpl_tid_release),
3161                                         GFP_KERNEL)))
3162                        schedule_timeout_uninterruptible(1);
3163
3164                mk_tid_release(skb, chan, p - adap->tids.tid_tab);
3165                t4_ofld_send(adap, skb);
3166                spin_lock_bh(&adap->tid_release_lock);
3167        }
3168        adap->tid_release_task_busy = false;
3169        spin_unlock_bh(&adap->tid_release_lock);
3170}
3171
3172/*
3173 * Release a TID and inform HW.  If we are unable to allocate the release
3174 * message we defer to a work queue.
3175 */
3176void cxgb4_remove_tid(struct tid_info *t, unsigned int chan, unsigned int tid)
3177{
3178        void *old;
3179        struct sk_buff *skb;
3180        struct adapter *adap = container_of(t, struct adapter, tids);
3181
3182        old = t->tid_tab[tid];
3183        skb = alloc_skb(sizeof(struct cpl_tid_release), GFP_ATOMIC);
3184        if (likely(skb)) {
3185                t->tid_tab[tid] = NULL;
3186                mk_tid_release(skb, chan, tid);
3187                t4_ofld_send(adap, skb);
3188        } else
3189                cxgb4_queue_tid_release(t, chan, tid);
3190        if (old)
3191                atomic_dec(&t->tids_in_use);
3192}
3193EXPORT_SYMBOL(cxgb4_remove_tid);
3194
3195/*
3196 * Allocate and initialize the TID tables.  Returns 0 on success.
3197 */
3198static int tid_init(struct tid_info *t)
3199{
3200        size_t size;
3201        unsigned int stid_bmap_size;
3202        unsigned int natids = t->natids;
3203
3204        stid_bmap_size = BITS_TO_LONGS(t->nstids + t->nsftids);
3205        size = t->ntids * sizeof(*t->tid_tab) +
3206               natids * sizeof(*t->atid_tab) +
3207               t->nstids * sizeof(*t->stid_tab) +
3208               t->nsftids * sizeof(*t->stid_tab) +
3209               stid_bmap_size * sizeof(long) +
3210               t->nftids * sizeof(*t->ftid_tab) +
3211               t->nsftids * sizeof(*t->ftid_tab);
3212
3213        t->tid_tab = t4_alloc_mem(size);
3214        if (!t->tid_tab)
3215                return -ENOMEM;
3216
3217        t->atid_tab = (union aopen_entry *)&t->tid_tab[t->ntids];
3218        t->stid_tab = (struct serv_entry *)&t->atid_tab[natids];
3219        t->stid_bmap = (unsigned long *)&t->stid_tab[t->nstids + t->nsftids];
3220        t->ftid_tab = (struct filter_entry *)&t->stid_bmap[stid_bmap_size];
3221        spin_lock_init(&t->stid_lock);
3222        spin_lock_init(&t->atid_lock);
3223
3224        t->stids_in_use = 0;
3225        t->afree = NULL;
3226        t->atids_in_use = 0;
3227        atomic_set(&t->tids_in_use, 0);
3228
3229        /* Setup the free list for atid_tab and clear the stid bitmap. */
3230        if (natids) {
3231                while (--natids)
3232                        t->atid_tab[natids - 1].next = &t->atid_tab[natids];
3233                t->afree = t->atid_tab;
3234        }
3235        bitmap_zero(t->stid_bmap, t->nstids + t->nsftids);
3236        return 0;
3237}
3238
3239static int cxgb4_clip_get(const struct net_device *dev,
3240                          const struct in6_addr *lip)
3241{
3242        struct adapter *adap;
3243        struct fw_clip_cmd c;
3244
3245        adap = netdev2adap(dev);
3246        memset(&c, 0, sizeof(c));
3247        c.op_to_write = htonl(FW_CMD_OP(FW_CLIP_CMD) |
3248                        FW_CMD_REQUEST | FW_CMD_WRITE);
3249        c.alloc_to_len16 = htonl(F_FW_CLIP_CMD_ALLOC | FW_LEN16(c));
3250        *(__be64 *)&c.ip_hi = *(__be64 *)(lip->s6_addr);
3251        *(__be64 *)&c.ip_lo = *(__be64 *)(lip->s6_addr + 8);
3252        return t4_wr_mbox_meat(adap, adap->mbox, &c, sizeof(c), &c, false);
3253}
3254
3255static int cxgb4_clip_release(const struct net_device *dev,
3256                              const struct in6_addr *lip)
3257{
3258        struct adapter *adap;
3259        struct fw_clip_cmd c;
3260
3261        adap = netdev2adap(dev);
3262        memset(&c, 0, sizeof(c));
3263        c.op_to_write = htonl(FW_CMD_OP(FW_CLIP_CMD) |
3264                        FW_CMD_REQUEST | FW_CMD_READ);
3265        c.alloc_to_len16 = htonl(F_FW_CLIP_CMD_FREE | FW_LEN16(c));
3266        *(__be64 *)&c.ip_hi = *(__be64 *)(lip->s6_addr);
3267        *(__be64 *)&c.ip_lo = *(__be64 *)(lip->s6_addr + 8);
3268        return t4_wr_mbox_meat(adap, adap->mbox, &c, sizeof(c), &c, false);
3269}
3270
3271/**
3272 *      cxgb4_create_server - create an IP server
3273 *      @dev: the device
3274 *      @stid: the server TID
3275 *      @sip: local IP address to bind server to
3276 *      @sport: the server's TCP port
3277 *      @queue: queue to direct messages from this server to
3278 *
3279 *      Create an IP server for the given port and address.
3280 *      Returns <0 on error and one of the %NET_XMIT_* values on success.
3281 */
3282int cxgb4_create_server(const struct net_device *dev, unsigned int stid,
3283                        __be32 sip, __be16 sport, __be16 vlan,
3284                        unsigned int queue)
3285{
3286        unsigned int chan;
3287        struct sk_buff *skb;
3288        struct adapter *adap;
3289        struct cpl_pass_open_req *req;
3290        int ret;
3291
3292        skb = alloc_skb(sizeof(*req), GFP_KERNEL);
3293        if (!skb)
3294                return -ENOMEM;
3295
3296        adap = netdev2adap(dev);
3297        req = (struct cpl_pass_open_req *)__skb_put(skb, sizeof(*req));
3298        INIT_TP_WR(req, 0);
3299        OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_PASS_OPEN_REQ, stid));
3300        req->local_port = sport;
3301        req->peer_port = htons(0);
3302        req->local_ip = sip;
3303        req->peer_ip = htonl(0);
3304        chan = rxq_to_chan(&adap->sge, queue);
3305        req->opt0 = cpu_to_be64(TX_CHAN(chan));
3306        req->opt1 = cpu_to_be64(CONN_POLICY_ASK |
3307                                SYN_RSS_ENABLE | SYN_RSS_QUEUE(queue));
3308        ret = t4_mgmt_tx(adap, skb);
3309        return net_xmit_eval(ret);
3310}
3311EXPORT_SYMBOL(cxgb4_create_server);
3312
3313/*      cxgb4_create_server6 - create an IPv6 server
3314 *      @dev: the device
3315 *      @stid: the server TID
3316 *      @sip: local IPv6 address to bind server to
3317 *      @sport: the server's TCP port
3318 *      @queue: queue to direct messages from this server to
3319 *
3320 *      Create an IPv6 server for the given port and address.
3321 *      Returns <0 on error and one of the %NET_XMIT_* values on success.
3322 */
3323int cxgb4_create_server6(const struct net_device *dev, unsigned int stid,
3324                         const struct in6_addr *sip, __be16 sport,
3325                         unsigned int queue)
3326{
3327        unsigned int chan;
3328        struct sk_buff *skb;
3329        struct adapter *adap;
3330        struct cpl_pass_open_req6 *req;
3331        int ret;
3332
3333        skb = alloc_skb(sizeof(*req), GFP_KERNEL);
3334        if (!skb)
3335                return -ENOMEM;
3336
3337        adap = netdev2adap(dev);
3338        req = (struct cpl_pass_open_req6 *)__skb_put(skb, sizeof(*req));
3339        INIT_TP_WR(req, 0);
3340        OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_PASS_OPEN_REQ6, stid));
3341        req->local_port = sport;
3342        req->peer_port = htons(0);
3343        req->local_ip_hi = *(__be64 *)(sip->s6_addr);
3344        req->local_ip_lo = *(__be64 *)(sip->s6_addr + 8);
3345        req->peer_ip_hi = cpu_to_be64(0);
3346        req->peer_ip_lo = cpu_to_be64(0);
3347        chan = rxq_to_chan(&adap->sge, queue);
3348        req->opt0 = cpu_to_be64(TX_CHAN(chan));
3349        req->opt1 = cpu_to_be64(CONN_POLICY_ASK |
3350                                SYN_RSS_ENABLE | SYN_RSS_QUEUE(queue));
3351        ret = t4_mgmt_tx(adap, skb);
3352        return net_xmit_eval(ret);
3353}
3354EXPORT_SYMBOL(cxgb4_create_server6);
3355
3356int cxgb4_remove_server(const struct net_device *dev, unsigned int stid,
3357                        unsigned int queue, bool ipv6)
3358{
3359        struct sk_buff *skb;
3360        struct adapter *adap;
3361        struct cpl_close_listsvr_req *req;
3362        int ret;
3363
3364        adap = netdev2adap(dev);
3365
3366        skb = alloc_skb(sizeof(*req), GFP_KERNEL);
3367        if (!skb)
3368                return -ENOMEM;
3369
3370        req = (struct cpl_close_listsvr_req *)__skb_put(skb, sizeof(*req));
3371        INIT_TP_WR(req, 0);
3372        OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_LISTSRV_REQ, stid));
3373        req->reply_ctrl = htons(NO_REPLY(0) | (ipv6 ? LISTSVR_IPV6(1) :
3374                                LISTSVR_IPV6(0)) | QUEUENO(queue));
3375        ret = t4_mgmt_tx(adap, skb);
3376        return net_xmit_eval(ret);
3377}
3378EXPORT_SYMBOL(cxgb4_remove_server);
3379
3380/**
3381 *      cxgb4_best_mtu - find the entry in the MTU table closest to an MTU
3382 *      @mtus: the HW MTU table
3383 *      @mtu: the target MTU
3384 *      @idx: index of selected entry in the MTU table
3385 *
3386 *      Returns the index and the value in the HW MTU table that is closest to
3387 *      but does not exceed @mtu, unless @mtu is smaller than any value in the
3388 *      table, in which case that smallest available value is selected.
3389 */
3390unsigned int cxgb4_best_mtu(const unsigned short *mtus, unsigned short mtu,
3391                            unsigned int *idx)
3392{
3393        unsigned int i = 0;
3394
3395        while (i < NMTUS - 1 && mtus[i + 1] <= mtu)
3396                ++i;
3397        if (idx)
3398                *idx = i;
3399        return mtus[i];
3400}
3401EXPORT_SYMBOL(cxgb4_best_mtu);
3402
3403/**
3404 *      cxgb4_port_chan - get the HW channel of a port
3405 *      @dev: the net device for the port
3406 *
3407 *      Return the HW Tx channel of the given port.
3408 */
3409unsigned int cxgb4_port_chan(const struct net_device *dev)
3410{
3411        return netdev2pinfo(dev)->tx_chan;
3412}
3413EXPORT_SYMBOL(cxgb4_port_chan);
3414
3415unsigned int cxgb4_dbfifo_count(const struct net_device *dev, int lpfifo)
3416{
3417        struct adapter *adap = netdev2adap(dev);
3418        u32 v1, v2, lp_count, hp_count;
3419
3420        v1 = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
3421        v2 = t4_read_reg(adap, SGE_DBFIFO_STATUS2);
3422        if (is_t4(adap->chip)) {
3423                lp_count = G_LP_COUNT(v1);
3424                hp_count = G_HP_COUNT(v1);
3425        } else {
3426                lp_count = G_LP_COUNT_T5(v1);
3427                hp_count = G_HP_COUNT_T5(v2);
3428        }
3429        return lpfifo ? lp_count : hp_count;
3430}
3431EXPORT_SYMBOL(cxgb4_dbfifo_count);
3432
3433/**
3434 *      cxgb4_port_viid - get the VI id of a port
3435 *      @dev: the net device for the port
3436 *
3437 *      Return the VI id of the given port.
3438 */
3439unsigned int cxgb4_port_viid(const struct net_device *dev)
3440{
3441        return netdev2pinfo(dev)->viid;
3442}
3443EXPORT_SYMBOL(cxgb4_port_viid);
3444
3445/**
3446 *      cxgb4_port_idx - get the index of a port
3447 *      @dev: the net device for the port
3448 *
3449 *      Return the index of the given port.
3450 */
3451unsigned int cxgb4_port_idx(const struct net_device *dev)
3452{
3453        return netdev2pinfo(dev)->port_id;
3454}
3455EXPORT_SYMBOL(cxgb4_port_idx);
3456
3457void cxgb4_get_tcp_stats(struct pci_dev *pdev, struct tp_tcp_stats *v4,
3458                         struct tp_tcp_stats *v6)
3459{
3460        struct adapter *adap = pci_get_drvdata(pdev);
3461
3462        spin_lock(&adap->stats_lock);
3463        t4_tp_get_tcp_stats(adap, v4, v6);
3464        spin_unlock(&adap->stats_lock);
3465}
3466EXPORT_SYMBOL(cxgb4_get_tcp_stats);
3467
3468void cxgb4_iscsi_init(struct net_device *dev, unsigned int tag_mask,
3469                      const unsigned int *pgsz_order)
3470{
3471        struct adapter *adap = netdev2adap(dev);
3472
3473        t4_write_reg(adap, ULP_RX_ISCSI_TAGMASK, tag_mask);
3474        t4_write_reg(adap, ULP_RX_ISCSI_PSZ, HPZ0(pgsz_order[0]) |
3475                     HPZ1(pgsz_order[1]) | HPZ2(pgsz_order[2]) |
3476                     HPZ3(pgsz_order[3]));
3477}
3478EXPORT_SYMBOL(cxgb4_iscsi_init);
3479
3480int cxgb4_flush_eq_cache(struct net_device *dev)
3481{
3482        struct adapter *adap = netdev2adap(dev);
3483        int ret;
3484
3485        ret = t4_fwaddrspace_write(adap, adap->mbox,
3486                                   0xe1000000 + A_SGE_CTXT_CMD, 0x20000000);
3487        return ret;
3488}
3489EXPORT_SYMBOL(cxgb4_flush_eq_cache);
3490
3491static int read_eq_indices(struct adapter *adap, u16 qid, u16 *pidx, u16 *cidx)
3492{
3493        u32 addr = t4_read_reg(adap, A_SGE_DBQ_CTXT_BADDR) + 24 * qid + 8;
3494        __be64 indices;
3495        int ret;
3496
3497        ret = t4_mem_win_read_len(adap, addr, (__be32 *)&indices, 8);
3498        if (!ret) {
3499                *cidx = (be64_to_cpu(indices) >> 25) & 0xffff;
3500                *pidx = (be64_to_cpu(indices) >> 9) & 0xffff;
3501        }
3502        return ret;
3503}
3504
3505int cxgb4_sync_txq_pidx(struct net_device *dev, u16 qid, u16 pidx,
3506                        u16 size)
3507{
3508        struct adapter *adap = netdev2adap(dev);
3509        u16 hw_pidx, hw_cidx;
3510        int ret;
3511
3512        ret = read_eq_indices(adap, qid, &hw_pidx, &hw_cidx);
3513        if (ret)
3514                goto out;
3515
3516        if (pidx != hw_pidx) {
3517                u16 delta;
3518
3519                if (pidx >= hw_pidx)
3520                        delta = pidx - hw_pidx;
3521                else
3522                        delta = size - hw_pidx + pidx;
3523                wmb();
3524                t4_write_reg(adap, MYPF_REG(SGE_PF_KDOORBELL),
3525                             QID(qid) | PIDX(delta));
3526        }
3527out:
3528        return ret;
3529}
3530EXPORT_SYMBOL(cxgb4_sync_txq_pidx);
3531
3532void cxgb4_disable_db_coalescing(struct net_device *dev)
3533{
3534        struct adapter *adap;
3535
3536        adap = netdev2adap(dev);
3537        t4_set_reg_field(adap, A_SGE_DOORBELL_CONTROL, F_NOCOALESCE,
3538                         F_NOCOALESCE);
3539}
3540EXPORT_SYMBOL(cxgb4_disable_db_coalescing);
3541
3542void cxgb4_enable_db_coalescing(struct net_device *dev)
3543{
3544        struct adapter *adap;
3545
3546        adap = netdev2adap(dev);
3547        t4_set_reg_field(adap, A_SGE_DOORBELL_CONTROL, F_NOCOALESCE, 0);
3548}
3549EXPORT_SYMBOL(cxgb4_enable_db_coalescing);
3550
3551static struct pci_driver cxgb4_driver;
3552
3553static void check_neigh_update(struct neighbour *neigh)
3554{
3555        const struct device *parent;
3556        const struct net_device *netdev = neigh->dev;
3557
3558        if (netdev->priv_flags & IFF_802_1Q_VLAN)
3559                netdev = vlan_dev_real_dev(netdev);
3560        parent = netdev->dev.parent;
3561        if (parent && parent->driver == &cxgb4_driver.driver)
3562                t4_l2t_update(dev_get_drvdata(parent), neigh);
3563}
3564
3565static int netevent_cb(struct notifier_block *nb, unsigned long event,
3566                       void *data)
3567{
3568        switch (event) {
3569        case NETEVENT_NEIGH_UPDATE:
3570                check_neigh_update(data);
3571                break;
3572        case NETEVENT_REDIRECT:
3573        default:
3574                break;
3575        }
3576        return 0;
3577}
3578
3579static bool netevent_registered;
3580static struct notifier_block cxgb4_netevent_nb = {
3581        .notifier_call = netevent_cb
3582};
3583
3584static void drain_db_fifo(struct adapter *adap, int usecs)
3585{
3586        u32 v1, v2, lp_count, hp_count;
3587
3588        do {
3589                v1 = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
3590                v2 = t4_read_reg(adap, SGE_DBFIFO_STATUS2);
3591                if (is_t4(adap->chip)) {
3592                        lp_count = G_LP_COUNT(v1);
3593                        hp_count = G_HP_COUNT(v1);
3594                } else {
3595                        lp_count = G_LP_COUNT_T5(v1);
3596                        hp_count = G_HP_COUNT_T5(v2);
3597                }
3598
3599                if (lp_count == 0 && hp_count == 0)
3600                        break;
3601                set_current_state(TASK_UNINTERRUPTIBLE);
3602                schedule_timeout(usecs_to_jiffies(usecs));
3603        } while (1);
3604}
3605
3606static void disable_txq_db(struct sge_txq *q)
3607{
3608        spin_lock_irq(&q->db_lock);
3609        q->db_disabled = 1;
3610        spin_unlock_irq(&q->db_lock);
3611}
3612
3613static void enable_txq_db(struct sge_txq *q)
3614{
3615        spin_lock_irq(&q->db_lock);
3616        q->db_disabled = 0;
3617        spin_unlock_irq(&q->db_lock);
3618}
3619
3620static void disable_dbs(struct adapter *adap)
3621{
3622        int i;
3623
3624        for_each_ethrxq(&adap->sge, i)
3625                disable_txq_db(&adap->sge.ethtxq[i].q);
3626        for_each_ofldrxq(&adap->sge, i)
3627                disable_txq_db(&adap->sge.ofldtxq[i].q);
3628        for_each_port(adap, i)
3629                disable_txq_db(&adap->sge.ctrlq[i].q);
3630}
3631
3632static void enable_dbs(struct adapter *adap)
3633{
3634        int i;
3635
3636        for_each_ethrxq(&adap->sge, i)
3637                enable_txq_db(&adap->sge.ethtxq[i].q);
3638        for_each_ofldrxq(&adap->sge, i)
3639                enable_txq_db(&adap->sge.ofldtxq[i].q);
3640        for_each_port(adap, i)
3641                enable_txq_db(&adap->sge.ctrlq[i].q);
3642}
3643
3644static void sync_txq_pidx(struct adapter *adap, struct sge_txq *q)
3645{
3646        u16 hw_pidx, hw_cidx;
3647        int ret;
3648
3649        spin_lock_bh(&q->db_lock);
3650        ret = read_eq_indices(adap, (u16)q->cntxt_id, &hw_pidx, &hw_cidx);
3651        if (ret)
3652                goto out;
3653        if (q->db_pidx != hw_pidx) {
3654                u16 delta;
3655
3656                if (q->db_pidx >= hw_pidx)
3657                        delta = q->db_pidx - hw_pidx;
3658                else
3659                        delta = q->size - hw_pidx + q->db_pidx;
3660                wmb();
3661                t4_write_reg(adap, MYPF_REG(SGE_PF_KDOORBELL),
3662                             QID(q->cntxt_id) | PIDX(delta));
3663        }
3664out:
3665        q->db_disabled = 0;
3666        spin_unlock_bh(&q->db_lock);
3667        if (ret)
3668                CH_WARN(adap, "DB drop recovery failed.\n");
3669}
3670static void recover_all_queues(struct adapter *adap)
3671{
3672        int i;
3673
3674        for_each_ethrxq(&adap->sge, i)
3675                sync_txq_pidx(adap, &adap->sge.ethtxq[i].q);
3676        for_each_ofldrxq(&adap->sge, i)
3677                sync_txq_pidx(adap, &adap->sge.ofldtxq[i].q);
3678        for_each_port(adap, i)
3679                sync_txq_pidx(adap, &adap->sge.ctrlq[i].q);
3680}
3681
3682static void notify_rdma_uld(struct adapter *adap, enum cxgb4_control cmd)
3683{
3684        mutex_lock(&uld_mutex);
3685        if (adap->uld_handle[CXGB4_ULD_RDMA])
3686                ulds[CXGB4_ULD_RDMA].control(adap->uld_handle[CXGB4_ULD_RDMA],
3687                                cmd);
3688        mutex_unlock(&uld_mutex);
3689}
3690
3691static void process_db_full(struct work_struct *work)
3692{
3693        struct adapter *adap;
3694
3695        adap = container_of(work, struct adapter, db_full_task);
3696
3697        notify_rdma_uld(adap, CXGB4_CONTROL_DB_FULL);
3698        drain_db_fifo(adap, dbfifo_drain_delay);
3699        t4_set_reg_field(adap, SGE_INT_ENABLE3,
3700                         DBFIFO_HP_INT | DBFIFO_LP_INT,
3701                         DBFIFO_HP_INT | DBFIFO_LP_INT);
3702        notify_rdma_uld(adap, CXGB4_CONTROL_DB_EMPTY);
3703}
3704
3705static void process_db_drop(struct work_struct *work)
3706{
3707        struct adapter *adap;
3708
3709        adap = container_of(work, struct adapter, db_drop_task);
3710
3711        if (is_t4(adap->chip)) {
3712                disable_dbs(adap);
3713                notify_rdma_uld(adap, CXGB4_CONTROL_DB_DROP);
3714                drain_db_fifo(adap, 1);
3715                recover_all_queues(adap);
3716                enable_dbs(adap);
3717        } else {
3718                u32 dropped_db = t4_read_reg(adap, 0x010ac);
3719                u16 qid = (dropped_db >> 15) & 0x1ffff;
3720                u16 pidx_inc = dropped_db & 0x1fff;
3721                unsigned int s_qpp;
3722                unsigned short udb_density;
3723                unsigned long qpshift;
3724                int page;
3725                u32 udb;
3726
3727                dev_warn(adap->pdev_dev,
3728                         "Dropped DB 0x%x qid %d bar2 %d coalesce %d pidx %d\n",
3729                         dropped_db, qid,
3730                         (dropped_db >> 14) & 1,
3731                         (dropped_db >> 13) & 1,
3732                         pidx_inc);
3733
3734                drain_db_fifo(adap, 1);
3735
3736                s_qpp = QUEUESPERPAGEPF1 * adap->fn;
3737                udb_density = 1 << QUEUESPERPAGEPF0_GET(t4_read_reg(adap,
3738                                SGE_EGRESS_QUEUES_PER_PAGE_PF) >> s_qpp);
3739                qpshift = PAGE_SHIFT - ilog2(udb_density);
3740                udb = qid << qpshift;
3741                udb &= PAGE_MASK;
3742                page = udb / PAGE_SIZE;
3743                udb += (qid - (page * udb_density)) * 128;
3744
3745                writel(PIDX(pidx_inc),  adap->bar2 + udb + 8);
3746
3747                /* Re-enable BAR2 WC */
3748                t4_set_reg_field(adap, 0x10b0, 1<<15, 1<<15);
3749        }
3750
3751        t4_set_reg_field(adap, A_SGE_DOORBELL_CONTROL, F_DROPPED_DB, 0);
3752}
3753
3754void t4_db_full(struct adapter *adap)
3755{
3756        if (is_t4(adap->chip)) {
3757                t4_set_reg_field(adap, SGE_INT_ENABLE3,
3758                                 DBFIFO_HP_INT | DBFIFO_LP_INT, 0);
3759                queue_work(workq, &adap->db_full_task);
3760        }
3761}
3762
3763void t4_db_dropped(struct adapter *adap)
3764{
3765        if (is_t4(adap->chip))
3766                queue_work(workq, &adap->db_drop_task);
3767}
3768
3769static void uld_attach(struct adapter *adap, unsigned int uld)
3770{
3771        void *handle;
3772        struct cxgb4_lld_info lli;
3773        unsigned short i;
3774
3775        lli.pdev = adap->pdev;
3776        lli.l2t = adap->l2t;
3777        lli.tids = &adap->tids;
3778        lli.ports = adap->port;
3779        lli.vr = &adap->vres;
3780        lli.mtus = adap->params.mtus;
3781        if (uld == CXGB4_ULD_RDMA) {
3782                lli.rxq_ids = adap->sge.rdma_rxq;
3783                lli.nrxq = adap->sge.rdmaqs;
3784        } else if (uld == CXGB4_ULD_ISCSI) {
3785                lli.rxq_ids = adap->sge.ofld_rxq;
3786                lli.nrxq = adap->sge.ofldqsets;
3787        }
3788        lli.ntxq = adap->sge.ofldqsets;
3789        lli.nchan = adap->params.nports;
3790        lli.nports = adap->params.nports;
3791        lli.wr_cred = adap->params.ofldq_wr_cred;
3792        lli.adapter_type = adap->params.rev;
3793        lli.iscsi_iolen = MAXRXDATA_GET(t4_read_reg(adap, TP_PARA_REG2));
3794        lli.udb_density = 1 << QUEUESPERPAGEPF0_GET(
3795                        t4_read_reg(adap, SGE_EGRESS_QUEUES_PER_PAGE_PF) >>
3796                        (adap->fn * 4));
3797        lli.ucq_density = 1 << QUEUESPERPAGEPF0_GET(
3798                        t4_read_reg(adap, SGE_INGRESS_QUEUES_PER_PAGE_PF) >>
3799                        (adap->fn * 4));
3800        lli.filt_mode = adap->filter_mode;
3801        /* MODQ_REQ_MAP sets queues 0-3 to chan 0-3 */
3802        for (i = 0; i < NCHAN; i++)
3803                lli.tx_modq[i] = i;
3804        lli.gts_reg = adap->regs + MYPF_REG(SGE_PF_GTS);
3805        lli.db_reg = adap->regs + MYPF_REG(SGE_PF_KDOORBELL);
3806        lli.fw_vers = adap->params.fw_vers;
3807        lli.dbfifo_int_thresh = dbfifo_int_thresh;
3808        lli.sge_pktshift = adap->sge.pktshift;
3809        lli.enable_fw_ofld_conn = adap->flags & FW_OFLD_CONN;
3810
3811        handle = ulds[uld].add(&lli);
3812        if (IS_ERR(handle)) {
3813                dev_warn(adap->pdev_dev,
3814                         "could not attach to the %s driver, error %ld\n",
3815                         uld_str[uld], PTR_ERR(handle));
3816                return;
3817        }
3818
3819        adap->uld_handle[uld] = handle;
3820
3821        if (!netevent_registered) {
3822                register_netevent_notifier(&cxgb4_netevent_nb);
3823                netevent_registered = true;
3824        }
3825
3826        if (adap->flags & FULL_INIT_DONE)
3827                ulds[uld].state_change(handle, CXGB4_STATE_UP);
3828}
3829
3830static void attach_ulds(struct adapter *adap)
3831{
3832        unsigned int i;
3833
3834        spin_lock(&adap_rcu_lock);
3835        list_add_tail_rcu(&adap->rcu_node, &adap_rcu_list);
3836        spin_unlock(&adap_rcu_lock);
3837
3838        mutex_lock(&uld_mutex);
3839        list_add_tail(&adap->list_node, &adapter_list);
3840        for (i = 0; i < CXGB4_ULD_MAX; i++)
3841                if (ulds[i].add)
3842                        uld_attach(adap, i);
3843        mutex_unlock(&uld_mutex);
3844}
3845
3846static void detach_ulds(struct adapter *adap)
3847{
3848        unsigned int i;
3849
3850        mutex_lock(&uld_mutex);
3851        list_del(&adap->list_node);
3852        for (i = 0; i < CXGB4_ULD_MAX; i++)
3853                if (adap->uld_handle[i]) {
3854                        ulds[i].state_change(adap->uld_handle[i],
3855                                             CXGB4_STATE_DETACH);
3856                        adap->uld_handle[i] = NULL;
3857                }
3858        if (netevent_registered && list_empty(&adapter_list)) {
3859                unregister_netevent_notifier(&cxgb4_netevent_nb);
3860                netevent_registered = false;
3861        }
3862        mutex_unlock(&uld_mutex);
3863
3864        spin_lock(&adap_rcu_lock);
3865        list_del_rcu(&adap->rcu_node);
3866        spin_unlock(&adap_rcu_lock);
3867}
3868
3869static void notify_ulds(struct adapter *adap, enum cxgb4_state new_state)
3870{
3871        unsigned int i;
3872
3873        mutex_lock(&uld_mutex);
3874        for (i = 0; i < CXGB4_ULD_MAX; i++)
3875                if (adap->uld_handle[i])
3876                        ulds[i].state_change(adap->uld_handle[i], new_state);
3877        mutex_unlock(&uld_mutex);
3878}
3879
3880/**
3881 *      cxgb4_register_uld - register an upper-layer driver
3882 *      @type: the ULD type
3883 *      @p: the ULD methods
3884 *
3885 *      Registers an upper-layer driver with this driver and notifies the ULD
3886 *      about any presently available devices that support its type.  Returns
3887 *      %-EBUSY if a ULD of the same type is already registered.
3888 */
3889int cxgb4_register_uld(enum cxgb4_uld type, const struct cxgb4_uld_info *p)
3890{
3891        int ret = 0;
3892        struct adapter *adap;
3893
3894        if (type >= CXGB4_ULD_MAX)
3895                return -EINVAL;
3896        mutex_lock(&uld_mutex);
3897        if (ulds[type].add) {
3898                ret = -EBUSY;
3899                goto out;
3900        }
3901        ulds[type] = *p;
3902        list_for_each_entry(adap, &adapter_list, list_node)
3903                uld_attach(adap, type);
3904out:    mutex_unlock(&uld_mutex);
3905        return ret;
3906}
3907EXPORT_SYMBOL(cxgb4_register_uld);
3908
3909/**
3910 *      cxgb4_unregister_uld - unregister an upper-layer driver
3911 *      @type: the ULD type
3912 *
3913 *      Unregisters an existing upper-layer driver.
3914 */
3915int cxgb4_unregister_uld(enum cxgb4_uld type)
3916{
3917        struct adapter *adap;
3918
3919        if (type >= CXGB4_ULD_MAX)
3920                return -EINVAL;
3921        mutex_lock(&uld_mutex);
3922        list_for_each_entry(adap, &adapter_list, list_node)
3923                adap->uld_handle[type] = NULL;
3924        ulds[type].add = NULL;
3925        mutex_unlock(&uld_mutex);
3926        return 0;
3927}
3928EXPORT_SYMBOL(cxgb4_unregister_uld);
3929
3930/* Check if netdev on which event is occured belongs to us or not. Return
3931 * suceess (1) if it belongs otherwise failure (0).
3932 */
3933static int cxgb4_netdev(struct net_device *netdev)
3934{
3935        struct adapter *adap;
3936        int i;
3937
3938        spin_lock(&adap_rcu_lock);
3939        list_for_each_entry_rcu(adap, &adap_rcu_list, rcu_node)
3940                for (i = 0; i < MAX_NPORTS; i++)
3941                        if (adap->port[i] == netdev) {
3942                                spin_unlock(&adap_rcu_lock);
3943                                return 1;
3944                        }
3945        spin_unlock(&adap_rcu_lock);
3946        return 0;
3947}
3948
3949static int clip_add(struct net_device *event_dev, struct inet6_ifaddr *ifa,
3950                    unsigned long event)
3951{
3952        int ret = NOTIFY_DONE;
3953
3954        rcu_read_lock();
3955        if (cxgb4_netdev(event_dev)) {
3956                switch (event) {
3957                case NETDEV_UP:
3958                        ret = cxgb4_clip_get(event_dev,
3959                                (const struct in6_addr *)ifa->addr.s6_addr);
3960                        if (ret < 0) {
3961                                rcu_read_unlock();
3962                                return ret;
3963                        }
3964                        ret = NOTIFY_OK;
3965                        break;
3966                case NETDEV_DOWN:
3967                        cxgb4_clip_release(event_dev,
3968                                (const struct in6_addr *)ifa->addr.s6_addr);
3969                        ret = NOTIFY_OK;
3970                        break;
3971                default:
3972                        break;
3973                }
3974        }
3975        rcu_read_unlock();
3976        return ret;
3977}
3978
3979static int cxgb4_inet6addr_handler(struct notifier_block *this,
3980                unsigned long event, void *data)
3981{
3982        struct inet6_ifaddr *ifa = data;
3983        struct net_device *event_dev;
3984        int ret = NOTIFY_DONE;
3985        struct bonding *bond = netdev_priv(ifa->idev->dev);
3986        struct slave *slave;
3987        struct pci_dev *first_pdev = NULL;
3988
3989        if (ifa->idev->dev->priv_flags & IFF_802_1Q_VLAN) {
3990                event_dev = vlan_dev_real_dev(ifa->idev->dev);
3991                ret = clip_add(event_dev, ifa, event);
3992        } else if (ifa->idev->dev->flags & IFF_MASTER) {
3993                /* It is possible that two different adapters are bonded in one
3994                 * bond. We need to find such different adapters and add clip
3995                 * in all of them only once.
3996                 */
3997                read_lock(&bond->lock);
3998                bond_for_each_slave(bond, slave) {
3999                        if (!first_pdev) {
4000                                ret = clip_add(slave->dev, ifa, event);
4001                                /* If clip_add is success then only initialize
4002                                 * first_pdev since it means it is our device
4003                                 */
4004                                if (ret == NOTIFY_OK)
4005                                        first_pdev = to_pci_dev(
4006                                                        slave->dev->dev.parent);
4007                        } else if (first_pdev !=
4008                                   to_pci_dev(slave->dev->dev.parent))
4009                                        ret = clip_add(slave->dev, ifa, event);
4010                }
4011                read_unlock(&bond->lock);
4012        } else
4013                ret = clip_add(ifa->idev->dev, ifa, event);
4014
4015        return ret;
4016}
4017
4018static struct notifier_block cxgb4_inet6addr_notifier = {
4019        .notifier_call = cxgb4_inet6addr_handler
4020};
4021
4022/* Retrieves IPv6 addresses from a root device (bond, vlan) associated with
4023 * a physical device.
4024 * The physical device reference is needed to send the actul CLIP command.
4025 */
4026static int update_dev_clip(struct net_device *root_dev, struct net_device *dev)
4027{
4028        struct inet6_dev *idev = NULL;
4029        struct inet6_ifaddr *ifa;
4030        int ret = 0;
4031
4032        idev = __in6_dev_get(root_dev);
4033        if (!idev)
4034                return ret;
4035
4036        read_lock_bh(&idev->lock);
4037        list_for_each_entry(ifa, &idev->addr_list, if_list) {
4038                ret = cxgb4_clip_get(dev,
4039                                (const struct in6_addr *)ifa->addr.s6_addr);
4040                if (ret < 0)
4041                        break;
4042        }
4043        read_unlock_bh(&idev->lock);
4044
4045        return ret;
4046}
4047
4048static int update_root_dev_clip(struct net_device *dev)
4049{
4050        struct net_device *root_dev = NULL;
4051        int i, ret = 0;
4052
4053        /* First populate the real net device's IPv6 addresses */
4054        ret = update_dev_clip(dev, dev);
4055        if (ret)
4056                return ret;
4057
4058        /* Parse all bond and vlan devices layered on top of the physical dev */
4059        for (i = 0; i < VLAN_N_VID; i++) {
4060                root_dev = __vlan_find_dev_deep(dev, htons(ETH_P_8021Q), i);
4061                if (!root_dev)
4062                        continue;
4063
4064                ret = update_dev_clip(root_dev, dev);
4065                if (ret)
4066                        break;
4067        }
4068        return ret;
4069}
4070
4071static void update_clip(const struct adapter *adap)
4072{
4073        int i;
4074        struct net_device *dev;
4075        int ret;
4076
4077        rcu_read_lock();
4078
4079        for (i = 0; i < MAX_NPORTS; i++) {
4080                dev = adap->port[i];
4081                ret = 0;
4082
4083                if (dev)
4084                        ret = update_root_dev_clip(dev);
4085
4086                if (ret < 0)
4087                        break;
4088        }
4089        rcu_read_unlock();
4090}
4091
4092/**
4093 *      cxgb_up - enable the adapter
4094 *      @adap: adapter being enabled
4095 *
4096 *      Called when the first port is enabled, this function performs the
4097 *      actions necessary to make an adapter operational, such as completing
4098 *      the initialization of HW modules, and enabling interrupts.
4099 *
4100 *      Must be called with the rtnl lock held.
4101 */
4102static int cxgb_up(struct adapter *adap)
4103{
4104        int err;
4105
4106        err = setup_sge_queues(adap);
4107        if (err)
4108                goto out;
4109        err = setup_rss(adap);
4110        if (err)
4111                goto freeq;
4112
4113        if (adap->flags & USING_MSIX) {
4114                name_msix_vecs(adap);
4115                err = request_irq(adap->msix_info[0].vec, t4_nondata_intr, 0,
4116                                  adap->msix_info[0].desc, adap);
4117                if (err)
4118                        goto irq_err;
4119
4120                err = request_msix_queue_irqs(adap);
4121                if (err) {
4122                        free_irq(adap->msix_info[0].vec, adap);
4123                        goto irq_err;
4124                }
4125        } else {
4126                err = request_irq(adap->pdev->irq, t4_intr_handler(adap),
4127                                  (adap->flags & USING_MSI) ? 0 : IRQF_SHARED,
4128                                  adap->port[0]->name, adap);
4129                if (err)
4130                        goto irq_err;
4131        }
4132        enable_rx(adap);
4133        t4_sge_start(adap);
4134        t4_intr_enable(adap);
4135        adap->flags |= FULL_INIT_DONE;
4136        notify_ulds(adap, CXGB4_STATE_UP);
4137        update_clip(adap);
4138 out:
4139        return err;
4140 irq_err:
4141        dev_err(adap->pdev_dev, "request_irq failed, err %d\n", err);
4142 freeq:
4143        t4_free_sge_resources(adap);
4144        goto out;
4145}
4146
4147static void cxgb_down(struct adapter *adapter)
4148{
4149        t4_intr_disable(adapter);
4150        cancel_work_sync(&adapter->tid_release_task);
4151        cancel_work_sync(&adapter->db_full_task);
4152        cancel_work_sync(&adapter->db_drop_task);
4153        adapter->tid_release_task_busy = false;
4154        adapter->tid_release_head = NULL;
4155
4156        if (adapter->flags & USING_MSIX) {
4157                free_msix_queue_irqs(adapter);
4158                free_irq(adapter->msix_info[0].vec, adapter);
4159        } else
4160                free_irq(adapter->pdev->irq, adapter);
4161        quiesce_rx(adapter);
4162        t4_sge_stop(adapter);
4163        t4_free_sge_resources(adapter);
4164        adapter->flags &= ~FULL_INIT_DONE;
4165}
4166
4167/*
4168 * net_device operations
4169 */
4170static int cxgb_open(struct net_device *dev)
4171{
4172        int err;
4173        struct port_info *pi = netdev_priv(dev);
4174        struct adapter *adapter = pi->adapter;
4175
4176        netif_carrier_off(dev);
4177
4178        if (!(adapter->flags & FULL_INIT_DONE)) {
4179                err = cxgb_up(adapter);
4180                if (err < 0)
4181                        return err;
4182        }
4183
4184        err = link_start(dev);
4185        if (!err)
4186                netif_tx_start_all_queues(dev);
4187        return err;
4188}
4189
4190static int cxgb_close(struct net_device *dev)
4191{
4192        struct port_info *pi = netdev_priv(dev);
4193        struct adapter *adapter = pi->adapter;
4194
4195        netif_tx_stop_all_queues(dev);
4196        netif_carrier_off(dev);
4197        return t4_enable_vi(adapter, adapter->fn, pi->viid, false, false);
4198}
4199
4200/* Return an error number if the indicated filter isn't writable ...
4201 */
4202static int writable_filter(struct filter_entry *f)
4203{
4204        if (f->locked)
4205                return -EPERM;
4206        if (f->pending)
4207                return -EBUSY;
4208
4209        return 0;
4210}
4211
4212/* Delete the filter at the specified index (if valid).  The checks for all
4213 * the common problems with doing this like the filter being locked, currently
4214 * pending in another operation, etc.
4215 */
4216static int delete_filter(struct adapter *adapter, unsigned int fidx)
4217{
4218        struct filter_entry *f;
4219        int ret;
4220
4221        if (fidx >= adapter->tids.nftids + adapter->tids.nsftids)
4222                return -EINVAL;
4223
4224        f = &adapter->tids.ftid_tab[fidx];
4225        ret = writable_filter(f);
4226        if (ret)
4227                return ret;
4228        if (f->valid)
4229                return del_filter_wr(adapter, fidx);
4230
4231        return 0;
4232}
4233
4234int cxgb4_create_server_filter(const struct net_device *dev, unsigned int stid,
4235                __be32 sip, __be16 sport, __be16 vlan,
4236                unsigned int queue, unsigned char port, unsigned char mask)
4237{
4238        int ret;
4239        struct filter_entry *f;
4240        struct adapter *adap;
4241        int i;
4242        u8 *val;
4243
4244        adap = netdev2adap(dev);
4245
4246        /* Adjust stid to correct filter index */
4247        stid -= adap->tids.nstids;
4248        stid += adap->tids.nftids;
4249
4250        /* Check to make sure the filter requested is writable ...
4251         */
4252        f = &adap->tids.ftid_tab[stid];
4253        ret = writable_filter(f);
4254        if (ret)
4255                return ret;
4256
4257        /* Clear out any old resources being used by the filter before
4258         * we start constructing the new filter.
4259         */
4260        if (f->valid)
4261                clear_filter(adap, f);
4262
4263        /* Clear out filter specifications */
4264        memset(&f->fs, 0, sizeof(struct ch_filter_specification));
4265        f->fs.val.lport = cpu_to_be16(sport);
4266        f->fs.mask.lport  = ~0;
4267        val = (u8 *)&sip;
4268        if ((val[0] | val[1] | val[2] | val[3]) != 0) {
4269                for (i = 0; i < 4; i++) {
4270                        f->fs.val.lip[i] = val[i];
4271                        f->fs.mask.lip[i] = ~0;
4272                }
4273                if (adap->filter_mode & F_PORT) {
4274                        f->fs.val.iport = port;
4275                        f->fs.mask.iport = mask;
4276                }
4277        }
4278
4279        f->fs.dirsteer = 1;
4280        f->fs.iq = queue;
4281        /* Mark filter as locked */
4282        f->locked = 1;
4283        f->fs.rpttid = 1;
4284
4285        ret = set_filter_wr(adap, stid);
4286        if (ret) {
4287                clear_filter(adap, f);
4288                return ret;
4289        }
4290
4291        return 0;
4292}
4293EXPORT_SYMBOL(cxgb4_create_server_filter);
4294
4295int cxgb4_remove_server_filter(const struct net_device *dev, unsigned int stid,
4296                unsigned int queue, bool ipv6)
4297{
4298        int ret;
4299        struct filter_entry *f;
4300        struct adapter *adap;
4301
4302        adap = netdev2adap(dev);
4303
4304        /* Adjust stid to correct filter index */
4305        stid -= adap->tids.nstids;
4306        stid += adap->tids.nftids;
4307
4308        f = &adap->tids.ftid_tab[stid];
4309        /* Unlock the filter */
4310        f->locked = 0;
4311
4312        ret = delete_filter(adap, stid);
4313        if (ret)
4314                return ret;
4315
4316        return 0;
4317}
4318EXPORT_SYMBOL(cxgb4_remove_server_filter);
4319
4320static struct rtnl_link_stats64 *cxgb_get_stats(struct net_device *dev,
4321                                                struct rtnl_link_stats64 *ns)
4322{
4323        struct port_stats stats;
4324        struct port_info *p = netdev_priv(dev);
4325        struct adapter *adapter = p->adapter;
4326
4327        spin_lock(&adapter->stats_lock);
4328        t4_get_port_stats(adapter, p->tx_chan, &stats);
4329        spin_unlock(&adapter->stats_lock);
4330
4331        ns->tx_bytes   = stats.tx_octets;
4332        ns->tx_packets = stats.tx_frames;
4333        ns->rx_bytes   = stats.rx_octets;
4334        ns->rx_packets = stats.rx_frames;
4335        ns->multicast  = stats.rx_mcast_frames;
4336
4337        /* detailed rx_errors */
4338        ns->rx_length_errors = stats.rx_jabber + stats.rx_too_long +
4339                               stats.rx_runt;
4340        ns->rx_over_errors   = 0;
4341        ns->rx_crc_errors    = stats.rx_fcs_err;
4342        ns->rx_frame_errors  = stats.rx_symbol_err;
4343        ns->rx_fifo_errors   = stats.rx_ovflow0 + stats.rx_ovflow1 +
4344                               stats.rx_ovflow2 + stats.rx_ovflow3 +
4345                               stats.rx_trunc0 + stats.rx_trunc1 +
4346                               stats.rx_trunc2 + stats.rx_trunc3;
4347        ns->rx_missed_errors = 0;
4348
4349        /* detailed tx_errors */
4350        ns->tx_aborted_errors   = 0;
4351        ns->tx_carrier_errors   = 0;
4352        ns->tx_fifo_errors      = 0;
4353        ns->tx_heartbeat_errors = 0;
4354        ns->tx_window_errors    = 0;
4355
4356        ns->tx_errors = stats.tx_error_frames;
4357        ns->rx_errors = stats.rx_symbol_err + stats.rx_fcs_err +
4358                ns->rx_length_errors + stats.rx_len_err + ns->rx_fifo_errors;
4359        return ns;
4360}
4361
4362static int cxgb_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
4363{
4364        unsigned int mbox;
4365        int ret = 0, prtad, devad;
4366        struct port_info *pi = netdev_priv(dev);
4367        struct mii_ioctl_data *data = (struct mii_ioctl_data *)&req->ifr_data;
4368
4369        switch (cmd) {
4370        case SIOCGMIIPHY:
4371                if (pi->mdio_addr < 0)
4372                        return -EOPNOTSUPP;
4373                data->phy_id = pi->mdio_addr;
4374                break;
4375        case SIOCGMIIREG:
4376        case SIOCSMIIREG:
4377                if (mdio_phy_id_is_c45(data->phy_id)) {
4378                        prtad = mdio_phy_id_prtad(data->phy_id);
4379                        devad = mdio_phy_id_devad(data->phy_id);
4380                } else if (data->phy_id < 32) {
4381                        prtad = data->phy_id;
4382                        devad = 0;
4383                        data->reg_num &= 0x1f;
4384                } else
4385                        return -EINVAL;
4386
4387                mbox = pi->adapter->fn;
4388                if (cmd == SIOCGMIIREG)
4389                        ret = t4_mdio_rd(pi->adapter, mbox, prtad, devad,
4390                                         data->reg_num, &data->val_out);
4391                else
4392                        ret = t4_mdio_wr(pi->adapter, mbox, prtad, devad,
4393                                         data->reg_num, data->val_in);
4394                break;
4395        default:
4396                return -EOPNOTSUPP;
4397        }
4398        return ret;
4399}
4400
4401static void cxgb_set_rxmode(struct net_device *dev)
4402{
4403        /* unfortunately we can't return errors to the stack */
4404        set_rxmode(dev, -1, false);
4405}
4406
4407static int cxgb_change_mtu(struct net_device *dev, int new_mtu)
4408{
4409        int ret;
4410        struct port_info *pi = netdev_priv(dev);
4411
4412        if (new_mtu < 81 || new_mtu > MAX_MTU)         /* accommodate SACK */
4413                return -EINVAL;
4414        ret = t4_set_rxmode(pi->adapter, pi->adapter->fn, pi->viid, new_mtu, -1,
4415                            -1, -1, -1, true);
4416        if (!ret)
4417                dev->mtu = new_mtu;
4418        return ret;
4419}
4420
4421static int cxgb_set_mac_addr(struct net_device *dev, void *p)
4422{
4423        int ret;
4424        struct sockaddr *addr = p;
4425        struct port_info *pi = netdev_priv(dev);
4426
4427        if (!is_valid_ether_addr(addr->sa_data))
4428                return -EADDRNOTAVAIL;
4429
4430        ret = t4_change_mac(pi->adapter, pi->adapter->fn, pi->viid,
4431                            pi->xact_addr_filt, addr->sa_data, true, true);
4432        if (ret < 0)
4433                return ret;
4434
4435        memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
4436        pi->xact_addr_filt = ret;
4437        return 0;
4438}
4439
4440#ifdef CONFIG_NET_POLL_CONTROLLER
4441static void cxgb_netpoll(struct net_device *dev)
4442{
4443        struct port_info *pi = netdev_priv(dev);
4444        struct adapter *adap = pi->adapter;
4445
4446        if (adap->flags & USING_MSIX) {
4447                int i;
4448                struct sge_eth_rxq *rx = &adap->sge.ethrxq[pi->first_qset];
4449
4450                for (i = pi->nqsets; i; i--, rx++)
4451                        t4_sge_intr_msix(0, &rx->rspq);
4452        } else
4453                t4_intr_handler(adap)(0, adap);
4454}
4455#endif
4456
4457static const struct net_device_ops cxgb4_netdev_ops = {
4458        .ndo_open             = cxgb_open,
4459        .ndo_stop             = cxgb_close,
4460        .ndo_start_xmit       = t4_eth_xmit,
4461        .ndo_get_stats64      = cxgb_get_stats,
4462        .ndo_set_rx_mode      = cxgb_set_rxmode,
4463        .ndo_set_mac_address  = cxgb_set_mac_addr,
4464        .ndo_set_features     = cxgb_set_features,
4465        .ndo_validate_addr    = eth_validate_addr,
4466        .ndo_do_ioctl         = cxgb_ioctl,
4467        .ndo_change_mtu       = cxgb_change_mtu,
4468#ifdef CONFIG_NET_POLL_CONTROLLER
4469        .ndo_poll_controller  = cxgb_netpoll,
4470#endif
4471};
4472
4473void t4_fatal_err(struct adapter *adap)
4474{
4475        t4_set_reg_field(adap, SGE_CONTROL, GLOBALENABLE, 0);
4476        t4_intr_disable(adap);
4477        dev_alert(adap->pdev_dev, "encountered fatal error, adapter stopped\n");
4478}
4479
4480static void setup_memwin(struct adapter *adap)
4481{
4482        u32 bar0, mem_win0_base, mem_win1_base, mem_win2_base;
4483
4484        bar0 = pci_resource_start(adap->pdev, 0);  /* truncation intentional */
4485        if (is_t4(adap->chip)) {
4486                mem_win0_base = bar0 + MEMWIN0_BASE;
4487                mem_win1_base = bar0 + MEMWIN1_BASE;
4488                mem_win2_base = bar0 + MEMWIN2_BASE;
4489        } else {
4490                /* For T5, only relative offset inside the PCIe BAR is passed */
4491                mem_win0_base = MEMWIN0_BASE;
4492                mem_win1_base = MEMWIN1_BASE_T5;
4493                mem_win2_base = MEMWIN2_BASE_T5;
4494        }
4495        t4_write_reg(adap, PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_BASE_WIN, 0),
4496                     mem_win0_base | BIR(0) |
4497                     WINDOW(ilog2(MEMWIN0_APERTURE) - 10));
4498        t4_write_reg(adap, PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_BASE_WIN, 1),
4499                     mem_win1_base | BIR(0) |
4500                     WINDOW(ilog2(MEMWIN1_APERTURE) - 10));
4501        t4_write_reg(adap, PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_BASE_WIN, 2),
4502                     mem_win2_base | BIR(0) |
4503                     WINDOW(ilog2(MEMWIN2_APERTURE) - 10));
4504}
4505
4506static void setup_memwin_rdma(struct adapter *adap)
4507{
4508        if (adap->vres.ocq.size) {
4509                unsigned int start, sz_kb;
4510
4511                start = pci_resource_start(adap->pdev, 2) +
4512                        OCQ_WIN_OFFSET(adap->pdev, &adap->vres);
4513                sz_kb = roundup_pow_of_two(adap->vres.ocq.size) >> 10;
4514                t4_write_reg(adap,
4515                             PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_BASE_WIN, 3),
4516                             start | BIR(1) | WINDOW(ilog2(sz_kb)));
4517                t4_write_reg(adap,
4518                             PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_OFFSET, 3),
4519                             adap->vres.ocq.start);
4520                t4_read_reg(adap,
4521                            PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_OFFSET, 3));
4522        }
4523}
4524
4525static int adap_init1(struct adapter *adap, struct fw_caps_config_cmd *c)
4526{
4527        u32 v;
4528        int ret;
4529
4530        /* get device capabilities */
4531        memset(c, 0, sizeof(*c));
4532        c->op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
4533                               FW_CMD_REQUEST | FW_CMD_READ);
4534        c->cfvalid_to_len16 = htonl(FW_LEN16(*c));
4535        ret = t4_wr_mbox(adap, adap->fn, c, sizeof(*c), c);
4536        if (ret < 0)
4537                return ret;
4538
4539        /* select capabilities we'll be using */
4540        if (c->niccaps & htons(FW_CAPS_CONFIG_NIC_VM)) {
4541                if (!vf_acls)
4542                        c->niccaps ^= htons(FW_CAPS_CONFIG_NIC_VM);
4543                else
4544                        c->niccaps = htons(FW_CAPS_CONFIG_NIC_VM);
4545        } else if (vf_acls) {
4546                dev_err(adap->pdev_dev, "virtualization ACLs not supported");
4547                return ret;
4548        }
4549        c->op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
4550                               FW_CMD_REQUEST | FW_CMD_WRITE);
4551        ret = t4_wr_mbox(adap, adap->fn, c, sizeof(*c), NULL);
4552        if (ret < 0)
4553                return ret;
4554
4555        ret = t4_config_glbl_rss(adap, adap->fn,
4556                                 FW_RSS_GLB_CONFIG_CMD_MODE_BASICVIRTUAL,
4557                                 FW_RSS_GLB_CONFIG_CMD_TNLMAPEN |
4558                                 FW_RSS_GLB_CONFIG_CMD_TNLALLLKP);
4559        if (ret < 0)
4560                return ret;
4561
4562        ret = t4_cfg_pfvf(adap, adap->fn, adap->fn, 0, MAX_EGRQ, 64, MAX_INGQ,
4563                          0, 0, 4, 0xf, 0xf, 16, FW_CMD_CAP_PF, FW_CMD_CAP_PF);
4564        if (ret < 0)
4565                return ret;
4566
4567        t4_sge_init(adap);
4568
4569        /* tweak some settings */
4570        t4_write_reg(adap, TP_SHIFT_CNT, 0x64f8849);
4571        t4_write_reg(adap, ULP_RX_TDDP_PSZ, HPZ0(PAGE_SHIFT - 12));
4572        t4_write_reg(adap, TP_PIO_ADDR, TP_INGRESS_CONFIG);
4573        v = t4_read_reg(adap, TP_PIO_DATA);
4574        t4_write_reg(adap, TP_PIO_DATA, v & ~CSUM_HAS_PSEUDO_HDR);
4575
4576        /* first 4 Tx modulation queues point to consecutive Tx channels */
4577        adap->params.tp.tx_modq_map = 0xE4;
4578        t4_write_reg(adap, A_TP_TX_MOD_QUEUE_REQ_MAP,
4579                     V_TX_MOD_QUEUE_REQ_MAP(adap->params.tp.tx_modq_map));
4580
4581        /* associate each Tx modulation queue with consecutive Tx channels */
4582        v = 0x84218421;
4583        t4_write_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA,
4584                          &v, 1, A_TP_TX_SCHED_HDR);
4585        t4_write_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA,
4586                          &v, 1, A_TP_TX_SCHED_FIFO);
4587        t4_write_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA,
4588                          &v, 1, A_TP_TX_SCHED_PCMD);
4589
4590#define T4_TX_MODQ_10G_WEIGHT_DEFAULT 16 /* in KB units */
4591        if (is_offload(adap)) {
4592                t4_write_reg(adap, A_TP_TX_MOD_QUEUE_WEIGHT0,
4593                             V_TX_MODQ_WEIGHT0(T4_TX_MODQ_10G_WEIGHT_DEFAULT) |
4594                             V_TX_MODQ_WEIGHT1(T4_TX_MODQ_10G_WEIGHT_DEFAULT) |
4595                             V_TX_MODQ_WEIGHT2(T4_TX_MODQ_10G_WEIGHT_DEFAULT) |
4596                             V_TX_MODQ_WEIGHT3(T4_TX_MODQ_10G_WEIGHT_DEFAULT));
4597                t4_write_reg(adap, A_TP_TX_MOD_CHANNEL_WEIGHT,
4598                             V_TX_MODQ_WEIGHT0(T4_TX_MODQ_10G_WEIGHT_DEFAULT) |
4599                             V_TX_MODQ_WEIGHT1(T4_TX_MODQ_10G_WEIGHT_DEFAULT) |
4600                             V_TX_MODQ_WEIGHT2(T4_TX_MODQ_10G_WEIGHT_DEFAULT) |
4601                             V_TX_MODQ_WEIGHT3(T4_TX_MODQ_10G_WEIGHT_DEFAULT));
4602        }
4603
4604        /* get basic stuff going */
4605        return t4_early_init(adap, adap->fn);
4606}
4607
4608/*
4609 * Max # of ATIDs.  The absolute HW max is 16K but we keep it lower.
4610 */
4611#define MAX_ATIDS 8192U
4612
4613/*
4614 * Phase 0 of initialization: contact FW, obtain config, perform basic init.
4615 *
4616 * If the firmware we're dealing with has Configuration File support, then
4617 * we use that to perform all configuration
4618 */
4619
4620/*
4621 * Tweak configuration based on module parameters, etc.  Most of these have
4622 * defaults assigned to them by Firmware Configuration Files (if we're using
4623 * them) but need to be explicitly set if we're using hard-coded
4624 * initialization.  But even in the case of using Firmware Configuration
4625 * Files, we'd like to expose the ability to change these via module
4626 * parameters so these are essentially common tweaks/settings for
4627 * Configuration Files and hard-coded initialization ...
4628 */
4629static int adap_init0_tweaks(struct adapter *adapter)
4630{
4631        /*
4632         * Fix up various Host-Dependent Parameters like Page Size, Cache
4633         * Line Size, etc.  The firmware default is for a 4KB Page Size and
4634         * 64B Cache Line Size ...
4635         */
4636        t4_fixup_host_params(adapter, PAGE_SIZE, L1_CACHE_BYTES);
4637
4638        /*
4639         * Process module parameters which affect early initialization.
4640         */
4641        if (rx_dma_offset != 2 && rx_dma_offset != 0) {
4642                dev_err(&adapter->pdev->dev,
4643                        "Ignoring illegal rx_dma_offset=%d, using 2\n",
4644                        rx_dma_offset);
4645                rx_dma_offset = 2;
4646        }
4647        t4_set_reg_field(adapter, SGE_CONTROL,
4648                         PKTSHIFT_MASK,
4649                         PKTSHIFT(rx_dma_offset));
4650
4651        /*
4652         * Don't include the "IP Pseudo Header" in CPL_RX_PKT checksums: Linux
4653         * adds the pseudo header itself.
4654         */
4655        t4_tp_wr_bits_indirect(adapter, TP_INGRESS_CONFIG,
4656                               CSUM_HAS_PSEUDO_HDR, 0);
4657
4658        return 0;
4659}
4660
4661/*
4662 * Attempt to initialize the adapter via a Firmware Configuration File.
4663 */
4664static int adap_init0_config(struct adapter *adapter, int reset)
4665{
4666        struct fw_caps_config_cmd caps_cmd;
4667        const struct firmware *cf;
4668        unsigned long mtype = 0, maddr = 0;
4669        u32 finiver, finicsum, cfcsum;
4670        int ret, using_flash;
4671        char *fw_config_file, fw_config_file_path[256];
4672
4673        /*
4674         * Reset device if necessary.
4675         */
4676        if (reset) {
4677                ret = t4_fw_reset(adapter, adapter->mbox,
4678                                  PIORSTMODE | PIORST);
4679                if (ret < 0)
4680                        goto bye;
4681        }
4682
4683        /*
4684         * If we have a T4 configuration file under /lib/firmware/cxgb4/,
4685         * then use that.  Otherwise, use the configuration file stored
4686         * in the adapter flash ...
4687         */
4688        switch (CHELSIO_CHIP_VERSION(adapter->chip)) {
4689        case CHELSIO_T4:
4690                fw_config_file = FW_CFNAME;
4691                break;
4692        case CHELSIO_T5:
4693                fw_config_file = FW5_CFNAME;
4694                break;
4695        default:
4696                dev_err(adapter->pdev_dev, "Device %d is not supported\n",
4697                       adapter->pdev->device);
4698                ret = -EINVAL;
4699                goto bye;
4700        }
4701
4702        ret = request_firmware(&cf, fw_config_file, adapter->pdev_dev);
4703        if (ret < 0) {
4704                using_flash = 1;
4705                mtype = FW_MEMTYPE_CF_FLASH;
4706                maddr = t4_flash_cfg_addr(adapter);
4707        } else {
4708                u32 params[7], val[7];
4709
4710                using_flash = 0;
4711                if (cf->size >= FLASH_CFG_MAX_SIZE)
4712                        ret = -ENOMEM;
4713                else {
4714                        params[0] = (FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
4715                             FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_CF));
4716                        ret = t4_query_params(adapter, adapter->mbox,
4717                                              adapter->fn, 0, 1, params, val);
4718                        if (ret == 0) {
4719                                /*
4720                                 * For t4_memory_write() below addresses and
4721                                 * sizes have to be in terms of multiples of 4
4722                                 * bytes.  So, if the Configuration File isn't
4723                                 * a multiple of 4 bytes in length we'll have
4724                                 * to write that out separately since we can't
4725                                 * guarantee that the bytes following the
4726                                 * residual byte in the buffer returned by
4727                                 * request_firmware() are zeroed out ...
4728                                 */
4729                                size_t resid = cf->size & 0x3;
4730                                size_t size = cf->size & ~0x3;
4731                                __be32 *data = (__be32 *)cf->data;
4732
4733                                mtype = FW_PARAMS_PARAM_Y_GET(val[0]);
4734                                maddr = FW_PARAMS_PARAM_Z_GET(val[0]) << 16;
4735
4736                                ret = t4_memory_write(adapter, mtype, maddr,
4737                                                      size, data);
4738                                if (ret == 0 && resid != 0) {
4739                                        union {
4740                                                __be32 word;
4741                                                char buf[4];
4742                                        } last;
4743                                        int i;
4744
4745                                        last.word = data[size >> 2];
4746                                        for (i = resid; i < 4; i++)
4747                                                last.buf[i] = 0;
4748                                        ret = t4_memory_write(adapter, mtype,
4749                                                              maddr + size,
4750                                                              4, &last.word);
4751                                }
4752                        }
4753                }
4754
4755                release_firmware(cf);
4756                if (ret)
4757                        goto bye;
4758        }
4759
4760        /*
4761         * Issue a Capability Configuration command to the firmware to get it
4762         * to parse the Configuration File.  We don't use t4_fw_config_file()
4763         * because we want the ability to modify various features after we've
4764         * processed the configuration file ...
4765         */
4766        memset(&caps_cmd, 0, sizeof(caps_cmd));
4767        caps_cmd.op_to_write =
4768                htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
4769                      FW_CMD_REQUEST |
4770                      FW_CMD_READ);
4771        caps_cmd.cfvalid_to_len16 =
4772                htonl(FW_CAPS_CONFIG_CMD_CFVALID |
4773                      FW_CAPS_CONFIG_CMD_MEMTYPE_CF(mtype) |
4774                      FW_CAPS_CONFIG_CMD_MEMADDR64K_CF(maddr >> 16) |
4775                      FW_LEN16(caps_cmd));
4776        ret = t4_wr_mbox(adapter, adapter->mbox, &caps_cmd, sizeof(caps_cmd),
4777                         &caps_cmd);
4778        if (ret < 0)
4779                goto bye;
4780
4781        finiver = ntohl(caps_cmd.finiver);
4782        finicsum = ntohl(caps_cmd.finicsum);
4783        cfcsum = ntohl(caps_cmd.cfcsum);
4784        if (finicsum != cfcsum)
4785                dev_warn(adapter->pdev_dev, "Configuration File checksum "\
4786                         "mismatch: [fini] csum=%#x, computed csum=%#x\n",
4787                         finicsum, cfcsum);
4788
4789        /*
4790         * And now tell the firmware to use the configuration we just loaded.
4791         */
4792        caps_cmd.op_to_write =
4793                htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
4794                      FW_CMD_REQUEST |
4795                      FW_CMD_WRITE);
4796        caps_cmd.cfvalid_to_len16 = htonl(FW_LEN16(caps_cmd));
4797        ret = t4_wr_mbox(adapter, adapter->mbox, &caps_cmd, sizeof(caps_cmd),
4798                         NULL);
4799        if (ret < 0)
4800                goto bye;
4801
4802        /*
4803         * Tweak configuration based on system architecture, module
4804         * parameters, etc.
4805         */
4806        ret = adap_init0_tweaks(adapter);
4807        if (ret < 0)
4808                goto bye;
4809
4810        /*
4811         * And finally tell the firmware to initialize itself using the
4812         * parameters from the Configuration File.
4813         */
4814        ret = t4_fw_initialize(adapter, adapter->mbox);
4815        if (ret < 0)
4816                goto bye;
4817
4818        sprintf(fw_config_file_path, "/lib/firmware/%s", fw_config_file);
4819        /*
4820         * Return successfully and note that we're operating with parameters
4821         * not supplied by the driver, rather than from hard-wired
4822         * initialization constants burried in the driver.
4823         */
4824        adapter->flags |= USING_SOFT_PARAMS;
4825        dev_info(adapter->pdev_dev, "Successfully configured using Firmware "\
4826                 "Configuration File %s, version %#x, computed checksum %#x\n",
4827                 (using_flash
4828                  ? "in device FLASH"
4829                  : fw_config_file_path),
4830                 finiver, cfcsum);
4831        return 0;
4832
4833        /*
4834         * Something bad happened.  Return the error ...  (If the "error"
4835         * is that there's no Configuration File on the adapter we don't
4836         * want to issue a warning since this is fairly common.)
4837         */
4838bye:
4839        if (ret != -ENOENT)
4840                dev_warn(adapter->pdev_dev, "Configuration file error %d\n",
4841                         -ret);
4842        return ret;
4843}
4844
4845/*
4846 * Attempt to initialize the adapter via hard-coded, driver supplied
4847 * parameters ...
4848 */
4849static int adap_init0_no_config(struct adapter *adapter, int reset)
4850{
4851        struct sge *s = &adapter->sge;
4852        struct fw_caps_config_cmd caps_cmd;
4853        u32 v;
4854        int i, ret;
4855
4856        /*
4857         * Reset device if necessary
4858         */
4859        if (reset) {
4860                ret = t4_fw_reset(adapter, adapter->mbox,
4861                                  PIORSTMODE | PIORST);
4862                if (ret < 0)
4863                        goto bye;
4864        }
4865
4866        /*
4867         * Get device capabilities and select which we'll be using.
4868         */
4869        memset(&caps_cmd, 0, sizeof(caps_cmd));
4870        caps_cmd.op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
4871                                     FW_CMD_REQUEST | FW_CMD_READ);
4872        caps_cmd.cfvalid_to_len16 = htonl(FW_LEN16(caps_cmd));
4873        ret = t4_wr_mbox(adapter, adapter->mbox, &caps_cmd, sizeof(caps_cmd),
4874                         &caps_cmd);
4875        if (ret < 0)
4876                goto bye;
4877
4878        if (caps_cmd.niccaps & htons(FW_CAPS_CONFIG_NIC_VM)) {
4879                if (!vf_acls)
4880                        caps_cmd.niccaps ^= htons(FW_CAPS_CONFIG_NIC_VM);
4881                else
4882                        caps_cmd.niccaps = htons(FW_CAPS_CONFIG_NIC_VM);
4883        } else if (vf_acls) {
4884                dev_err(adapter->pdev_dev, "virtualization ACLs not supported");
4885                goto bye;
4886        }
4887        caps_cmd.op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
4888                              FW_CMD_REQUEST | FW_CMD_WRITE);
4889        ret = t4_wr_mbox(adapter, adapter->mbox, &caps_cmd, sizeof(caps_cmd),
4890                         NULL);
4891        if (ret < 0)
4892                goto bye;
4893
4894        /*
4895         * Tweak configuration based on system architecture, module
4896         * parameters, etc.
4897         */
4898        ret = adap_init0_tweaks(adapter);
4899        if (ret < 0)
4900                goto bye;
4901
4902        /*
4903         * Select RSS Global Mode we want to use.  We use "Basic Virtual"
4904         * mode which maps each Virtual Interface to its own section of
4905         * the RSS Table and we turn on all map and hash enables ...
4906         */
4907        adapter->flags |= RSS_TNLALLLOOKUP;
4908        ret = t4_config_glbl_rss(adapter, adapter->mbox,
4909                                 FW_RSS_GLB_CONFIG_CMD_MODE_BASICVIRTUAL,
4910                                 FW_RSS_GLB_CONFIG_CMD_TNLMAPEN |
4911                                 FW_RSS_GLB_CONFIG_CMD_HASHTOEPLITZ |
4912                                 ((adapter->flags & RSS_TNLALLLOOKUP) ?
4913                                        FW_RSS_GLB_CONFIG_CMD_TNLALLLKP : 0));
4914        if (ret < 0)
4915                goto bye;
4916
4917        /*
4918         * Set up our own fundamental resource provisioning ...
4919         */
4920        ret = t4_cfg_pfvf(adapter, adapter->mbox, adapter->fn, 0,
4921                          PFRES_NEQ, PFRES_NETHCTRL,
4922                          PFRES_NIQFLINT, PFRES_NIQ,
4923                          PFRES_TC, PFRES_NVI,
4924                          FW_PFVF_CMD_CMASK_MASK,
4925                          pfvfres_pmask(adapter, adapter->fn, 0),
4926                          PFRES_NEXACTF,
4927                          PFRES_R_CAPS, PFRES_WX_CAPS);
4928        if (ret < 0)
4929                goto bye;
4930
4931        /*
4932         * Perform low level SGE initialization.  We need to do this before we
4933         * send the firmware the INITIALIZE command because that will cause
4934         * any other PF Drivers which are waiting for the Master
4935         * Initialization to proceed forward.
4936         */
4937        for (i = 0; i < SGE_NTIMERS - 1; i++)
4938                s->timer_val[i] = min(intr_holdoff[i], MAX_SGE_TIMERVAL);
4939        s->timer_val[SGE_NTIMERS - 1] = MAX_SGE_TIMERVAL;
4940        s->counter_val[0] = 1;
4941        for (i = 1; i < SGE_NCOUNTERS; i++)
4942                s->counter_val[i] = min(intr_cnt[i - 1],
4943                                        THRESHOLD_0_GET(THRESHOLD_0_MASK));
4944        t4_sge_init(adapter);
4945
4946#ifdef CONFIG_PCI_IOV
4947        /*
4948         * Provision resource limits for Virtual Functions.  We currently
4949         * grant them all the same static resource limits except for the Port
4950         * Access Rights Mask which we're assigning based on the PF.  All of
4951         * the static provisioning stuff for both the PF and VF really needs
4952         * to be managed in a persistent manner for each device which the
4953         * firmware controls.
4954         */
4955        {
4956                int pf, vf;
4957
4958                for (pf = 0; pf < ARRAY_SIZE(num_vf); pf++) {
4959                        if (num_vf[pf] <= 0)
4960                                continue;
4961
4962                        /* VF numbering starts at 1! */
4963                        for (vf = 1; vf <= num_vf[pf]; vf++) {
4964                                ret = t4_cfg_pfvf(adapter, adapter->mbox,
4965                                                  pf, vf,
4966                                                  VFRES_NEQ, VFRES_NETHCTRL,
4967                                                  VFRES_NIQFLINT, VFRES_NIQ,
4968                                                  VFRES_TC, VFRES_NVI,
4969                                                  FW_PFVF_CMD_CMASK_MASK,
4970                                                  pfvfres_pmask(
4971                                                  adapter, pf, vf),
4972                                                  VFRES_NEXACTF,
4973                                                  VFRES_R_CAPS, VFRES_WX_CAPS);
4974                                if (ret < 0)
4975                                        dev_warn(adapter->pdev_dev,
4976                                                 "failed to "\
4977                                                 "provision pf/vf=%d/%d; "
4978                                                 "err=%d\n", pf, vf, ret);
4979                        }
4980                }
4981        }
4982#endif
4983
4984        /*
4985         * Set up the default filter mode.  Later we'll want to implement this
4986         * via a firmware command, etc. ...  This needs to be done before the
4987         * firmare initialization command ...  If the selected set of fields
4988         * isn't equal to the default value, we'll need to make sure that the
4989         * field selections will fit in the 36-bit budget.
4990         */
4991        if (tp_vlan_pri_map != TP_VLAN_PRI_MAP_DEFAULT) {
4992                int j, bits = 0;
4993
4994                for (j = TP_VLAN_PRI_MAP_FIRST; j <= TP_VLAN_PRI_MAP_LAST; j++)
4995                        switch (tp_vlan_pri_map & (1 << j)) {
4996                        case 0:
4997                                /* compressed filter field not enabled */
4998                                break;
4999                        case FCOE_MASK:
5000                                bits +=  1;
5001                                break;
5002                        case PORT_MASK:
5003                                bits +=  3;
5004                                break;
5005                        case VNIC_ID_MASK:
5006                                bits += 17;
5007                                break;
5008                        case VLAN_MASK:
5009                                bits += 17;
5010                                break;
5011                        case TOS_MASK:
5012                                bits +=  8;
5013                                break;
5014                        case PROTOCOL_MASK:
5015                                bits +=  8;
5016                                break;
5017                        case ETHERTYPE_MASK:
5018                                bits += 16;
5019                                break;
5020                        case MACMATCH_MASK:
5021                                bits +=  9;
5022                                break;
5023                        case MPSHITTYPE_MASK:
5024                                bits +=  3;
5025                                break;
5026                        case FRAGMENTATION_MASK:
5027                                bits +=  1;
5028                                break;
5029                        }
5030
5031                if (bits > 36) {
5032                        dev_err(adapter->pdev_dev,
5033                                "tp_vlan_pri_map=%#x needs %d bits > 36;"\
5034                                " using %#x\n", tp_vlan_pri_map, bits,
5035                                TP_VLAN_PRI_MAP_DEFAULT);
5036                        tp_vlan_pri_map = TP_VLAN_PRI_MAP_DEFAULT;
5037                }
5038        }
5039        v = tp_vlan_pri_map;
5040        t4_write_indirect(adapter, TP_PIO_ADDR, TP_PIO_DATA,
5041                          &v, 1, TP_VLAN_PRI_MAP);
5042
5043        /*
5044         * We need Five Tuple Lookup mode to be set in TP_GLOBAL_CONFIG order
5045         * to support any of the compressed filter fields above.  Newer
5046         * versions of the firmware do this automatically but it doesn't hurt
5047         * to set it here.  Meanwhile, we do _not_ need to set Lookup Every
5048         * Packet in TP_INGRESS_CONFIG to support matching non-TCP packets
5049         * since the firmware automatically turns this on and off when we have
5050         * a non-zero number of filters active (since it does have a
5051         * performance impact).
5052         */
5053        if (tp_vlan_pri_map)
5054                t4_set_reg_field(adapter, TP_GLOBAL_CONFIG,
5055                                 FIVETUPLELOOKUP_MASK,
5056                                 FIVETUPLELOOKUP_MASK);
5057
5058        /*
5059         * Tweak some settings.
5060         */
5061        t4_write_reg(adapter, TP_SHIFT_CNT, SYNSHIFTMAX(6) |
5062                     RXTSHIFTMAXR1(4) | RXTSHIFTMAXR2(15) |
5063                     PERSHIFTBACKOFFMAX(8) | PERSHIFTMAX(8) |
5064                     KEEPALIVEMAXR1(4) | KEEPALIVEMAXR2(9));
5065
5066        /*
5067         * Get basic stuff going by issuing the Firmware Initialize command.
5068         * Note that this _must_ be after all PFVF commands ...
5069         */
5070        ret = t4_fw_initialize(adapter, adapter->mbox);
5071        if (ret < 0)
5072                goto bye;
5073
5074        /*
5075         * Return successfully!
5076         */
5077        dev_info(adapter->pdev_dev, "Successfully configured using built-in "\
5078                 "driver parameters\n");
5079        return 0;
5080
5081        /*
5082         * Something bad happened.  Return the error ...
5083         */
5084bye:
5085        return ret;
5086}
5087
5088/*
5089 * Phase 0 of initialization: contact FW, obtain config, perform basic init.
5090 */
5091static int adap_init0(struct adapter *adap)
5092{
5093        int ret;
5094        u32 v, port_vec;
5095        enum dev_state state;
5096        u32 params[7], val[7];
5097        struct fw_caps_config_cmd caps_cmd;
5098        int reset = 1, j;
5099
5100        /*
5101         * Contact FW, advertising Master capability (and potentially forcing
5102         * ourselves as the Master PF if our module parameter force_init is
5103         * set).
5104         */
5105        ret = t4_fw_hello(adap, adap->mbox, adap->fn,
5106                          force_init ? MASTER_MUST : MASTER_MAY,
5107                          &state);
5108        if (ret < 0) {
5109                dev_err(adap->pdev_dev, "could not connect to FW, error %d\n",
5110                        ret);
5111                return ret;
5112        }
5113        if (ret == adap->mbox)
5114                adap->flags |= MASTER_PF;
5115        if (force_init && state == DEV_STATE_INIT)
5116                state = DEV_STATE_UNINIT;
5117
5118        /*
5119         * If we're the Master PF Driver and the device is uninitialized,
5120         * then let's consider upgrading the firmware ...  (We always want
5121         * to check the firmware version number in order to A. get it for
5122         * later reporting and B. to warn if the currently loaded firmware
5123         * is excessively mismatched relative to the driver.)
5124         */
5125        ret = t4_check_fw_version(adap);
5126
5127        /* The error code -EFAULT is returned by t4_check_fw_version() if
5128         * firmware on adapter < supported firmware. If firmware on adapter
5129         * is too old (not supported by driver) and we're the MASTER_PF set
5130         * adapter state to DEV_STATE_UNINIT to force firmware upgrade
5131         * and reinitialization.
5132         */
5133        if ((adap->flags & MASTER_PF) && ret == -EFAULT)
5134                state = DEV_STATE_UNINIT;
5135        if ((adap->flags & MASTER_PF) && state != DEV_STATE_INIT) {
5136                if (ret == -EINVAL || ret == -EFAULT || ret > 0) {
5137                        if (upgrade_fw(adap) >= 0) {
5138                                /*
5139                                 * Note that the chip was reset as part of the
5140                                 * firmware upgrade so we don't reset it again
5141                                 * below and grab the new firmware version.
5142                                 */
5143                                reset = 0;
5144                                ret = t4_check_fw_version(adap);
5145                        } else
5146                                if (ret == -EFAULT) {
5147                                        /*
5148                                         * Firmware is old but still might
5149                                         * work if we force reinitialization
5150                                         * of the adapter. Ignoring FW upgrade
5151                                         * failure.
5152                                         */
5153                                        dev_warn(adap->pdev_dev,
5154                                                 "Ignoring firmware upgrade "
5155                                                 "failure, and forcing driver "
5156                                                 "to reinitialize the "
5157                                                 "adapter.\n");
5158                                        ret = 0;
5159                                }
5160                }
5161                if (ret < 0)
5162                        return ret;
5163        }
5164
5165        /*
5166         * Grab VPD parameters.  This should be done after we establish a
5167         * connection to the firmware since some of the VPD parameters
5168         * (notably the Core Clock frequency) are retrieved via requests to
5169         * the firmware.  On the other hand, we need these fairly early on
5170         * so we do this right after getting ahold of the firmware.
5171         */
5172        ret = get_vpd_params(adap, &adap->params.vpd);
5173        if (ret < 0)
5174                goto bye;
5175
5176        /*
5177         * Find out what ports are available to us.  Note that we need to do
5178         * this before calling adap_init0_no_config() since it needs nports
5179         * and portvec ...
5180         */
5181        v =
5182            FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
5183            FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_PORTVEC);
5184        ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 1, &v, &port_vec);
5185        if (ret < 0)
5186                goto bye;
5187
5188        adap->params.nports = hweight32(port_vec);
5189        adap->params.portvec = port_vec;
5190
5191        /*
5192         * If the firmware is initialized already (and we're not forcing a
5193         * master initialization), note that we're living with existing
5194         * adapter parameters.  Otherwise, it's time to try initializing the
5195         * adapter ...
5196         */
5197        if (state == DEV_STATE_INIT) {
5198                dev_info(adap->pdev_dev, "Coming up as %s: "\
5199                         "Adapter already initialized\n",
5200                         adap->flags & MASTER_PF ? "MASTER" : "SLAVE");
5201                adap->flags |= USING_SOFT_PARAMS;
5202        } else {
5203                dev_info(adap->pdev_dev, "Coming up as MASTER: "\
5204                         "Initializing adapter\n");
5205
5206                /*
5207                 * If the firmware doesn't support Configuration
5208                 * Files warn user and exit,
5209                 */
5210                if (ret < 0)
5211                        dev_warn(adap->pdev_dev, "Firmware doesn't support "
5212                                 "configuration file.\n");
5213                if (force_old_init)
5214                        ret = adap_init0_no_config(adap, reset);
5215                else {
5216                        /*
5217                         * Find out whether we're dealing with a version of
5218                         * the firmware which has configuration file support.
5219                         */
5220                        params[0] = (FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
5221                                     FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_CF));
5222                        ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 1,
5223                                              params, val);
5224
5225                        /*
5226                         * If the firmware doesn't support Configuration
5227                         * Files, use the old Driver-based, hard-wired
5228                         * initialization.  Otherwise, try using the
5229                         * Configuration File support and fall back to the
5230                         * Driver-based initialization if there's no
5231                         * Configuration File found.
5232                         */
5233                        if (ret < 0)
5234                                ret = adap_init0_no_config(adap, reset);
5235                        else {
5236                                /*
5237                                 * The firmware provides us with a memory
5238                                 * buffer where we can load a Configuration
5239                                 * File from the host if we want to override
5240                                 * the Configuration File in flash.
5241                                 */
5242
5243                                ret = adap_init0_config(adap, reset);
5244                                if (ret == -ENOENT) {
5245                                        dev_info(adap->pdev_dev,
5246                                            "No Configuration File present "
5247                                            "on adapter.  Using hard-wired "
5248                                            "configuration parameters.\n");
5249                                        ret = adap_init0_no_config(adap, reset);
5250                                }
5251                        }
5252                }
5253                if (ret < 0) {
5254                        dev_err(adap->pdev_dev,
5255                                "could not initialize adapter, error %d\n",
5256                                -ret);
5257                        goto bye;
5258                }
5259        }
5260
5261        /*
5262         * If we're living with non-hard-coded parameters (either from a
5263         * Firmware Configuration File or values programmed by a different PF
5264         * Driver), give the SGE code a chance to pull in anything that it
5265         * needs ...  Note that this must be called after we retrieve our VPD
5266         * parameters in order to know how to convert core ticks to seconds.
5267         */
5268        if (adap->flags & USING_SOFT_PARAMS) {
5269                ret = t4_sge_init(adap);
5270                if (ret < 0)
5271                        goto bye;
5272        }
5273
5274        if (is_bypass_device(adap->pdev->device))
5275                adap->params.bypass = 1;
5276
5277        /*
5278         * Grab some of our basic fundamental operating parameters.
5279         */
5280#define FW_PARAM_DEV(param) \
5281        (FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) | \
5282        FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_##param))
5283
5284#define FW_PARAM_PFVF(param) \
5285        FW_PARAMS_MNEM(FW_PARAMS_MNEM_PFVF) | \
5286        FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_PFVF_##param)|  \
5287        FW_PARAMS_PARAM_Y(0) | \
5288        FW_PARAMS_PARAM_Z(0)
5289
5290        params[0] = FW_PARAM_PFVF(EQ_START);
5291        params[1] = FW_PARAM_PFVF(L2T_START);
5292        params[2] = FW_PARAM_PFVF(L2T_END);
5293        params[3] = FW_PARAM_PFVF(FILTER_START);
5294        params[4] = FW_PARAM_PFVF(FILTER_END);
5295        params[5] = FW_PARAM_PFVF(IQFLINT_START);
5296        ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 6, params, val);
5297        if (ret < 0)
5298                goto bye;
5299        adap->sge.egr_start = val[0];
5300        adap->l2t_start = val[1];
5301        adap->l2t_end = val[2];
5302        adap->tids.ftid_base = val[3];
5303        adap->tids.nftids = val[4] - val[3] + 1;
5304        adap->sge.ingr_start = val[5];
5305
5306        /* query params related to active filter region */
5307        params[0] = FW_PARAM_PFVF(ACTIVE_FILTER_START);
5308        params[1] = FW_PARAM_PFVF(ACTIVE_FILTER_END);
5309        ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 2, params, val);
5310        /* If Active filter size is set we enable establishing
5311         * offload connection through firmware work request
5312         */
5313        if ((val[0] != val[1]) && (ret >= 0)) {
5314                adap->flags |= FW_OFLD_CONN;
5315                adap->tids.aftid_base = val[0];
5316                adap->tids.aftid_end = val[1];
5317        }
5318
5319        /* If we're running on newer firmware, let it know that we're
5320         * prepared to deal with encapsulated CPL messages.  Older
5321         * firmware won't understand this and we'll just get
5322         * unencapsulated messages ...
5323         */
5324        params[0] = FW_PARAM_PFVF(CPLFW4MSG_ENCAP);
5325        val[0] = 1;
5326        (void) t4_set_params(adap, adap->mbox, adap->fn, 0, 1, params, val);
5327
5328        /*
5329         * Get device capabilities so we can determine what resources we need
5330         * to manage.
5331         */
5332        memset(&caps_cmd, 0, sizeof(caps_cmd));
5333        caps_cmd.op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
5334                                     FW_CMD_REQUEST | FW_CMD_READ);
5335        caps_cmd.cfvalid_to_len16 = htonl(FW_LEN16(caps_cmd));
5336        ret = t4_wr_mbox(adap, adap->mbox, &caps_cmd, sizeof(caps_cmd),
5337                         &caps_cmd);
5338        if (ret < 0)
5339                goto bye;
5340
5341        if (caps_cmd.ofldcaps) {
5342                /* query offload-related parameters */
5343                params[0] = FW_PARAM_DEV(NTID);
5344                params[1] = FW_PARAM_PFVF(SERVER_START);
5345                params[2] = FW_PARAM_PFVF(SERVER_END);
5346                params[3] = FW_PARAM_PFVF(TDDP_START);
5347                params[4] = FW_PARAM_PFVF(TDDP_END);
5348                params[5] = FW_PARAM_DEV(FLOWC_BUFFIFO_SZ);
5349                ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 6,
5350                                      params, val);
5351                if (ret < 0)
5352                        goto bye;
5353                adap->tids.ntids = val[0];
5354                adap->tids.natids = min(adap->tids.ntids / 2, MAX_ATIDS);
5355                adap->tids.stid_base = val[1];
5356                adap->tids.nstids = val[2] - val[1] + 1;
5357                /*
5358                 * Setup server filter region. Divide the availble filter
5359                 * region into two parts. Regular filters get 1/3rd and server
5360                 * filters get 2/3rd part. This is only enabled if workarond
5361                 * path is enabled.
5362                 * 1. For regular filters.
5363                 * 2. Server filter: This are special filters which are used
5364                 * to redirect SYN packets to offload queue.
5365                 */
5366                if (adap->flags & FW_OFLD_CONN && !is_bypass(adap)) {
5367                        adap->tids.sftid_base = adap->tids.ftid_base +
5368                                        DIV_ROUND_UP(adap->tids.nftids, 3);
5369                        adap->tids.nsftids = adap->tids.nftids -
5370                                         DIV_ROUND_UP(adap->tids.nftids, 3);
5371                        adap->tids.nftids = adap->tids.sftid_base -
5372                                                adap->tids.ftid_base;
5373                }
5374                adap->vres.ddp.start = val[3];
5375                adap->vres.ddp.size = val[4] - val[3] + 1;
5376                adap->params.ofldq_wr_cred = val[5];
5377
5378                adap->params.offload = 1;
5379        }
5380        if (caps_cmd.rdmacaps) {
5381                params[0] = FW_PARAM_PFVF(STAG_START);
5382                params[1] = FW_PARAM_PFVF(STAG_END);
5383                params[2] = FW_PARAM_PFVF(RQ_START);
5384                params[3] = FW_PARAM_PFVF(RQ_END);
5385                params[4] = FW_PARAM_PFVF(PBL_START);
5386                params[5] = FW_PARAM_PFVF(PBL_END);
5387                ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 6,
5388                                      params, val);
5389                if (ret < 0)
5390                        goto bye;
5391                adap->vres.stag.start = val[0];
5392                adap->vres.stag.size = val[1] - val[0] + 1;
5393                adap->vres.rq.start = val[2];
5394                adap->vres.rq.size = val[3] - val[2] + 1;
5395                adap->vres.pbl.start = val[4];
5396                adap->vres.pbl.size = val[5] - val[4] + 1;
5397
5398                params[0] = FW_PARAM_PFVF(SQRQ_START);
5399                params[1] = FW_PARAM_PFVF(SQRQ_END);
5400                params[2] = FW_PARAM_PFVF(CQ_START);
5401                params[3] = FW_PARAM_PFVF(CQ_END);
5402                params[4] = FW_PARAM_PFVF(OCQ_START);
5403                params[5] = FW_PARAM_PFVF(OCQ_END);
5404                ret = t4_query_params(adap, 0, 0, 0, 6, params, val);
5405                if (ret < 0)
5406                        goto bye;
5407                adap->vres.qp.start = val[0];
5408                adap->vres.qp.size = val[1] - val[0] + 1;
5409                adap->vres.cq.start = val[2];
5410                adap->vres.cq.size = val[3] - val[2] + 1;
5411                adap->vres.ocq.start = val[4];
5412                adap->vres.ocq.size = val[5] - val[4] + 1;
5413        }
5414        if (caps_cmd.iscsicaps) {
5415                params[0] = FW_PARAM_PFVF(ISCSI_START);
5416                params[1] = FW_PARAM_PFVF(ISCSI_END);
5417                ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 2,
5418                                      params, val);
5419                if (ret < 0)
5420                        goto bye;
5421                adap->vres.iscsi.start = val[0];
5422                adap->vres.iscsi.size = val[1] - val[0] + 1;
5423        }
5424#undef FW_PARAM_PFVF
5425#undef FW_PARAM_DEV
5426
5427        /*
5428         * These are finalized by FW initialization, load their values now.
5429         */
5430        v = t4_read_reg(adap, TP_TIMER_RESOLUTION);
5431        adap->params.tp.tre = TIMERRESOLUTION_GET(v);
5432        adap->params.tp.dack_re = DELAYEDACKRESOLUTION_GET(v);
5433        t4_read_mtu_tbl(adap, adap->params.mtus, NULL);
5434        t4_load_mtus(adap, adap->params.mtus, adap->params.a_wnd,
5435                     adap->params.b_wnd);
5436
5437        /* MODQ_REQ_MAP defaults to setting queues 0-3 to chan 0-3 */
5438        for (j = 0; j < NCHAN; j++)
5439                adap->params.tp.tx_modq[j] = j;
5440
5441        t4_read_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA,
5442                         &adap->filter_mode, 1,
5443                         TP_VLAN_PRI_MAP);
5444
5445        adap->flags |= FW_OK;
5446        return 0;
5447
5448        /*
5449         * Something bad happened.  If a command timed out or failed with EIO
5450         * FW does not operate within its spec or something catastrophic
5451         * happened to HW/FW, stop issuing commands.
5452         */
5453bye:
5454        if (ret != -ETIMEDOUT && ret != -EIO)
5455                t4_fw_bye(adap, adap->mbox);
5456        return ret;
5457}
5458
5459/* EEH callbacks */
5460
5461static pci_ers_result_t eeh_err_detected(struct pci_dev *pdev,
5462                                         pci_channel_state_t state)
5463{
5464        int i;
5465        struct adapter *adap = pci_get_drvdata(pdev);
5466
5467        if (!adap)
5468                goto out;
5469
5470        rtnl_lock();
5471        adap->flags &= ~FW_OK;
5472        notify_ulds(adap, CXGB4_STATE_START_RECOVERY);
5473        for_each_port(adap, i) {
5474                struct net_device *dev = adap->port[i];
5475
5476                netif_device_detach(dev);
5477                netif_carrier_off(dev);
5478        }
5479        if (adap->flags & FULL_INIT_DONE)
5480                cxgb_down(adap);
5481        rtnl_unlock();
5482        pci_disable_device(pdev);
5483out:    return state == pci_channel_io_perm_failure ?
5484                PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_NEED_RESET;
5485}
5486
5487static pci_ers_result_t eeh_slot_reset(struct pci_dev *pdev)
5488{
5489        int i, ret;
5490        struct fw_caps_config_cmd c;
5491        struct adapter *adap = pci_get_drvdata(pdev);
5492
5493        if (!adap) {
5494                pci_restore_state(pdev);
5495                pci_save_state(pdev);
5496                return PCI_ERS_RESULT_RECOVERED;
5497        }
5498
5499        if (pci_enable_device(pdev)) {
5500                dev_err(&pdev->dev, "cannot reenable PCI device after reset\n");
5501                return PCI_ERS_RESULT_DISCONNECT;
5502        }
5503
5504        pci_set_master(pdev);
5505        pci_restore_state(pdev);
5506        pci_save_state(pdev);
5507        pci_cleanup_aer_uncorrect_error_status(pdev);
5508
5509        if (t4_wait_dev_ready(adap) < 0)
5510                return PCI_ERS_RESULT_DISCONNECT;
5511        if (t4_fw_hello(adap, adap->fn, adap->fn, MASTER_MUST, NULL) < 0)
5512                return PCI_ERS_RESULT_DISCONNECT;
5513        adap->flags |= FW_OK;
5514        if (adap_init1(adap, &c))
5515                return PCI_ERS_RESULT_DISCONNECT;
5516
5517        for_each_port(adap, i) {
5518                struct port_info *p = adap2pinfo(adap, i);
5519
5520                ret = t4_alloc_vi(adap, adap->fn, p->tx_chan, adap->fn, 0, 1,
5521                                  NULL, NULL);
5522                if (ret < 0)
5523                        return PCI_ERS_RESULT_DISCONNECT;
5524                p->viid = ret;
5525                p->xact_addr_filt = -1;
5526        }
5527
5528        t4_load_mtus(adap, adap->params.mtus, adap->params.a_wnd,
5529                     adap->params.b_wnd);
5530        setup_memwin(adap);
5531        if (cxgb_up(adap))
5532                return PCI_ERS_RESULT_DISCONNECT;
5533        return PCI_ERS_RESULT_RECOVERED;
5534}
5535
5536static void eeh_resume(struct pci_dev *pdev)
5537{
5538        int i;
5539        struct adapter *adap = pci_get_drvdata(pdev);
5540
5541        if (!adap)
5542                return;
5543
5544        rtnl_lock();
5545        for_each_port(adap, i) {
5546                struct net_device *dev = adap->port[i];
5547
5548                if (netif_running(dev)) {
5549                        link_start(dev);
5550                        cxgb_set_rxmode(dev);
5551                }
5552                netif_device_attach(dev);
5553        }
5554        rtnl_unlock();
5555}
5556
5557static const struct pci_error_handlers cxgb4_eeh = {
5558        .error_detected = eeh_err_detected,
5559        .slot_reset     = eeh_slot_reset,
5560        .resume         = eeh_resume,
5561};
5562
5563static inline bool is_10g_port(const struct link_config *lc)
5564{
5565        return (lc->supported & FW_PORT_CAP_SPEED_10G) != 0;
5566}
5567
5568static inline void init_rspq(struct sge_rspq *q, u8 timer_idx, u8 pkt_cnt_idx,
5569                             unsigned int size, unsigned int iqe_size)
5570{
5571        q->intr_params = QINTR_TIMER_IDX(timer_idx) |
5572                         (pkt_cnt_idx < SGE_NCOUNTERS ? QINTR_CNT_EN : 0);
5573        q->pktcnt_idx = pkt_cnt_idx < SGE_NCOUNTERS ? pkt_cnt_idx : 0;
5574        q->iqe_len = iqe_size;
5575        q->size = size;
5576}
5577
5578/*
5579 * Perform default configuration of DMA queues depending on the number and type
5580 * of ports we found and the number of available CPUs.  Most settings can be
5581 * modified by the admin prior to actual use.
5582 */
5583static void cfg_queues(struct adapter *adap)
5584{
5585        struct sge *s = &adap->sge;
5586        int i, q10g = 0, n10g = 0, qidx = 0;
5587
5588        for_each_port(adap, i)
5589                n10g += is_10g_port(&adap2pinfo(adap, i)->link_cfg);
5590
5591        /*
5592         * We default to 1 queue per non-10G port and up to # of cores queues
5593         * per 10G port.
5594         */
5595        if (n10g)
5596                q10g = (MAX_ETH_QSETS - (adap->params.nports - n10g)) / n10g;
5597        if (q10g > netif_get_num_default_rss_queues())
5598                q10g = netif_get_num_default_rss_queues();
5599
5600        for_each_port(adap, i) {
5601                struct port_info *pi = adap2pinfo(adap, i);
5602
5603                pi->first_qset = qidx;
5604                pi->nqsets = is_10g_port(&pi->link_cfg) ? q10g : 1;
5605                qidx += pi->nqsets;
5606        }
5607
5608        s->ethqsets = qidx;
5609        s->max_ethqsets = qidx;   /* MSI-X may lower it later */
5610
5611        if (is_offload(adap)) {
5612                /*
5613                 * For offload we use 1 queue/channel if all ports are up to 1G,
5614                 * otherwise we divide all available queues amongst the channels
5615                 * capped by the number of available cores.
5616                 */
5617                if (n10g) {
5618                        i = min_t(int, ARRAY_SIZE(s->ofldrxq),
5619                                  num_online_cpus());
5620                        s->ofldqsets = roundup(i, adap->params.nports);
5621                } else
5622                        s->ofldqsets = adap->params.nports;
5623                /* For RDMA one Rx queue per channel suffices */
5624                s->rdmaqs = adap->params.nports;
5625        }
5626
5627        for (i = 0; i < ARRAY_SIZE(s->ethrxq); i++) {
5628                struct sge_eth_rxq *r = &s->ethrxq[i];
5629
5630                init_rspq(&r->rspq, 0, 0, 1024, 64);
5631                r->fl.size = 72;
5632        }
5633
5634        for (i = 0; i < ARRAY_SIZE(s->ethtxq); i++)
5635                s->ethtxq[i].q.size = 1024;
5636
5637        for (i = 0; i < ARRAY_SIZE(s->ctrlq); i++)
5638                s->ctrlq[i].q.size = 512;
5639
5640        for (i = 0; i < ARRAY_SIZE(s->ofldtxq); i++)
5641                s->ofldtxq[i].q.size = 1024;
5642
5643        for (i = 0; i < ARRAY_SIZE(s->ofldrxq); i++) {
5644                struct sge_ofld_rxq *r = &s->ofldrxq[i];
5645
5646                init_rspq(&r->rspq, 0, 0, 1024, 64);
5647                r->rspq.uld = CXGB4_ULD_ISCSI;
5648                r->fl.size = 72;
5649        }
5650
5651        for (i = 0; i < ARRAY_SIZE(s->rdmarxq); i++) {
5652                struct sge_ofld_rxq *r = &s->rdmarxq[i];
5653
5654                init_rspq(&r->rspq, 0, 0, 511, 64);
5655                r->rspq.uld = CXGB4_ULD_RDMA;
5656                r->fl.size = 72;
5657        }
5658
5659        init_rspq(&s->fw_evtq, 6, 0, 512, 64);
5660        init_rspq(&s->intrq, 6, 0, 2 * MAX_INGQ, 64);
5661}
5662
5663/*
5664 * Reduce the number of Ethernet queues across all ports to at most n.
5665 * n provides at least one queue per port.
5666 */
5667static void reduce_ethqs(struct adapter *adap, int n)
5668{
5669        int i;
5670        struct port_info *pi;
5671
5672        while (n < adap->sge.ethqsets)
5673                for_each_port(adap, i) {
5674                        pi = adap2pinfo(adap, i);
5675                        if (pi->nqsets > 1) {
5676                                pi->nqsets--;
5677                                adap->sge.ethqsets--;
5678                                if (adap->sge.ethqsets <= n)
5679                                        break;
5680                        }
5681                }
5682
5683        n = 0;
5684        for_each_port(adap, i) {
5685                pi = adap2pinfo(adap, i);
5686                pi->first_qset = n;
5687                n += pi->nqsets;
5688        }
5689}
5690
5691/* 2 MSI-X vectors needed for the FW queue and non-data interrupts */
5692#define EXTRA_VECS 2
5693
5694static int enable_msix(struct adapter *adap)
5695{
5696        int ofld_need = 0;
5697        int i, err, want, need;
5698        struct sge *s = &adap->sge;
5699        unsigned int nchan = adap->params.nports;
5700        struct msix_entry entries[MAX_INGQ + 1];
5701
5702        for (i = 0; i < ARRAY_SIZE(entries); ++i)
5703                entries[i].entry = i;
5704
5705        want = s->max_ethqsets + EXTRA_VECS;
5706        if (is_offload(adap)) {
5707                want += s->rdmaqs + s->ofldqsets;
5708                /* need nchan for each possible ULD */
5709                ofld_need = 2 * nchan;
5710        }
5711        need = adap->params.nports + EXTRA_VECS + ofld_need;
5712
5713        while ((err = pci_enable_msix(adap->pdev, entries, want)) >= need)
5714                want = err;
5715
5716        if (!err) {
5717                /*
5718                 * Distribute available vectors to the various queue groups.
5719                 * Every group gets its minimum requirement and NIC gets top
5720                 * priority for leftovers.
5721                 */
5722                i = want - EXTRA_VECS - ofld_need;
5723                if (i < s->max_ethqsets) {
5724                        s->max_ethqsets = i;
5725                        if (i < s->ethqsets)
5726                                reduce_ethqs(adap, i);
5727                }
5728                if (is_offload(adap)) {
5729                        i = want - EXTRA_VECS - s->max_ethqsets;
5730                        i -= ofld_need - nchan;
5731                        s->ofldqsets = (i / nchan) * nchan;  /* round down */
5732                }
5733                for (i = 0; i < want; ++i)
5734                        adap->msix_info[i].vec = entries[i].vector;
5735        } else if (err > 0)
5736                dev_info(adap->pdev_dev,
5737                         "only %d MSI-X vectors left, not using MSI-X\n", err);
5738        return err;
5739}
5740
5741#undef EXTRA_VECS
5742
5743static int init_rss(struct adapter *adap)
5744{
5745        unsigned int i, j;
5746
5747        for_each_port(adap, i) {
5748                struct port_info *pi = adap2pinfo(adap, i);
5749
5750                pi->rss = kcalloc(pi->rss_size, sizeof(u16), GFP_KERNEL);
5751                if (!pi->rss)
5752                        return -ENOMEM;
5753                for (j = 0; j < pi->rss_size; j++)
5754                        pi->rss[j] = ethtool_rxfh_indir_default(j, pi->nqsets);
5755        }
5756        return 0;
5757}
5758
5759static void print_port_info(const struct net_device *dev)
5760{
5761        static const char *base[] = {
5762                "R XFI", "R XAUI", "T SGMII", "T XFI", "T XAUI", "KX4", "CX4",
5763                "KX", "KR", "R SFP+", "KR/KX", "KR/KX/KX4"
5764        };
5765
5766        char buf[80];
5767        char *bufp = buf;
5768        const char *spd = "";
5769        const struct port_info *pi = netdev_priv(dev);
5770        const struct adapter *adap = pi->adapter;
5771
5772        if (adap->params.pci.speed == PCI_EXP_LNKSTA_CLS_2_5GB)
5773                spd = " 2.5 GT/s";
5774        else if (adap->params.pci.speed == PCI_EXP_LNKSTA_CLS_5_0GB)
5775                spd = " 5 GT/s";
5776
5777        if (pi->link_cfg.supported & FW_PORT_CAP_SPEED_100M)
5778                bufp += sprintf(bufp, "100/");
5779        if (pi->link_cfg.supported & FW_PORT_CAP_SPEED_1G)
5780                bufp += sprintf(bufp, "1000/");
5781        if (pi->link_cfg.supported & FW_PORT_CAP_SPEED_10G)
5782                bufp += sprintf(bufp, "10G/");
5783        if (bufp != buf)
5784                --bufp;
5785        sprintf(bufp, "BASE-%s", base[pi->port_type]);
5786
5787        netdev_info(dev, "Chelsio %s rev %d %s %sNIC PCIe x%d%s%s\n",
5788                    adap->params.vpd.id,
5789                    CHELSIO_CHIP_RELEASE(adap->params.rev), buf,
5790                    is_offload(adap) ? "R" : "", adap->params.pci.width, spd,
5791                    (adap->flags & USING_MSIX) ? " MSI-X" :
5792                    (adap->flags & USING_MSI) ? " MSI" : "");
5793        netdev_info(dev, "S/N: %s, E/C: %s\n",
5794                    adap->params.vpd.sn, adap->params.vpd.ec);
5795}
5796
5797static void enable_pcie_relaxed_ordering(struct pci_dev *dev)
5798{
5799        pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_RELAX_EN);
5800}
5801
5802/*
5803 * Free the following resources:
5804 * - memory used for tables
5805 * - MSI/MSI-X
5806 * - net devices
5807 * - resources FW is holding for us
5808 */
5809static void free_some_resources(struct adapter *adapter)
5810{
5811        unsigned int i;
5812
5813        t4_free_mem(adapter->l2t);
5814        t4_free_mem(adapter->tids.tid_tab);
5815        disable_msi(adapter);
5816
5817        for_each_port(adapter, i)
5818                if (adapter->port[i]) {
5819                        kfree(adap2pinfo(adapter, i)->rss);
5820                        free_netdev(adapter->port[i]);
5821                }
5822        if (adapter->flags & FW_OK)
5823                t4_fw_bye(adapter, adapter->fn);
5824}
5825
5826#define TSO_FLAGS (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN)
5827#define VLAN_FEAT (NETIF_F_SG | NETIF_F_IP_CSUM | TSO_FLAGS | \
5828                   NETIF_F_IPV6_CSUM | NETIF_F_HIGHDMA)
5829#define SEGMENT_SIZE 128
5830
5831static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
5832{
5833        int func, i, err, s_qpp, qpp, num_seg;
5834        struct port_info *pi;
5835        bool highdma = false;
5836        struct adapter *adapter = NULL;
5837
5838        printk_once(KERN_INFO "%s - version %s\n", DRV_DESC, DRV_VERSION);
5839
5840        err = pci_request_regions(pdev, KBUILD_MODNAME);
5841        if (err) {
5842                /* Just info, some other driver may have claimed the device. */
5843                dev_info(&pdev->dev, "cannot obtain PCI resources\n");
5844                return err;
5845        }
5846
5847        /* We control everything through one PF */
5848        func = PCI_FUNC(pdev->devfn);
5849        if (func != ent->driver_data) {
5850                pci_save_state(pdev);        /* to restore SR-IOV later */
5851                goto sriov;
5852        }
5853
5854        err = pci_enable_device(pdev);
5855        if (err) {
5856                dev_err(&pdev->dev, "cannot enable PCI device\n");
5857                goto out_release_regions;
5858        }
5859
5860        if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
5861                highdma = true;
5862                err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
5863                if (err) {
5864                        dev_err(&pdev->dev, "unable to obtain 64-bit DMA for "
5865                                "coherent allocations\n");
5866                        goto out_disable_device;
5867                }
5868        } else {
5869                err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
5870                if (err) {
5871                        dev_err(&pdev->dev, "no usable DMA configuration\n");
5872                        goto out_disable_device;
5873                }
5874        }
5875
5876        pci_enable_pcie_error_reporting(pdev);
5877        enable_pcie_relaxed_ordering(pdev);
5878        pci_set_master(pdev);
5879        pci_save_state(pdev);
5880
5881        adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
5882        if (!adapter) {
5883                err = -ENOMEM;
5884                goto out_disable_device;
5885        }
5886
5887        adapter->regs = pci_ioremap_bar(pdev, 0);
5888        if (!adapter->regs) {
5889                dev_err(&pdev->dev, "cannot map device registers\n");
5890                err = -ENOMEM;
5891                goto out_free_adapter;
5892        }
5893
5894        adapter->pdev = pdev;
5895        adapter->pdev_dev = &pdev->dev;
5896        adapter->mbox = func;
5897        adapter->fn = func;
5898        adapter->msg_enable = dflt_msg_enable;
5899        memset(adapter->chan_map, 0xff, sizeof(adapter->chan_map));
5900
5901        spin_lock_init(&adapter->stats_lock);
5902        spin_lock_init(&adapter->tid_release_lock);
5903
5904        INIT_WORK(&adapter->tid_release_task, process_tid_release_list);
5905        INIT_WORK(&adapter->db_full_task, process_db_full);
5906        INIT_WORK(&adapter->db_drop_task, process_db_drop);
5907
5908        err = t4_prep_adapter(adapter);
5909        if (err)
5910                goto out_unmap_bar0;
5911
5912        if (!is_t4(adapter->chip)) {
5913                s_qpp = QUEUESPERPAGEPF1 * adapter->fn;
5914                qpp = 1 << QUEUESPERPAGEPF0_GET(t4_read_reg(adapter,
5915                      SGE_EGRESS_QUEUES_PER_PAGE_PF) >> s_qpp);
5916                num_seg = PAGE_SIZE / SEGMENT_SIZE;
5917
5918                /* Each segment size is 128B. Write coalescing is enabled only
5919                 * when SGE_EGRESS_QUEUES_PER_PAGE_PF reg value for the
5920                 * queue is less no of segments that can be accommodated in
5921                 * a page size.
5922                 */
5923                if (qpp > num_seg) {
5924                        dev_err(&pdev->dev,
5925                                "Incorrect number of egress queues per page\n");
5926                        err = -EINVAL;
5927                        goto out_unmap_bar0;
5928                }
5929                adapter->bar2 = ioremap_wc(pci_resource_start(pdev, 2),
5930                pci_resource_len(pdev, 2));
5931                if (!adapter->bar2) {
5932                        dev_err(&pdev->dev, "cannot map device bar2 region\n");
5933                        err = -ENOMEM;
5934                        goto out_unmap_bar0;
5935                }
5936        }
5937
5938        setup_memwin(adapter);
5939        err = adap_init0(adapter);
5940        setup_memwin_rdma(adapter);
5941        if (err)
5942                goto out_unmap_bar;
5943
5944        for_each_port(adapter, i) {
5945                struct net_device *netdev;
5946
5947                netdev = alloc_etherdev_mq(sizeof(struct port_info),
5948                                           MAX_ETH_QSETS);
5949                if (!netdev) {
5950                        err = -ENOMEM;
5951                        goto out_free_dev;
5952                }
5953
5954                SET_NETDEV_DEV(netdev, &pdev->dev);
5955
5956                adapter->port[i] = netdev;
5957                pi = netdev_priv(netdev);
5958                pi->adapter = adapter;
5959                pi->xact_addr_filt = -1;
5960                pi->port_id = i;
5961                netdev->irq = pdev->irq;
5962
5963                netdev->hw_features = NETIF_F_SG | TSO_FLAGS |
5964                        NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
5965                        NETIF_F_RXCSUM | NETIF_F_RXHASH |
5966                        NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
5967                if (highdma)
5968                        netdev->hw_features |= NETIF_F_HIGHDMA;
5969                netdev->features |= netdev->hw_features;
5970                netdev->vlan_features = netdev->features & VLAN_FEAT;
5971
5972                netdev->priv_flags |= IFF_UNICAST_FLT;
5973
5974                netdev->netdev_ops = &cxgb4_netdev_ops;
5975                SET_ETHTOOL_OPS(netdev, &cxgb_ethtool_ops);
5976        }
5977
5978        pci_set_drvdata(pdev, adapter);
5979
5980        if (adapter->flags & FW_OK) {
5981                err = t4_port_init(adapter, func, func, 0);
5982                if (err)
5983                        goto out_free_dev;
5984        }
5985
5986        /*
5987         * Configure queues and allocate tables now, they can be needed as
5988         * soon as the first register_netdev completes.
5989         */
5990        cfg_queues(adapter);
5991
5992        adapter->l2t = t4_init_l2t();
5993        if (!adapter->l2t) {
5994                /* We tolerate a lack of L2T, giving up some functionality */
5995                dev_warn(&pdev->dev, "could not allocate L2T, continuing\n");
5996                adapter->params.offload = 0;
5997        }
5998
5999        if (is_offload(adapter) && tid_init(&adapter->tids) < 0) {
6000                dev_warn(&pdev->dev, "could not allocate TID table, "
6001                         "continuing\n");
6002                adapter->params.offload = 0;
6003        }
6004
6005        /* See what interrupts we'll be using */
6006        if (msi > 1 && enable_msix(adapter) == 0)
6007                adapter->flags |= USING_MSIX;
6008        else if (msi > 0 && pci_enable_msi(pdev) == 0)
6009                adapter->flags |= USING_MSI;
6010
6011        err = init_rss(adapter);
6012        if (err)
6013                goto out_free_dev;
6014
6015        /*
6016         * The card is now ready to go.  If any errors occur during device
6017         * registration we do not fail the whole card but rather proceed only
6018         * with the ports we manage to register successfully.  However we must
6019         * register at least one net device.
6020         */
6021        for_each_port(adapter, i) {
6022                pi = adap2pinfo(adapter, i);
6023                netif_set_real_num_tx_queues(adapter->port[i], pi->nqsets);
6024                netif_set_real_num_rx_queues(adapter->port[i], pi->nqsets);
6025
6026                err = register_netdev(adapter->port[i]);
6027                if (err)
6028                        break;
6029                adapter->chan_map[pi->tx_chan] = i;
6030                print_port_info(adapter->port[i]);
6031        }
6032        if (i == 0) {
6033                dev_err(&pdev->dev, "could not register any net devices\n");
6034                goto out_free_dev;
6035        }
6036        if (err) {
6037                dev_warn(&pdev->dev, "only %d net devices registered\n", i);
6038                err = 0;
6039        }
6040
6041        if (cxgb4_debugfs_root) {
6042                adapter->debugfs_root = debugfs_create_dir(pci_name(pdev),
6043                                                           cxgb4_debugfs_root);
6044                setup_debugfs(adapter);
6045        }
6046
6047        /* PCIe EEH recovery on powerpc platforms needs fundamental reset */
6048        pdev->needs_freset = 1;
6049
6050        if (is_offload(adapter))
6051                attach_ulds(adapter);
6052
6053sriov:
6054#ifdef CONFIG_PCI_IOV
6055        if (func < ARRAY_SIZE(num_vf) && num_vf[func] > 0)
6056                if (pci_enable_sriov(pdev, num_vf[func]) == 0)
6057                        dev_info(&pdev->dev,
6058                                 "instantiated %u virtual functions\n",
6059                                 num_vf[func]);
6060#endif
6061        return 0;
6062
6063 out_free_dev:
6064        free_some_resources(adapter);
6065 out_unmap_bar:
6066        if (!is_t4(adapter->chip))
6067                iounmap(adapter->bar2);
6068 out_unmap_bar0:
6069        iounmap(adapter->regs);
6070 out_free_adapter:
6071        kfree(adapter);
6072 out_disable_device:
6073        pci_disable_pcie_error_reporting(pdev);
6074        pci_disable_device(pdev);
6075 out_release_regions:
6076        pci_release_regions(pdev);
6077        pci_set_drvdata(pdev, NULL);
6078        return err;
6079}
6080
6081static void remove_one(struct pci_dev *pdev)
6082{
6083        struct adapter *adapter = pci_get_drvdata(pdev);
6084
6085#ifdef CONFIG_PCI_IOV
6086        pci_disable_sriov(pdev);
6087
6088#endif
6089
6090        if (adapter) {
6091                int i;
6092
6093                if (is_offload(adapter))
6094                        detach_ulds(adapter);
6095
6096                for_each_port(adapter, i)
6097                        if (adapter->port[i]->reg_state == NETREG_REGISTERED)
6098                                unregister_netdev(adapter->port[i]);
6099
6100                if (adapter->debugfs_root)
6101                        debugfs_remove_recursive(adapter->debugfs_root);
6102
6103                /* If we allocated filters, free up state associated with any
6104                 * valid filters ...
6105                 */
6106                if (adapter->tids.ftid_tab) {
6107                        struct filter_entry *f = &adapter->tids.ftid_tab[0];
6108                        for (i = 0; i < (adapter->tids.nftids +
6109                                        adapter->tids.nsftids); i++, f++)
6110                                if (f->valid)
6111                                        clear_filter(adapter, f);
6112                }
6113
6114                if (adapter->flags & FULL_INIT_DONE)
6115                        cxgb_down(adapter);
6116
6117                free_some_resources(adapter);
6118                iounmap(adapter->regs);
6119                if (!is_t4(adapter->chip))
6120                        iounmap(adapter->bar2);
6121                kfree(adapter);
6122                pci_disable_pcie_error_reporting(pdev);
6123                pci_disable_device(pdev);
6124                pci_release_regions(pdev);
6125                pci_set_drvdata(pdev, NULL);
6126        } else
6127                pci_release_regions(pdev);
6128}
6129
6130static struct pci_driver cxgb4_driver = {
6131        .name     = KBUILD_MODNAME,
6132        .id_table = cxgb4_pci_tbl,
6133        .probe    = init_one,
6134        .remove   = remove_one,
6135        .err_handler = &cxgb4_eeh,
6136};
6137
6138static int __init cxgb4_init_module(void)
6139{
6140        int ret;
6141
6142        workq = create_singlethread_workqueue("cxgb4");
6143        if (!workq)
6144                return -ENOMEM;
6145
6146        /* Debugfs support is optional, just warn if this fails */
6147        cxgb4_debugfs_root = debugfs_create_dir(KBUILD_MODNAME, NULL);
6148        if (!cxgb4_debugfs_root)
6149                pr_warn("could not create debugfs entry, continuing\n");
6150
6151        ret = pci_register_driver(&cxgb4_driver);
6152        if (ret < 0) {
6153                debugfs_remove(cxgb4_debugfs_root);
6154                destroy_workqueue(workq);
6155        }
6156
6157        register_inet6addr_notifier(&cxgb4_inet6addr_notifier);
6158
6159        return ret;
6160}
6161
6162static void __exit cxgb4_cleanup_module(void)
6163{
6164        unregister_inet6addr_notifier(&cxgb4_inet6addr_notifier);
6165        pci_unregister_driver(&cxgb4_driver);
6166        debugfs_remove(cxgb4_debugfs_root);  /* NULL ok */
6167        flush_workqueue(workq);
6168        destroy_workqueue(workq);
6169}
6170
6171module_init(cxgb4_init_module);
6172module_exit(cxgb4_cleanup_module);
6173