1 /************************************************************************** 2 3 Copyright (c) 2007-2009, Chelsio Inc. 4 All rights reserved. 5 6 Redistribution and use in source and binary forms, with or without 7 modification, are permitted provided that the following conditions are met: 8 9 1. Redistributions of source code must retain the above copyright notice, 10 this list of conditions and the following disclaimer. 11 12 2. Neither the name of the Chelsio Corporation nor the names of its 13 contributors may be used to endorse or promote products derived from 14 this software without specific prior written permission. 15 16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 20 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 POSSIBILITY OF SUCH DAMAGE. 27 28 ***************************************************************************/ 29 30 #include <sys/cdefs.h> 31 __FBSDID("$FreeBSD$"); 32 33 #include <sys/param.h> 34 #include <sys/systm.h> 35 #include <sys/kernel.h> 36 #include <sys/bus.h> 37 #include <sys/module.h> 38 #include <sys/pciio.h> 39 #include <sys/conf.h> 40 #include <machine/bus.h> 41 #include <machine/resource.h> 42 #include <sys/bus_dma.h> 43 #include <sys/ktr.h> 44 #include <sys/rman.h> 45 #include <sys/ioccom.h> 46 #include <sys/mbuf.h> 47 #include <sys/linker.h> 48 #include <sys/firmware.h> 49 #include <sys/socket.h> 50 #include <sys/sockio.h> 51 #include <sys/smp.h> 52 #include <sys/sysctl.h> 53 #include <sys/syslog.h> 54 #include <sys/queue.h> 55 #include <sys/taskqueue.h> 56 #include <sys/proc.h> 57 58 #include <net/bpf.h> 59 #include <net/ethernet.h> 60 #include <net/if.h> 61 #include <net/if_arp.h> 62 #include <net/if_dl.h> 63 #include <net/if_media.h> 64 #include <net/if_types.h> 65 #include <net/if_vlan_var.h> 66 67 #include <netinet/in_systm.h> 68 #include <netinet/in.h> 69 #include <netinet/if_ether.h> 70 #include <netinet/ip.h> 71 #include <netinet/ip.h> 72 #include <netinet/tcp.h> 73 #include <netinet/udp.h> 74 75 #include <dev/pci/pcireg.h> 76 #include <dev/pci/pcivar.h> 77 #include <dev/pci/pci_private.h> 78 79 #include <cxgb_include.h> 80 81 #ifdef PRIV_SUPPORTED 82 #include <sys/priv.h> 83 #endif 84 85 static int cxgb_setup_interrupts(adapter_t *); 86 static void cxgb_teardown_interrupts(adapter_t *); 87 static void cxgb_init(void *); 88 static int cxgb_init_locked(struct port_info *); 89 static int cxgb_uninit_locked(struct port_info *); 90 static int cxgb_uninit_synchronized(struct port_info *); 91 static int cxgb_ioctl(struct ifnet *, unsigned long, caddr_t); 92 static int cxgb_media_change(struct ifnet *); 93 static int cxgb_ifm_type(int); 94 static void cxgb_build_medialist(struct port_info *); 95 static void cxgb_media_status(struct ifnet *, struct ifmediareq *); 96 static int setup_sge_qsets(adapter_t *); 97 static void cxgb_async_intr(void *); 98 static void cxgb_tick_handler(void *, int); 99 static void cxgb_tick(void *); 100 static void link_check_callout(void *); 101 static void check_link_status(void *, int); 102 static void setup_rss(adapter_t *sc); 103 static int alloc_filters(struct adapter *); 104 static int setup_hw_filters(struct adapter *); 105 static int set_filter(struct adapter *, int, const struct filter_info *); 106 static inline void mk_set_tcb_field(struct cpl_set_tcb_field *, unsigned int, 107 unsigned int, u64, u64); 108 static inline void set_tcb_field_ulp(struct cpl_set_tcb_field *, unsigned int, 109 unsigned int, u64, u64); 110 111 /* Attachment glue for the PCI controller end of the device. Each port of 112 * the device is attached separately, as defined later. 113 */ 114 static int cxgb_controller_probe(device_t); 115 static int cxgb_controller_attach(device_t); 116 static int cxgb_controller_detach(device_t); 117 static void cxgb_free(struct adapter *); 118 static __inline void reg_block_dump(struct adapter *ap, uint8_t *buf, unsigned int start, 119 unsigned int end); 120 static void cxgb_get_regs(adapter_t *sc, struct ch_ifconf_regs *regs, uint8_t *buf); 121 static int cxgb_get_regs_len(void); 122 static int offload_open(struct port_info *pi); 123 static void touch_bars(device_t dev); 124 static int offload_close(struct t3cdev *tdev); 125 static void cxgb_update_mac_settings(struct port_info *p); 126 127 static device_method_t cxgb_controller_methods[] = { 128 DEVMETHOD(device_probe, cxgb_controller_probe), 129 DEVMETHOD(device_attach, cxgb_controller_attach), 130 DEVMETHOD(device_detach, cxgb_controller_detach), 131 132 /* bus interface */ 133 DEVMETHOD(bus_print_child, bus_generic_print_child), 134 DEVMETHOD(bus_driver_added, bus_generic_driver_added), 135 136 { 0, 0 } 137 }; 138 139 static driver_t cxgb_controller_driver = { 140 "cxgbc", 141 cxgb_controller_methods, 142 sizeof(struct adapter) 143 }; 144 145 static devclass_t cxgb_controller_devclass; 146 DRIVER_MODULE(cxgbc, pci, cxgb_controller_driver, cxgb_controller_devclass, 0, 0); 147 148 /* 149 * Attachment glue for the ports. Attachment is done directly to the 150 * controller device. 151 */ 152 static int cxgb_port_probe(device_t); 153 static int cxgb_port_attach(device_t); 154 static int cxgb_port_detach(device_t); 155 156 static device_method_t cxgb_port_methods[] = { 157 DEVMETHOD(device_probe, cxgb_port_probe), 158 DEVMETHOD(device_attach, cxgb_port_attach), 159 DEVMETHOD(device_detach, cxgb_port_detach), 160 { 0, 0 } 161 }; 162 163 static driver_t cxgb_port_driver = { 164 "cxgb", 165 cxgb_port_methods, 166 0 167 }; 168 169 static d_ioctl_t cxgb_extension_ioctl; 170 static d_open_t cxgb_extension_open; 171 static d_close_t cxgb_extension_close; 172 173 static struct cdevsw cxgb_cdevsw = { 174 .d_version = D_VERSION, 175 .d_flags = 0, 176 .d_open = cxgb_extension_open, 177 .d_close = cxgb_extension_close, 178 .d_ioctl = cxgb_extension_ioctl, 179 .d_name = "cxgb", 180 }; 181 182 static devclass_t cxgb_port_devclass; 183 DRIVER_MODULE(cxgb, cxgbc, cxgb_port_driver, cxgb_port_devclass, 0, 0); 184 185 /* 186 * The driver uses the best interrupt scheme available on a platform in the 187 * order MSI-X, MSI, legacy pin interrupts. This parameter determines which 188 * of these schemes the driver may consider as follows: 189 * 190 * msi = 2: choose from among all three options 191 * msi = 1 : only consider MSI and pin interrupts 192 * msi = 0: force pin interrupts 193 */ 194 static int msi_allowed = 2; 195 196 TUNABLE_INT("hw.cxgb.msi_allowed", &msi_allowed); 197 SYSCTL_NODE(_hw, OID_AUTO, cxgb, CTLFLAG_RD, 0, "CXGB driver parameters"); 198 SYSCTL_INT(_hw_cxgb, OID_AUTO, msi_allowed, CTLFLAG_RDTUN, &msi_allowed, 0, 199 "MSI-X, MSI, INTx selector"); 200 201 /* 202 * The driver enables offload as a default. 203 * To disable it, use ofld_disable = 1. 204 */ 205 static int ofld_disable = 0; 206 TUNABLE_INT("hw.cxgb.ofld_disable", &ofld_disable); 207 SYSCTL_INT(_hw_cxgb, OID_AUTO, ofld_disable, CTLFLAG_RDTUN, &ofld_disable, 0, 208 "disable ULP offload"); 209 210 /* 211 * The driver uses an auto-queue algorithm by default. 212 * To disable it and force a single queue-set per port, use multiq = 0 213 */ 214 static int multiq = 1; 215 TUNABLE_INT("hw.cxgb.multiq", &multiq); 216 SYSCTL_INT(_hw_cxgb, OID_AUTO, multiq, CTLFLAG_RDTUN, &multiq, 0, 217 "use min(ncpus/ports, 8) queue-sets per port"); 218 219 /* 220 * By default the driver will not update the firmware unless 221 * it was compiled against a newer version 222 * 223 */ 224 static int force_fw_update = 0; 225 TUNABLE_INT("hw.cxgb.force_fw_update", &force_fw_update); 226 SYSCTL_INT(_hw_cxgb, OID_AUTO, force_fw_update, CTLFLAG_RDTUN, &force_fw_update, 0, 227 "update firmware even if up to date"); 228 229 int cxgb_use_16k_clusters = -1; 230 TUNABLE_INT("hw.cxgb.use_16k_clusters", &cxgb_use_16k_clusters); 231 SYSCTL_INT(_hw_cxgb, OID_AUTO, use_16k_clusters, CTLFLAG_RDTUN, 232 &cxgb_use_16k_clusters, 0, "use 16kB clusters for the jumbo queue "); 233 234 /* 235 * Tune the size of the output queue. 236 */ 237 int cxgb_snd_queue_len = IFQ_MAXLEN; 238 TUNABLE_INT("hw.cxgb.snd_queue_len", &cxgb_snd_queue_len); 239 SYSCTL_INT(_hw_cxgb, OID_AUTO, snd_queue_len, CTLFLAG_RDTUN, 240 &cxgb_snd_queue_len, 0, "send queue size "); 241 242 static int nfilters = -1; 243 TUNABLE_INT("hw.cxgb.nfilters", &nfilters); 244 SYSCTL_INT(_hw_cxgb, OID_AUTO, nfilters, CTLFLAG_RDTUN, 245 &nfilters, 0, "max number of entries in the filter table"); 246 247 enum { 248 MAX_TXQ_ENTRIES = 16384, 249 MAX_CTRL_TXQ_ENTRIES = 1024, 250 MAX_RSPQ_ENTRIES = 16384, 251 MAX_RX_BUFFERS = 16384, 252 MAX_RX_JUMBO_BUFFERS = 16384, 253 MIN_TXQ_ENTRIES = 4, 254 MIN_CTRL_TXQ_ENTRIES = 4, 255 MIN_RSPQ_ENTRIES = 32, 256 MIN_FL_ENTRIES = 32, 257 MIN_FL_JUMBO_ENTRIES = 32 258 }; 259 260 struct filter_info { 261 u32 sip; 262 u32 sip_mask; 263 u32 dip; 264 u16 sport; 265 u16 dport; 266 u32 vlan:12; 267 u32 vlan_prio:3; 268 u32 mac_hit:1; 269 u32 mac_idx:4; 270 u32 mac_vld:1; 271 u32 pkt_type:2; 272 u32 report_filter_id:1; 273 u32 pass:1; 274 u32 rss:1; 275 u32 qset:3; 276 u32 locked:1; 277 u32 valid:1; 278 }; 279 280 enum { FILTER_NO_VLAN_PRI = 7 }; 281 282 #define EEPROM_MAGIC 0x38E2F10C 283 284 #define PORT_MASK ((1 << MAX_NPORTS) - 1) 285 286 /* Table for probing the cards. The desc field isn't actually used */ 287 struct cxgb_ident { 288 uint16_t vendor; 289 uint16_t device; 290 int index; 291 char *desc; 292 } cxgb_identifiers[] = { 293 {PCI_VENDOR_ID_CHELSIO, 0x0020, 0, "PE9000"}, 294 {PCI_VENDOR_ID_CHELSIO, 0x0021, 1, "T302E"}, 295 {PCI_VENDOR_ID_CHELSIO, 0x0022, 2, "T310E"}, 296 {PCI_VENDOR_ID_CHELSIO, 0x0023, 3, "T320X"}, 297 {PCI_VENDOR_ID_CHELSIO, 0x0024, 1, "T302X"}, 298 {PCI_VENDOR_ID_CHELSIO, 0x0025, 3, "T320E"}, 299 {PCI_VENDOR_ID_CHELSIO, 0x0026, 2, "T310X"}, 300 {PCI_VENDOR_ID_CHELSIO, 0x0030, 2, "T3B10"}, 301 {PCI_VENDOR_ID_CHELSIO, 0x0031, 3, "T3B20"}, 302 {PCI_VENDOR_ID_CHELSIO, 0x0032, 1, "T3B02"}, 303 {PCI_VENDOR_ID_CHELSIO, 0x0033, 4, "T3B04"}, 304 {PCI_VENDOR_ID_CHELSIO, 0x0035, 6, "T3C10"}, 305 {PCI_VENDOR_ID_CHELSIO, 0x0036, 3, "S320E-CR"}, 306 {PCI_VENDOR_ID_CHELSIO, 0x0037, 7, "N320E-G2"}, 307 {0, 0, 0, NULL} 308 }; 309 310 static int set_eeprom(struct port_info *pi, const uint8_t *data, int len, int offset); 311 312 313 static __inline char 314 t3rev2char(struct adapter *adapter) 315 { 316 char rev = 'z'; 317 318 switch(adapter->params.rev) { 319 case T3_REV_A: 320 rev = 'a'; 321 break; 322 case T3_REV_B: 323 case T3_REV_B2: 324 rev = 'b'; 325 break; 326 case T3_REV_C: 327 rev = 'c'; 328 break; 329 } 330 return rev; 331 } 332 333 static struct cxgb_ident * 334 cxgb_get_ident(device_t dev) 335 { 336 struct cxgb_ident *id; 337 338 for (id = cxgb_identifiers; id->desc != NULL; id++) { 339 if ((id->vendor == pci_get_vendor(dev)) && 340 (id->device == pci_get_device(dev))) { 341 return (id); 342 } 343 } 344 return (NULL); 345 } 346 347 static const struct adapter_info * 348 cxgb_get_adapter_info(device_t dev) 349 { 350 struct cxgb_ident *id; 351 const struct adapter_info *ai; 352 353 id = cxgb_get_ident(dev); 354 if (id == NULL) 355 return (NULL); 356 357 ai = t3_get_adapter_info(id->index); 358 359 return (ai); 360 } 361 362 static int 363 cxgb_controller_probe(device_t dev) 364 { 365 const struct adapter_info *ai; 366 char *ports, buf[80]; 367 int nports; 368 369 ai = cxgb_get_adapter_info(dev); 370 if (ai == NULL) 371 return (ENXIO); 372 373 nports = ai->nports0 + ai->nports1; 374 if (nports == 1) 375 ports = "port"; 376 else 377 ports = "ports"; 378 379 snprintf(buf, sizeof(buf), "%s, %d %s", ai->desc, nports, ports); 380 device_set_desc_copy(dev, buf); 381 return (BUS_PROBE_DEFAULT); 382 } 383 384 #define FW_FNAME "cxgb_t3fw" 385 #define TPEEPROM_NAME "cxgb_t3%c_tp_eeprom" 386 #define TPSRAM_NAME "cxgb_t3%c_protocol_sram" 387 388 static int 389 upgrade_fw(adapter_t *sc) 390 { 391 const struct firmware *fw; 392 int status; 393 u32 vers; 394 395 if ((fw = firmware_get(FW_FNAME)) == NULL) { 396 device_printf(sc->dev, "Could not find firmware image %s\n", FW_FNAME); 397 return (ENOENT); 398 } else 399 device_printf(sc->dev, "installing firmware on card\n"); 400 status = t3_load_fw(sc, (const uint8_t *)fw->data, fw->datasize); 401 402 if (status != 0) { 403 device_printf(sc->dev, "failed to install firmware: %d\n", 404 status); 405 } else { 406 t3_get_fw_version(sc, &vers); 407 snprintf(&sc->fw_version[0], sizeof(sc->fw_version), "%d.%d.%d", 408 G_FW_VERSION_MAJOR(vers), G_FW_VERSION_MINOR(vers), 409 G_FW_VERSION_MICRO(vers)); 410 } 411 412 firmware_put(fw, FIRMWARE_UNLOAD); 413 414 return (status); 415 } 416 417 /* 418 * The cxgb_controller_attach function is responsible for the initial 419 * bringup of the device. Its responsibilities include: 420 * 421 * 1. Determine if the device supports MSI or MSI-X. 422 * 2. Allocate bus resources so that we can access the Base Address Register 423 * 3. Create and initialize mutexes for the controller and its control 424 * logic such as SGE and MDIO. 425 * 4. Call hardware specific setup routine for the adapter as a whole. 426 * 5. Allocate the BAR for doing MSI-X. 427 * 6. Setup the line interrupt iff MSI-X is not supported. 428 * 7. Create the driver's taskq. 429 * 8. Start one task queue service thread. 430 * 9. Check if the firmware and SRAM are up-to-date. They will be 431 * auto-updated later (before FULL_INIT_DONE), if required. 432 * 10. Create a child device for each MAC (port) 433 * 11. Initialize T3 private state. 434 * 12. Trigger the LED 435 * 13. Setup offload iff supported. 436 * 14. Reset/restart the tick callout. 437 * 15. Attach sysctls 438 * 439 * NOTE: Any modification or deviation from this list MUST be reflected in 440 * the above comment. Failure to do so will result in problems on various 441 * error conditions including link flapping. 442 */ 443 static int 444 cxgb_controller_attach(device_t dev) 445 { 446 device_t child; 447 const struct adapter_info *ai; 448 struct adapter *sc; 449 int i, error = 0; 450 uint32_t vers; 451 int port_qsets = 1; 452 int msi_needed, reg; 453 char buf[80]; 454 455 sc = device_get_softc(dev); 456 sc->dev = dev; 457 sc->msi_count = 0; 458 ai = cxgb_get_adapter_info(dev); 459 460 /* find the PCIe link width and set max read request to 4KB*/ 461 if (pci_find_cap(dev, PCIY_EXPRESS, ®) == 0) { 462 uint16_t lnk; 463 464 lnk = pci_read_config(dev, reg + PCIR_EXPRESS_LINK_STA, 2); 465 sc->link_width = (lnk & PCIM_LINK_STA_WIDTH) >> 4; 466 if (sc->link_width < 8 && 467 (ai->caps & SUPPORTED_10000baseT_Full)) { 468 device_printf(sc->dev, 469 "PCIe x%d Link, expect reduced performance\n", 470 sc->link_width); 471 } 472 473 pci_set_max_read_req(dev, 4096); 474 } 475 476 touch_bars(dev); 477 pci_enable_busmaster(dev); 478 /* 479 * Allocate the registers and make them available to the driver. 480 * The registers that we care about for NIC mode are in BAR 0 481 */ 482 sc->regs_rid = PCIR_BAR(0); 483 if ((sc->regs_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, 484 &sc->regs_rid, RF_ACTIVE)) == NULL) { 485 device_printf(dev, "Cannot allocate BAR region 0\n"); 486 return (ENXIO); 487 } 488 sc->udbs_rid = PCIR_BAR(2); 489 sc->udbs_res = NULL; 490 if (is_offload(sc) && 491 ((sc->udbs_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, 492 &sc->udbs_rid, RF_ACTIVE)) == NULL)) { 493 device_printf(dev, "Cannot allocate BAR region 1\n"); 494 error = ENXIO; 495 goto out; 496 } 497 498 snprintf(sc->lockbuf, ADAPTER_LOCK_NAME_LEN, "cxgb controller lock %d", 499 device_get_unit(dev)); 500 ADAPTER_LOCK_INIT(sc, sc->lockbuf); 501 502 snprintf(sc->reglockbuf, ADAPTER_LOCK_NAME_LEN, "SGE reg lock %d", 503 device_get_unit(dev)); 504 snprintf(sc->mdiolockbuf, ADAPTER_LOCK_NAME_LEN, "cxgb mdio lock %d", 505 device_get_unit(dev)); 506 snprintf(sc->elmerlockbuf, ADAPTER_LOCK_NAME_LEN, "cxgb elmer lock %d", 507 device_get_unit(dev)); 508 509 MTX_INIT(&sc->sge.reg_lock, sc->reglockbuf, NULL, MTX_SPIN); 510 MTX_INIT(&sc->mdio_lock, sc->mdiolockbuf, NULL, MTX_DEF); 511 MTX_INIT(&sc->elmer_lock, sc->elmerlockbuf, NULL, MTX_DEF); 512 513 sc->bt = rman_get_bustag(sc->regs_res); 514 sc->bh = rman_get_bushandle(sc->regs_res); 515 sc->mmio_len = rman_get_size(sc->regs_res); 516 517 for (i = 0; i < MAX_NPORTS; i++) 518 sc->port[i].adapter = sc; 519 520 if (t3_prep_adapter(sc, ai, 1) < 0) { 521 printf("prep adapter failed\n"); 522 error = ENODEV; 523 goto out; 524 } 525 /* Allocate the BAR for doing MSI-X. If it succeeds, try to allocate 526 * enough messages for the queue sets. If that fails, try falling 527 * back to MSI. If that fails, then try falling back to the legacy 528 * interrupt pin model. 529 */ 530 sc->msix_regs_rid = 0x20; 531 if ((msi_allowed >= 2) && 532 (sc->msix_regs_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, 533 &sc->msix_regs_rid, RF_ACTIVE)) != NULL) { 534 535 if (multiq) 536 port_qsets = min(SGE_QSETS/sc->params.nports, mp_ncpus); 537 msi_needed = sc->msi_count = sc->params.nports * port_qsets + 1; 538 539 if (pci_msix_count(dev) == 0 || 540 (error = pci_alloc_msix(dev, &sc->msi_count)) != 0 || 541 sc->msi_count != msi_needed) { 542 device_printf(dev, "alloc msix failed - " 543 "msi_count=%d, msi_needed=%d, err=%d; " 544 "will try MSI\n", sc->msi_count, 545 msi_needed, error); 546 sc->msi_count = 0; 547 port_qsets = 1; 548 pci_release_msi(dev); 549 bus_release_resource(dev, SYS_RES_MEMORY, 550 sc->msix_regs_rid, sc->msix_regs_res); 551 sc->msix_regs_res = NULL; 552 } else { 553 sc->flags |= USING_MSIX; 554 sc->cxgb_intr = cxgb_async_intr; 555 device_printf(dev, 556 "using MSI-X interrupts (%u vectors)\n", 557 sc->msi_count); 558 } 559 } 560 561 if ((msi_allowed >= 1) && (sc->msi_count == 0)) { 562 sc->msi_count = 1; 563 if ((error = pci_alloc_msi(dev, &sc->msi_count)) != 0) { 564 device_printf(dev, "alloc msi failed - " 565 "err=%d; will try INTx\n", error); 566 sc->msi_count = 0; 567 port_qsets = 1; 568 pci_release_msi(dev); 569 } else { 570 sc->flags |= USING_MSI; 571 sc->cxgb_intr = t3_intr_msi; 572 device_printf(dev, "using MSI interrupts\n"); 573 } 574 } 575 if (sc->msi_count == 0) { 576 device_printf(dev, "using line interrupts\n"); 577 sc->cxgb_intr = t3b_intr; 578 } 579 580 /* Create a private taskqueue thread for handling driver events */ 581 sc->tq = taskqueue_create("cxgb_taskq", M_NOWAIT, 582 taskqueue_thread_enqueue, &sc->tq); 583 if (sc->tq == NULL) { 584 device_printf(dev, "failed to allocate controller task queue\n"); 585 goto out; 586 } 587 588 taskqueue_start_threads(&sc->tq, 1, PI_NET, "%s taskq", 589 device_get_nameunit(dev)); 590 TASK_INIT(&sc->tick_task, 0, cxgb_tick_handler, sc); 591 592 593 /* Create a periodic callout for checking adapter status */ 594 callout_init(&sc->cxgb_tick_ch, TRUE); 595 596 if (t3_check_fw_version(sc) < 0 || force_fw_update) { 597 /* 598 * Warn user that a firmware update will be attempted in init. 599 */ 600 device_printf(dev, "firmware needs to be updated to version %d.%d.%d\n", 601 FW_VERSION_MAJOR, FW_VERSION_MINOR, FW_VERSION_MICRO); 602 sc->flags &= ~FW_UPTODATE; 603 } else { 604 sc->flags |= FW_UPTODATE; 605 } 606 607 if (t3_check_tpsram_version(sc) < 0) { 608 /* 609 * Warn user that a firmware update will be attempted in init. 610 */ 611 device_printf(dev, "SRAM needs to be updated to version %c-%d.%d.%d\n", 612 t3rev2char(sc), TP_VERSION_MAJOR, TP_VERSION_MINOR, TP_VERSION_MICRO); 613 sc->flags &= ~TPS_UPTODATE; 614 } else { 615 sc->flags |= TPS_UPTODATE; 616 } 617 618 /* 619 * Create a child device for each MAC. The ethernet attachment 620 * will be done in these children. 621 */ 622 for (i = 0; i < (sc)->params.nports; i++) { 623 struct port_info *pi; 624 625 if ((child = device_add_child(dev, "cxgb", -1)) == NULL) { 626 device_printf(dev, "failed to add child port\n"); 627 error = EINVAL; 628 goto out; 629 } 630 pi = &sc->port[i]; 631 pi->adapter = sc; 632 pi->nqsets = port_qsets; 633 pi->first_qset = i*port_qsets; 634 pi->port_id = i; 635 pi->tx_chan = i >= ai->nports0; 636 pi->txpkt_intf = pi->tx_chan ? 2 * (i - ai->nports0) + 1 : 2 * i; 637 sc->rxpkt_map[pi->txpkt_intf] = i; 638 sc->port[i].tx_chan = i >= ai->nports0; 639 sc->portdev[i] = child; 640 device_set_softc(child, pi); 641 } 642 if ((error = bus_generic_attach(dev)) != 0) 643 goto out; 644 645 /* initialize sge private state */ 646 t3_sge_init_adapter(sc); 647 648 t3_led_ready(sc); 649 650 cxgb_offload_init(); 651 if (is_offload(sc)) { 652 setbit(&sc->registered_device_map, OFFLOAD_DEVMAP_BIT); 653 cxgb_adapter_ofld(sc); 654 } 655 error = t3_get_fw_version(sc, &vers); 656 if (error) 657 goto out; 658 659 snprintf(&sc->fw_version[0], sizeof(sc->fw_version), "%d.%d.%d", 660 G_FW_VERSION_MAJOR(vers), G_FW_VERSION_MINOR(vers), 661 G_FW_VERSION_MICRO(vers)); 662 663 snprintf(buf, sizeof(buf), "%s %sNIC\t E/C: %s S/N: %s", 664 ai->desc, is_offload(sc) ? "R" : "", 665 sc->params.vpd.ec, sc->params.vpd.sn); 666 device_set_desc_copy(dev, buf); 667 668 snprintf(&sc->port_types[0], sizeof(sc->port_types), "%x%x%x%x", 669 sc->params.vpd.port_type[0], sc->params.vpd.port_type[1], 670 sc->params.vpd.port_type[2], sc->params.vpd.port_type[3]); 671 672 device_printf(sc->dev, "Firmware Version %s\n", &sc->fw_version[0]); 673 callout_reset(&sc->cxgb_tick_ch, hz, cxgb_tick, sc); 674 t3_add_attach_sysctls(sc); 675 out: 676 if (error) 677 cxgb_free(sc); 678 679 return (error); 680 } 681 682 /* 683 * The cxgb_controller_detach routine is called with the device is 684 * unloaded from the system. 685 */ 686 687 static int 688 cxgb_controller_detach(device_t dev) 689 { 690 struct adapter *sc; 691 692 sc = device_get_softc(dev); 693 694 cxgb_free(sc); 695 696 return (0); 697 } 698 699 /* 700 * The cxgb_free() is called by the cxgb_controller_detach() routine 701 * to tear down the structures that were built up in 702 * cxgb_controller_attach(), and should be the final piece of work 703 * done when fully unloading the driver. 704 * 705 * 706 * 1. Shutting down the threads started by the cxgb_controller_attach() 707 * routine. 708 * 2. Stopping the lower level device and all callouts (cxgb_down_locked()). 709 * 3. Detaching all of the port devices created during the 710 * cxgb_controller_attach() routine. 711 * 4. Removing the device children created via cxgb_controller_attach(). 712 * 5. Releasing PCI resources associated with the device. 713 * 6. Turning off the offload support, iff it was turned on. 714 * 7. Destroying the mutexes created in cxgb_controller_attach(). 715 * 716 */ 717 static void 718 cxgb_free(struct adapter *sc) 719 { 720 int i, nqsets = 0; 721 722 ADAPTER_LOCK(sc); 723 sc->flags |= CXGB_SHUTDOWN; 724 ADAPTER_UNLOCK(sc); 725 726 /* 727 * Make sure all child devices are gone. 728 */ 729 bus_generic_detach(sc->dev); 730 for (i = 0; i < (sc)->params.nports; i++) { 731 if (sc->portdev[i] && 732 device_delete_child(sc->dev, sc->portdev[i]) != 0) 733 device_printf(sc->dev, "failed to delete child port\n"); 734 nqsets += sc->port[i].nqsets; 735 } 736 737 /* 738 * At this point, it is as if cxgb_port_detach has run on all ports, and 739 * cxgb_down has run on the adapter. All interrupts have been silenced, 740 * all open devices have been closed. 741 */ 742 KASSERT(sc->open_device_map == 0, ("%s: device(s) still open (%x)", 743 __func__, sc->open_device_map)); 744 for (i = 0; i < sc->params.nports; i++) { 745 KASSERT(sc->port[i].ifp == NULL, ("%s: port %i undead!", 746 __func__, i)); 747 } 748 749 /* 750 * Finish off the adapter's callouts. 751 */ 752 callout_drain(&sc->cxgb_tick_ch); 753 callout_drain(&sc->sge_timer_ch); 754 755 /* 756 * Release resources grabbed under FULL_INIT_DONE by cxgb_up. The 757 * sysctls are cleaned up by the kernel linker. 758 */ 759 if (sc->flags & FULL_INIT_DONE) { 760 t3_free_sge_resources(sc, nqsets); 761 sc->flags &= ~FULL_INIT_DONE; 762 } 763 764 /* 765 * Release all interrupt resources. 766 */ 767 cxgb_teardown_interrupts(sc); 768 if (sc->flags & (USING_MSI | USING_MSIX)) { 769 device_printf(sc->dev, "releasing msi message(s)\n"); 770 pci_release_msi(sc->dev); 771 } else { 772 device_printf(sc->dev, "no msi message to release\n"); 773 } 774 775 if (sc->msix_regs_res != NULL) { 776 bus_release_resource(sc->dev, SYS_RES_MEMORY, sc->msix_regs_rid, 777 sc->msix_regs_res); 778 } 779 780 /* 781 * Free the adapter's taskqueue. 782 */ 783 if (sc->tq != NULL) { 784 taskqueue_free(sc->tq); 785 sc->tq = NULL; 786 } 787 788 if (is_offload(sc)) { 789 clrbit(&sc->registered_device_map, OFFLOAD_DEVMAP_BIT); 790 cxgb_adapter_unofld(sc); 791 } 792 793 #ifdef notyet 794 if (sc->flags & CXGB_OFLD_INIT) 795 cxgb_offload_deactivate(sc); 796 #endif 797 free(sc->filters, M_DEVBUF); 798 t3_sge_free(sc); 799 800 cxgb_offload_exit(); 801 802 if (sc->udbs_res != NULL) 803 bus_release_resource(sc->dev, SYS_RES_MEMORY, sc->udbs_rid, 804 sc->udbs_res); 805 806 if (sc->regs_res != NULL) 807 bus_release_resource(sc->dev, SYS_RES_MEMORY, sc->regs_rid, 808 sc->regs_res); 809 810 MTX_DESTROY(&sc->mdio_lock); 811 MTX_DESTROY(&sc->sge.reg_lock); 812 MTX_DESTROY(&sc->elmer_lock); 813 ADAPTER_LOCK_DEINIT(sc); 814 } 815 816 /** 817 * setup_sge_qsets - configure SGE Tx/Rx/response queues 818 * @sc: the controller softc 819 * 820 * Determines how many sets of SGE queues to use and initializes them. 821 * We support multiple queue sets per port if we have MSI-X, otherwise 822 * just one queue set per port. 823 */ 824 static int 825 setup_sge_qsets(adapter_t *sc) 826 { 827 int i, j, err, irq_idx = 0, qset_idx = 0; 828 u_int ntxq = SGE_TXQ_PER_SET; 829 830 if ((err = t3_sge_alloc(sc)) != 0) { 831 device_printf(sc->dev, "t3_sge_alloc returned %d\n", err); 832 return (err); 833 } 834 835 if (sc->params.rev > 0 && !(sc->flags & USING_MSI)) 836 irq_idx = -1; 837 838 for (i = 0; i < (sc)->params.nports; i++) { 839 struct port_info *pi = &sc->port[i]; 840 841 for (j = 0; j < pi->nqsets; j++, qset_idx++) { 842 err = t3_sge_alloc_qset(sc, qset_idx, (sc)->params.nports, 843 (sc->flags & USING_MSIX) ? qset_idx + 1 : irq_idx, 844 &sc->params.sge.qset[qset_idx], ntxq, pi); 845 if (err) { 846 t3_free_sge_resources(sc, qset_idx); 847 device_printf(sc->dev, 848 "t3_sge_alloc_qset failed with %d\n", err); 849 return (err); 850 } 851 } 852 } 853 854 return (0); 855 } 856 857 static void 858 cxgb_teardown_interrupts(adapter_t *sc) 859 { 860 int i; 861 862 for (i = 0; i < SGE_QSETS; i++) { 863 if (sc->msix_intr_tag[i] == NULL) { 864 865 /* Should have been setup fully or not at all */ 866 KASSERT(sc->msix_irq_res[i] == NULL && 867 sc->msix_irq_rid[i] == 0, 868 ("%s: half-done interrupt (%d).", __func__, i)); 869 870 continue; 871 } 872 873 bus_teardown_intr(sc->dev, sc->msix_irq_res[i], 874 sc->msix_intr_tag[i]); 875 bus_release_resource(sc->dev, SYS_RES_IRQ, sc->msix_irq_rid[i], 876 sc->msix_irq_res[i]); 877 878 sc->msix_irq_res[i] = sc->msix_intr_tag[i] = NULL; 879 sc->msix_irq_rid[i] = 0; 880 } 881 882 if (sc->intr_tag) { 883 KASSERT(sc->irq_res != NULL, 884 ("%s: half-done interrupt.", __func__)); 885 886 bus_teardown_intr(sc->dev, sc->irq_res, sc->intr_tag); 887 bus_release_resource(sc->dev, SYS_RES_IRQ, sc->irq_rid, 888 sc->irq_res); 889 890 sc->irq_res = sc->intr_tag = NULL; 891 sc->irq_rid = 0; 892 } 893 } 894 895 static int 896 cxgb_setup_interrupts(adapter_t *sc) 897 { 898 struct resource *res; 899 void *tag; 900 int i, rid, err, intr_flag = sc->flags & (USING_MSI | USING_MSIX); 901 902 sc->irq_rid = intr_flag ? 1 : 0; 903 sc->irq_res = bus_alloc_resource_any(sc->dev, SYS_RES_IRQ, &sc->irq_rid, 904 RF_SHAREABLE | RF_ACTIVE); 905 if (sc->irq_res == NULL) { 906 device_printf(sc->dev, "Cannot allocate interrupt (%x, %u)\n", 907 intr_flag, sc->irq_rid); 908 err = EINVAL; 909 sc->irq_rid = 0; 910 } else { 911 err = bus_setup_intr(sc->dev, sc->irq_res, 912 INTR_MPSAFE | INTR_TYPE_NET, NULL, 913 sc->cxgb_intr, sc, &sc->intr_tag); 914 915 if (err) { 916 device_printf(sc->dev, 917 "Cannot set up interrupt (%x, %u, %d)\n", 918 intr_flag, sc->irq_rid, err); 919 bus_release_resource(sc->dev, SYS_RES_IRQ, sc->irq_rid, 920 sc->irq_res); 921 sc->irq_res = sc->intr_tag = NULL; 922 sc->irq_rid = 0; 923 } 924 } 925 926 /* That's all for INTx or MSI */ 927 if (!(intr_flag & USING_MSIX) || err) 928 return (err); 929 930 for (i = 0; i < sc->msi_count - 1; i++) { 931 rid = i + 2; 932 res = bus_alloc_resource_any(sc->dev, SYS_RES_IRQ, &rid, 933 RF_SHAREABLE | RF_ACTIVE); 934 if (res == NULL) { 935 device_printf(sc->dev, "Cannot allocate interrupt " 936 "for message %d\n", rid); 937 err = EINVAL; 938 break; 939 } 940 941 err = bus_setup_intr(sc->dev, res, INTR_MPSAFE | INTR_TYPE_NET, 942 NULL, t3_intr_msix, &sc->sge.qs[i], &tag); 943 if (err) { 944 device_printf(sc->dev, "Cannot set up interrupt " 945 "for message %d (%d)\n", rid, err); 946 bus_release_resource(sc->dev, SYS_RES_IRQ, rid, res); 947 break; 948 } 949 950 sc->msix_irq_rid[i] = rid; 951 sc->msix_irq_res[i] = res; 952 sc->msix_intr_tag[i] = tag; 953 } 954 955 if (err) 956 cxgb_teardown_interrupts(sc); 957 958 return (err); 959 } 960 961 962 static int 963 cxgb_port_probe(device_t dev) 964 { 965 struct port_info *p; 966 char buf[80]; 967 const char *desc; 968 969 p = device_get_softc(dev); 970 desc = p->phy.desc; 971 snprintf(buf, sizeof(buf), "Port %d %s", p->port_id, desc); 972 device_set_desc_copy(dev, buf); 973 return (0); 974 } 975 976 977 static int 978 cxgb_makedev(struct port_info *pi) 979 { 980 981 pi->port_cdev = make_dev(&cxgb_cdevsw, pi->ifp->if_dunit, 982 UID_ROOT, GID_WHEEL, 0600, "%s", if_name(pi->ifp)); 983 984 if (pi->port_cdev == NULL) 985 return (ENOMEM); 986 987 pi->port_cdev->si_drv1 = (void *)pi; 988 989 return (0); 990 } 991 992 #define CXGB_CAP (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | \ 993 IFCAP_VLAN_HWCSUM | IFCAP_TSO | IFCAP_JUMBO_MTU | IFCAP_LRO | \ 994 IFCAP_VLAN_HWTSO | IFCAP_LINKSTATE) 995 #define CXGB_CAP_ENABLE (CXGB_CAP & ~IFCAP_TSO6) 996 997 static int 998 cxgb_port_attach(device_t dev) 999 { 1000 struct port_info *p; 1001 struct ifnet *ifp; 1002 int err; 1003 struct adapter *sc; 1004 1005 p = device_get_softc(dev); 1006 sc = p->adapter; 1007 snprintf(p->lockbuf, PORT_NAME_LEN, "cxgb port lock %d:%d", 1008 device_get_unit(device_get_parent(dev)), p->port_id); 1009 PORT_LOCK_INIT(p, p->lockbuf); 1010 1011 callout_init(&p->link_check_ch, CALLOUT_MPSAFE); 1012 TASK_INIT(&p->link_check_task, 0, check_link_status, p); 1013 1014 /* Allocate an ifnet object and set it up */ 1015 ifp = p->ifp = if_alloc(IFT_ETHER); 1016 if (ifp == NULL) { 1017 device_printf(dev, "Cannot allocate ifnet\n"); 1018 return (ENOMEM); 1019 } 1020 1021 if_initname(ifp, device_get_name(dev), device_get_unit(dev)); 1022 ifp->if_init = cxgb_init; 1023 ifp->if_softc = p; 1024 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; 1025 ifp->if_ioctl = cxgb_ioctl; 1026 ifp->if_start = cxgb_start; 1027 1028 ifp->if_snd.ifq_drv_maxlen = max(cxgb_snd_queue_len, ifqmaxlen); 1029 IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); 1030 IFQ_SET_READY(&ifp->if_snd); 1031 1032 ifp->if_capabilities = CXGB_CAP; 1033 ifp->if_capenable = CXGB_CAP_ENABLE; 1034 ifp->if_hwassist = CSUM_TCP | CSUM_UDP | CSUM_IP | CSUM_TSO; 1035 1036 /* 1037 * Disable TSO on 4-port - it isn't supported by the firmware. 1038 */ 1039 if (sc->params.nports > 2) { 1040 ifp->if_capabilities &= ~(IFCAP_TSO | IFCAP_VLAN_HWTSO); 1041 ifp->if_capenable &= ~(IFCAP_TSO | IFCAP_VLAN_HWTSO); 1042 ifp->if_hwassist &= ~CSUM_TSO; 1043 } 1044 1045 ether_ifattach(ifp, p->hw_addr); 1046 ifp->if_transmit = cxgb_transmit; 1047 ifp->if_qflush = cxgb_qflush; 1048 1049 #ifdef DEFAULT_JUMBO 1050 if (sc->params.nports <= 2) 1051 ifp->if_mtu = ETHERMTU_JUMBO; 1052 #endif 1053 if ((err = cxgb_makedev(p)) != 0) { 1054 printf("makedev failed %d\n", err); 1055 return (err); 1056 } 1057 1058 /* Create a list of media supported by this port */ 1059 ifmedia_init(&p->media, IFM_IMASK, cxgb_media_change, 1060 cxgb_media_status); 1061 cxgb_build_medialist(p); 1062 1063 t3_sge_init_port(p); 1064 1065 return (err); 1066 } 1067 1068 /* 1069 * cxgb_port_detach() is called via the device_detach methods when 1070 * cxgb_free() calls the bus_generic_detach. It is responsible for 1071 * removing the device from the view of the kernel, i.e. from all 1072 * interfaces lists etc. This routine is only called when the driver is 1073 * being unloaded, not when the link goes down. 1074 */ 1075 static int 1076 cxgb_port_detach(device_t dev) 1077 { 1078 struct port_info *p; 1079 struct adapter *sc; 1080 int i; 1081 1082 p = device_get_softc(dev); 1083 sc = p->adapter; 1084 1085 /* Tell cxgb_ioctl and if_init that the port is going away */ 1086 ADAPTER_LOCK(sc); 1087 SET_DOOMED(p); 1088 wakeup(&sc->flags); 1089 while (IS_BUSY(sc)) 1090 mtx_sleep(&sc->flags, &sc->lock, 0, "cxgbdtch", 0); 1091 SET_BUSY(sc); 1092 ADAPTER_UNLOCK(sc); 1093 1094 if (p->port_cdev != NULL) 1095 destroy_dev(p->port_cdev); 1096 1097 cxgb_uninit_synchronized(p); 1098 ether_ifdetach(p->ifp); 1099 1100 for (i = p->first_qset; i < p->first_qset + p->nqsets; i++) { 1101 struct sge_qset *qs = &sc->sge.qs[i]; 1102 struct sge_txq *txq = &qs->txq[TXQ_ETH]; 1103 1104 callout_drain(&txq->txq_watchdog); 1105 callout_drain(&txq->txq_timer); 1106 } 1107 1108 PORT_LOCK_DEINIT(p); 1109 if_free(p->ifp); 1110 p->ifp = NULL; 1111 1112 ADAPTER_LOCK(sc); 1113 CLR_BUSY(sc); 1114 wakeup_one(&sc->flags); 1115 ADAPTER_UNLOCK(sc); 1116 return (0); 1117 } 1118 1119 void 1120 t3_fatal_err(struct adapter *sc) 1121 { 1122 u_int fw_status[4]; 1123 1124 if (sc->flags & FULL_INIT_DONE) { 1125 t3_sge_stop(sc); 1126 t3_write_reg(sc, A_XGM_TX_CTRL, 0); 1127 t3_write_reg(sc, A_XGM_RX_CTRL, 0); 1128 t3_write_reg(sc, XGM_REG(A_XGM_TX_CTRL, 1), 0); 1129 t3_write_reg(sc, XGM_REG(A_XGM_RX_CTRL, 1), 0); 1130 t3_intr_disable(sc); 1131 } 1132 device_printf(sc->dev,"encountered fatal error, operation suspended\n"); 1133 if (!t3_cim_ctl_blk_read(sc, 0xa0, 4, fw_status)) 1134 device_printf(sc->dev, "FW_ status: 0x%x, 0x%x, 0x%x, 0x%x\n", 1135 fw_status[0], fw_status[1], fw_status[2], fw_status[3]); 1136 } 1137 1138 int 1139 t3_os_find_pci_capability(adapter_t *sc, int cap) 1140 { 1141 device_t dev; 1142 struct pci_devinfo *dinfo; 1143 pcicfgregs *cfg; 1144 uint32_t status; 1145 uint8_t ptr; 1146 1147 dev = sc->dev; 1148 dinfo = device_get_ivars(dev); 1149 cfg = &dinfo->cfg; 1150 1151 status = pci_read_config(dev, PCIR_STATUS, 2); 1152 if (!(status & PCIM_STATUS_CAPPRESENT)) 1153 return (0); 1154 1155 switch (cfg->hdrtype & PCIM_HDRTYPE) { 1156 case 0: 1157 case 1: 1158 ptr = PCIR_CAP_PTR; 1159 break; 1160 case 2: 1161 ptr = PCIR_CAP_PTR_2; 1162 break; 1163 default: 1164 return (0); 1165 break; 1166 } 1167 ptr = pci_read_config(dev, ptr, 1); 1168 1169 while (ptr != 0) { 1170 if (pci_read_config(dev, ptr + PCICAP_ID, 1) == cap) 1171 return (ptr); 1172 ptr = pci_read_config(dev, ptr + PCICAP_NEXTPTR, 1); 1173 } 1174 1175 return (0); 1176 } 1177 1178 int 1179 t3_os_pci_save_state(struct adapter *sc) 1180 { 1181 device_t dev; 1182 struct pci_devinfo *dinfo; 1183 1184 dev = sc->dev; 1185 dinfo = device_get_ivars(dev); 1186 1187 pci_cfg_save(dev, dinfo, 0); 1188 return (0); 1189 } 1190 1191 int 1192 t3_os_pci_restore_state(struct adapter *sc) 1193 { 1194 device_t dev; 1195 struct pci_devinfo *dinfo; 1196 1197 dev = sc->dev; 1198 dinfo = device_get_ivars(dev); 1199 1200 pci_cfg_restore(dev, dinfo); 1201 return (0); 1202 } 1203 1204 /** 1205 * t3_os_link_changed - handle link status changes 1206 * @sc: the adapter associated with the link change 1207 * @port_id: the port index whose link status has changed 1208 * @link_status: the new status of the link 1209 * @speed: the new speed setting 1210 * @duplex: the new duplex setting 1211 * @fc: the new flow-control setting 1212 * 1213 * This is the OS-dependent handler for link status changes. The OS 1214 * neutral handler takes care of most of the processing for these events, 1215 * then calls this handler for any OS-specific processing. 1216 */ 1217 void 1218 t3_os_link_changed(adapter_t *adapter, int port_id, int link_status, int speed, 1219 int duplex, int fc, int mac_was_reset) 1220 { 1221 struct port_info *pi = &adapter->port[port_id]; 1222 struct ifnet *ifp = pi->ifp; 1223 1224 /* no race with detach, so ifp should always be good */ 1225 KASSERT(ifp, ("%s: if detached.", __func__)); 1226 1227 /* Reapply mac settings if they were lost due to a reset */ 1228 if (mac_was_reset) { 1229 PORT_LOCK(pi); 1230 cxgb_update_mac_settings(pi); 1231 PORT_UNLOCK(pi); 1232 } 1233 1234 if (link_status) { 1235 ifp->if_baudrate = IF_Mbps(speed); 1236 if_link_state_change(ifp, LINK_STATE_UP); 1237 } else 1238 if_link_state_change(ifp, LINK_STATE_DOWN); 1239 } 1240 1241 /** 1242 * t3_os_phymod_changed - handle PHY module changes 1243 * @phy: the PHY reporting the module change 1244 * @mod_type: new module type 1245 * 1246 * This is the OS-dependent handler for PHY module changes. It is 1247 * invoked when a PHY module is removed or inserted for any OS-specific 1248 * processing. 1249 */ 1250 void t3_os_phymod_changed(struct adapter *adap, int port_id) 1251 { 1252 static const char *mod_str[] = { 1253 NULL, "SR", "LR", "LRM", "TWINAX", "TWINAX-L", "unknown" 1254 }; 1255 struct port_info *pi = &adap->port[port_id]; 1256 int mod = pi->phy.modtype; 1257 1258 if (mod != pi->media.ifm_cur->ifm_data) 1259 cxgb_build_medialist(pi); 1260 1261 if (mod == phy_modtype_none) 1262 if_printf(pi->ifp, "PHY module unplugged\n"); 1263 else { 1264 KASSERT(mod < ARRAY_SIZE(mod_str), 1265 ("invalid PHY module type %d", mod)); 1266 if_printf(pi->ifp, "%s PHY module inserted\n", mod_str[mod]); 1267 } 1268 } 1269 1270 void 1271 t3_os_set_hw_addr(adapter_t *adapter, int port_idx, u8 hw_addr[]) 1272 { 1273 1274 /* 1275 * The ifnet might not be allocated before this gets called, 1276 * as this is called early on in attach by t3_prep_adapter 1277 * save the address off in the port structure 1278 */ 1279 if (cxgb_debug) 1280 printf("set_hw_addr on idx %d addr %6D\n", port_idx, hw_addr, ":"); 1281 bcopy(hw_addr, adapter->port[port_idx].hw_addr, ETHER_ADDR_LEN); 1282 } 1283 1284 /* 1285 * Programs the XGMAC based on the settings in the ifnet. These settings 1286 * include MTU, MAC address, mcast addresses, etc. 1287 */ 1288 static void 1289 cxgb_update_mac_settings(struct port_info *p) 1290 { 1291 struct ifnet *ifp = p->ifp; 1292 struct t3_rx_mode rm; 1293 struct cmac *mac = &p->mac; 1294 int mtu, hwtagging; 1295 1296 PORT_LOCK_ASSERT_OWNED(p); 1297 1298 bcopy(IF_LLADDR(ifp), p->hw_addr, ETHER_ADDR_LEN); 1299 1300 mtu = ifp->if_mtu; 1301 if (ifp->if_capenable & IFCAP_VLAN_MTU) 1302 mtu += ETHER_VLAN_ENCAP_LEN; 1303 1304 hwtagging = (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0; 1305 1306 t3_mac_set_mtu(mac, mtu); 1307 t3_set_vlan_accel(p->adapter, 1 << p->tx_chan, hwtagging); 1308 t3_mac_set_address(mac, 0, p->hw_addr); 1309 t3_init_rx_mode(&rm, p); 1310 t3_mac_set_rx_mode(mac, &rm); 1311 } 1312 1313 1314 static int 1315 await_mgmt_replies(struct adapter *adap, unsigned long init_cnt, 1316 unsigned long n) 1317 { 1318 int attempts = 5; 1319 1320 while (adap->sge.qs[0].rspq.offload_pkts < init_cnt + n) { 1321 if (!--attempts) 1322 return (ETIMEDOUT); 1323 t3_os_sleep(10); 1324 } 1325 return 0; 1326 } 1327 1328 static int 1329 init_tp_parity(struct adapter *adap) 1330 { 1331 int i; 1332 struct mbuf *m; 1333 struct cpl_set_tcb_field *greq; 1334 unsigned long cnt = adap->sge.qs[0].rspq.offload_pkts; 1335 1336 t3_tp_set_offload_mode(adap, 1); 1337 1338 for (i = 0; i < 16; i++) { 1339 struct cpl_smt_write_req *req; 1340 1341 m = m_gethdr(M_WAITOK, MT_DATA); 1342 req = mtod(m, struct cpl_smt_write_req *); 1343 m->m_len = m->m_pkthdr.len = sizeof(*req); 1344 memset(req, 0, sizeof(*req)); 1345 req->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); 1346 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SMT_WRITE_REQ, i)); 1347 req->iff = i; 1348 t3_mgmt_tx(adap, m); 1349 } 1350 1351 for (i = 0; i < 2048; i++) { 1352 struct cpl_l2t_write_req *req; 1353 1354 m = m_gethdr(M_WAITOK, MT_DATA); 1355 req = mtod(m, struct cpl_l2t_write_req *); 1356 m->m_len = m->m_pkthdr.len = sizeof(*req); 1357 memset(req, 0, sizeof(*req)); 1358 req->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); 1359 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_L2T_WRITE_REQ, i)); 1360 req->params = htonl(V_L2T_W_IDX(i)); 1361 t3_mgmt_tx(adap, m); 1362 } 1363 1364 for (i = 0; i < 2048; i++) { 1365 struct cpl_rte_write_req *req; 1366 1367 m = m_gethdr(M_WAITOK, MT_DATA); 1368 req = mtod(m, struct cpl_rte_write_req *); 1369 m->m_len = m->m_pkthdr.len = sizeof(*req); 1370 memset(req, 0, sizeof(*req)); 1371 req->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); 1372 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_RTE_WRITE_REQ, i)); 1373 req->l2t_idx = htonl(V_L2T_W_IDX(i)); 1374 t3_mgmt_tx(adap, m); 1375 } 1376 1377 m = m_gethdr(M_WAITOK, MT_DATA); 1378 greq = mtod(m, struct cpl_set_tcb_field *); 1379 m->m_len = m->m_pkthdr.len = sizeof(*greq); 1380 memset(greq, 0, sizeof(*greq)); 1381 greq->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); 1382 OPCODE_TID(greq) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, 0)); 1383 greq->mask = htobe64(1); 1384 t3_mgmt_tx(adap, m); 1385 1386 i = await_mgmt_replies(adap, cnt, 16 + 2048 + 2048 + 1); 1387 t3_tp_set_offload_mode(adap, 0); 1388 return (i); 1389 } 1390 1391 /** 1392 * setup_rss - configure Receive Side Steering (per-queue connection demux) 1393 * @adap: the adapter 1394 * 1395 * Sets up RSS to distribute packets to multiple receive queues. We 1396 * configure the RSS CPU lookup table to distribute to the number of HW 1397 * receive queues, and the response queue lookup table to narrow that 1398 * down to the response queues actually configured for each port. 1399 * We always configure the RSS mapping for two ports since the mapping 1400 * table has plenty of entries. 1401 */ 1402 static void 1403 setup_rss(adapter_t *adap) 1404 { 1405 int i; 1406 u_int nq[2]; 1407 uint8_t cpus[SGE_QSETS + 1]; 1408 uint16_t rspq_map[RSS_TABLE_SIZE]; 1409 1410 for (i = 0; i < SGE_QSETS; ++i) 1411 cpus[i] = i; 1412 cpus[SGE_QSETS] = 0xff; 1413 1414 nq[0] = nq[1] = 0; 1415 for_each_port(adap, i) { 1416 const struct port_info *pi = adap2pinfo(adap, i); 1417 1418 nq[pi->tx_chan] += pi->nqsets; 1419 } 1420 for (i = 0; i < RSS_TABLE_SIZE / 2; ++i) { 1421 rspq_map[i] = nq[0] ? i % nq[0] : 0; 1422 rspq_map[i + RSS_TABLE_SIZE / 2] = nq[1] ? i % nq[1] + nq[0] : 0; 1423 } 1424 1425 /* Calculate the reverse RSS map table */ 1426 for (i = 0; i < SGE_QSETS; ++i) 1427 adap->rrss_map[i] = 0xff; 1428 for (i = 0; i < RSS_TABLE_SIZE; ++i) 1429 if (adap->rrss_map[rspq_map[i]] == 0xff) 1430 adap->rrss_map[rspq_map[i]] = i; 1431 1432 t3_config_rss(adap, F_RQFEEDBACKENABLE | F_TNLLKPEN | F_TNLMAPEN | 1433 F_TNLPRTEN | F_TNL2TUPEN | F_TNL4TUPEN | F_OFDMAPEN | 1434 F_RRCPLMAPEN | V_RRCPLCPUSIZE(6) | F_HASHTOEPLITZ, 1435 cpus, rspq_map); 1436 1437 } 1438 1439 /* 1440 * Sends an mbuf to an offload queue driver 1441 * after dealing with any active network taps. 1442 */ 1443 static inline int 1444 offload_tx(struct t3cdev *tdev, struct mbuf *m) 1445 { 1446 int ret; 1447 1448 ret = t3_offload_tx(tdev, m); 1449 return (ret); 1450 } 1451 1452 static int 1453 write_smt_entry(struct adapter *adapter, int idx) 1454 { 1455 struct port_info *pi = &adapter->port[idx]; 1456 struct cpl_smt_write_req *req; 1457 struct mbuf *m; 1458 1459 if ((m = m_gethdr(M_NOWAIT, MT_DATA)) == NULL) 1460 return (ENOMEM); 1461 1462 req = mtod(m, struct cpl_smt_write_req *); 1463 m->m_pkthdr.len = m->m_len = sizeof(struct cpl_smt_write_req); 1464 1465 req->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); 1466 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SMT_WRITE_REQ, idx)); 1467 req->mtu_idx = NMTUS - 1; /* should be 0 but there's a T3 bug */ 1468 req->iff = idx; 1469 memset(req->src_mac1, 0, sizeof(req->src_mac1)); 1470 memcpy(req->src_mac0, pi->hw_addr, ETHER_ADDR_LEN); 1471 1472 m_set_priority(m, 1); 1473 1474 offload_tx(&adapter->tdev, m); 1475 1476 return (0); 1477 } 1478 1479 static int 1480 init_smt(struct adapter *adapter) 1481 { 1482 int i; 1483 1484 for_each_port(adapter, i) 1485 write_smt_entry(adapter, i); 1486 return 0; 1487 } 1488 1489 static void 1490 init_port_mtus(adapter_t *adapter) 1491 { 1492 unsigned int mtus = ETHERMTU | (ETHERMTU << 16); 1493 1494 t3_write_reg(adapter, A_TP_MTU_PORT_TABLE, mtus); 1495 } 1496 1497 static void 1498 send_pktsched_cmd(struct adapter *adap, int sched, int qidx, int lo, 1499 int hi, int port) 1500 { 1501 struct mbuf *m; 1502 struct mngt_pktsched_wr *req; 1503 1504 m = m_gethdr(M_DONTWAIT, MT_DATA); 1505 if (m) { 1506 req = mtod(m, struct mngt_pktsched_wr *); 1507 req->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_MNGT)); 1508 req->mngt_opcode = FW_MNGTOPCODE_PKTSCHED_SET; 1509 req->sched = sched; 1510 req->idx = qidx; 1511 req->min = lo; 1512 req->max = hi; 1513 req->binding = port; 1514 m->m_len = m->m_pkthdr.len = sizeof(*req); 1515 t3_mgmt_tx(adap, m); 1516 } 1517 } 1518 1519 static void 1520 bind_qsets(adapter_t *sc) 1521 { 1522 int i, j; 1523 1524 for (i = 0; i < (sc)->params.nports; ++i) { 1525 const struct port_info *pi = adap2pinfo(sc, i); 1526 1527 for (j = 0; j < pi->nqsets; ++j) { 1528 send_pktsched_cmd(sc, 1, pi->first_qset + j, -1, 1529 -1, pi->tx_chan); 1530 1531 } 1532 } 1533 } 1534 1535 static void 1536 update_tpeeprom(struct adapter *adap) 1537 { 1538 const struct firmware *tpeeprom; 1539 1540 uint32_t version; 1541 unsigned int major, minor; 1542 int ret, len; 1543 char rev, name[32]; 1544 1545 t3_seeprom_read(adap, TP_SRAM_OFFSET, &version); 1546 1547 major = G_TP_VERSION_MAJOR(version); 1548 minor = G_TP_VERSION_MINOR(version); 1549 if (major == TP_VERSION_MAJOR && minor == TP_VERSION_MINOR) 1550 return; 1551 1552 rev = t3rev2char(adap); 1553 snprintf(name, sizeof(name), TPEEPROM_NAME, rev); 1554 1555 tpeeprom = firmware_get(name); 1556 if (tpeeprom == NULL) { 1557 device_printf(adap->dev, 1558 "could not load TP EEPROM: unable to load %s\n", 1559 name); 1560 return; 1561 } 1562 1563 len = tpeeprom->datasize - 4; 1564 1565 ret = t3_check_tpsram(adap, tpeeprom->data, tpeeprom->datasize); 1566 if (ret) 1567 goto release_tpeeprom; 1568 1569 if (len != TP_SRAM_LEN) { 1570 device_printf(adap->dev, 1571 "%s length is wrong len=%d expected=%d\n", name, 1572 len, TP_SRAM_LEN); 1573 return; 1574 } 1575 1576 ret = set_eeprom(&adap->port[0], tpeeprom->data, tpeeprom->datasize, 1577 TP_SRAM_OFFSET); 1578 1579 if (!ret) { 1580 device_printf(adap->dev, 1581 "Protocol SRAM image updated in EEPROM to %d.%d.%d\n", 1582 TP_VERSION_MAJOR, TP_VERSION_MINOR, TP_VERSION_MICRO); 1583 } else 1584 device_printf(adap->dev, 1585 "Protocol SRAM image update in EEPROM failed\n"); 1586 1587 release_tpeeprom: 1588 firmware_put(tpeeprom, FIRMWARE_UNLOAD); 1589 1590 return; 1591 } 1592 1593 static int 1594 update_tpsram(struct adapter *adap) 1595 { 1596 const struct firmware *tpsram; 1597 int ret; 1598 char rev, name[32]; 1599 1600 rev = t3rev2char(adap); 1601 snprintf(name, sizeof(name), TPSRAM_NAME, rev); 1602 1603 update_tpeeprom(adap); 1604 1605 tpsram = firmware_get(name); 1606 if (tpsram == NULL){ 1607 device_printf(adap->dev, "could not load TP SRAM\n"); 1608 return (EINVAL); 1609 } else 1610 device_printf(adap->dev, "updating TP SRAM\n"); 1611 1612 ret = t3_check_tpsram(adap, tpsram->data, tpsram->datasize); 1613 if (ret) 1614 goto release_tpsram; 1615 1616 ret = t3_set_proto_sram(adap, tpsram->data); 1617 if (ret) 1618 device_printf(adap->dev, "loading protocol SRAM failed\n"); 1619 1620 release_tpsram: 1621 firmware_put(tpsram, FIRMWARE_UNLOAD); 1622 1623 return ret; 1624 } 1625 1626 /** 1627 * cxgb_up - enable the adapter 1628 * @adap: adapter being enabled 1629 * 1630 * Called when the first port is enabled, this function performs the 1631 * actions necessary to make an adapter operational, such as completing 1632 * the initialization of HW modules, and enabling interrupts. 1633 */ 1634 static int 1635 cxgb_up(struct adapter *sc) 1636 { 1637 int err = 0; 1638 unsigned int mxf = t3_mc5_size(&sc->mc5) - MC5_MIN_TIDS; 1639 1640 KASSERT(sc->open_device_map == 0, ("%s: device(s) already open (%x)", 1641 __func__, sc->open_device_map)); 1642 1643 if ((sc->flags & FULL_INIT_DONE) == 0) { 1644 1645 ADAPTER_LOCK_ASSERT_NOTOWNED(sc); 1646 1647 if ((sc->flags & FW_UPTODATE) == 0) 1648 if ((err = upgrade_fw(sc))) 1649 goto out; 1650 1651 if ((sc->flags & TPS_UPTODATE) == 0) 1652 if ((err = update_tpsram(sc))) 1653 goto out; 1654 1655 if (is_offload(sc) && nfilters != 0) { 1656 sc->params.mc5.nservers = 0; 1657 1658 if (nfilters < 0) 1659 sc->params.mc5.nfilters = mxf; 1660 else 1661 sc->params.mc5.nfilters = min(nfilters, mxf); 1662 } 1663 1664 err = t3_init_hw(sc, 0); 1665 if (err) 1666 goto out; 1667 1668 t3_set_reg_field(sc, A_TP_PARA_REG5, 0, F_RXDDPOFFINIT); 1669 t3_write_reg(sc, A_ULPRX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12)); 1670 1671 err = setup_sge_qsets(sc); 1672 if (err) 1673 goto out; 1674 1675 alloc_filters(sc); 1676 setup_rss(sc); 1677 1678 t3_intr_clear(sc); 1679 err = cxgb_setup_interrupts(sc); 1680 if (err) 1681 goto out; 1682 1683 t3_add_configured_sysctls(sc); 1684 sc->flags |= FULL_INIT_DONE; 1685 } 1686 1687 t3_intr_clear(sc); 1688 t3_sge_start(sc); 1689 t3_intr_enable(sc); 1690 1691 if (sc->params.rev >= T3_REV_C && !(sc->flags & TP_PARITY_INIT) && 1692 is_offload(sc) && init_tp_parity(sc) == 0) 1693 sc->flags |= TP_PARITY_INIT; 1694 1695 if (sc->flags & TP_PARITY_INIT) { 1696 t3_write_reg(sc, A_TP_INT_CAUSE, F_CMCACHEPERR | F_ARPLUTPERR); 1697 t3_write_reg(sc, A_TP_INT_ENABLE, 0x7fbfffff); 1698 } 1699 1700 if (!(sc->flags & QUEUES_BOUND)) { 1701 bind_qsets(sc); 1702 setup_hw_filters(sc); 1703 sc->flags |= QUEUES_BOUND; 1704 } 1705 1706 t3_sge_reset_adapter(sc); 1707 out: 1708 return (err); 1709 } 1710 1711 /* 1712 * Called when the last open device is closed. Does NOT undo all of cxgb_up's 1713 * work. Specifically, the resources grabbed under FULL_INIT_DONE are released 1714 * during controller_detach, not here. 1715 */ 1716 static void 1717 cxgb_down(struct adapter *sc) 1718 { 1719 t3_sge_stop(sc); 1720 t3_intr_disable(sc); 1721 } 1722 1723 static int 1724 offload_open(struct port_info *pi) 1725 { 1726 struct adapter *sc = pi->adapter; 1727 struct t3cdev *tdev = &sc->tdev; 1728 1729 setbit(&sc->open_device_map, OFFLOAD_DEVMAP_BIT); 1730 1731 t3_tp_set_offload_mode(sc, 1); 1732 tdev->lldev = pi->ifp; 1733 init_port_mtus(sc); 1734 t3_load_mtus(sc, sc->params.mtus, sc->params.a_wnd, sc->params.b_wnd, 1735 sc->params.rev == 0 ? sc->port[0].ifp->if_mtu : 0xffff); 1736 init_smt(sc); 1737 cxgb_add_clients(tdev); 1738 1739 return (0); 1740 } 1741 1742 static int 1743 offload_close(struct t3cdev *tdev) 1744 { 1745 struct adapter *adapter = tdev2adap(tdev); 1746 1747 if (!isset(&adapter->open_device_map, OFFLOAD_DEVMAP_BIT)) 1748 return (0); 1749 1750 /* Call back all registered clients */ 1751 cxgb_remove_clients(tdev); 1752 1753 tdev->lldev = NULL; 1754 cxgb_set_dummy_ops(tdev); 1755 t3_tp_set_offload_mode(adapter, 0); 1756 1757 clrbit(&adapter->open_device_map, OFFLOAD_DEVMAP_BIT); 1758 1759 return (0); 1760 } 1761 1762 /* 1763 * if_init for cxgb ports. 1764 */ 1765 static void 1766 cxgb_init(void *arg) 1767 { 1768 struct port_info *p = arg; 1769 struct adapter *sc = p->adapter; 1770 1771 ADAPTER_LOCK(sc); 1772 cxgb_init_locked(p); /* releases adapter lock */ 1773 ADAPTER_LOCK_ASSERT_NOTOWNED(sc); 1774 } 1775 1776 static int 1777 cxgb_init_locked(struct port_info *p) 1778 { 1779 struct adapter *sc = p->adapter; 1780 struct ifnet *ifp = p->ifp; 1781 struct cmac *mac = &p->mac; 1782 int i, rc = 0, may_sleep = 0, gave_up_lock = 0; 1783 1784 ADAPTER_LOCK_ASSERT_OWNED(sc); 1785 1786 while (!IS_DOOMED(p) && IS_BUSY(sc)) { 1787 gave_up_lock = 1; 1788 if (mtx_sleep(&sc->flags, &sc->lock, PCATCH, "cxgbinit", 0)) { 1789 rc = EINTR; 1790 goto done; 1791 } 1792 } 1793 if (IS_DOOMED(p)) { 1794 rc = ENXIO; 1795 goto done; 1796 } 1797 KASSERT(!IS_BUSY(sc), ("%s: controller busy.", __func__)); 1798 1799 /* 1800 * The code that runs during one-time adapter initialization can sleep 1801 * so it's important not to hold any locks across it. 1802 */ 1803 may_sleep = sc->flags & FULL_INIT_DONE ? 0 : 1; 1804 1805 if (may_sleep) { 1806 SET_BUSY(sc); 1807 gave_up_lock = 1; 1808 ADAPTER_UNLOCK(sc); 1809 } 1810 1811 if (sc->open_device_map == 0) { 1812 if ((rc = cxgb_up(sc)) != 0) 1813 goto done; 1814 1815 if (is_offload(sc) && !ofld_disable && offload_open(p)) 1816 log(LOG_WARNING, 1817 "Could not initialize offload capabilities\n"); 1818 } 1819 1820 PORT_LOCK(p); 1821 if (isset(&sc->open_device_map, p->port_id) && 1822 (ifp->if_drv_flags & IFF_DRV_RUNNING)) { 1823 PORT_UNLOCK(p); 1824 goto done; 1825 } 1826 t3_port_intr_enable(sc, p->port_id); 1827 if (!mac->multiport) 1828 t3_mac_init(mac); 1829 cxgb_update_mac_settings(p); 1830 t3_link_start(&p->phy, mac, &p->link_config); 1831 t3_mac_enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX); 1832 ifp->if_drv_flags |= IFF_DRV_RUNNING; 1833 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 1834 PORT_UNLOCK(p); 1835 1836 for (i = p->first_qset; i < p->first_qset + p->nqsets; i++) { 1837 struct sge_qset *qs = &sc->sge.qs[i]; 1838 struct sge_txq *txq = &qs->txq[TXQ_ETH]; 1839 1840 callout_reset_on(&txq->txq_watchdog, hz, cxgb_tx_watchdog, qs, 1841 txq->txq_watchdog.c_cpu); 1842 } 1843 1844 /* all ok */ 1845 setbit(&sc->open_device_map, p->port_id); 1846 callout_reset(&p->link_check_ch, 1847 p->phy.caps & SUPPORTED_LINK_IRQ ? hz * 3 : hz / 4, 1848 link_check_callout, p); 1849 1850 done: 1851 if (may_sleep) { 1852 ADAPTER_LOCK(sc); 1853 KASSERT(IS_BUSY(sc), ("%s: controller not busy.", __func__)); 1854 CLR_BUSY(sc); 1855 } 1856 if (gave_up_lock) 1857 wakeup_one(&sc->flags); 1858 ADAPTER_UNLOCK(sc); 1859 return (rc); 1860 } 1861 1862 static int 1863 cxgb_uninit_locked(struct port_info *p) 1864 { 1865 struct adapter *sc = p->adapter; 1866 int rc; 1867 1868 ADAPTER_LOCK_ASSERT_OWNED(sc); 1869 1870 while (!IS_DOOMED(p) && IS_BUSY(sc)) { 1871 if (mtx_sleep(&sc->flags, &sc->lock, PCATCH, "cxgbunin", 0)) { 1872 rc = EINTR; 1873 goto done; 1874 } 1875 } 1876 if (IS_DOOMED(p)) { 1877 rc = ENXIO; 1878 goto done; 1879 } 1880 KASSERT(!IS_BUSY(sc), ("%s: controller busy.", __func__)); 1881 SET_BUSY(sc); 1882 ADAPTER_UNLOCK(sc); 1883 1884 rc = cxgb_uninit_synchronized(p); 1885 1886 ADAPTER_LOCK(sc); 1887 KASSERT(IS_BUSY(sc), ("%s: controller not busy.", __func__)); 1888 CLR_BUSY(sc); 1889 wakeup_one(&sc->flags); 1890 done: 1891 ADAPTER_UNLOCK(sc); 1892 return (rc); 1893 } 1894 1895 /* 1896 * Called on "ifconfig down", and from port_detach 1897 */ 1898 static int 1899 cxgb_uninit_synchronized(struct port_info *pi) 1900 { 1901 struct adapter *sc = pi->adapter; 1902 struct ifnet *ifp = pi->ifp; 1903 1904 /* 1905 * taskqueue_drain may cause a deadlock if the adapter lock is held. 1906 */ 1907 ADAPTER_LOCK_ASSERT_NOTOWNED(sc); 1908 1909 /* 1910 * Clear this port's bit from the open device map, and then drain all 1911 * the tasks that can access/manipulate this port's port_info or ifp. 1912 * We disable this port's interrupts here and so the slow/ext 1913 * interrupt tasks won't be enqueued. The tick task will continue to 1914 * be enqueued every second but the runs after this drain will not see 1915 * this port in the open device map. 1916 * 1917 * A well behaved task must take open_device_map into account and ignore 1918 * ports that are not open. 1919 */ 1920 clrbit(&sc->open_device_map, pi->port_id); 1921 t3_port_intr_disable(sc, pi->port_id); 1922 taskqueue_drain(sc->tq, &sc->slow_intr_task); 1923 taskqueue_drain(sc->tq, &sc->tick_task); 1924 1925 callout_drain(&pi->link_check_ch); 1926 taskqueue_drain(sc->tq, &pi->link_check_task); 1927 1928 PORT_LOCK(pi); 1929 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); 1930 1931 /* disable pause frames */ 1932 t3_set_reg_field(sc, A_XGM_TX_CFG + pi->mac.offset, F_TXPAUSEEN, 0); 1933 1934 /* Reset RX FIFO HWM */ 1935 t3_set_reg_field(sc, A_XGM_RXFIFO_CFG + pi->mac.offset, 1936 V_RXFIFOPAUSEHWM(M_RXFIFOPAUSEHWM), 0); 1937 1938 DELAY(100 * 1000); 1939 1940 /* Wait for TXFIFO empty */ 1941 t3_wait_op_done(sc, A_XGM_TXFIFO_CFG + pi->mac.offset, 1942 F_TXFIFO_EMPTY, 1, 20, 5); 1943 1944 DELAY(100 * 1000); 1945 t3_mac_disable(&pi->mac, MAC_DIRECTION_RX); 1946 1947 1948 pi->phy.ops->power_down(&pi->phy, 1); 1949 1950 PORT_UNLOCK(pi); 1951 1952 pi->link_config.link_ok = 0; 1953 t3_os_link_changed(sc, pi->port_id, 0, 0, 0, 0, 0); 1954 1955 if ((sc->open_device_map & PORT_MASK) == 0) 1956 offload_close(&sc->tdev); 1957 1958 if (sc->open_device_map == 0) 1959 cxgb_down(pi->adapter); 1960 1961 return (0); 1962 } 1963 1964 /* 1965 * Mark lro enabled or disabled in all qsets for this port 1966 */ 1967 static int 1968 cxgb_set_lro(struct port_info *p, int enabled) 1969 { 1970 int i; 1971 struct adapter *adp = p->adapter; 1972 struct sge_qset *q; 1973 1974 for (i = 0; i < p->nqsets; i++) { 1975 q = &adp->sge.qs[p->first_qset + i]; 1976 q->lro.enabled = (enabled != 0); 1977 } 1978 return (0); 1979 } 1980 1981 static int 1982 cxgb_ioctl(struct ifnet *ifp, unsigned long command, caddr_t data) 1983 { 1984 struct port_info *p = ifp->if_softc; 1985 struct adapter *sc = p->adapter; 1986 struct ifreq *ifr = (struct ifreq *)data; 1987 int flags, error = 0, mtu; 1988 uint32_t mask; 1989 1990 switch (command) { 1991 case SIOCSIFMTU: 1992 ADAPTER_LOCK(sc); 1993 error = IS_DOOMED(p) ? ENXIO : (IS_BUSY(sc) ? EBUSY : 0); 1994 if (error) { 1995 fail: 1996 ADAPTER_UNLOCK(sc); 1997 return (error); 1998 } 1999 2000 mtu = ifr->ifr_mtu; 2001 if ((mtu < ETHERMIN) || (mtu > ETHERMTU_JUMBO)) { 2002 error = EINVAL; 2003 } else { 2004 ifp->if_mtu = mtu; 2005 PORT_LOCK(p); 2006 cxgb_update_mac_settings(p); 2007 PORT_UNLOCK(p); 2008 } 2009 ADAPTER_UNLOCK(sc); 2010 break; 2011 case SIOCSIFFLAGS: 2012 ADAPTER_LOCK(sc); 2013 if (IS_DOOMED(p)) { 2014 error = ENXIO; 2015 goto fail; 2016 } 2017 if (ifp->if_flags & IFF_UP) { 2018 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 2019 flags = p->if_flags; 2020 if (((ifp->if_flags ^ flags) & IFF_PROMISC) || 2021 ((ifp->if_flags ^ flags) & IFF_ALLMULTI)) { 2022 if (IS_BUSY(sc)) { 2023 error = EBUSY; 2024 goto fail; 2025 } 2026 PORT_LOCK(p); 2027 cxgb_update_mac_settings(p); 2028 PORT_UNLOCK(p); 2029 } 2030 ADAPTER_UNLOCK(sc); 2031 } else 2032 error = cxgb_init_locked(p); 2033 p->if_flags = ifp->if_flags; 2034 } else if (ifp->if_drv_flags & IFF_DRV_RUNNING) 2035 error = cxgb_uninit_locked(p); 2036 else 2037 ADAPTER_UNLOCK(sc); 2038 2039 ADAPTER_LOCK_ASSERT_NOTOWNED(sc); 2040 break; 2041 case SIOCADDMULTI: 2042 case SIOCDELMULTI: 2043 ADAPTER_LOCK(sc); 2044 error = IS_DOOMED(p) ? ENXIO : (IS_BUSY(sc) ? EBUSY : 0); 2045 if (error) 2046 goto fail; 2047 2048 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 2049 PORT_LOCK(p); 2050 cxgb_update_mac_settings(p); 2051 PORT_UNLOCK(p); 2052 } 2053 ADAPTER_UNLOCK(sc); 2054 2055 break; 2056 case SIOCSIFCAP: 2057 ADAPTER_LOCK(sc); 2058 error = IS_DOOMED(p) ? ENXIO : (IS_BUSY(sc) ? EBUSY : 0); 2059 if (error) 2060 goto fail; 2061 2062 mask = ifr->ifr_reqcap ^ ifp->if_capenable; 2063 if (mask & IFCAP_TXCSUM) { 2064 ifp->if_capenable ^= IFCAP_TXCSUM; 2065 ifp->if_hwassist ^= (CSUM_TCP | CSUM_UDP | CSUM_IP); 2066 2067 if (IFCAP_TSO & ifp->if_capenable && 2068 !(IFCAP_TXCSUM & ifp->if_capenable)) { 2069 ifp->if_capenable &= ~IFCAP_TSO; 2070 ifp->if_hwassist &= ~CSUM_TSO; 2071 if_printf(ifp, 2072 "tso disabled due to -txcsum.\n"); 2073 } 2074 } 2075 if (mask & IFCAP_RXCSUM) 2076 ifp->if_capenable ^= IFCAP_RXCSUM; 2077 if (mask & IFCAP_TSO4) { 2078 ifp->if_capenable ^= IFCAP_TSO4; 2079 2080 if (IFCAP_TSO & ifp->if_capenable) { 2081 if (IFCAP_TXCSUM & ifp->if_capenable) 2082 ifp->if_hwassist |= CSUM_TSO; 2083 else { 2084 ifp->if_capenable &= ~IFCAP_TSO; 2085 ifp->if_hwassist &= ~CSUM_TSO; 2086 if_printf(ifp, 2087 "enable txcsum first.\n"); 2088 error = EAGAIN; 2089 } 2090 } else 2091 ifp->if_hwassist &= ~CSUM_TSO; 2092 } 2093 if (mask & IFCAP_LRO) { 2094 ifp->if_capenable ^= IFCAP_LRO; 2095 2096 /* Safe to do this even if cxgb_up not called yet */ 2097 cxgb_set_lro(p, ifp->if_capenable & IFCAP_LRO); 2098 } 2099 if (mask & IFCAP_VLAN_HWTAGGING) { 2100 ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING; 2101 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 2102 PORT_LOCK(p); 2103 cxgb_update_mac_settings(p); 2104 PORT_UNLOCK(p); 2105 } 2106 } 2107 if (mask & IFCAP_VLAN_MTU) { 2108 ifp->if_capenable ^= IFCAP_VLAN_MTU; 2109 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 2110 PORT_LOCK(p); 2111 cxgb_update_mac_settings(p); 2112 PORT_UNLOCK(p); 2113 } 2114 } 2115 if (mask & IFCAP_VLAN_HWTSO) 2116 ifp->if_capenable ^= IFCAP_VLAN_HWTSO; 2117 if (mask & IFCAP_VLAN_HWCSUM) 2118 ifp->if_capenable ^= IFCAP_VLAN_HWCSUM; 2119 2120 #ifdef VLAN_CAPABILITIES 2121 VLAN_CAPABILITIES(ifp); 2122 #endif 2123 ADAPTER_UNLOCK(sc); 2124 break; 2125 case SIOCSIFMEDIA: 2126 case SIOCGIFMEDIA: 2127 error = ifmedia_ioctl(ifp, ifr, &p->media, command); 2128 break; 2129 default: 2130 error = ether_ioctl(ifp, command, data); 2131 } 2132 2133 return (error); 2134 } 2135 2136 static int 2137 cxgb_media_change(struct ifnet *ifp) 2138 { 2139 return (EOPNOTSUPP); 2140 } 2141 2142 /* 2143 * Translates phy->modtype to the correct Ethernet media subtype. 2144 */ 2145 static int 2146 cxgb_ifm_type(int mod) 2147 { 2148 switch (mod) { 2149 case phy_modtype_sr: 2150 return (IFM_10G_SR); 2151 case phy_modtype_lr: 2152 return (IFM_10G_LR); 2153 case phy_modtype_lrm: 2154 return (IFM_10G_LRM); 2155 case phy_modtype_twinax: 2156 return (IFM_10G_TWINAX); 2157 case phy_modtype_twinax_long: 2158 return (IFM_10G_TWINAX_LONG); 2159 case phy_modtype_none: 2160 return (IFM_NONE); 2161 case phy_modtype_unknown: 2162 return (IFM_UNKNOWN); 2163 } 2164 2165 KASSERT(0, ("%s: modtype %d unknown", __func__, mod)); 2166 return (IFM_UNKNOWN); 2167 } 2168 2169 /* 2170 * Rebuilds the ifmedia list for this port, and sets the current media. 2171 */ 2172 static void 2173 cxgb_build_medialist(struct port_info *p) 2174 { 2175 struct cphy *phy = &p->phy; 2176 struct ifmedia *media = &p->media; 2177 int mod = phy->modtype; 2178 int m = IFM_ETHER | IFM_FDX; 2179 2180 PORT_LOCK(p); 2181 2182 ifmedia_removeall(media); 2183 if (phy->caps & SUPPORTED_TP && phy->caps & SUPPORTED_Autoneg) { 2184 /* Copper (RJ45) */ 2185 2186 if (phy->caps & SUPPORTED_10000baseT_Full) 2187 ifmedia_add(media, m | IFM_10G_T, mod, NULL); 2188 2189 if (phy->caps & SUPPORTED_1000baseT_Full) 2190 ifmedia_add(media, m | IFM_1000_T, mod, NULL); 2191 2192 if (phy->caps & SUPPORTED_100baseT_Full) 2193 ifmedia_add(media, m | IFM_100_TX, mod, NULL); 2194 2195 if (phy->caps & SUPPORTED_10baseT_Full) 2196 ifmedia_add(media, m | IFM_10_T, mod, NULL); 2197 2198 ifmedia_add(media, IFM_ETHER | IFM_AUTO, mod, NULL); 2199 ifmedia_set(media, IFM_ETHER | IFM_AUTO); 2200 2201 } else if (phy->caps & SUPPORTED_TP) { 2202 /* Copper (CX4) */ 2203 2204 KASSERT(phy->caps & SUPPORTED_10000baseT_Full, 2205 ("%s: unexpected cap 0x%x", __func__, phy->caps)); 2206 2207 ifmedia_add(media, m | IFM_10G_CX4, mod, NULL); 2208 ifmedia_set(media, m | IFM_10G_CX4); 2209 2210 } else if (phy->caps & SUPPORTED_FIBRE && 2211 phy->caps & SUPPORTED_10000baseT_Full) { 2212 /* 10G optical (but includes SFP+ twinax) */ 2213 2214 m |= cxgb_ifm_type(mod); 2215 if (IFM_SUBTYPE(m) == IFM_NONE) 2216 m &= ~IFM_FDX; 2217 2218 ifmedia_add(media, m, mod, NULL); 2219 ifmedia_set(media, m); 2220 2221 } else if (phy->caps & SUPPORTED_FIBRE && 2222 phy->caps & SUPPORTED_1000baseT_Full) { 2223 /* 1G optical */ 2224 2225 /* XXX: Lie and claim to be SX, could actually be any 1G-X */ 2226 ifmedia_add(media, m | IFM_1000_SX, mod, NULL); 2227 ifmedia_set(media, m | IFM_1000_SX); 2228 2229 } else { 2230 KASSERT(0, ("%s: don't know how to handle 0x%x.", __func__, 2231 phy->caps)); 2232 } 2233 2234 PORT_UNLOCK(p); 2235 } 2236 2237 static void 2238 cxgb_media_status(struct ifnet *ifp, struct ifmediareq *ifmr) 2239 { 2240 struct port_info *p = ifp->if_softc; 2241 struct ifmedia_entry *cur = p->media.ifm_cur; 2242 int speed = p->link_config.speed; 2243 2244 if (cur->ifm_data != p->phy.modtype) { 2245 cxgb_build_medialist(p); 2246 cur = p->media.ifm_cur; 2247 } 2248 2249 ifmr->ifm_status = IFM_AVALID; 2250 if (!p->link_config.link_ok) 2251 return; 2252 2253 ifmr->ifm_status |= IFM_ACTIVE; 2254 2255 /* 2256 * active and current will differ iff current media is autoselect. That 2257 * can happen only for copper RJ45. 2258 */ 2259 if (IFM_SUBTYPE(cur->ifm_media) != IFM_AUTO) 2260 return; 2261 KASSERT(p->phy.caps & SUPPORTED_TP && p->phy.caps & SUPPORTED_Autoneg, 2262 ("%s: unexpected PHY caps 0x%x", __func__, p->phy.caps)); 2263 2264 ifmr->ifm_active = IFM_ETHER | IFM_FDX; 2265 if (speed == SPEED_10000) 2266 ifmr->ifm_active |= IFM_10G_T; 2267 else if (speed == SPEED_1000) 2268 ifmr->ifm_active |= IFM_1000_T; 2269 else if (speed == SPEED_100) 2270 ifmr->ifm_active |= IFM_100_TX; 2271 else if (speed == SPEED_10) 2272 ifmr->ifm_active |= IFM_10_T; 2273 else 2274 KASSERT(0, ("%s: link up but speed unknown (%u)", __func__, 2275 speed)); 2276 } 2277 2278 static void 2279 cxgb_async_intr(void *data) 2280 { 2281 adapter_t *sc = data; 2282 2283 t3_write_reg(sc, A_PL_INT_ENABLE0, 0); 2284 (void) t3_read_reg(sc, A_PL_INT_ENABLE0); 2285 taskqueue_enqueue(sc->tq, &sc->slow_intr_task); 2286 } 2287 2288 static void 2289 link_check_callout(void *arg) 2290 { 2291 struct port_info *pi = arg; 2292 struct adapter *sc = pi->adapter; 2293 2294 if (!isset(&sc->open_device_map, pi->port_id)) 2295 return; 2296 2297 taskqueue_enqueue(sc->tq, &pi->link_check_task); 2298 } 2299 2300 static void 2301 check_link_status(void *arg, int pending) 2302 { 2303 struct port_info *pi = arg; 2304 struct adapter *sc = pi->adapter; 2305 2306 if (!isset(&sc->open_device_map, pi->port_id)) 2307 return; 2308 2309 t3_link_changed(sc, pi->port_id); 2310 2311 if (pi->link_fault || !(pi->phy.caps & SUPPORTED_LINK_IRQ)) 2312 callout_reset(&pi->link_check_ch, hz, link_check_callout, pi); 2313 } 2314 2315 void 2316 t3_os_link_intr(struct port_info *pi) 2317 { 2318 /* 2319 * Schedule a link check in the near future. If the link is flapping 2320 * rapidly we'll keep resetting the callout and delaying the check until 2321 * things stabilize a bit. 2322 */ 2323 callout_reset(&pi->link_check_ch, hz / 4, link_check_callout, pi); 2324 } 2325 2326 static void 2327 check_t3b2_mac(struct adapter *sc) 2328 { 2329 int i; 2330 2331 if (sc->flags & CXGB_SHUTDOWN) 2332 return; 2333 2334 for_each_port(sc, i) { 2335 struct port_info *p = &sc->port[i]; 2336 int status; 2337 #ifdef INVARIANTS 2338 struct ifnet *ifp = p->ifp; 2339 #endif 2340 2341 if (!isset(&sc->open_device_map, p->port_id) || p->link_fault || 2342 !p->link_config.link_ok) 2343 continue; 2344 2345 KASSERT(ifp->if_drv_flags & IFF_DRV_RUNNING, 2346 ("%s: state mismatch (drv_flags %x, device_map %x)", 2347 __func__, ifp->if_drv_flags, sc->open_device_map)); 2348 2349 PORT_LOCK(p); 2350 status = t3b2_mac_watchdog_task(&p->mac); 2351 if (status == 1) 2352 p->mac.stats.num_toggled++; 2353 else if (status == 2) { 2354 struct cmac *mac = &p->mac; 2355 2356 cxgb_update_mac_settings(p); 2357 t3_link_start(&p->phy, mac, &p->link_config); 2358 t3_mac_enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX); 2359 t3_port_intr_enable(sc, p->port_id); 2360 p->mac.stats.num_resets++; 2361 } 2362 PORT_UNLOCK(p); 2363 } 2364 } 2365 2366 static void 2367 cxgb_tick(void *arg) 2368 { 2369 adapter_t *sc = (adapter_t *)arg; 2370 2371 if (sc->flags & CXGB_SHUTDOWN) 2372 return; 2373 2374 taskqueue_enqueue(sc->tq, &sc->tick_task); 2375 callout_reset(&sc->cxgb_tick_ch, hz, cxgb_tick, sc); 2376 } 2377 2378 static void 2379 cxgb_tick_handler(void *arg, int count) 2380 { 2381 adapter_t *sc = (adapter_t *)arg; 2382 const struct adapter_params *p = &sc->params; 2383 int i; 2384 uint32_t cause, reset; 2385 2386 if (sc->flags & CXGB_SHUTDOWN || !(sc->flags & FULL_INIT_DONE)) 2387 return; 2388 2389 if (p->rev == T3_REV_B2 && p->nports < 4 && sc->open_device_map) 2390 check_t3b2_mac(sc); 2391 2392 cause = t3_read_reg(sc, A_SG_INT_CAUSE) & (F_RSPQSTARVE | F_FLEMPTY); 2393 if (cause) { 2394 struct sge_qset *qs = &sc->sge.qs[0]; 2395 uint32_t mask, v; 2396 2397 v = t3_read_reg(sc, A_SG_RSPQ_FL_STATUS) & ~0xff00; 2398 2399 mask = 1; 2400 for (i = 0; i < SGE_QSETS; i++) { 2401 if (v & mask) 2402 qs[i].rspq.starved++; 2403 mask <<= 1; 2404 } 2405 2406 mask <<= SGE_QSETS; /* skip RSPQXDISABLED */ 2407 2408 for (i = 0; i < SGE_QSETS * 2; i++) { 2409 if (v & mask) { 2410 qs[i / 2].fl[i % 2].empty++; 2411 } 2412 mask <<= 1; 2413 } 2414 2415 /* clear */ 2416 t3_write_reg(sc, A_SG_RSPQ_FL_STATUS, v); 2417 t3_write_reg(sc, A_SG_INT_CAUSE, cause); 2418 } 2419 2420 for (i = 0; i < sc->params.nports; i++) { 2421 struct port_info *pi = &sc->port[i]; 2422 struct ifnet *ifp = pi->ifp; 2423 struct cmac *mac = &pi->mac; 2424 struct mac_stats *mstats = &mac->stats; 2425 int drops, j; 2426 2427 if (!isset(&sc->open_device_map, pi->port_id)) 2428 continue; 2429 2430 PORT_LOCK(pi); 2431 t3_mac_update_stats(mac); 2432 PORT_UNLOCK(pi); 2433 2434 ifp->if_opackets = mstats->tx_frames; 2435 ifp->if_ipackets = mstats->rx_frames; 2436 ifp->if_obytes = mstats->tx_octets; 2437 ifp->if_ibytes = mstats->rx_octets; 2438 ifp->if_omcasts = mstats->tx_mcast_frames; 2439 ifp->if_imcasts = mstats->rx_mcast_frames; 2440 ifp->if_collisions = mstats->tx_total_collisions; 2441 ifp->if_iqdrops = mstats->rx_cong_drops; 2442 2443 drops = 0; 2444 for (j = pi->first_qset; j < pi->first_qset + pi->nqsets; j++) 2445 drops += sc->sge.qs[j].txq[TXQ_ETH].txq_mr->br_drops; 2446 ifp->if_snd.ifq_drops = drops; 2447 2448 ifp->if_oerrors = 2449 mstats->tx_excess_collisions + 2450 mstats->tx_underrun + 2451 mstats->tx_len_errs + 2452 mstats->tx_mac_internal_errs + 2453 mstats->tx_excess_deferral + 2454 mstats->tx_fcs_errs; 2455 ifp->if_ierrors = 2456 mstats->rx_jabber + 2457 mstats->rx_data_errs + 2458 mstats->rx_sequence_errs + 2459 mstats->rx_runt + 2460 mstats->rx_too_long + 2461 mstats->rx_mac_internal_errs + 2462 mstats->rx_short + 2463 mstats->rx_fcs_errs; 2464 2465 if (mac->multiport) 2466 continue; 2467 2468 /* Count rx fifo overflows, once per second */ 2469 cause = t3_read_reg(sc, A_XGM_INT_CAUSE + mac->offset); 2470 reset = 0; 2471 if (cause & F_RXFIFO_OVERFLOW) { 2472 mac->stats.rx_fifo_ovfl++; 2473 reset |= F_RXFIFO_OVERFLOW; 2474 } 2475 t3_write_reg(sc, A_XGM_INT_CAUSE + mac->offset, reset); 2476 } 2477 } 2478 2479 static void 2480 touch_bars(device_t dev) 2481 { 2482 /* 2483 * Don't enable yet 2484 */ 2485 #if !defined(__LP64__) && 0 2486 u32 v; 2487 2488 pci_read_config_dword(pdev, PCI_BASE_ADDRESS_1, &v); 2489 pci_write_config_dword(pdev, PCI_BASE_ADDRESS_1, v); 2490 pci_read_config_dword(pdev, PCI_BASE_ADDRESS_3, &v); 2491 pci_write_config_dword(pdev, PCI_BASE_ADDRESS_3, v); 2492 pci_read_config_dword(pdev, PCI_BASE_ADDRESS_5, &v); 2493 pci_write_config_dword(pdev, PCI_BASE_ADDRESS_5, v); 2494 #endif 2495 } 2496 2497 static int 2498 set_eeprom(struct port_info *pi, const uint8_t *data, int len, int offset) 2499 { 2500 uint8_t *buf; 2501 int err = 0; 2502 u32 aligned_offset, aligned_len, *p; 2503 struct adapter *adapter = pi->adapter; 2504 2505 2506 aligned_offset = offset & ~3; 2507 aligned_len = (len + (offset & 3) + 3) & ~3; 2508 2509 if (aligned_offset != offset || aligned_len != len) { 2510 buf = malloc(aligned_len, M_DEVBUF, M_WAITOK|M_ZERO); 2511 if (!buf) 2512 return (ENOMEM); 2513 err = t3_seeprom_read(adapter, aligned_offset, (u32 *)buf); 2514 if (!err && aligned_len > 4) 2515 err = t3_seeprom_read(adapter, 2516 aligned_offset + aligned_len - 4, 2517 (u32 *)&buf[aligned_len - 4]); 2518 if (err) 2519 goto out; 2520 memcpy(buf + (offset & 3), data, len); 2521 } else 2522 buf = (uint8_t *)(uintptr_t)data; 2523 2524 err = t3_seeprom_wp(adapter, 0); 2525 if (err) 2526 goto out; 2527 2528 for (p = (u32 *)buf; !err && aligned_len; aligned_len -= 4, p++) { 2529 err = t3_seeprom_write(adapter, aligned_offset, *p); 2530 aligned_offset += 4; 2531 } 2532 2533 if (!err) 2534 err = t3_seeprom_wp(adapter, 1); 2535 out: 2536 if (buf != data) 2537 free(buf, M_DEVBUF); 2538 return err; 2539 } 2540 2541 2542 static int 2543 in_range(int val, int lo, int hi) 2544 { 2545 return val < 0 || (val <= hi && val >= lo); 2546 } 2547 2548 static int 2549 cxgb_extension_open(struct cdev *dev, int flags, int fmp, struct thread *td) 2550 { 2551 return (0); 2552 } 2553 2554 static int 2555 cxgb_extension_close(struct cdev *dev, int flags, int fmt, struct thread *td) 2556 { 2557 return (0); 2558 } 2559 2560 static int 2561 cxgb_extension_ioctl(struct cdev *dev, unsigned long cmd, caddr_t data, 2562 int fflag, struct thread *td) 2563 { 2564 int mmd, error = 0; 2565 struct port_info *pi = dev->si_drv1; 2566 adapter_t *sc = pi->adapter; 2567 2568 #ifdef PRIV_SUPPORTED 2569 if (priv_check(td, PRIV_DRIVER)) { 2570 if (cxgb_debug) 2571 printf("user does not have access to privileged ioctls\n"); 2572 return (EPERM); 2573 } 2574 #else 2575 if (suser(td)) { 2576 if (cxgb_debug) 2577 printf("user does not have access to privileged ioctls\n"); 2578 return (EPERM); 2579 } 2580 #endif 2581 2582 switch (cmd) { 2583 case CHELSIO_GET_MIIREG: { 2584 uint32_t val; 2585 struct cphy *phy = &pi->phy; 2586 struct ch_mii_data *mid = (struct ch_mii_data *)data; 2587 2588 if (!phy->mdio_read) 2589 return (EOPNOTSUPP); 2590 if (is_10G(sc)) { 2591 mmd = mid->phy_id >> 8; 2592 if (!mmd) 2593 mmd = MDIO_DEV_PCS; 2594 else if (mmd > MDIO_DEV_VEND2) 2595 return (EINVAL); 2596 2597 error = phy->mdio_read(sc, mid->phy_id & 0x1f, mmd, 2598 mid->reg_num, &val); 2599 } else 2600 error = phy->mdio_read(sc, mid->phy_id & 0x1f, 0, 2601 mid->reg_num & 0x1f, &val); 2602 if (error == 0) 2603 mid->val_out = val; 2604 break; 2605 } 2606 case CHELSIO_SET_MIIREG: { 2607 struct cphy *phy = &pi->phy; 2608 struct ch_mii_data *mid = (struct ch_mii_data *)data; 2609 2610 if (!phy->mdio_write) 2611 return (EOPNOTSUPP); 2612 if (is_10G(sc)) { 2613 mmd = mid->phy_id >> 8; 2614 if (!mmd) 2615 mmd = MDIO_DEV_PCS; 2616 else if (mmd > MDIO_DEV_VEND2) 2617 return (EINVAL); 2618 2619 error = phy->mdio_write(sc, mid->phy_id & 0x1f, 2620 mmd, mid->reg_num, mid->val_in); 2621 } else 2622 error = phy->mdio_write(sc, mid->phy_id & 0x1f, 0, 2623 mid->reg_num & 0x1f, 2624 mid->val_in); 2625 break; 2626 } 2627 case CHELSIO_SETREG: { 2628 struct ch_reg *edata = (struct ch_reg *)data; 2629 if ((edata->addr & 0x3) != 0 || edata->addr >= sc->mmio_len) 2630 return (EFAULT); 2631 t3_write_reg(sc, edata->addr, edata->val); 2632 break; 2633 } 2634 case CHELSIO_GETREG: { 2635 struct ch_reg *edata = (struct ch_reg *)data; 2636 if ((edata->addr & 0x3) != 0 || edata->addr >= sc->mmio_len) 2637 return (EFAULT); 2638 edata->val = t3_read_reg(sc, edata->addr); 2639 break; 2640 } 2641 case CHELSIO_GET_SGE_CONTEXT: { 2642 struct ch_cntxt *ecntxt = (struct ch_cntxt *)data; 2643 mtx_lock_spin(&sc->sge.reg_lock); 2644 switch (ecntxt->cntxt_type) { 2645 case CNTXT_TYPE_EGRESS: 2646 error = -t3_sge_read_ecntxt(sc, ecntxt->cntxt_id, 2647 ecntxt->data); 2648 break; 2649 case CNTXT_TYPE_FL: 2650 error = -t3_sge_read_fl(sc, ecntxt->cntxt_id, 2651 ecntxt->data); 2652 break; 2653 case CNTXT_TYPE_RSP: 2654 error = -t3_sge_read_rspq(sc, ecntxt->cntxt_id, 2655 ecntxt->data); 2656 break; 2657 case CNTXT_TYPE_CQ: 2658 error = -t3_sge_read_cq(sc, ecntxt->cntxt_id, 2659 ecntxt->data); 2660 break; 2661 default: 2662 error = EINVAL; 2663 break; 2664 } 2665 mtx_unlock_spin(&sc->sge.reg_lock); 2666 break; 2667 } 2668 case CHELSIO_GET_SGE_DESC: { 2669 struct ch_desc *edesc = (struct ch_desc *)data; 2670 int ret; 2671 if (edesc->queue_num >= SGE_QSETS * 6) 2672 return (EINVAL); 2673 ret = t3_get_desc(&sc->sge.qs[edesc->queue_num / 6], 2674 edesc->queue_num % 6, edesc->idx, edesc->data); 2675 if (ret < 0) 2676 return (EINVAL); 2677 edesc->size = ret; 2678 break; 2679 } 2680 case CHELSIO_GET_QSET_PARAMS: { 2681 struct qset_params *q; 2682 struct ch_qset_params *t = (struct ch_qset_params *)data; 2683 int q1 = pi->first_qset; 2684 int nqsets = pi->nqsets; 2685 int i; 2686 2687 if (t->qset_idx >= nqsets) 2688 return EINVAL; 2689 2690 i = q1 + t->qset_idx; 2691 q = &sc->params.sge.qset[i]; 2692 t->rspq_size = q->rspq_size; 2693 t->txq_size[0] = q->txq_size[0]; 2694 t->txq_size[1] = q->txq_size[1]; 2695 t->txq_size[2] = q->txq_size[2]; 2696 t->fl_size[0] = q->fl_size; 2697 t->fl_size[1] = q->jumbo_size; 2698 t->polling = q->polling; 2699 t->lro = q->lro; 2700 t->intr_lat = q->coalesce_usecs; 2701 t->cong_thres = q->cong_thres; 2702 t->qnum = i; 2703 2704 if ((sc->flags & FULL_INIT_DONE) == 0) 2705 t->vector = 0; 2706 else if (sc->flags & USING_MSIX) 2707 t->vector = rman_get_start(sc->msix_irq_res[i]); 2708 else 2709 t->vector = rman_get_start(sc->irq_res); 2710 2711 break; 2712 } 2713 case CHELSIO_GET_QSET_NUM: { 2714 struct ch_reg *edata = (struct ch_reg *)data; 2715 edata->val = pi->nqsets; 2716 break; 2717 } 2718 case CHELSIO_LOAD_FW: { 2719 uint8_t *fw_data; 2720 uint32_t vers; 2721 struct ch_mem_range *t = (struct ch_mem_range *)data; 2722 2723 /* 2724 * You're allowed to load a firmware only before FULL_INIT_DONE 2725 * 2726 * FW_UPTODATE is also set so the rest of the initialization 2727 * will not overwrite what was loaded here. This gives you the 2728 * flexibility to load any firmware (and maybe shoot yourself in 2729 * the foot). 2730 */ 2731 2732 ADAPTER_LOCK(sc); 2733 if (sc->open_device_map || sc->flags & FULL_INIT_DONE) { 2734 ADAPTER_UNLOCK(sc); 2735 return (EBUSY); 2736 } 2737 2738 fw_data = malloc(t->len, M_DEVBUF, M_NOWAIT); 2739 if (!fw_data) 2740 error = ENOMEM; 2741 else 2742 error = copyin(t->buf, fw_data, t->len); 2743 2744 if (!error) 2745 error = -t3_load_fw(sc, fw_data, t->len); 2746 2747 if (t3_get_fw_version(sc, &vers) == 0) { 2748 snprintf(&sc->fw_version[0], sizeof(sc->fw_version), 2749 "%d.%d.%d", G_FW_VERSION_MAJOR(vers), 2750 G_FW_VERSION_MINOR(vers), G_FW_VERSION_MICRO(vers)); 2751 } 2752 2753 if (!error) 2754 sc->flags |= FW_UPTODATE; 2755 2756 free(fw_data, M_DEVBUF); 2757 ADAPTER_UNLOCK(sc); 2758 break; 2759 } 2760 case CHELSIO_LOAD_BOOT: { 2761 uint8_t *boot_data; 2762 struct ch_mem_range *t = (struct ch_mem_range *)data; 2763 2764 boot_data = malloc(t->len, M_DEVBUF, M_NOWAIT); 2765 if (!boot_data) 2766 return ENOMEM; 2767 2768 error = copyin(t->buf, boot_data, t->len); 2769 if (!error) 2770 error = -t3_load_boot(sc, boot_data, t->len); 2771 2772 free(boot_data, M_DEVBUF); 2773 break; 2774 } 2775 case CHELSIO_GET_PM: { 2776 struct ch_pm *m = (struct ch_pm *)data; 2777 struct tp_params *p = &sc->params.tp; 2778 2779 if (!is_offload(sc)) 2780 return (EOPNOTSUPP); 2781 2782 m->tx_pg_sz = p->tx_pg_size; 2783 m->tx_num_pg = p->tx_num_pgs; 2784 m->rx_pg_sz = p->rx_pg_size; 2785 m->rx_num_pg = p->rx_num_pgs; 2786 m->pm_total = p->pmtx_size + p->chan_rx_size * p->nchan; 2787 2788 break; 2789 } 2790 case CHELSIO_SET_PM: { 2791 struct ch_pm *m = (struct ch_pm *)data; 2792 struct tp_params *p = &sc->params.tp; 2793 2794 if (!is_offload(sc)) 2795 return (EOPNOTSUPP); 2796 if (sc->flags & FULL_INIT_DONE) 2797 return (EBUSY); 2798 2799 if (!m->rx_pg_sz || (m->rx_pg_sz & (m->rx_pg_sz - 1)) || 2800 !m->tx_pg_sz || (m->tx_pg_sz & (m->tx_pg_sz - 1))) 2801 return (EINVAL); /* not power of 2 */ 2802 if (!(m->rx_pg_sz & 0x14000)) 2803 return (EINVAL); /* not 16KB or 64KB */ 2804 if (!(m->tx_pg_sz & 0x1554000)) 2805 return (EINVAL); 2806 if (m->tx_num_pg == -1) 2807 m->tx_num_pg = p->tx_num_pgs; 2808 if (m->rx_num_pg == -1) 2809 m->rx_num_pg = p->rx_num_pgs; 2810 if (m->tx_num_pg % 24 || m->rx_num_pg % 24) 2811 return (EINVAL); 2812 if (m->rx_num_pg * m->rx_pg_sz > p->chan_rx_size || 2813 m->tx_num_pg * m->tx_pg_sz > p->chan_tx_size) 2814 return (EINVAL); 2815 2816 p->rx_pg_size = m->rx_pg_sz; 2817 p->tx_pg_size = m->tx_pg_sz; 2818 p->rx_num_pgs = m->rx_num_pg; 2819 p->tx_num_pgs = m->tx_num_pg; 2820 break; 2821 } 2822 case CHELSIO_SETMTUTAB: { 2823 struct ch_mtus *m = (struct ch_mtus *)data; 2824 int i; 2825 2826 if (!is_offload(sc)) 2827 return (EOPNOTSUPP); 2828 if (offload_running(sc)) 2829 return (EBUSY); 2830 if (m->nmtus != NMTUS) 2831 return (EINVAL); 2832 if (m->mtus[0] < 81) /* accommodate SACK */ 2833 return (EINVAL); 2834 2835 /* 2836 * MTUs must be in ascending order 2837 */ 2838 for (i = 1; i < NMTUS; ++i) 2839 if (m->mtus[i] < m->mtus[i - 1]) 2840 return (EINVAL); 2841 2842 memcpy(sc->params.mtus, m->mtus, sizeof(sc->params.mtus)); 2843 break; 2844 } 2845 case CHELSIO_GETMTUTAB: { 2846 struct ch_mtus *m = (struct ch_mtus *)data; 2847 2848 if (!is_offload(sc)) 2849 return (EOPNOTSUPP); 2850 2851 memcpy(m->mtus, sc->params.mtus, sizeof(m->mtus)); 2852 m->nmtus = NMTUS; 2853 break; 2854 } 2855 case CHELSIO_GET_MEM: { 2856 struct ch_mem_range *t = (struct ch_mem_range *)data; 2857 struct mc7 *mem; 2858 uint8_t *useraddr; 2859 u64 buf[32]; 2860 2861 /* 2862 * Use these to avoid modifying len/addr in the return 2863 * struct 2864 */ 2865 uint32_t len = t->len, addr = t->addr; 2866 2867 if (!is_offload(sc)) 2868 return (EOPNOTSUPP); 2869 if (!(sc->flags & FULL_INIT_DONE)) 2870 return (EIO); /* need the memory controllers */ 2871 if ((addr & 0x7) || (len & 0x7)) 2872 return (EINVAL); 2873 if (t->mem_id == MEM_CM) 2874 mem = &sc->cm; 2875 else if (t->mem_id == MEM_PMRX) 2876 mem = &sc->pmrx; 2877 else if (t->mem_id == MEM_PMTX) 2878 mem = &sc->pmtx; 2879 else 2880 return (EINVAL); 2881 2882 /* 2883 * Version scheme: 2884 * bits 0..9: chip version 2885 * bits 10..15: chip revision 2886 */ 2887 t->version = 3 | (sc->params.rev << 10); 2888 2889 /* 2890 * Read 256 bytes at a time as len can be large and we don't 2891 * want to use huge intermediate buffers. 2892 */ 2893 useraddr = (uint8_t *)t->buf; 2894 while (len) { 2895 unsigned int chunk = min(len, sizeof(buf)); 2896 2897 error = t3_mc7_bd_read(mem, addr / 8, chunk / 8, buf); 2898 if (error) 2899 return (-error); 2900 if (copyout(buf, useraddr, chunk)) 2901 return (EFAULT); 2902 useraddr += chunk; 2903 addr += chunk; 2904 len -= chunk; 2905 } 2906 break; 2907 } 2908 case CHELSIO_READ_TCAM_WORD: { 2909 struct ch_tcam_word *t = (struct ch_tcam_word *)data; 2910 2911 if (!is_offload(sc)) 2912 return (EOPNOTSUPP); 2913 if (!(sc->flags & FULL_INIT_DONE)) 2914 return (EIO); /* need MC5 */ 2915 return -t3_read_mc5_range(&sc->mc5, t->addr, 1, t->buf); 2916 break; 2917 } 2918 case CHELSIO_SET_TRACE_FILTER: { 2919 struct ch_trace *t = (struct ch_trace *)data; 2920 const struct trace_params *tp; 2921 2922 tp = (const struct trace_params *)&t->sip; 2923 if (t->config_tx) 2924 t3_config_trace_filter(sc, tp, 0, t->invert_match, 2925 t->trace_tx); 2926 if (t->config_rx) 2927 t3_config_trace_filter(sc, tp, 1, t->invert_match, 2928 t->trace_rx); 2929 break; 2930 } 2931 case CHELSIO_SET_PKTSCHED: { 2932 struct ch_pktsched_params *p = (struct ch_pktsched_params *)data; 2933 if (sc->open_device_map == 0) 2934 return (EAGAIN); 2935 send_pktsched_cmd(sc, p->sched, p->idx, p->min, p->max, 2936 p->binding); 2937 break; 2938 } 2939 case CHELSIO_IFCONF_GETREGS: { 2940 struct ch_ifconf_regs *regs = (struct ch_ifconf_regs *)data; 2941 int reglen = cxgb_get_regs_len(); 2942 uint8_t *buf = malloc(reglen, M_DEVBUF, M_NOWAIT); 2943 if (buf == NULL) { 2944 return (ENOMEM); 2945 } 2946 if (regs->len > reglen) 2947 regs->len = reglen; 2948 else if (regs->len < reglen) 2949 error = ENOBUFS; 2950 2951 if (!error) { 2952 cxgb_get_regs(sc, regs, buf); 2953 error = copyout(buf, regs->data, reglen); 2954 } 2955 free(buf, M_DEVBUF); 2956 2957 break; 2958 } 2959 case CHELSIO_SET_HW_SCHED: { 2960 struct ch_hw_sched *t = (struct ch_hw_sched *)data; 2961 unsigned int ticks_per_usec = core_ticks_per_usec(sc); 2962 2963 if ((sc->flags & FULL_INIT_DONE) == 0) 2964 return (EAGAIN); /* need TP to be initialized */ 2965 if (t->sched >= NTX_SCHED || !in_range(t->mode, 0, 1) || 2966 !in_range(t->channel, 0, 1) || 2967 !in_range(t->kbps, 0, 10000000) || 2968 !in_range(t->class_ipg, 0, 10000 * 65535 / ticks_per_usec) || 2969 !in_range(t->flow_ipg, 0, 2970 dack_ticks_to_usec(sc, 0x7ff))) 2971 return (EINVAL); 2972 2973 if (t->kbps >= 0) { 2974 error = t3_config_sched(sc, t->kbps, t->sched); 2975 if (error < 0) 2976 return (-error); 2977 } 2978 if (t->class_ipg >= 0) 2979 t3_set_sched_ipg(sc, t->sched, t->class_ipg); 2980 if (t->flow_ipg >= 0) { 2981 t->flow_ipg *= 1000; /* us -> ns */ 2982 t3_set_pace_tbl(sc, &t->flow_ipg, t->sched, 1); 2983 } 2984 if (t->mode >= 0) { 2985 int bit = 1 << (S_TX_MOD_TIMER_MODE + t->sched); 2986 2987 t3_set_reg_field(sc, A_TP_TX_MOD_QUEUE_REQ_MAP, 2988 bit, t->mode ? bit : 0); 2989 } 2990 if (t->channel >= 0) 2991 t3_set_reg_field(sc, A_TP_TX_MOD_QUEUE_REQ_MAP, 2992 1 << t->sched, t->channel << t->sched); 2993 break; 2994 } 2995 case CHELSIO_GET_EEPROM: { 2996 int i; 2997 struct ch_eeprom *e = (struct ch_eeprom *)data; 2998 uint8_t *buf = malloc(EEPROMSIZE, M_DEVBUF, M_NOWAIT); 2999 3000 if (buf == NULL) { 3001 return (ENOMEM); 3002 } 3003 e->magic = EEPROM_MAGIC; 3004 for (i = e->offset & ~3; !error && i < e->offset + e->len; i += 4) 3005 error = -t3_seeprom_read(sc, i, (uint32_t *)&buf[i]); 3006 3007 if (!error) 3008 error = copyout(buf + e->offset, e->data, e->len); 3009 3010 free(buf, M_DEVBUF); 3011 break; 3012 } 3013 case CHELSIO_CLEAR_STATS: { 3014 if (!(sc->flags & FULL_INIT_DONE)) 3015 return EAGAIN; 3016 3017 PORT_LOCK(pi); 3018 t3_mac_update_stats(&pi->mac); 3019 memset(&pi->mac.stats, 0, sizeof(pi->mac.stats)); 3020 PORT_UNLOCK(pi); 3021 break; 3022 } 3023 case CHELSIO_GET_UP_LA: { 3024 struct ch_up_la *la = (struct ch_up_la *)data; 3025 uint8_t *buf = malloc(LA_BUFSIZE, M_DEVBUF, M_NOWAIT); 3026 if (buf == NULL) { 3027 return (ENOMEM); 3028 } 3029 if (la->bufsize < LA_BUFSIZE) 3030 error = ENOBUFS; 3031 3032 if (!error) 3033 error = -t3_get_up_la(sc, &la->stopped, &la->idx, 3034 &la->bufsize, buf); 3035 if (!error) 3036 error = copyout(buf, la->data, la->bufsize); 3037 3038 free(buf, M_DEVBUF); 3039 break; 3040 } 3041 case CHELSIO_GET_UP_IOQS: { 3042 struct ch_up_ioqs *ioqs = (struct ch_up_ioqs *)data; 3043 uint8_t *buf = malloc(IOQS_BUFSIZE, M_DEVBUF, M_NOWAIT); 3044 uint32_t *v; 3045 3046 if (buf == NULL) { 3047 return (ENOMEM); 3048 } 3049 if (ioqs->bufsize < IOQS_BUFSIZE) 3050 error = ENOBUFS; 3051 3052 if (!error) 3053 error = -t3_get_up_ioqs(sc, &ioqs->bufsize, buf); 3054 3055 if (!error) { 3056 v = (uint32_t *)buf; 3057 3058 ioqs->ioq_rx_enable = *v++; 3059 ioqs->ioq_tx_enable = *v++; 3060 ioqs->ioq_rx_status = *v++; 3061 ioqs->ioq_tx_status = *v++; 3062 3063 error = copyout(v, ioqs->data, ioqs->bufsize); 3064 } 3065 3066 free(buf, M_DEVBUF); 3067 break; 3068 } 3069 case CHELSIO_SET_FILTER: { 3070 struct ch_filter *f = (struct ch_filter *)data;; 3071 struct filter_info *p; 3072 unsigned int nfilters = sc->params.mc5.nfilters; 3073 3074 if (!is_offload(sc)) 3075 return (EOPNOTSUPP); /* No TCAM */ 3076 if (!(sc->flags & FULL_INIT_DONE)) 3077 return (EAGAIN); /* mc5 not setup yet */ 3078 if (nfilters == 0) 3079 return (EBUSY); /* TOE will use TCAM */ 3080 3081 /* sanity checks */ 3082 if (f->filter_id >= nfilters || 3083 (f->val.dip && f->mask.dip != 0xffffffff) || 3084 (f->val.sport && f->mask.sport != 0xffff) || 3085 (f->val.dport && f->mask.dport != 0xffff) || 3086 (f->val.vlan && f->mask.vlan != 0xfff) || 3087 (f->val.vlan_prio && 3088 f->mask.vlan_prio != FILTER_NO_VLAN_PRI) || 3089 (f->mac_addr_idx != 0xffff && f->mac_addr_idx > 15) || 3090 f->qset >= SGE_QSETS || 3091 sc->rrss_map[f->qset] >= RSS_TABLE_SIZE) 3092 return (EINVAL); 3093 3094 /* Was allocated with M_WAITOK */ 3095 KASSERT(sc->filters, ("filter table NULL\n")); 3096 3097 p = &sc->filters[f->filter_id]; 3098 if (p->locked) 3099 return (EPERM); 3100 3101 bzero(p, sizeof(*p)); 3102 p->sip = f->val.sip; 3103 p->sip_mask = f->mask.sip; 3104 p->dip = f->val.dip; 3105 p->sport = f->val.sport; 3106 p->dport = f->val.dport; 3107 p->vlan = f->mask.vlan ? f->val.vlan : 0xfff; 3108 p->vlan_prio = f->mask.vlan_prio ? (f->val.vlan_prio & 6) : 3109 FILTER_NO_VLAN_PRI; 3110 p->mac_hit = f->mac_hit; 3111 p->mac_vld = f->mac_addr_idx != 0xffff; 3112 p->mac_idx = f->mac_addr_idx; 3113 p->pkt_type = f->proto; 3114 p->report_filter_id = f->want_filter_id; 3115 p->pass = f->pass; 3116 p->rss = f->rss; 3117 p->qset = f->qset; 3118 3119 error = set_filter(sc, f->filter_id, p); 3120 if (error == 0) 3121 p->valid = 1; 3122 break; 3123 } 3124 case CHELSIO_DEL_FILTER: { 3125 struct ch_filter *f = (struct ch_filter *)data; 3126 struct filter_info *p; 3127 unsigned int nfilters = sc->params.mc5.nfilters; 3128 3129 if (!is_offload(sc)) 3130 return (EOPNOTSUPP); 3131 if (!(sc->flags & FULL_INIT_DONE)) 3132 return (EAGAIN); 3133 if (nfilters == 0 || sc->filters == NULL) 3134 return (EINVAL); 3135 if (f->filter_id >= nfilters) 3136 return (EINVAL); 3137 3138 p = &sc->filters[f->filter_id]; 3139 if (p->locked) 3140 return (EPERM); 3141 if (!p->valid) 3142 return (EFAULT); /* Read "Bad address" as "Bad index" */ 3143 3144 bzero(p, sizeof(*p)); 3145 p->sip = p->sip_mask = 0xffffffff; 3146 p->vlan = 0xfff; 3147 p->vlan_prio = FILTER_NO_VLAN_PRI; 3148 p->pkt_type = 1; 3149 error = set_filter(sc, f->filter_id, p); 3150 break; 3151 } 3152 case CHELSIO_GET_FILTER: { 3153 struct ch_filter *f = (struct ch_filter *)data; 3154 struct filter_info *p; 3155 unsigned int i, nfilters = sc->params.mc5.nfilters; 3156 3157 if (!is_offload(sc)) 3158 return (EOPNOTSUPP); 3159 if (!(sc->flags & FULL_INIT_DONE)) 3160 return (EAGAIN); 3161 if (nfilters == 0 || sc->filters == NULL) 3162 return (EINVAL); 3163 3164 i = f->filter_id == 0xffffffff ? 0 : f->filter_id + 1; 3165 for (; i < nfilters; i++) { 3166 p = &sc->filters[i]; 3167 if (!p->valid) 3168 continue; 3169 3170 bzero(f, sizeof(*f)); 3171 3172 f->filter_id = i; 3173 f->val.sip = p->sip; 3174 f->mask.sip = p->sip_mask; 3175 f->val.dip = p->dip; 3176 f->mask.dip = p->dip ? 0xffffffff : 0; 3177 f->val.sport = p->sport; 3178 f->mask.sport = p->sport ? 0xffff : 0; 3179 f->val.dport = p->dport; 3180 f->mask.dport = p->dport ? 0xffff : 0; 3181 f->val.vlan = p->vlan == 0xfff ? 0 : p->vlan; 3182 f->mask.vlan = p->vlan == 0xfff ? 0 : 0xfff; 3183 f->val.vlan_prio = p->vlan_prio == FILTER_NO_VLAN_PRI ? 3184 0 : p->vlan_prio; 3185 f->mask.vlan_prio = p->vlan_prio == FILTER_NO_VLAN_PRI ? 3186 0 : FILTER_NO_VLAN_PRI; 3187 f->mac_hit = p->mac_hit; 3188 f->mac_addr_idx = p->mac_vld ? p->mac_idx : 0xffff; 3189 f->proto = p->pkt_type; 3190 f->want_filter_id = p->report_filter_id; 3191 f->pass = p->pass; 3192 f->rss = p->rss; 3193 f->qset = p->qset; 3194 3195 break; 3196 } 3197 3198 if (i == nfilters) 3199 f->filter_id = 0xffffffff; 3200 break; 3201 } 3202 default: 3203 return (EOPNOTSUPP); 3204 break; 3205 } 3206 3207 return (error); 3208 } 3209 3210 static __inline void 3211 reg_block_dump(struct adapter *ap, uint8_t *buf, unsigned int start, 3212 unsigned int end) 3213 { 3214 uint32_t *p = (uint32_t *)(buf + start); 3215 3216 for ( ; start <= end; start += sizeof(uint32_t)) 3217 *p++ = t3_read_reg(ap, start); 3218 } 3219 3220 #define T3_REGMAP_SIZE (3 * 1024) 3221 static int 3222 cxgb_get_regs_len(void) 3223 { 3224 return T3_REGMAP_SIZE; 3225 } 3226 3227 static void 3228 cxgb_get_regs(adapter_t *sc, struct ch_ifconf_regs *regs, uint8_t *buf) 3229 { 3230 3231 /* 3232 * Version scheme: 3233 * bits 0..9: chip version 3234 * bits 10..15: chip revision 3235 * bit 31: set for PCIe cards 3236 */ 3237 regs->version = 3 | (sc->params.rev << 10) | (is_pcie(sc) << 31); 3238 3239 /* 3240 * We skip the MAC statistics registers because they are clear-on-read. 3241 * Also reading multi-register stats would need to synchronize with the 3242 * periodic mac stats accumulation. Hard to justify the complexity. 3243 */ 3244 memset(buf, 0, cxgb_get_regs_len()); 3245 reg_block_dump(sc, buf, 0, A_SG_RSPQ_CREDIT_RETURN); 3246 reg_block_dump(sc, buf, A_SG_HI_DRB_HI_THRSH, A_ULPRX_PBL_ULIMIT); 3247 reg_block_dump(sc, buf, A_ULPTX_CONFIG, A_MPS_INT_CAUSE); 3248 reg_block_dump(sc, buf, A_CPL_SWITCH_CNTRL, A_CPL_MAP_TBL_DATA); 3249 reg_block_dump(sc, buf, A_SMB_GLOBAL_TIME_CFG, A_XGM_SERDES_STAT3); 3250 reg_block_dump(sc, buf, A_XGM_SERDES_STATUS0, 3251 XGM_REG(A_XGM_SERDES_STAT3, 1)); 3252 reg_block_dump(sc, buf, XGM_REG(A_XGM_SERDES_STATUS0, 1), 3253 XGM_REG(A_XGM_RX_SPI4_SOP_EOP_CNT, 1)); 3254 } 3255 3256 static int 3257 alloc_filters(struct adapter *sc) 3258 { 3259 struct filter_info *p; 3260 unsigned int nfilters = sc->params.mc5.nfilters; 3261 3262 if (nfilters == 0) 3263 return (0); 3264 3265 p = malloc(sizeof(*p) * nfilters, M_DEVBUF, M_WAITOK | M_ZERO); 3266 sc->filters = p; 3267 3268 p = &sc->filters[nfilters - 1]; 3269 p->vlan = 0xfff; 3270 p->vlan_prio = FILTER_NO_VLAN_PRI; 3271 p->pass = p->rss = p->valid = p->locked = 1; 3272 3273 return (0); 3274 } 3275 3276 static int 3277 setup_hw_filters(struct adapter *sc) 3278 { 3279 int i, rc; 3280 unsigned int nfilters = sc->params.mc5.nfilters; 3281 3282 if (!sc->filters) 3283 return (0); 3284 3285 t3_enable_filters(sc); 3286 3287 for (i = rc = 0; i < nfilters && !rc; i++) { 3288 if (sc->filters[i].locked) 3289 rc = set_filter(sc, i, &sc->filters[i]); 3290 } 3291 3292 return (rc); 3293 } 3294 3295 static int 3296 set_filter(struct adapter *sc, int id, const struct filter_info *f) 3297 { 3298 int len; 3299 struct mbuf *m; 3300 struct ulp_txpkt *txpkt; 3301 struct work_request_hdr *wr; 3302 struct cpl_pass_open_req *oreq; 3303 struct cpl_set_tcb_field *sreq; 3304 3305 len = sizeof(*wr) + sizeof(*oreq) + 2 * sizeof(*sreq); 3306 KASSERT(len <= MHLEN, ("filter request too big for an mbuf")); 3307 3308 id += t3_mc5_size(&sc->mc5) - sc->params.mc5.nroutes - 3309 sc->params.mc5.nfilters; 3310 3311 m = m_gethdr(M_WAITOK, MT_DATA); 3312 m->m_len = m->m_pkthdr.len = len; 3313 bzero(mtod(m, char *), len); 3314 3315 wr = mtod(m, struct work_request_hdr *); 3316 wr->wrh_hi = htonl(V_WR_OP(FW_WROPCODE_BYPASS) | F_WR_ATOMIC); 3317 3318 oreq = (struct cpl_pass_open_req *)(wr + 1); 3319 txpkt = (struct ulp_txpkt *)oreq; 3320 txpkt->cmd_dest = htonl(V_ULPTX_CMD(ULP_TXPKT)); 3321 txpkt->len = htonl(V_ULPTX_NFLITS(sizeof(*oreq) / 8)); 3322 OPCODE_TID(oreq) = htonl(MK_OPCODE_TID(CPL_PASS_OPEN_REQ, id)); 3323 oreq->local_port = htons(f->dport); 3324 oreq->peer_port = htons(f->sport); 3325 oreq->local_ip = htonl(f->dip); 3326 oreq->peer_ip = htonl(f->sip); 3327 oreq->peer_netmask = htonl(f->sip_mask); 3328 oreq->opt0h = 0; 3329 oreq->opt0l = htonl(F_NO_OFFLOAD); 3330 oreq->opt1 = htonl(V_MAC_MATCH_VALID(f->mac_vld) | 3331 V_CONN_POLICY(CPL_CONN_POLICY_FILTER) | 3332 V_VLAN_PRI(f->vlan_prio >> 1) | 3333 V_VLAN_PRI_VALID(f->vlan_prio != FILTER_NO_VLAN_PRI) | 3334 V_PKT_TYPE(f->pkt_type) | V_OPT1_VLAN(f->vlan) | 3335 V_MAC_MATCH(f->mac_idx | (f->mac_hit << 4))); 3336 3337 sreq = (struct cpl_set_tcb_field *)(oreq + 1); 3338 set_tcb_field_ulp(sreq, id, 1, 0x1800808000ULL, 3339 (f->report_filter_id << 15) | (1 << 23) | 3340 ((u64)f->pass << 35) | ((u64)!f->rss << 36)); 3341 set_tcb_field_ulp(sreq + 1, id, 0, 0xffffffff, (2 << 19) | 1); 3342 t3_mgmt_tx(sc, m); 3343 3344 if (f->pass && !f->rss) { 3345 len = sizeof(*sreq); 3346 m = m_gethdr(M_WAITOK, MT_DATA); 3347 m->m_len = m->m_pkthdr.len = len; 3348 bzero(mtod(m, char *), len); 3349 sreq = mtod(m, struct cpl_set_tcb_field *); 3350 sreq->wr.wrh_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); 3351 mk_set_tcb_field(sreq, id, 25, 0x3f80000, 3352 (u64)sc->rrss_map[f->qset] << 19); 3353 t3_mgmt_tx(sc, m); 3354 } 3355 return 0; 3356 } 3357 3358 static inline void 3359 mk_set_tcb_field(struct cpl_set_tcb_field *req, unsigned int tid, 3360 unsigned int word, u64 mask, u64 val) 3361 { 3362 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, tid)); 3363 req->reply = V_NO_REPLY(1); 3364 req->cpu_idx = 0; 3365 req->word = htons(word); 3366 req->mask = htobe64(mask); 3367 req->val = htobe64(val); 3368 } 3369 3370 static inline void 3371 set_tcb_field_ulp(struct cpl_set_tcb_field *req, unsigned int tid, 3372 unsigned int word, u64 mask, u64 val) 3373 { 3374 struct ulp_txpkt *txpkt = (struct ulp_txpkt *)req; 3375 3376 txpkt->cmd_dest = htonl(V_ULPTX_CMD(ULP_TXPKT)); 3377 txpkt->len = htonl(V_ULPTX_NFLITS(sizeof(*req) / 8)); 3378 mk_set_tcb_field(req, tid, word, mask, val); 3379 } 3380