Lines Matching refs:adapter
182 static void enable_tx_fifo_drain(struct adapter *adapter, in enable_tx_fifo_drain() argument
185 t3_set_reg_field(adapter, A_XGM_TXFIFO_CFG + pi->mac.offset, 0, in enable_tx_fifo_drain()
187 t3_write_reg(adapter, A_XGM_RX_CTRL + pi->mac.offset, 0); in enable_tx_fifo_drain()
188 t3_write_reg(adapter, A_XGM_TX_CTRL + pi->mac.offset, F_TXEN); in enable_tx_fifo_drain()
189 t3_write_reg(adapter, A_XGM_RX_CTRL + pi->mac.offset, F_RXEN); in enable_tx_fifo_drain()
192 static void disable_tx_fifo_drain(struct adapter *adapter, in disable_tx_fifo_drain() argument
195 t3_set_reg_field(adapter, A_XGM_TXFIFO_CFG + pi->mac.offset, in disable_tx_fifo_drain()
199 void t3_os_link_fault(struct adapter *adap, int port_id, int state) in t3_os_link_fault()
251 void t3_os_link_changed(struct adapter *adapter, int port_id, int link_stat, in t3_os_link_changed() argument
254 struct net_device *dev = adapter->port[port_id]; in t3_os_link_changed()
264 disable_tx_fifo_drain(adapter, pi); in t3_os_link_changed()
269 t3_xgm_intr_disable(adapter, pi->port_id); in t3_os_link_changed()
270 t3_read_reg(adapter, A_XGM_INT_STATUS + in t3_os_link_changed()
272 t3_write_reg(adapter, in t3_os_link_changed()
276 t3_set_reg_field(adapter, in t3_os_link_changed()
279 t3_xgm_intr_enable(adapter, pi->port_id); in t3_os_link_changed()
285 t3_xgm_intr_disable(adapter, pi->port_id); in t3_os_link_changed()
286 t3_read_reg(adapter, A_XGM_INT_STATUS + pi->mac.offset); in t3_os_link_changed()
287 t3_set_reg_field(adapter, in t3_os_link_changed()
291 if (is_10G(adapter)) in t3_os_link_changed()
294 t3_read_reg(adapter, A_XGM_INT_STATUS + pi->mac.offset); in t3_os_link_changed()
299 enable_tx_fifo_drain(adapter, pi); in t3_os_link_changed()
315 void t3_os_phymod_changed(struct adapter *adap, int port_id) in t3_os_phymod_changed()
359 static inline void cxgb_disable_msi(struct adapter *adapter) in cxgb_disable_msi() argument
361 if (adapter->flags & USING_MSIX) { in cxgb_disable_msi()
362 pci_disable_msix(adapter->pdev); in cxgb_disable_msi()
363 adapter->flags &= ~USING_MSIX; in cxgb_disable_msi()
364 } else if (adapter->flags & USING_MSI) { in cxgb_disable_msi()
365 pci_disable_msi(adapter->pdev); in cxgb_disable_msi()
366 adapter->flags &= ~USING_MSI; in cxgb_disable_msi()
382 static void name_msix_vecs(struct adapter *adap) in name_msix_vecs()
401 static int request_msix_data_irqs(struct adapter *adap) in request_msix_data_irqs()
427 static void free_irq_resources(struct adapter *adapter) in free_irq_resources() argument
429 if (adapter->flags & USING_MSIX) { in free_irq_resources()
432 free_irq(adapter->msix_info[0].vec, adapter); in free_irq_resources()
433 for_each_port(adapter, i) in free_irq_resources()
434 n += adap2pinfo(adapter, i)->nqsets; in free_irq_resources()
437 free_irq(adapter->msix_info[i + 1].vec, in free_irq_resources()
438 &adapter->sge.qs[i]); in free_irq_resources()
440 free_irq(adapter->pdev->irq, adapter); in free_irq_resources()
443 static int await_mgmt_replies(struct adapter *adap, unsigned long init_cnt, in await_mgmt_replies()
456 static int init_tp_parity(struct adapter *adap) in init_tp_parity()
573 static void setup_rss(struct adapter *adap) in setup_rss()
595 static void ring_dbs(struct adapter *adap) in ring_dbs()
608 static void init_napi(struct adapter *adap) in init_napi()
633 static void quiesce_rx(struct adapter *adap) in quiesce_rx()
642 static void enable_all_napi(struct adapter *adap) in enable_all_napi()
658 static int setup_sge_qsets(struct adapter *adap) in setup_sge_qsets()
727 struct adapter *adap = pi->adapter; \
739 struct adapter *adap = pi->adapter; in set_nfilters()
762 struct adapter *adap = pi->adapter; in set_nservers()
804 struct adapter *adap = pi->adapter; in tm_attr_show()
830 struct adapter *adap = pi->adapter; in tm_attr_store()
900 static int write_smt_entry(struct adapter *adapter, int idx) in write_smt_entry() argument
903 struct port_info *pi = netdev_priv(adapter->port[idx]); in write_smt_entry()
914 memcpy(req->src_mac0, adapter->port[idx]->dev_addr, ETH_ALEN); in write_smt_entry()
917 offload_tx(&adapter->tdev, skb); in write_smt_entry()
921 static int init_smt(struct adapter *adapter) in init_smt() argument
925 for_each_port(adapter, i) in init_smt()
926 write_smt_entry(adapter, i); in init_smt()
930 static void init_port_mtus(struct adapter *adapter) in init_port_mtus() argument
932 unsigned int mtus = adapter->port[0]->mtu; in init_port_mtus()
934 if (adapter->port[1]) in init_port_mtus()
935 mtus |= adapter->port[1]->mtu << 16; in init_port_mtus()
936 t3_write_reg(adapter, A_TP_MTU_PORT_TABLE, mtus); in init_port_mtus()
939 static int send_pktsched_cmd(struct adapter *adap, int sched, int qidx, int lo, in send_pktsched_cmd()
971 static int bind_qsets(struct adapter *adap) in bind_qsets()
1026 struct adapter *adapter = phy->adapter; in t3_get_edc_fw() local
1036 ret = request_firmware(&fw, buf, &adapter->pdev->dev); in t3_get_edc_fw()
1038 dev_err(&adapter->pdev->dev, in t3_get_edc_fw()
1046 CH_ERR(adapter, "firmware image too large %u, expected %d\n", in t3_get_edc_fw()
1057 CH_ERR(adapter, "corrupted firmware image, checksum %u\n", in t3_get_edc_fw()
1072 static int upgrade_fw(struct adapter *adap) in upgrade_fw()
1097 static inline char t3rev2char(struct adapter *adapter) in t3rev2char() argument
1101 switch(adapter->params.rev) { in t3rev2char()
1113 static int update_tpsram(struct adapter *adap) in update_tpsram()
1165 static void t3_synchronize_rx(struct adapter *adap, const struct port_info *p) in t3_synchronize_rx()
1180 struct adapter *adapter = pi->adapter; in cxgb_vlan_mode() local
1182 if (adapter->params.rev > 0) { in cxgb_vlan_mode()
1183 t3_set_vlan_accel(adapter, 1 << pi->port_id, in cxgb_vlan_mode()
1189 for_each_port(adapter, i) in cxgb_vlan_mode()
1191 adapter->port[i]->features & in cxgb_vlan_mode()
1194 t3_set_vlan_accel(adapter, 1, have_vlans); in cxgb_vlan_mode()
1196 t3_synchronize_rx(adapter, pi); in cxgb_vlan_mode()
1209 static int cxgb_up(struct adapter *adap) in cxgb_up()
1320 static void cxgb_down(struct adapter *adapter, int on_wq) in cxgb_down() argument
1322 t3_sge_stop(adapter); in cxgb_down()
1323 spin_lock_irq(&adapter->work_lock); /* sync with PHY intr task */ in cxgb_down()
1324 t3_intr_disable(adapter); in cxgb_down()
1325 spin_unlock_irq(&adapter->work_lock); in cxgb_down()
1327 free_irq_resources(adapter); in cxgb_down()
1328 quiesce_rx(adapter); in cxgb_down()
1329 t3_sge_stop(adapter); in cxgb_down()
1334 static void schedule_chk_task(struct adapter *adap) in schedule_chk_task()
1348 struct adapter *adapter = pi->adapter; in offload_open() local
1350 int adap_up = adapter->open_device_map & PORT_MASK; in offload_open()
1353 if (test_and_set_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) in offload_open()
1356 if (!adap_up && (err = cxgb_up(adapter)) < 0) in offload_open()
1359 t3_tp_set_offload_mode(adapter, 1); in offload_open()
1360 tdev->lldev = adapter->port[0]; in offload_open()
1361 err = cxgb3_offload_activate(adapter); in offload_open()
1365 init_port_mtus(adapter); in offload_open()
1366 t3_load_mtus(adapter, adapter->params.mtus, adapter->params.a_wnd, in offload_open()
1367 adapter->params.b_wnd, in offload_open()
1368 adapter->params.rev == 0 ? in offload_open()
1369 adapter->port[0]->mtu : 0xffff); in offload_open()
1370 init_smt(adapter); in offload_open()
1381 t3_tp_set_offload_mode(adapter, 0); in offload_open()
1382 clear_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map); in offload_open()
1390 struct adapter *adapter = tdev2adap(tdev); in offload_close() local
1393 if (!test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) in offload_close()
1406 t3_tp_set_offload_mode(adapter, 0); in offload_close()
1407 clear_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map); in offload_close()
1409 if (!adapter->open_device_map) in offload_close()
1410 cxgb_down(adapter, 0); in offload_close()
1412 cxgb3_offload_deactivate(adapter); in offload_close()
1419 struct adapter *adapter = pi->adapter; in cxgb_open() local
1420 int other_ports = adapter->open_device_map & PORT_MASK; in cxgb_open()
1423 if (!adapter->open_device_map && (err = cxgb_up(adapter)) < 0) in cxgb_open()
1426 set_bit(pi->port_id, &adapter->open_device_map); in cxgb_open()
1427 if (is_offload(adapter) && !ofld_disable) { in cxgb_open()
1438 t3_port_intr_enable(adapter, pi->port_id); in cxgb_open()
1441 schedule_chk_task(adapter); in cxgb_open()
1443 cxgb3_event_notify(&adapter->tdev, OFFLOAD_PORT_UP, pi->port_id); in cxgb_open()
1450 struct adapter *adapter = pi->adapter; in __cxgb_close() local
1453 if (!adapter->open_device_map) in __cxgb_close()
1457 t3_xgm_intr_disable(adapter, pi->port_id); in __cxgb_close()
1458 t3_read_reg(adapter, A_XGM_INT_STATUS + pi->mac.offset); in __cxgb_close()
1460 t3_port_intr_disable(adapter, pi->port_id); in __cxgb_close()
1466 spin_lock_irq(&adapter->work_lock); /* sync with update task */ in __cxgb_close()
1467 clear_bit(pi->port_id, &adapter->open_device_map); in __cxgb_close()
1468 spin_unlock_irq(&adapter->work_lock); in __cxgb_close()
1470 if (!(adapter->open_device_map & PORT_MASK)) in __cxgb_close()
1471 cancel_delayed_work_sync(&adapter->adap_check_task); in __cxgb_close()
1473 if (!adapter->open_device_map) in __cxgb_close()
1474 cxgb_down(adapter, on_wq); in __cxgb_close()
1476 cxgb3_event_notify(&adapter->tdev, OFFLOAD_PORT_DOWN, pi->port_id); in __cxgb_close()
1488 struct adapter *adapter = pi->adapter; in cxgb_get_stats() local
1492 spin_lock(&adapter->stats_lock); in cxgb_get_stats()
1494 spin_unlock(&adapter->stats_lock); in cxgb_get_stats()
1527 struct adapter *adapter = pi->adapter; in get_msglevel() local
1529 return adapter->msg_enable; in get_msglevel()
1535 struct adapter *adapter = pi->adapter; in set_msglevel() local
1537 adapter->msg_enable = val; in set_msglevel()
1619 struct adapter *adapter = pi->adapter; in get_drvinfo() local
1623 spin_lock(&adapter->stats_lock); in get_drvinfo()
1624 t3_get_fw_version(adapter, &fw_vers); in get_drvinfo()
1625 t3_get_tp_version(adapter, &tp_vers); in get_drvinfo()
1626 spin_unlock(&adapter->stats_lock); in get_drvinfo()
1630 strlcpy(info->bus_info, pci_name(adapter->pdev), in get_drvinfo()
1650 static unsigned long collect_sge_port_stats(struct adapter *adapter, in collect_sge_port_stats() argument
1657 tot += adapter->sge.qs[i].port_stats[idx]; in collect_sge_port_stats()
1665 struct adapter *adapter = pi->adapter; in get_stats() local
1668 spin_lock(&adapter->stats_lock); in get_stats()
1670 spin_unlock(&adapter->stats_lock); in get_stats()
1710 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_TSO); in get_stats()
1711 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_VLANEX); in get_stats()
1712 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_VLANINS); in get_stats()
1713 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_TX_CSUM); in get_stats()
1714 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_RX_CSUM_GOOD); in get_stats()
1726 static inline void reg_block_dump(struct adapter *ap, void *buf, in reg_block_dump()
1739 struct adapter *ap = pi->adapter; in get_regs()
1782 struct adapter *adapter = pi->adapter; in set_phys_id() local
1789 t3_set_reg_field(adapter, A_T3DBG_GPIO_EN, F_GPIO0_OUT_VAL, 0); in set_phys_id()
1794 t3_set_reg_field(adapter, A_T3DBG_GPIO_EN, F_GPIO0_OUT_VAL, in set_phys_id()
1944 struct adapter *adapter = pi->adapter; in get_sge_param() local
1945 const struct qset_params *q = &adapter->params.sge.qset[pi->first_qset]; in get_sge_param()
1960 struct adapter *adapter = pi->adapter; in set_sge_param() local
1971 e->tx_pending < adapter->params.nports * MIN_TXQ_ENTRIES) in set_sge_param()
1974 if (adapter->flags & FULL_INIT_DONE) in set_sge_param()
1977 q = &adapter->params.sge.qset[pi->first_qset]; in set_sge_param()
1992 struct adapter *adapter = pi->adapter; in set_coalesce() local
2001 qsp = &adapter->params.sge.qset[i]; in set_coalesce()
2002 qs = &adapter->sge.qs[i]; in set_coalesce()
2013 struct adapter *adapter = pi->adapter; in get_coalesce() local
2014 struct qset_params *q = adapter->params.sge.qset; in get_coalesce()
2024 struct adapter *adapter = pi->adapter; in get_eeprom() local
2033 err = t3_seeprom_read(adapter, i, (__le32 *) & buf[i]); in get_eeprom()
2045 struct adapter *adapter = pi->adapter; in set_eeprom() local
2061 err = t3_seeprom_read(adapter, aligned_offset, (__le32 *) buf); in set_eeprom()
2063 err = t3_seeprom_read(adapter, in set_eeprom()
2072 err = t3_seeprom_wp(adapter, 0); in set_eeprom()
2077 err = t3_seeprom_write(adapter, aligned_offset, *p); in set_eeprom()
2082 err = t3_seeprom_wp(adapter, 1); in set_eeprom()
2130 struct adapter *adapter = pi->adapter; in cxgb_extension_ioctl() local
2167 if ((adapter->flags & FULL_INIT_DONE) && in cxgb_extension_ioctl()
2175 if (test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) { in cxgb_extension_ioctl()
2177 for_each_port(adapter, i) { in cxgb_extension_ioctl()
2178 pi = adap2pinfo(adapter, i); in cxgb_extension_ioctl()
2188 q = &adapter->params.sge.qset[t.qset_idx]; in cxgb_extension_ioctl()
2206 &adapter->sge.qs[t.qset_idx]; in cxgb_extension_ioctl()
2212 if (adapter->flags & USING_MSIX) in cxgb_extension_ioctl()
2216 if (adapter->params.rev == 0 && in cxgb_extension_ioctl()
2217 !(adapter->flags & USING_MSI)) in cxgb_extension_ioctl()
2221 q = &adapter->params.sge. in cxgb_extension_ioctl()
2249 if (test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) { in cxgb_extension_ioctl()
2251 for_each_port(adapter, i) { in cxgb_extension_ioctl()
2252 pi = adap2pinfo(adapter, i); in cxgb_extension_ioctl()
2260 q = &adapter->params.sge.qset[q1 + t.qset_idx]; in cxgb_extension_ioctl()
2273 if (adapter->flags & USING_MSIX) in cxgb_extension_ioctl()
2274 t.vector = adapter->msix_info[q1 + t.qset_idx + 1].vec; in cxgb_extension_ioctl()
2276 t.vector = adapter->pdev->irq; in cxgb_extension_ioctl()
2288 if (adapter->flags & FULL_INIT_DONE) in cxgb_extension_ioctl()
2293 (edata.val > 1 && !(adapter->flags & USING_MSIX))) in cxgb_extension_ioctl()
2296 for_each_port(adapter, i) in cxgb_extension_ioctl()
2297 if (adapter->port[i] && adapter->port[i] != dev) in cxgb_extension_ioctl()
2298 other_qsets += adap2pinfo(adapter, i)->nqsets; in cxgb_extension_ioctl()
2305 for_each_port(adapter, i) in cxgb_extension_ioctl()
2306 if (adapter->port[i]) { in cxgb_extension_ioctl()
2307 pi = adap2pinfo(adapter, i); in cxgb_extension_ioctl()
2337 ret = t3_load_fw(adapter, fw_data, t.len); in cxgb_extension_ioctl()
2347 if (!is_offload(adapter)) in cxgb_extension_ioctl()
2351 if (offload_running(adapter)) in cxgb_extension_ioctl()
2365 memcpy(adapter->params.mtus, m.mtus, in cxgb_extension_ioctl()
2366 sizeof(adapter->params.mtus)); in cxgb_extension_ioctl()
2370 struct tp_params *p = &adapter->params.tp; in cxgb_extension_ioctl()
2373 if (!is_offload(adapter)) in cxgb_extension_ioctl()
2386 struct tp_params *p = &adapter->params.tp; in cxgb_extension_ioctl()
2388 if (!is_offload(adapter)) in cxgb_extension_ioctl()
2392 if (adapter->flags & FULL_INIT_DONE) in cxgb_extension_ioctl()
2423 if (!is_offload(adapter)) in cxgb_extension_ioctl()
2425 if (!(adapter->flags & FULL_INIT_DONE)) in cxgb_extension_ioctl()
2432 mem = &adapter->cm; in cxgb_extension_ioctl()
2434 mem = &adapter->pmrx; in cxgb_extension_ioctl()
2436 mem = &adapter->pmtx; in cxgb_extension_ioctl()
2445 t.version = 3 | (adapter->params.rev << 10); in cxgb_extension_ioctl()
2477 if (!offload_running(adapter)) in cxgb_extension_ioctl()
2484 t3_config_trace_filter(adapter, tp, 0, in cxgb_extension_ioctl()
2488 t3_config_trace_filter(adapter, tp, 1, in cxgb_extension_ioctl()
2503 struct adapter *adapter = pi->adapter; in cxgb_ioctl() local
2509 if (is_10G(adapter) && in cxgb_ioctl()
2528 struct adapter *adapter = pi->adapter; in cxgb_change_mtu() local
2536 init_port_mtus(adapter); in cxgb_change_mtu()
2537 if (adapter->params.rev == 0 && offload_running(adapter)) in cxgb_change_mtu()
2538 t3_load_mtus(adapter, adapter->params.mtus, in cxgb_change_mtu()
2539 adapter->params.a_wnd, adapter->params.b_wnd, in cxgb_change_mtu()
2540 adapter->port[0]->mtu); in cxgb_change_mtu()
2547 struct adapter *adapter = pi->adapter; in cxgb_set_mac_addr() local
2555 if (offload_running(adapter)) in cxgb_set_mac_addr()
2556 write_smt_entry(adapter, pi->port_id); in cxgb_set_mac_addr()
2589 struct adapter *adapter = pi->adapter; in cxgb_netpoll() local
2593 struct sge_qset *qs = &adapter->sge.qs[qidx]; in cxgb_netpoll()
2596 if (adapter->flags & USING_MSIX) in cxgb_netpoll()
2599 source = adapter; in cxgb_netpoll()
2601 t3_intr_handler(adapter, qs->rspq.polling) (0, source); in cxgb_netpoll()
2609 static void mac_stats_update(struct adapter *adapter) in mac_stats_update() argument
2613 for_each_port(adapter, i) { in mac_stats_update()
2614 struct net_device *dev = adapter->port[i]; in mac_stats_update()
2618 spin_lock(&adapter->stats_lock); in mac_stats_update()
2620 spin_unlock(&adapter->stats_lock); in mac_stats_update()
2625 static void check_link_status(struct adapter *adapter) in check_link_status() argument
2629 for_each_port(adapter, i) { in check_link_status()
2630 struct net_device *dev = adapter->port[i]; in check_link_status()
2634 spin_lock_irq(&adapter->work_lock); in check_link_status()
2636 spin_unlock_irq(&adapter->work_lock); in check_link_status()
2639 t3_link_fault(adapter, i); in check_link_status()
2644 t3_xgm_intr_disable(adapter, i); in check_link_status()
2645 t3_read_reg(adapter, A_XGM_INT_STATUS + p->mac.offset); in check_link_status()
2647 t3_link_changed(adapter, i); in check_link_status()
2648 t3_xgm_intr_enable(adapter, i); in check_link_status()
2653 static void check_t3b2_mac(struct adapter *adapter) in check_t3b2_mac() argument
2660 for_each_port(adapter, i) { in check_t3b2_mac()
2661 struct net_device *dev = adapter->port[i]; in check_t3b2_mac()
2681 t3_port_intr_enable(adapter, p->port_id); in check_t3b2_mac()
2691 struct adapter *adapter = container_of(work, struct adapter, in t3_adap_check_task() local
2693 const struct adapter_params *p = &adapter->params; in t3_adap_check_task()
2697 adapter->check_task_cnt++; in t3_adap_check_task()
2699 check_link_status(adapter); in t3_adap_check_task()
2703 (adapter->check_task_cnt * p->linkpoll_period) / 10 >= in t3_adap_check_task()
2705 mac_stats_update(adapter); in t3_adap_check_task()
2706 adapter->check_task_cnt = 0; in t3_adap_check_task()
2710 check_t3b2_mac(adapter); in t3_adap_check_task()
2720 for_each_port(adapter, port) { in t3_adap_check_task()
2721 struct cmac *mac = &adap2pinfo(adapter, port)->mac; in t3_adap_check_task()
2724 cause = t3_read_reg(adapter, A_XGM_INT_CAUSE + mac->offset); in t3_adap_check_task()
2731 t3_write_reg(adapter, A_XGM_INT_CAUSE + mac->offset, reset); in t3_adap_check_task()
2737 status = t3_read_reg(adapter, A_SG_INT_CAUSE); in t3_adap_check_task()
2741 struct sge_qset *qs = &adapter->sge.qs[0]; in t3_adap_check_task()
2746 v = (t3_read_reg(adapter, A_SG_RSPQ_FL_STATUS) >> S_FL0EMPTY) & in t3_adap_check_task()
2758 t3_write_reg(adapter, A_SG_INT_CAUSE, reset); in t3_adap_check_task()
2761 spin_lock_irq(&adapter->work_lock); in t3_adap_check_task()
2762 if (adapter->open_device_map & PORT_MASK) in t3_adap_check_task()
2763 schedule_chk_task(adapter); in t3_adap_check_task()
2764 spin_unlock_irq(&adapter->work_lock); in t3_adap_check_task()
2769 struct adapter *adapter = container_of(work, struct adapter, in db_full_task() local
2772 cxgb3_event_notify(&adapter->tdev, OFFLOAD_DB_FULL, 0); in db_full_task()
2777 struct adapter *adapter = container_of(work, struct adapter, in db_empty_task() local
2780 cxgb3_event_notify(&adapter->tdev, OFFLOAD_DB_EMPTY, 0); in db_empty_task()
2785 struct adapter *adapter = container_of(work, struct adapter, in db_drop_task() local
2790 cxgb3_event_notify(&adapter->tdev, OFFLOAD_DB_DROP, 0); in db_drop_task()
2800 ring_dbs(adapter); in db_drop_task()
2808 struct adapter *adapter = container_of(work, struct adapter, in ext_intr_task() local
2813 for_each_port(adapter, i) { in ext_intr_task()
2814 struct net_device *dev = adapter->port[i]; in ext_intr_task()
2817 t3_xgm_intr_disable(adapter, i); in ext_intr_task()
2818 t3_read_reg(adapter, A_XGM_INT_STATUS + p->mac.offset); in ext_intr_task()
2822 t3_phy_intr_handler(adapter); in ext_intr_task()
2824 for_each_port(adapter, i) in ext_intr_task()
2825 t3_xgm_intr_enable(adapter, i); in ext_intr_task()
2828 spin_lock_irq(&adapter->work_lock); in ext_intr_task()
2829 if (adapter->slow_intr_mask) { in ext_intr_task()
2830 adapter->slow_intr_mask |= F_T3DBG; in ext_intr_task()
2831 t3_write_reg(adapter, A_PL_INT_CAUSE0, F_T3DBG); in ext_intr_task()
2832 t3_write_reg(adapter, A_PL_INT_ENABLE0, in ext_intr_task()
2833 adapter->slow_intr_mask); in ext_intr_task()
2835 spin_unlock_irq(&adapter->work_lock); in ext_intr_task()
2841 void t3_os_ext_intr_handler(struct adapter *adapter) in t3_os_ext_intr_handler() argument
2849 spin_lock(&adapter->work_lock); in t3_os_ext_intr_handler()
2850 if (adapter->slow_intr_mask) { in t3_os_ext_intr_handler()
2851 adapter->slow_intr_mask &= ~F_T3DBG; in t3_os_ext_intr_handler()
2852 t3_write_reg(adapter, A_PL_INT_ENABLE0, in t3_os_ext_intr_handler()
2853 adapter->slow_intr_mask); in t3_os_ext_intr_handler()
2854 queue_work(cxgb3_wq, &adapter->ext_intr_handler_task); in t3_os_ext_intr_handler()
2856 spin_unlock(&adapter->work_lock); in t3_os_ext_intr_handler()
2859 void t3_os_link_fault_handler(struct adapter *adapter, int port_id) in t3_os_link_fault_handler() argument
2861 struct net_device *netdev = adapter->port[port_id]; in t3_os_link_fault_handler()
2864 spin_lock(&adapter->work_lock); in t3_os_link_fault_handler()
2866 spin_unlock(&adapter->work_lock); in t3_os_link_fault_handler()
2869 static int t3_adapter_error(struct adapter *adapter, int reset, int on_wq) in t3_adapter_error() argument
2873 if (is_offload(adapter) && in t3_adapter_error()
2874 test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) { in t3_adapter_error()
2875 cxgb3_event_notify(&adapter->tdev, OFFLOAD_STATUS_DOWN, 0); in t3_adapter_error()
2876 offload_close(&adapter->tdev); in t3_adapter_error()
2880 for_each_port(adapter, i) { in t3_adapter_error()
2881 struct net_device *netdev = adapter->port[i]; in t3_adapter_error()
2888 t3_stop_sge_timers(adapter); in t3_adapter_error()
2890 adapter->flags &= ~FULL_INIT_DONE; in t3_adapter_error()
2893 ret = t3_reset_adapter(adapter); in t3_adapter_error()
2895 pci_disable_device(adapter->pdev); in t3_adapter_error()
2900 static int t3_reenable_adapter(struct adapter *adapter) in t3_reenable_adapter() argument
2902 if (pci_enable_device(adapter->pdev)) { in t3_reenable_adapter()
2903 dev_err(&adapter->pdev->dev, in t3_reenable_adapter()
2907 pci_set_master(adapter->pdev); in t3_reenable_adapter()
2908 pci_restore_state(adapter->pdev); in t3_reenable_adapter()
2909 pci_save_state(adapter->pdev); in t3_reenable_adapter()
2912 t3_free_sge_resources(adapter); in t3_reenable_adapter()
2914 if (t3_replay_prep_adapter(adapter)) in t3_reenable_adapter()
2922 static void t3_resume_ports(struct adapter *adapter) in t3_resume_ports() argument
2927 for_each_port(adapter, i) { in t3_resume_ports()
2928 struct net_device *netdev = adapter->port[i]; in t3_resume_ports()
2932 dev_err(&adapter->pdev->dev, in t3_resume_ports()
2940 if (is_offload(adapter) && !ofld_disable) in t3_resume_ports()
2941 cxgb3_event_notify(&adapter->tdev, OFFLOAD_STATUS_UP, 0); in t3_resume_ports()
2950 struct adapter *adapter = container_of(work, struct adapter, in fatal_error_task() local
2955 err = t3_adapter_error(adapter, 1, 1); in fatal_error_task()
2957 err = t3_reenable_adapter(adapter); in fatal_error_task()
2959 t3_resume_ports(adapter); in fatal_error_task()
2961 CH_ALERT(adapter, "adapter reset %s\n", err ? "failed" : "succeeded"); in fatal_error_task()
2965 void t3_fatal_err(struct adapter *adapter) in t3_fatal_err() argument
2969 if (adapter->flags & FULL_INIT_DONE) { in t3_fatal_err()
2970 t3_sge_stop(adapter); in t3_fatal_err()
2971 t3_write_reg(adapter, A_XGM_TX_CTRL, 0); in t3_fatal_err()
2972 t3_write_reg(adapter, A_XGM_RX_CTRL, 0); in t3_fatal_err()
2973 t3_write_reg(adapter, XGM_REG(A_XGM_TX_CTRL, 1), 0); in t3_fatal_err()
2974 t3_write_reg(adapter, XGM_REG(A_XGM_RX_CTRL, 1), 0); in t3_fatal_err()
2976 spin_lock(&adapter->work_lock); in t3_fatal_err()
2977 t3_intr_disable(adapter); in t3_fatal_err()
2978 queue_work(cxgb3_wq, &adapter->fatal_error_handler_task); in t3_fatal_err()
2979 spin_unlock(&adapter->work_lock); in t3_fatal_err()
2981 CH_ALERT(adapter, "encountered fatal error, operation suspended\n"); in t3_fatal_err()
2982 if (!t3_cim_ctl_blk_read(adapter, 0xa0, 4, fw_status)) in t3_fatal_err()
2983 CH_ALERT(adapter, "FW status: 0x%x, 0x%x, 0x%x, 0x%x\n", in t3_fatal_err()
2999 struct adapter *adapter = pci_get_drvdata(pdev); in t3_io_error_detected() local
3004 t3_adapter_error(adapter, 0, 0); in t3_io_error_detected()
3018 struct adapter *adapter = pci_get_drvdata(pdev); in t3_io_slot_reset() local
3020 if (!t3_reenable_adapter(adapter)) in t3_io_slot_reset()
3035 struct adapter *adapter = pci_get_drvdata(pdev); in t3_io_resume() local
3037 CH_ALERT(adapter, "adapter recovering, PEX ERR 0x%x\n", in t3_io_resume()
3038 t3_read_reg(adapter, A_PCIE_PEX_ERR)); in t3_io_resume()
3041 t3_resume_ports(adapter); in t3_io_resume()
3056 static void set_nqsets(struct adapter *adap) in set_nqsets()
3087 static int cxgb_enable_msix(struct adapter *adap) in cxgb_enable_msix()
3109 static void print_port_info(struct adapter *adap, const struct adapter_info *ai) in print_port_info()
3180 struct adapter *adapter = NULL; in init_one() local
3226 adapter = kzalloc(sizeof(*adapter), GFP_KERNEL); in init_one()
3227 if (!adapter) { in init_one()
3232 adapter->nofail_skb = in init_one()
3234 if (!adapter->nofail_skb) { in init_one()
3240 adapter->regs = ioremap_nocache(mmio_start, mmio_len); in init_one()
3241 if (!adapter->regs) { in init_one()
3247 adapter->pdev = pdev; in init_one()
3248 adapter->name = pci_name(pdev); in init_one()
3249 adapter->msg_enable = dflt_msg_enable; in init_one()
3250 adapter->mmio_len = mmio_len; in init_one()
3252 mutex_init(&adapter->mdio_lock); in init_one()
3253 spin_lock_init(&adapter->work_lock); in init_one()
3254 spin_lock_init(&adapter->stats_lock); in init_one()
3256 INIT_LIST_HEAD(&adapter->adapter_list); in init_one()
3257 INIT_WORK(&adapter->ext_intr_handler_task, ext_intr_task); in init_one()
3258 INIT_WORK(&adapter->fatal_error_handler_task, fatal_error_task); in init_one()
3260 INIT_WORK(&adapter->db_full_task, db_full_task); in init_one()
3261 INIT_WORK(&adapter->db_empty_task, db_empty_task); in init_one()
3262 INIT_WORK(&adapter->db_drop_task, db_drop_task); in init_one()
3264 INIT_DELAYED_WORK(&adapter->adap_check_task, t3_adap_check_task); in init_one()
3277 adapter->port[i] = netdev; in init_one()
3279 pi->adapter = adapter; in init_one()
3297 pci_set_drvdata(pdev, adapter); in init_one()
3298 if (t3_prep_adapter(adapter, ai, 1) < 0) { in init_one()
3309 for_each_port(adapter, i) { in init_one()
3310 err = register_netdev(adapter->port[i]); in init_one()
3314 adapter->port[i]->name); in init_one()
3320 if (!adapter->registered_device_map) in init_one()
3321 adapter->name = adapter->port[i]->name; in init_one()
3323 __set_bit(i, &adapter->registered_device_map); in init_one()
3326 if (!adapter->registered_device_map) { in init_one()
3331 for_each_port(adapter, i) in init_one()
3332 cxgb3_init_iscsi_mac(adapter->port[i]); in init_one()
3335 t3_led_ready(adapter); in init_one()
3337 if (is_offload(adapter)) { in init_one()
3338 __set_bit(OFFLOAD_DEVMAP_BIT, &adapter->registered_device_map); in init_one()
3339 cxgb3_adapter_ofld(adapter); in init_one()
3343 if (msi > 1 && cxgb_enable_msix(adapter) == 0) in init_one()
3344 adapter->flags |= USING_MSIX; in init_one()
3346 adapter->flags |= USING_MSI; in init_one()
3348 set_nqsets(adapter); in init_one()
3350 err = sysfs_create_group(&adapter->port[0]->dev.kobj, in init_one()
3353 print_port_info(adapter, ai); in init_one()
3357 iounmap(adapter->regs); in init_one()
3359 if (adapter->port[i]) in init_one()
3360 free_netdev(adapter->port[i]); in init_one()
3363 kfree(adapter); in init_one()
3375 struct adapter *adapter = pci_get_drvdata(pdev); in remove_one() local
3377 if (adapter) { in remove_one()
3380 t3_sge_stop(adapter); in remove_one()
3381 sysfs_remove_group(&adapter->port[0]->dev.kobj, in remove_one()
3384 if (is_offload(adapter)) { in remove_one()
3385 cxgb3_adapter_unofld(adapter); in remove_one()
3387 &adapter->open_device_map)) in remove_one()
3388 offload_close(&adapter->tdev); in remove_one()
3391 for_each_port(adapter, i) in remove_one()
3392 if (test_bit(i, &adapter->registered_device_map)) in remove_one()
3393 unregister_netdev(adapter->port[i]); in remove_one()
3395 t3_stop_sge_timers(adapter); in remove_one()
3396 t3_free_sge_resources(adapter); in remove_one()
3397 cxgb_disable_msi(adapter); in remove_one()
3399 for_each_port(adapter, i) in remove_one()
3400 if (adapter->port[i]) in remove_one()
3401 free_netdev(adapter->port[i]); in remove_one()
3403 iounmap(adapter->regs); in remove_one()
3404 if (adapter->nofail_skb) in remove_one()
3405 kfree_skb(adapter->nofail_skb); in remove_one()
3406 kfree(adapter); in remove_one()