1 /***************************************************************************** 2 * * 3 * File: cxgb2.c * 4 * $Revision: 1.25 $ * 5 * $Date: 2005/06/22 00:43:25 $ * 6 * Description: * 7 * Chelsio 10Gb Ethernet Driver. * 8 * * 9 * This program is free software; you can redistribute it and/or modify * 10 * it under the terms of the GNU General Public License, version 2, as * 11 * published by the Free Software Foundation. * 12 * * 13 * You should have received a copy of the GNU General Public License along * 14 * with this program; if not, see <http://www.gnu.org/licenses/>. * 15 * * 16 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * 17 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * 19 * * 20 * http://www.chelsio.com * 21 * * 22 * Copyright (c) 2003 - 2005 Chelsio Communications, Inc. * 23 * All rights reserved. * 24 * * 25 * Maintainers: maintainers@chelsio.com * 26 * * 27 * Authors: Dimitrios Michailidis <dm@chelsio.com> * 28 * Tina Yang <tainay@chelsio.com> * 29 * Felix Marti <felix@chelsio.com> * 30 * Scott Bardone <sbardone@chelsio.com> * 31 * Kurt Ottaway <kottaway@chelsio.com> * 32 * Frank DiMambro <frank@chelsio.com> * 33 * * 34 * History: * 35 * * 36 ****************************************************************************/ 37 38 #include "common.h" 39 #include <linux/module.h> 40 #include <linux/pci.h> 41 #include <linux/netdevice.h> 42 #include <linux/etherdevice.h> 43 #include <linux/if_vlan.h> 44 #include <linux/mii.h> 45 #include <linux/sockios.h> 46 #include <linux/dma-mapping.h> 47 #include <linux/uaccess.h> 48 49 #include "cpl5_cmd.h" 50 #include "regs.h" 51 #include "gmac.h" 52 #include "cphy.h" 53 #include "sge.h" 54 #include "tp.h" 55 #include "espi.h" 56 #include "elmer0.h" 57 58 #include <linux/workqueue.h> 59 60 static inline void schedule_mac_stats_update(struct adapter *ap, int secs) 61 { 62 schedule_delayed_work(&ap->stats_update_task, secs * HZ); 63 } 64 65 static inline void cancel_mac_stats_update(struct adapter *ap) 66 { 67 cancel_delayed_work(&ap->stats_update_task); 68 } 69 70 #define MAX_CMDQ_ENTRIES 16384 71 #define MAX_CMDQ1_ENTRIES 1024 72 #define MAX_RX_BUFFERS 16384 73 #define MAX_RX_JUMBO_BUFFERS 16384 74 #define MAX_TX_BUFFERS_HIGH 16384U 75 #define MAX_TX_BUFFERS_LOW 1536U 76 #define MAX_TX_BUFFERS 1460U 77 #define MIN_FL_ENTRIES 32 78 79 #define DFLT_MSG_ENABLE (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK | \ 80 NETIF_MSG_TIMER | NETIF_MSG_IFDOWN | NETIF_MSG_IFUP |\ 81 NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR) 82 83 /* 84 * The EEPROM is actually bigger but only the first few bytes are used so we 85 * only report those. 86 */ 87 #define EEPROM_SIZE 32 88 89 MODULE_DESCRIPTION(DRV_DESCRIPTION); 90 MODULE_AUTHOR("Chelsio Communications"); 91 MODULE_LICENSE("GPL"); 92 93 static int dflt_msg_enable = DFLT_MSG_ENABLE; 94 95 module_param(dflt_msg_enable, int, 0); 96 MODULE_PARM_DESC(dflt_msg_enable, "Chelsio T1 default message enable bitmap"); 97 98 #define HCLOCK 0x0 99 #define LCLOCK 0x1 100 101 /* T1 cards powersave mode */ 102 static int t1_clock(struct adapter *adapter, int mode); 103 static int t1powersave = 1; /* HW default is powersave mode. */ 104 105 module_param(t1powersave, int, 0); 106 MODULE_PARM_DESC(t1powersave, "Enable/Disable T1 powersaving mode"); 107 108 static int disable_msi = 0; 109 module_param(disable_msi, int, 0); 110 MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)"); 111 112 static const char pci_speed[][4] = { 113 "33", "66", "100", "133" 114 }; 115 116 /* 117 * Setup MAC to receive the types of packets we want. 118 */ 119 static void t1_set_rxmode(struct net_device *dev) 120 { 121 struct adapter *adapter = dev->ml_priv; 122 struct cmac *mac = adapter->port[dev->if_port].mac; 123 struct t1_rx_mode rm; 124 125 rm.dev = dev; 126 mac->ops->set_rx_mode(mac, &rm); 127 } 128 129 static void link_report(struct port_info *p) 130 { 131 if (!netif_carrier_ok(p->dev)) 132 netdev_info(p->dev, "link down\n"); 133 else { 134 const char *s = "10Mbps"; 135 136 switch (p->link_config.speed) { 137 case SPEED_10000: s = "10Gbps"; break; 138 case SPEED_1000: s = "1000Mbps"; break; 139 case SPEED_100: s = "100Mbps"; break; 140 } 141 142 netdev_info(p->dev, "link up, %s, %s-duplex\n", 143 s, p->link_config.duplex == DUPLEX_FULL 144 ? "full" : "half"); 145 } 146 } 147 148 void t1_link_negotiated(struct adapter *adapter, int port_id, int link_stat, 149 int speed, int duplex, int pause) 150 { 151 struct port_info *p = &adapter->port[port_id]; 152 153 if (link_stat != netif_carrier_ok(p->dev)) { 154 if (link_stat) 155 netif_carrier_on(p->dev); 156 else 157 netif_carrier_off(p->dev); 158 link_report(p); 159 160 /* multi-ports: inform toe */ 161 if ((speed > 0) && (adapter->params.nports > 1)) { 162 unsigned int sched_speed = 10; 163 switch (speed) { 164 case SPEED_1000: 165 sched_speed = 1000; 166 break; 167 case SPEED_100: 168 sched_speed = 100; 169 break; 170 case SPEED_10: 171 sched_speed = 10; 172 break; 173 } 174 t1_sched_update_parms(adapter->sge, port_id, 0, sched_speed); 175 } 176 } 177 } 178 179 static void link_start(struct port_info *p) 180 { 181 struct cmac *mac = p->mac; 182 183 mac->ops->reset(mac); 184 if (mac->ops->macaddress_set) 185 mac->ops->macaddress_set(mac, p->dev->dev_addr); 186 t1_set_rxmode(p->dev); 187 t1_link_start(p->phy, mac, &p->link_config); 188 mac->ops->enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX); 189 } 190 191 static void enable_hw_csum(struct adapter *adapter) 192 { 193 if (adapter->port[0].dev->hw_features & NETIF_F_TSO) 194 t1_tp_set_ip_checksum_offload(adapter->tp, 1); /* for TSO only */ 195 t1_tp_set_tcp_checksum_offload(adapter->tp, 1); 196 } 197 198 /* 199 * Things to do upon first use of a card. 200 * This must run with the rtnl lock held. 201 */ 202 static int cxgb_up(struct adapter *adapter) 203 { 204 int err = 0; 205 206 if (!(adapter->flags & FULL_INIT_DONE)) { 207 err = t1_init_hw_modules(adapter); 208 if (err) 209 goto out_err; 210 211 enable_hw_csum(adapter); 212 adapter->flags |= FULL_INIT_DONE; 213 } 214 215 t1_interrupts_clear(adapter); 216 217 adapter->params.has_msi = !disable_msi && !pci_enable_msi(adapter->pdev); 218 err = request_irq(adapter->pdev->irq, t1_interrupt, 219 adapter->params.has_msi ? 0 : IRQF_SHARED, 220 adapter->name, adapter); 221 if (err) { 222 if (adapter->params.has_msi) 223 pci_disable_msi(adapter->pdev); 224 225 goto out_err; 226 } 227 228 t1_sge_start(adapter->sge); 229 t1_interrupts_enable(adapter); 230 out_err: 231 return err; 232 } 233 234 /* 235 * Release resources when all the ports have been stopped. 236 */ 237 static void cxgb_down(struct adapter *adapter) 238 { 239 t1_sge_stop(adapter->sge); 240 t1_interrupts_disable(adapter); 241 free_irq(adapter->pdev->irq, adapter); 242 if (adapter->params.has_msi) 243 pci_disable_msi(adapter->pdev); 244 } 245 246 static int cxgb_open(struct net_device *dev) 247 { 248 int err; 249 struct adapter *adapter = dev->ml_priv; 250 int other_ports = adapter->open_device_map & PORT_MASK; 251 252 napi_enable(&adapter->napi); 253 if (!adapter->open_device_map && (err = cxgb_up(adapter)) < 0) { 254 napi_disable(&adapter->napi); 255 return err; 256 } 257 258 __set_bit(dev->if_port, &adapter->open_device_map); 259 link_start(&adapter->port[dev->if_port]); 260 netif_start_queue(dev); 261 if (!other_ports && adapter->params.stats_update_period) 262 schedule_mac_stats_update(adapter, 263 adapter->params.stats_update_period); 264 265 t1_vlan_mode(adapter, dev->features); 266 return 0; 267 } 268 269 static int cxgb_close(struct net_device *dev) 270 { 271 struct adapter *adapter = dev->ml_priv; 272 struct port_info *p = &adapter->port[dev->if_port]; 273 struct cmac *mac = p->mac; 274 275 netif_stop_queue(dev); 276 napi_disable(&adapter->napi); 277 mac->ops->disable(mac, MAC_DIRECTION_TX | MAC_DIRECTION_RX); 278 netif_carrier_off(dev); 279 280 clear_bit(dev->if_port, &adapter->open_device_map); 281 if (adapter->params.stats_update_period && 282 !(adapter->open_device_map & PORT_MASK)) { 283 /* Stop statistics accumulation. */ 284 smp_mb__after_atomic(); 285 spin_lock(&adapter->work_lock); /* sync with update task */ 286 spin_unlock(&adapter->work_lock); 287 cancel_mac_stats_update(adapter); 288 } 289 290 if (!adapter->open_device_map) 291 cxgb_down(adapter); 292 return 0; 293 } 294 295 static struct net_device_stats *t1_get_stats(struct net_device *dev) 296 { 297 struct adapter *adapter = dev->ml_priv; 298 struct port_info *p = &adapter->port[dev->if_port]; 299 struct net_device_stats *ns = &dev->stats; 300 const struct cmac_statistics *pstats; 301 302 /* Do a full update of the MAC stats */ 303 pstats = p->mac->ops->statistics_update(p->mac, 304 MAC_STATS_UPDATE_FULL); 305 306 ns->tx_packets = pstats->TxUnicastFramesOK + 307 pstats->TxMulticastFramesOK + pstats->TxBroadcastFramesOK; 308 309 ns->rx_packets = pstats->RxUnicastFramesOK + 310 pstats->RxMulticastFramesOK + pstats->RxBroadcastFramesOK; 311 312 ns->tx_bytes = pstats->TxOctetsOK; 313 ns->rx_bytes = pstats->RxOctetsOK; 314 315 ns->tx_errors = pstats->TxLateCollisions + pstats->TxLengthErrors + 316 pstats->TxUnderrun + pstats->TxFramesAbortedDueToXSCollisions; 317 ns->rx_errors = pstats->RxDataErrors + pstats->RxJabberErrors + 318 pstats->RxFCSErrors + pstats->RxAlignErrors + 319 pstats->RxSequenceErrors + pstats->RxFrameTooLongErrors + 320 pstats->RxSymbolErrors + pstats->RxRuntErrors; 321 322 ns->multicast = pstats->RxMulticastFramesOK; 323 ns->collisions = pstats->TxTotalCollisions; 324 325 /* detailed rx_errors */ 326 ns->rx_length_errors = pstats->RxFrameTooLongErrors + 327 pstats->RxJabberErrors; 328 ns->rx_over_errors = 0; 329 ns->rx_crc_errors = pstats->RxFCSErrors; 330 ns->rx_frame_errors = pstats->RxAlignErrors; 331 ns->rx_fifo_errors = 0; 332 ns->rx_missed_errors = 0; 333 334 /* detailed tx_errors */ 335 ns->tx_aborted_errors = pstats->TxFramesAbortedDueToXSCollisions; 336 ns->tx_carrier_errors = 0; 337 ns->tx_fifo_errors = pstats->TxUnderrun; 338 ns->tx_heartbeat_errors = 0; 339 ns->tx_window_errors = pstats->TxLateCollisions; 340 return ns; 341 } 342 343 static u32 get_msglevel(struct net_device *dev) 344 { 345 struct adapter *adapter = dev->ml_priv; 346 347 return adapter->msg_enable; 348 } 349 350 static void set_msglevel(struct net_device *dev, u32 val) 351 { 352 struct adapter *adapter = dev->ml_priv; 353 354 adapter->msg_enable = val; 355 } 356 357 static const char stats_strings[][ETH_GSTRING_LEN] = { 358 "TxOctetsOK", 359 "TxOctetsBad", 360 "TxUnicastFramesOK", 361 "TxMulticastFramesOK", 362 "TxBroadcastFramesOK", 363 "TxPauseFrames", 364 "TxFramesWithDeferredXmissions", 365 "TxLateCollisions", 366 "TxTotalCollisions", 367 "TxFramesAbortedDueToXSCollisions", 368 "TxUnderrun", 369 "TxLengthErrors", 370 "TxInternalMACXmitError", 371 "TxFramesWithExcessiveDeferral", 372 "TxFCSErrors", 373 "TxJumboFramesOk", 374 "TxJumboOctetsOk", 375 376 "RxOctetsOK", 377 "RxOctetsBad", 378 "RxUnicastFramesOK", 379 "RxMulticastFramesOK", 380 "RxBroadcastFramesOK", 381 "RxPauseFrames", 382 "RxFCSErrors", 383 "RxAlignErrors", 384 "RxSymbolErrors", 385 "RxDataErrors", 386 "RxSequenceErrors", 387 "RxRuntErrors", 388 "RxJabberErrors", 389 "RxInternalMACRcvError", 390 "RxInRangeLengthErrors", 391 "RxOutOfRangeLengthField", 392 "RxFrameTooLongErrors", 393 "RxJumboFramesOk", 394 "RxJumboOctetsOk", 395 396 /* Port stats */ 397 "RxCsumGood", 398 "TxCsumOffload", 399 "TxTso", 400 "RxVlan", 401 "TxVlan", 402 "TxNeedHeadroom", 403 404 /* Interrupt stats */ 405 "rx drops", 406 "pure_rsps", 407 "unhandled irqs", 408 "respQ_empty", 409 "respQ_overflow", 410 "freelistQ_empty", 411 "pkt_too_big", 412 "pkt_mismatch", 413 "cmdQ_full0", 414 "cmdQ_full1", 415 416 "espi_DIP2ParityErr", 417 "espi_DIP4Err", 418 "espi_RxDrops", 419 "espi_TxDrops", 420 "espi_RxOvfl", 421 "espi_ParityErr" 422 }; 423 424 #define T2_REGMAP_SIZE (3 * 1024) 425 426 static int get_regs_len(struct net_device *dev) 427 { 428 return T2_REGMAP_SIZE; 429 } 430 431 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 432 { 433 struct adapter *adapter = dev->ml_priv; 434 435 strlcpy(info->driver, DRV_NAME, sizeof(info->driver)); 436 strlcpy(info->version, DRV_VERSION, sizeof(info->version)); 437 strlcpy(info->bus_info, pci_name(adapter->pdev), 438 sizeof(info->bus_info)); 439 } 440 441 static int get_sset_count(struct net_device *dev, int sset) 442 { 443 switch (sset) { 444 case ETH_SS_STATS: 445 return ARRAY_SIZE(stats_strings); 446 default: 447 return -EOPNOTSUPP; 448 } 449 } 450 451 static void get_strings(struct net_device *dev, u32 stringset, u8 *data) 452 { 453 if (stringset == ETH_SS_STATS) 454 memcpy(data, stats_strings, sizeof(stats_strings)); 455 } 456 457 static void get_stats(struct net_device *dev, struct ethtool_stats *stats, 458 u64 *data) 459 { 460 struct adapter *adapter = dev->ml_priv; 461 struct cmac *mac = adapter->port[dev->if_port].mac; 462 const struct cmac_statistics *s; 463 const struct sge_intr_counts *t; 464 struct sge_port_stats ss; 465 466 s = mac->ops->statistics_update(mac, MAC_STATS_UPDATE_FULL); 467 t = t1_sge_get_intr_counts(adapter->sge); 468 t1_sge_get_port_stats(adapter->sge, dev->if_port, &ss); 469 470 *data++ = s->TxOctetsOK; 471 *data++ = s->TxOctetsBad; 472 *data++ = s->TxUnicastFramesOK; 473 *data++ = s->TxMulticastFramesOK; 474 *data++ = s->TxBroadcastFramesOK; 475 *data++ = s->TxPauseFrames; 476 *data++ = s->TxFramesWithDeferredXmissions; 477 *data++ = s->TxLateCollisions; 478 *data++ = s->TxTotalCollisions; 479 *data++ = s->TxFramesAbortedDueToXSCollisions; 480 *data++ = s->TxUnderrun; 481 *data++ = s->TxLengthErrors; 482 *data++ = s->TxInternalMACXmitError; 483 *data++ = s->TxFramesWithExcessiveDeferral; 484 *data++ = s->TxFCSErrors; 485 *data++ = s->TxJumboFramesOK; 486 *data++ = s->TxJumboOctetsOK; 487 488 *data++ = s->RxOctetsOK; 489 *data++ = s->RxOctetsBad; 490 *data++ = s->RxUnicastFramesOK; 491 *data++ = s->RxMulticastFramesOK; 492 *data++ = s->RxBroadcastFramesOK; 493 *data++ = s->RxPauseFrames; 494 *data++ = s->RxFCSErrors; 495 *data++ = s->RxAlignErrors; 496 *data++ = s->RxSymbolErrors; 497 *data++ = s->RxDataErrors; 498 *data++ = s->RxSequenceErrors; 499 *data++ = s->RxRuntErrors; 500 *data++ = s->RxJabberErrors; 501 *data++ = s->RxInternalMACRcvError; 502 *data++ = s->RxInRangeLengthErrors; 503 *data++ = s->RxOutOfRangeLengthField; 504 *data++ = s->RxFrameTooLongErrors; 505 *data++ = s->RxJumboFramesOK; 506 *data++ = s->RxJumboOctetsOK; 507 508 *data++ = ss.rx_cso_good; 509 *data++ = ss.tx_cso; 510 *data++ = ss.tx_tso; 511 *data++ = ss.vlan_xtract; 512 *data++ = ss.vlan_insert; 513 *data++ = ss.tx_need_hdrroom; 514 515 *data++ = t->rx_drops; 516 *data++ = t->pure_rsps; 517 *data++ = t->unhandled_irqs; 518 *data++ = t->respQ_empty; 519 *data++ = t->respQ_overflow; 520 *data++ = t->freelistQ_empty; 521 *data++ = t->pkt_too_big; 522 *data++ = t->pkt_mismatch; 523 *data++ = t->cmdQ_full[0]; 524 *data++ = t->cmdQ_full[1]; 525 526 if (adapter->espi) { 527 const struct espi_intr_counts *e; 528 529 e = t1_espi_get_intr_counts(adapter->espi); 530 *data++ = e->DIP2_parity_err; 531 *data++ = e->DIP4_err; 532 *data++ = e->rx_drops; 533 *data++ = e->tx_drops; 534 *data++ = e->rx_ovflw; 535 *data++ = e->parity_err; 536 } 537 } 538 539 static inline void reg_block_dump(struct adapter *ap, void *buf, 540 unsigned int start, unsigned int end) 541 { 542 u32 *p = buf + start; 543 544 for ( ; start <= end; start += sizeof(u32)) 545 *p++ = readl(ap->regs + start); 546 } 547 548 static void get_regs(struct net_device *dev, struct ethtool_regs *regs, 549 void *buf) 550 { 551 struct adapter *ap = dev->ml_priv; 552 553 /* 554 * Version scheme: bits 0..9: chip version, bits 10..15: chip revision 555 */ 556 regs->version = 2; 557 558 memset(buf, 0, T2_REGMAP_SIZE); 559 reg_block_dump(ap, buf, 0, A_SG_RESPACCUTIMER); 560 reg_block_dump(ap, buf, A_MC3_CFG, A_MC4_INT_CAUSE); 561 reg_block_dump(ap, buf, A_TPI_ADDR, A_TPI_PAR); 562 reg_block_dump(ap, buf, A_TP_IN_CONFIG, A_TP_TX_DROP_COUNT); 563 reg_block_dump(ap, buf, A_RAT_ROUTE_CONTROL, A_RAT_INTR_CAUSE); 564 reg_block_dump(ap, buf, A_CSPI_RX_AE_WM, A_CSPI_INTR_ENABLE); 565 reg_block_dump(ap, buf, A_ESPI_SCH_TOKEN0, A_ESPI_GOSTAT); 566 reg_block_dump(ap, buf, A_ULP_ULIMIT, A_ULP_PIO_CTRL); 567 reg_block_dump(ap, buf, A_PL_ENABLE, A_PL_CAUSE); 568 reg_block_dump(ap, buf, A_MC5_CONFIG, A_MC5_MASK_WRITE_CMD); 569 } 570 571 static int get_link_ksettings(struct net_device *dev, 572 struct ethtool_link_ksettings *cmd) 573 { 574 struct adapter *adapter = dev->ml_priv; 575 struct port_info *p = &adapter->port[dev->if_port]; 576 u32 supported, advertising; 577 578 supported = p->link_config.supported; 579 advertising = p->link_config.advertising; 580 581 if (netif_carrier_ok(dev)) { 582 cmd->base.speed = p->link_config.speed; 583 cmd->base.duplex = p->link_config.duplex; 584 } else { 585 cmd->base.speed = SPEED_UNKNOWN; 586 cmd->base.duplex = DUPLEX_UNKNOWN; 587 } 588 589 cmd->base.port = (supported & SUPPORTED_TP) ? PORT_TP : PORT_FIBRE; 590 cmd->base.phy_address = p->phy->mdio.prtad; 591 cmd->base.autoneg = p->link_config.autoneg; 592 593 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, 594 supported); 595 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, 596 advertising); 597 598 return 0; 599 } 600 601 static int speed_duplex_to_caps(int speed, int duplex) 602 { 603 int cap = 0; 604 605 switch (speed) { 606 case SPEED_10: 607 if (duplex == DUPLEX_FULL) 608 cap = SUPPORTED_10baseT_Full; 609 else 610 cap = SUPPORTED_10baseT_Half; 611 break; 612 case SPEED_100: 613 if (duplex == DUPLEX_FULL) 614 cap = SUPPORTED_100baseT_Full; 615 else 616 cap = SUPPORTED_100baseT_Half; 617 break; 618 case SPEED_1000: 619 if (duplex == DUPLEX_FULL) 620 cap = SUPPORTED_1000baseT_Full; 621 else 622 cap = SUPPORTED_1000baseT_Half; 623 break; 624 case SPEED_10000: 625 if (duplex == DUPLEX_FULL) 626 cap = SUPPORTED_10000baseT_Full; 627 } 628 return cap; 629 } 630 631 #define ADVERTISED_MASK (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | \ 632 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full | \ 633 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full | \ 634 ADVERTISED_10000baseT_Full) 635 636 static int set_link_ksettings(struct net_device *dev, 637 const struct ethtool_link_ksettings *cmd) 638 { 639 struct adapter *adapter = dev->ml_priv; 640 struct port_info *p = &adapter->port[dev->if_port]; 641 struct link_config *lc = &p->link_config; 642 u32 advertising; 643 644 ethtool_convert_link_mode_to_legacy_u32(&advertising, 645 cmd->link_modes.advertising); 646 647 if (!(lc->supported & SUPPORTED_Autoneg)) 648 return -EOPNOTSUPP; /* can't change speed/duplex */ 649 650 if (cmd->base.autoneg == AUTONEG_DISABLE) { 651 u32 speed = cmd->base.speed; 652 int cap = speed_duplex_to_caps(speed, cmd->base.duplex); 653 654 if (!(lc->supported & cap) || (speed == SPEED_1000)) 655 return -EINVAL; 656 lc->requested_speed = speed; 657 lc->requested_duplex = cmd->base.duplex; 658 lc->advertising = 0; 659 } else { 660 advertising &= ADVERTISED_MASK; 661 if (advertising & (advertising - 1)) 662 advertising = lc->supported; 663 advertising &= lc->supported; 664 if (!advertising) 665 return -EINVAL; 666 lc->requested_speed = SPEED_INVALID; 667 lc->requested_duplex = DUPLEX_INVALID; 668 lc->advertising = advertising | ADVERTISED_Autoneg; 669 } 670 lc->autoneg = cmd->base.autoneg; 671 if (netif_running(dev)) 672 t1_link_start(p->phy, p->mac, lc); 673 return 0; 674 } 675 676 static void get_pauseparam(struct net_device *dev, 677 struct ethtool_pauseparam *epause) 678 { 679 struct adapter *adapter = dev->ml_priv; 680 struct port_info *p = &adapter->port[dev->if_port]; 681 682 epause->autoneg = (p->link_config.requested_fc & PAUSE_AUTONEG) != 0; 683 epause->rx_pause = (p->link_config.fc & PAUSE_RX) != 0; 684 epause->tx_pause = (p->link_config.fc & PAUSE_TX) != 0; 685 } 686 687 static int set_pauseparam(struct net_device *dev, 688 struct ethtool_pauseparam *epause) 689 { 690 struct adapter *adapter = dev->ml_priv; 691 struct port_info *p = &adapter->port[dev->if_port]; 692 struct link_config *lc = &p->link_config; 693 694 if (epause->autoneg == AUTONEG_DISABLE) 695 lc->requested_fc = 0; 696 else if (lc->supported & SUPPORTED_Autoneg) 697 lc->requested_fc = PAUSE_AUTONEG; 698 else 699 return -EINVAL; 700 701 if (epause->rx_pause) 702 lc->requested_fc |= PAUSE_RX; 703 if (epause->tx_pause) 704 lc->requested_fc |= PAUSE_TX; 705 if (lc->autoneg == AUTONEG_ENABLE) { 706 if (netif_running(dev)) 707 t1_link_start(p->phy, p->mac, lc); 708 } else { 709 lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX); 710 if (netif_running(dev)) 711 p->mac->ops->set_speed_duplex_fc(p->mac, -1, -1, 712 lc->fc); 713 } 714 return 0; 715 } 716 717 static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e) 718 { 719 struct adapter *adapter = dev->ml_priv; 720 int jumbo_fl = t1_is_T1B(adapter) ? 1 : 0; 721 722 e->rx_max_pending = MAX_RX_BUFFERS; 723 e->rx_jumbo_max_pending = MAX_RX_JUMBO_BUFFERS; 724 e->tx_max_pending = MAX_CMDQ_ENTRIES; 725 726 e->rx_pending = adapter->params.sge.freelQ_size[!jumbo_fl]; 727 e->rx_jumbo_pending = adapter->params.sge.freelQ_size[jumbo_fl]; 728 e->tx_pending = adapter->params.sge.cmdQ_size[0]; 729 } 730 731 static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e) 732 { 733 struct adapter *adapter = dev->ml_priv; 734 int jumbo_fl = t1_is_T1B(adapter) ? 1 : 0; 735 736 if (e->rx_pending > MAX_RX_BUFFERS || e->rx_mini_pending || 737 e->rx_jumbo_pending > MAX_RX_JUMBO_BUFFERS || 738 e->tx_pending > MAX_CMDQ_ENTRIES || 739 e->rx_pending < MIN_FL_ENTRIES || 740 e->rx_jumbo_pending < MIN_FL_ENTRIES || 741 e->tx_pending < (adapter->params.nports + 1) * (MAX_SKB_FRAGS + 1)) 742 return -EINVAL; 743 744 if (adapter->flags & FULL_INIT_DONE) 745 return -EBUSY; 746 747 adapter->params.sge.freelQ_size[!jumbo_fl] = e->rx_pending; 748 adapter->params.sge.freelQ_size[jumbo_fl] = e->rx_jumbo_pending; 749 adapter->params.sge.cmdQ_size[0] = e->tx_pending; 750 adapter->params.sge.cmdQ_size[1] = e->tx_pending > MAX_CMDQ1_ENTRIES ? 751 MAX_CMDQ1_ENTRIES : e->tx_pending; 752 return 0; 753 } 754 755 static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c) 756 { 757 struct adapter *adapter = dev->ml_priv; 758 759 adapter->params.sge.rx_coalesce_usecs = c->rx_coalesce_usecs; 760 adapter->params.sge.coalesce_enable = c->use_adaptive_rx_coalesce; 761 adapter->params.sge.sample_interval_usecs = c->rate_sample_interval; 762 t1_sge_set_coalesce_params(adapter->sge, &adapter->params.sge); 763 return 0; 764 } 765 766 static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c) 767 { 768 struct adapter *adapter = dev->ml_priv; 769 770 c->rx_coalesce_usecs = adapter->params.sge.rx_coalesce_usecs; 771 c->rate_sample_interval = adapter->params.sge.sample_interval_usecs; 772 c->use_adaptive_rx_coalesce = adapter->params.sge.coalesce_enable; 773 return 0; 774 } 775 776 static int get_eeprom_len(struct net_device *dev) 777 { 778 struct adapter *adapter = dev->ml_priv; 779 780 return t1_is_asic(adapter) ? EEPROM_SIZE : 0; 781 } 782 783 #define EEPROM_MAGIC(ap) \ 784 (PCI_VENDOR_ID_CHELSIO | ((ap)->params.chip_version << 16)) 785 786 static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e, 787 u8 *data) 788 { 789 int i; 790 u8 buf[EEPROM_SIZE] __attribute__((aligned(4))); 791 struct adapter *adapter = dev->ml_priv; 792 793 e->magic = EEPROM_MAGIC(adapter); 794 for (i = e->offset & ~3; i < e->offset + e->len; i += sizeof(u32)) 795 t1_seeprom_read(adapter, i, (__le32 *)&buf[i]); 796 memcpy(data, buf + e->offset, e->len); 797 return 0; 798 } 799 800 static const struct ethtool_ops t1_ethtool_ops = { 801 .get_drvinfo = get_drvinfo, 802 .get_msglevel = get_msglevel, 803 .set_msglevel = set_msglevel, 804 .get_ringparam = get_sge_param, 805 .set_ringparam = set_sge_param, 806 .get_coalesce = get_coalesce, 807 .set_coalesce = set_coalesce, 808 .get_eeprom_len = get_eeprom_len, 809 .get_eeprom = get_eeprom, 810 .get_pauseparam = get_pauseparam, 811 .set_pauseparam = set_pauseparam, 812 .get_link = ethtool_op_get_link, 813 .get_strings = get_strings, 814 .get_sset_count = get_sset_count, 815 .get_ethtool_stats = get_stats, 816 .get_regs_len = get_regs_len, 817 .get_regs = get_regs, 818 .get_link_ksettings = get_link_ksettings, 819 .set_link_ksettings = set_link_ksettings, 820 }; 821 822 static int t1_ioctl(struct net_device *dev, struct ifreq *req, int cmd) 823 { 824 struct adapter *adapter = dev->ml_priv; 825 struct mdio_if_info *mdio = &adapter->port[dev->if_port].phy->mdio; 826 827 return mdio_mii_ioctl(mdio, if_mii(req), cmd); 828 } 829 830 static int t1_change_mtu(struct net_device *dev, int new_mtu) 831 { 832 int ret; 833 struct adapter *adapter = dev->ml_priv; 834 struct cmac *mac = adapter->port[dev->if_port].mac; 835 836 if (!mac->ops->set_mtu) 837 return -EOPNOTSUPP; 838 if ((ret = mac->ops->set_mtu(mac, new_mtu))) 839 return ret; 840 dev->mtu = new_mtu; 841 return 0; 842 } 843 844 static int t1_set_mac_addr(struct net_device *dev, void *p) 845 { 846 struct adapter *adapter = dev->ml_priv; 847 struct cmac *mac = adapter->port[dev->if_port].mac; 848 struct sockaddr *addr = p; 849 850 if (!mac->ops->macaddress_set) 851 return -EOPNOTSUPP; 852 853 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); 854 mac->ops->macaddress_set(mac, dev->dev_addr); 855 return 0; 856 } 857 858 static netdev_features_t t1_fix_features(struct net_device *dev, 859 netdev_features_t features) 860 { 861 /* 862 * Since there is no support for separate rx/tx vlan accel 863 * enable/disable make sure tx flag is always in same state as rx. 864 */ 865 if (features & NETIF_F_HW_VLAN_CTAG_RX) 866 features |= NETIF_F_HW_VLAN_CTAG_TX; 867 else 868 features &= ~NETIF_F_HW_VLAN_CTAG_TX; 869 870 return features; 871 } 872 873 static int t1_set_features(struct net_device *dev, netdev_features_t features) 874 { 875 netdev_features_t changed = dev->features ^ features; 876 struct adapter *adapter = dev->ml_priv; 877 878 if (changed & NETIF_F_HW_VLAN_CTAG_RX) 879 t1_vlan_mode(adapter, features); 880 881 return 0; 882 } 883 #ifdef CONFIG_NET_POLL_CONTROLLER 884 static void t1_netpoll(struct net_device *dev) 885 { 886 unsigned long flags; 887 struct adapter *adapter = dev->ml_priv; 888 889 local_irq_save(flags); 890 t1_interrupt(adapter->pdev->irq, adapter); 891 local_irq_restore(flags); 892 } 893 #endif 894 895 /* 896 * Periodic accumulation of MAC statistics. This is used only if the MAC 897 * does not have any other way to prevent stats counter overflow. 898 */ 899 static void mac_stats_task(struct work_struct *work) 900 { 901 int i; 902 struct adapter *adapter = 903 container_of(work, struct adapter, stats_update_task.work); 904 905 for_each_port(adapter, i) { 906 struct port_info *p = &adapter->port[i]; 907 908 if (netif_running(p->dev)) 909 p->mac->ops->statistics_update(p->mac, 910 MAC_STATS_UPDATE_FAST); 911 } 912 913 /* Schedule the next statistics update if any port is active. */ 914 spin_lock(&adapter->work_lock); 915 if (adapter->open_device_map & PORT_MASK) 916 schedule_mac_stats_update(adapter, 917 adapter->params.stats_update_period); 918 spin_unlock(&adapter->work_lock); 919 } 920 921 /* 922 * Processes elmer0 external interrupts in process context. 923 */ 924 static void ext_intr_task(struct work_struct *work) 925 { 926 struct adapter *adapter = 927 container_of(work, struct adapter, ext_intr_handler_task); 928 929 t1_elmer0_ext_intr_handler(adapter); 930 931 /* Now reenable external interrupts */ 932 spin_lock_irq(&adapter->async_lock); 933 adapter->slow_intr_mask |= F_PL_INTR_EXT; 934 writel(F_PL_INTR_EXT, adapter->regs + A_PL_CAUSE); 935 writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA, 936 adapter->regs + A_PL_ENABLE); 937 spin_unlock_irq(&adapter->async_lock); 938 } 939 940 /* 941 * Interrupt-context handler for elmer0 external interrupts. 942 */ 943 void t1_elmer0_ext_intr(struct adapter *adapter) 944 { 945 /* 946 * Schedule a task to handle external interrupts as we require 947 * a process context. We disable EXT interrupts in the interim 948 * and let the task reenable them when it's done. 949 */ 950 adapter->slow_intr_mask &= ~F_PL_INTR_EXT; 951 writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA, 952 adapter->regs + A_PL_ENABLE); 953 schedule_work(&adapter->ext_intr_handler_task); 954 } 955 956 void t1_fatal_err(struct adapter *adapter) 957 { 958 if (adapter->flags & FULL_INIT_DONE) { 959 t1_sge_stop(adapter->sge); 960 t1_interrupts_disable(adapter); 961 } 962 pr_alert("%s: encountered fatal error, operation suspended\n", 963 adapter->name); 964 } 965 966 static const struct net_device_ops cxgb_netdev_ops = { 967 .ndo_open = cxgb_open, 968 .ndo_stop = cxgb_close, 969 .ndo_start_xmit = t1_start_xmit, 970 .ndo_get_stats = t1_get_stats, 971 .ndo_validate_addr = eth_validate_addr, 972 .ndo_set_rx_mode = t1_set_rxmode, 973 .ndo_do_ioctl = t1_ioctl, 974 .ndo_change_mtu = t1_change_mtu, 975 .ndo_set_mac_address = t1_set_mac_addr, 976 .ndo_fix_features = t1_fix_features, 977 .ndo_set_features = t1_set_features, 978 #ifdef CONFIG_NET_POLL_CONTROLLER 979 .ndo_poll_controller = t1_netpoll, 980 #endif 981 }; 982 983 static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) 984 { 985 int i, err, pci_using_dac = 0; 986 unsigned long mmio_start, mmio_len; 987 const struct board_info *bi; 988 struct adapter *adapter = NULL; 989 struct port_info *pi; 990 991 pr_info_once("%s - version %s\n", DRV_DESCRIPTION, DRV_VERSION); 992 993 err = pci_enable_device(pdev); 994 if (err) 995 return err; 996 997 if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) { 998 pr_err("%s: cannot find PCI device memory base address\n", 999 pci_name(pdev)); 1000 err = -ENODEV; 1001 goto out_disable_pdev; 1002 } 1003 1004 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) { 1005 pci_using_dac = 1; 1006 1007 if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) { 1008 pr_err("%s: unable to obtain 64-bit DMA for " 1009 "consistent allocations\n", pci_name(pdev)); 1010 err = -ENODEV; 1011 goto out_disable_pdev; 1012 } 1013 1014 } else if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) != 0) { 1015 pr_err("%s: no usable DMA configuration\n", pci_name(pdev)); 1016 goto out_disable_pdev; 1017 } 1018 1019 err = pci_request_regions(pdev, DRV_NAME); 1020 if (err) { 1021 pr_err("%s: cannot obtain PCI resources\n", pci_name(pdev)); 1022 goto out_disable_pdev; 1023 } 1024 1025 pci_set_master(pdev); 1026 1027 mmio_start = pci_resource_start(pdev, 0); 1028 mmio_len = pci_resource_len(pdev, 0); 1029 bi = t1_get_board_info(ent->driver_data); 1030 1031 for (i = 0; i < bi->port_number; ++i) { 1032 struct net_device *netdev; 1033 1034 netdev = alloc_etherdev(adapter ? 0 : sizeof(*adapter)); 1035 if (!netdev) { 1036 err = -ENOMEM; 1037 goto out_free_dev; 1038 } 1039 1040 SET_NETDEV_DEV(netdev, &pdev->dev); 1041 1042 if (!adapter) { 1043 adapter = netdev_priv(netdev); 1044 adapter->pdev = pdev; 1045 adapter->port[0].dev = netdev; /* so we don't leak it */ 1046 1047 adapter->regs = ioremap(mmio_start, mmio_len); 1048 if (!adapter->regs) { 1049 pr_err("%s: cannot map device registers\n", 1050 pci_name(pdev)); 1051 err = -ENOMEM; 1052 goto out_free_dev; 1053 } 1054 1055 if (t1_get_board_rev(adapter, bi, &adapter->params)) { 1056 err = -ENODEV; /* Can't handle this chip rev */ 1057 goto out_free_dev; 1058 } 1059 1060 adapter->name = pci_name(pdev); 1061 adapter->msg_enable = dflt_msg_enable; 1062 adapter->mmio_len = mmio_len; 1063 1064 spin_lock_init(&adapter->tpi_lock); 1065 spin_lock_init(&adapter->work_lock); 1066 spin_lock_init(&adapter->async_lock); 1067 spin_lock_init(&adapter->mac_lock); 1068 1069 INIT_WORK(&adapter->ext_intr_handler_task, 1070 ext_intr_task); 1071 INIT_DELAYED_WORK(&adapter->stats_update_task, 1072 mac_stats_task); 1073 1074 pci_set_drvdata(pdev, netdev); 1075 } 1076 1077 pi = &adapter->port[i]; 1078 pi->dev = netdev; 1079 netif_carrier_off(netdev); 1080 netdev->irq = pdev->irq; 1081 netdev->if_port = i; 1082 netdev->mem_start = mmio_start; 1083 netdev->mem_end = mmio_start + mmio_len - 1; 1084 netdev->ml_priv = adapter; 1085 netdev->hw_features |= NETIF_F_SG | NETIF_F_IP_CSUM | 1086 NETIF_F_RXCSUM; 1087 netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM | 1088 NETIF_F_RXCSUM | NETIF_F_LLTX; 1089 1090 if (pci_using_dac) 1091 netdev->features |= NETIF_F_HIGHDMA; 1092 if (vlan_tso_capable(adapter)) { 1093 netdev->features |= 1094 NETIF_F_HW_VLAN_CTAG_TX | 1095 NETIF_F_HW_VLAN_CTAG_RX; 1096 netdev->hw_features |= NETIF_F_HW_VLAN_CTAG_RX; 1097 1098 /* T204: disable TSO */ 1099 if (!(is_T2(adapter)) || bi->port_number != 4) { 1100 netdev->hw_features |= NETIF_F_TSO; 1101 netdev->features |= NETIF_F_TSO; 1102 } 1103 } 1104 1105 netdev->netdev_ops = &cxgb_netdev_ops; 1106 netdev->hard_header_len += (netdev->hw_features & NETIF_F_TSO) ? 1107 sizeof(struct cpl_tx_pkt_lso) : sizeof(struct cpl_tx_pkt); 1108 1109 netif_napi_add(netdev, &adapter->napi, t1_poll, 64); 1110 1111 netdev->ethtool_ops = &t1_ethtool_ops; 1112 1113 switch (bi->board) { 1114 case CHBT_BOARD_CHT110: 1115 case CHBT_BOARD_N110: 1116 case CHBT_BOARD_N210: 1117 case CHBT_BOARD_CHT210: 1118 netdev->max_mtu = PM3393_MAX_FRAME_SIZE - 1119 (ETH_HLEN + ETH_FCS_LEN); 1120 break; 1121 case CHBT_BOARD_CHN204: 1122 netdev->max_mtu = VSC7326_MAX_MTU; 1123 break; 1124 default: 1125 netdev->max_mtu = ETH_DATA_LEN; 1126 break; 1127 } 1128 } 1129 1130 if (t1_init_sw_modules(adapter, bi) < 0) { 1131 err = -ENODEV; 1132 goto out_free_dev; 1133 } 1134 1135 /* 1136 * The card is now ready to go. If any errors occur during device 1137 * registration we do not fail the whole card but rather proceed only 1138 * with the ports we manage to register successfully. However we must 1139 * register at least one net device. 1140 */ 1141 for (i = 0; i < bi->port_number; ++i) { 1142 err = register_netdev(adapter->port[i].dev); 1143 if (err) 1144 pr_warn("%s: cannot register net device %s, skipping\n", 1145 pci_name(pdev), adapter->port[i].dev->name); 1146 else { 1147 /* 1148 * Change the name we use for messages to the name of 1149 * the first successfully registered interface. 1150 */ 1151 if (!adapter->registered_device_map) 1152 adapter->name = adapter->port[i].dev->name; 1153 1154 __set_bit(i, &adapter->registered_device_map); 1155 } 1156 } 1157 if (!adapter->registered_device_map) { 1158 pr_err("%s: could not register any net devices\n", 1159 pci_name(pdev)); 1160 goto out_release_adapter_res; 1161 } 1162 1163 pr_info("%s: %s (rev %d), %s %dMHz/%d-bit\n", 1164 adapter->name, bi->desc, adapter->params.chip_revision, 1165 adapter->params.pci.is_pcix ? "PCIX" : "PCI", 1166 adapter->params.pci.speed, adapter->params.pci.width); 1167 1168 /* 1169 * Set the T1B ASIC and memory clocks. 1170 */ 1171 if (t1powersave) 1172 adapter->t1powersave = LCLOCK; /* HW default is powersave mode. */ 1173 else 1174 adapter->t1powersave = HCLOCK; 1175 if (t1_is_T1B(adapter)) 1176 t1_clock(adapter, t1powersave); 1177 1178 return 0; 1179 1180 out_release_adapter_res: 1181 t1_free_sw_modules(adapter); 1182 out_free_dev: 1183 if (adapter) { 1184 if (adapter->regs) 1185 iounmap(adapter->regs); 1186 for (i = bi->port_number - 1; i >= 0; --i) 1187 if (adapter->port[i].dev) 1188 free_netdev(adapter->port[i].dev); 1189 } 1190 pci_release_regions(pdev); 1191 out_disable_pdev: 1192 pci_disable_device(pdev); 1193 return err; 1194 } 1195 1196 static void bit_bang(struct adapter *adapter, int bitdata, int nbits) 1197 { 1198 int data; 1199 int i; 1200 u32 val; 1201 1202 enum { 1203 S_CLOCK = 1 << 3, 1204 S_DATA = 1 << 4 1205 }; 1206 1207 for (i = (nbits - 1); i > -1; i--) { 1208 1209 udelay(50); 1210 1211 data = ((bitdata >> i) & 0x1); 1212 __t1_tpi_read(adapter, A_ELMER0_GPO, &val); 1213 1214 if (data) 1215 val |= S_DATA; 1216 else 1217 val &= ~S_DATA; 1218 1219 udelay(50); 1220 1221 /* Set SCLOCK low */ 1222 val &= ~S_CLOCK; 1223 __t1_tpi_write(adapter, A_ELMER0_GPO, val); 1224 1225 udelay(50); 1226 1227 /* Write SCLOCK high */ 1228 val |= S_CLOCK; 1229 __t1_tpi_write(adapter, A_ELMER0_GPO, val); 1230 1231 } 1232 } 1233 1234 static int t1_clock(struct adapter *adapter, int mode) 1235 { 1236 u32 val; 1237 int M_CORE_VAL; 1238 int M_MEM_VAL; 1239 1240 enum { 1241 M_CORE_BITS = 9, 1242 T_CORE_VAL = 0, 1243 T_CORE_BITS = 2, 1244 N_CORE_VAL = 0, 1245 N_CORE_BITS = 2, 1246 M_MEM_BITS = 9, 1247 T_MEM_VAL = 0, 1248 T_MEM_BITS = 2, 1249 N_MEM_VAL = 0, 1250 N_MEM_BITS = 2, 1251 NP_LOAD = 1 << 17, 1252 S_LOAD_MEM = 1 << 5, 1253 S_LOAD_CORE = 1 << 6, 1254 S_CLOCK = 1 << 3 1255 }; 1256 1257 if (!t1_is_T1B(adapter)) 1258 return -ENODEV; /* Can't re-clock this chip. */ 1259 1260 if (mode & 2) 1261 return 0; /* show current mode. */ 1262 1263 if ((adapter->t1powersave & 1) == (mode & 1)) 1264 return -EALREADY; /* ASIC already running in mode. */ 1265 1266 if ((mode & 1) == HCLOCK) { 1267 M_CORE_VAL = 0x14; 1268 M_MEM_VAL = 0x18; 1269 adapter->t1powersave = HCLOCK; /* overclock */ 1270 } else { 1271 M_CORE_VAL = 0xe; 1272 M_MEM_VAL = 0x10; 1273 adapter->t1powersave = LCLOCK; /* underclock */ 1274 } 1275 1276 /* Don't interrupt this serial stream! */ 1277 spin_lock(&adapter->tpi_lock); 1278 1279 /* Initialize for ASIC core */ 1280 __t1_tpi_read(adapter, A_ELMER0_GPO, &val); 1281 val |= NP_LOAD; 1282 udelay(50); 1283 __t1_tpi_write(adapter, A_ELMER0_GPO, val); 1284 udelay(50); 1285 __t1_tpi_read(adapter, A_ELMER0_GPO, &val); 1286 val &= ~S_LOAD_CORE; 1287 val &= ~S_CLOCK; 1288 __t1_tpi_write(adapter, A_ELMER0_GPO, val); 1289 udelay(50); 1290 1291 /* Serial program the ASIC clock synthesizer */ 1292 bit_bang(adapter, T_CORE_VAL, T_CORE_BITS); 1293 bit_bang(adapter, N_CORE_VAL, N_CORE_BITS); 1294 bit_bang(adapter, M_CORE_VAL, M_CORE_BITS); 1295 udelay(50); 1296 1297 /* Finish ASIC core */ 1298 __t1_tpi_read(adapter, A_ELMER0_GPO, &val); 1299 val |= S_LOAD_CORE; 1300 udelay(50); 1301 __t1_tpi_write(adapter, A_ELMER0_GPO, val); 1302 udelay(50); 1303 __t1_tpi_read(adapter, A_ELMER0_GPO, &val); 1304 val &= ~S_LOAD_CORE; 1305 udelay(50); 1306 __t1_tpi_write(adapter, A_ELMER0_GPO, val); 1307 udelay(50); 1308 1309 /* Initialize for memory */ 1310 __t1_tpi_read(adapter, A_ELMER0_GPO, &val); 1311 val |= NP_LOAD; 1312 udelay(50); 1313 __t1_tpi_write(adapter, A_ELMER0_GPO, val); 1314 udelay(50); 1315 __t1_tpi_read(adapter, A_ELMER0_GPO, &val); 1316 val &= ~S_LOAD_MEM; 1317 val &= ~S_CLOCK; 1318 udelay(50); 1319 __t1_tpi_write(adapter, A_ELMER0_GPO, val); 1320 udelay(50); 1321 1322 /* Serial program the memory clock synthesizer */ 1323 bit_bang(adapter, T_MEM_VAL, T_MEM_BITS); 1324 bit_bang(adapter, N_MEM_VAL, N_MEM_BITS); 1325 bit_bang(adapter, M_MEM_VAL, M_MEM_BITS); 1326 udelay(50); 1327 1328 /* Finish memory */ 1329 __t1_tpi_read(adapter, A_ELMER0_GPO, &val); 1330 val |= S_LOAD_MEM; 1331 udelay(50); 1332 __t1_tpi_write(adapter, A_ELMER0_GPO, val); 1333 udelay(50); 1334 __t1_tpi_read(adapter, A_ELMER0_GPO, &val); 1335 val &= ~S_LOAD_MEM; 1336 udelay(50); 1337 __t1_tpi_write(adapter, A_ELMER0_GPO, val); 1338 1339 spin_unlock(&adapter->tpi_lock); 1340 1341 return 0; 1342 } 1343 1344 static inline void t1_sw_reset(struct pci_dev *pdev) 1345 { 1346 pci_write_config_dword(pdev, A_PCICFG_PM_CSR, 3); 1347 pci_write_config_dword(pdev, A_PCICFG_PM_CSR, 0); 1348 } 1349 1350 static void remove_one(struct pci_dev *pdev) 1351 { 1352 struct net_device *dev = pci_get_drvdata(pdev); 1353 struct adapter *adapter = dev->ml_priv; 1354 int i; 1355 1356 for_each_port(adapter, i) { 1357 if (test_bit(i, &adapter->registered_device_map)) 1358 unregister_netdev(adapter->port[i].dev); 1359 } 1360 1361 t1_free_sw_modules(adapter); 1362 iounmap(adapter->regs); 1363 1364 while (--i >= 0) { 1365 if (adapter->port[i].dev) 1366 free_netdev(adapter->port[i].dev); 1367 } 1368 1369 pci_release_regions(pdev); 1370 pci_disable_device(pdev); 1371 t1_sw_reset(pdev); 1372 } 1373 1374 static struct pci_driver cxgb_pci_driver = { 1375 .name = DRV_NAME, 1376 .id_table = t1_pci_tbl, 1377 .probe = init_one, 1378 .remove = remove_one, 1379 }; 1380 1381 module_pci_driver(cxgb_pci_driver); 1382