Lines Matching +full:sg +full:- +full:micro
213 while (tbl->vendor_id) { in lio_probe()
214 if ((vendor_id == tbl->vendor_id) && in lio_probe()
215 (device_id == tbl->device_id) && in lio_probe()
216 (subdevice_id == tbl->subdevice_id) && in lio_probe()
217 (revision_id == tbl->revision_id)) { in lio_probe()
218 device_set_descf(dev, "%s, Version - %s", in lio_probe()
219 lio_strings[tbl->index], LIO_VERSION); in lio_probe()
241 return (-ENOMEM); in lio_attach()
244 oct_dev->tx_budget = LIO_DEFAULT_TX_PKTS_PROCESS_BUDGET; in lio_attach()
245 oct_dev->rx_budget = LIO_DEFAULT_RX_PKTS_PROCESS_BUDGET; in lio_attach()
246 oct_dev->msix_on = LIO_FLAG_MSIX_ENABLED; in lio_attach()
248 oct_dev->device = device; in lio_attach()
260 return (-ENOMEM); in lio_attach()
274 &oct_dev->watchdog_task, 0, 0, in lio_attach()
278 kproc_resume(oct_dev->watchdog_task); in lio_attach()
280 oct_dev->watchdog_task = NULL; in lio_attach()
284 return (-1); in lio_attach()
287 oct_dev->rx_pause = 1; in lio_attach()
288 oct_dev->tx_pause = 1; in lio_attach()
300 lio_droq_bh(oct_dev->droq[0], 0); in lio_attach()
302 if (atomic_load_acq_int(&oct_dev->status) == LIO_DEV_CORE_OK) { in lio_attach()
311 return (-EIO); in lio_attach()
325 if (oct_dev->watchdog_task) { in lio_detach()
328 kproc_suspend(oct_dev->watchdog_task, 0); in lio_detach()
335 if (oct_dev->app_mode && (oct_dev->app_mode == LIO_DRV_NIC_APP)) in lio_detach()
358 struct lio *lio = if_getsoftc(oct_dev->props.ifp); in lio_shutdown()
439 bus = pci_get_bus(octeon_dev->device); in lio_device_init()
440 dev = pci_get_slot(octeon_dev->device); in lio_device_init()
441 function = pci_get_function(octeon_dev->device); in lio_device_init()
443 atomic_store_rel_int(&octeon_dev->status, LIO_DEV_BEGIN_STATE); in lio_device_init()
446 if (pci_enable_busmaster(octeon_dev->device)) { in lio_device_init()
451 atomic_store_rel_int(&octeon_dev->status, LIO_DEV_PCI_ENABLE_DONE); in lio_device_init()
459 atomic_store_rel_int(&octeon_dev->status, LIO_DEV_PCI_MAP_DONE); in lio_device_init()
464 * during de-initialization (see 'octeon_destroy_resources'). in lio_device_init()
469 octeon_dev->app_mode = LIO_DRV_INVALID_APP; in lio_device_init()
474 if (octeon_dev->fn_list.soft_reset(octeon_dev)) in lio_device_init()
496 atomic_store_rel_int(&octeon_dev->status, LIO_DEV_DISPATCH_INIT_DONE); in lio_device_init()
498 ret = octeon_dev->fn_list.setup_device_regs(octeon_dev); in lio_device_init()
511 atomic_store_rel_int(&octeon_dev->status, in lio_device_init()
520 atomic_store_rel_int(&octeon_dev->status, in lio_device_init()
524 octeon_dev->instr_queue[i] = in lio_device_init()
527 if (octeon_dev->instr_queue[i] == NULL) in lio_device_init()
538 atomic_store_rel_int(&octeon_dev->status, in lio_device_init()
551 atomic_store_rel_int(&octeon_dev->status, LIO_DEV_RESP_LIST_INIT_DONE); in lio_device_init()
554 octeon_dev->droq[i] = malloc(sizeof(*octeon_dev->droq[i]), in lio_device_init()
556 if (octeon_dev->droq[i] == NULL) in lio_device_init()
565 atomic_store_rel_int(&octeon_dev->status, LIO_DEV_DROQ_INIT_DONE); in lio_device_init()
571 octeon_dev->sriov_info.num_pf_rings)) in lio_device_init()
575 octeon_dev->fn_list.enable_interrupt(octeon_dev, OCTEON_ALL_INTR); in lio_device_init()
577 atomic_store_rel_int(&octeon_dev->status, LIO_DEV_INTR_SET_DONE); in lio_device_init()
588 for (j = 0; j < octeon_dev->num_oqs; j++) in lio_device_init()
590 octeon_dev->droq[j]->pkts_credit_reg, in lio_device_init()
591 octeon_dev->droq[j]->max_count); in lio_device_init()
594 ret = octeon_dev->fn_list.enable_io_queues(octeon_dev); in lio_device_init()
600 atomic_store_rel_int(&octeon_dev->status, LIO_DEV_IO_QUEUES_DONE); in lio_device_init()
606 "WAITING. Set ddr_timeout to non-zero value to proceed with initialization.\n"); in lio_device_init()
613 * soft-reset. in lio_device_init()
616 if (pause("-", lio_ms_to_ticks(100))) { in lio_device_init()
617 /* user probably pressed Control-C */ in lio_device_init()
661 octeon_dev->console[0].print = lio_dbg_console_print; in lio_device_init()
664 atomic_store_rel_int(&octeon_dev->status, in lio_device_init()
676 atomic_store_rel_int(&octeon_dev->status, LIO_DEV_HOST_OK); in lio_device_init()
690 pci_find_cap(oct->device, PCIY_EXPRESS, &exppos); in lio_pci_flr()
692 pci_save_state(oct->device); in lio_pci_flr()
695 pci_write_config(oct->device, PCIR_COMMAND, PCIM_CMD_INTxDIS, 2); in lio_pci_flr()
700 status = pci_read_config(oct->device, exppos + PCIER_DEVICE_STA, 2); in lio_pci_flr()
705 status = pci_read_config(oct->device, exppos + PCIER_DEVICE_STA, 2); in lio_pci_flr()
710 pci_write_config(oct->device, exppos + PCIER_DEVICE_CTL, PCIEM_CTL_INITIATE_FLR, 2); in lio_pci_flr()
713 pci_restore_state(oct->device); in lio_pci_flr()
755 kproc_suspend_check(oct->watchdog_task); in lio_watchdog()
762 oct->cores_crashed = true; in lio_watchdog()
765 other_oct->cores_crashed = true; in lio_watchdog()
777 "ERROR: Octeon core %d crashed or got stuck! See oct-fwdump for details.\n", in lio_watchdog()
786 pause("-", lio_ms_to_ticks(2000)); in lio_watchdog()
798 oct->subdevice_id = pci_get_subdevice(oct->device); in lio_chip_specific_setup()
802 oct->chip_id = LIO_CN23XX_PF_VID; in lio_chip_specific_setup()
803 if (pci_get_function(oct->device) == 0) { in lio_chip_specific_setup()
810 oct->sriov_info.num_pf_rings = num_queues_per_pf0; in lio_chip_specific_setup()
818 oct->sriov_info.num_pf_rings = num_queues_per_pf1; in lio_chip_specific_setup()
833 lio_get_conf(oct)->card_name, LIO_VERSION); in lio_chip_specific_setup()
843 other_oct = lio_get_device(oct->octeon_id + 1); in lio_get_other_octeon_device()
845 if ((other_oct != NULL) && other_oct->device) { in lio_get_other_octeon_device()
848 oct_busnum = pci_get_bus(oct->device); in lio_get_other_octeon_device()
849 other_oct_busnum = pci_get_bus(other_oct->device); in lio_get_other_octeon_device()
854 oct_slot = pci_get_slot(oct->device); in lio_get_other_octeon_device()
855 other_oct_slot = pci_get_slot(other_oct->device); in lio_get_other_octeon_device()
884 lio_get_conf(oct)->card_name, tmp_fw_type, LIO_FW_NAME_SUFFIX); in lio_load_firmware()
893 ret = lio_download_firmware(oct, fw->data, fw->datasize); in lio_load_firmware()
905 atomic_store_rel_int(&oct->status, LIO_DEV_RUNNING); in lio_nic_starter()
907 if (oct->app_mode && oct->app_mode == LIO_DRV_NIC_APP) { in lio_nic_starter()
910 ret = -1; in lio_nic_starter()
914 ret = -1; in lio_nic_starter()
920 oct->app_mode); in lio_nic_starter()
921 ret = -1; in lio_nic_starter()
941 oct->ifcount = num_nic_ports; in lio_init_nic_module()
943 bzero(&oct->props, sizeof(struct lio_if_props)); in lio_init_nic_module()
945 oct->props.gmxport = -1; in lio_init_nic_module()
959 oct->ifcount = 0; in lio_init_nic_module()
970 ifm = &lio->ifmedia; in lio_ifmedia_update()
973 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER) in lio_ifmedia_update()
976 switch (IFM_SUBTYPE(ifm->ifm_media)) { in lio_ifmedia_update()
985 lio_dev_err(lio->oct_dev, "Invalid media type (%d)\n", in lio_ifmedia_update()
986 IFM_SUBTYPE(ifm->ifm_media)); in lio_ifmedia_update()
997 switch(oct->subdevice_id) { in lio_get_media_subtype()
1015 switch(oct->subdevice_id) { in lio_get_baudrate()
1036 ifmr->ifm_active |= IFM_NONE; in lio_ifmedia_status()
1041 ifmr->ifm_status = IFM_AVALID; in lio_ifmedia_status()
1042 ifmr->ifm_active = IFM_ETHER; in lio_ifmedia_status()
1044 if (lio->linfo.link.s.link_up) { in lio_ifmedia_status()
1045 ifmr->ifm_status |= IFM_ACTIVE; in lio_ifmedia_status()
1047 ifmr->ifm_active |= IFM_NONE; in lio_ifmedia_status()
1051 ifmr->ifm_active |= lio_get_media_subtype(lio->oct_dev); in lio_ifmedia_status()
1053 if (lio->linfo.link.s.duplex) in lio_ifmedia_status()
1054 ifmr->ifm_active |= IFM_FDX; in lio_ifmedia_status()
1056 ifmr->ifm_active |= IFM_HDX; in lio_ifmedia_status()
1063 struct octeon_device *oct = lio->oct_dev; in lio_get_counter()
1069 for (i = 0; i < oct->num_oqs; i++) { in lio_get_counter()
1070 q_no = lio->linfo.rxpciq[i].s.q_no; in lio_get_counter()
1071 counter += oct->droq[q_no]->stats.rx_pkts_received; in lio_get_counter()
1075 for (i = 0; i < oct->num_iqs; i++) { in lio_get_counter()
1076 q_no = lio->linfo.txpciq[i].s.q_no; in lio_get_counter()
1077 counter += oct->instr_queue[q_no]->stats.tx_done; in lio_get_counter()
1081 for (i = 0; i < oct->num_oqs; i++) { in lio_get_counter()
1082 q_no = lio->linfo.rxpciq[i].s.q_no; in lio_get_counter()
1083 counter += oct->droq[q_no]->stats.rx_bytes_received; in lio_get_counter()
1087 for (i = 0; i < oct->num_iqs; i++) { in lio_get_counter()
1088 q_no = lio->linfo.txpciq[i].s.q_no; in lio_get_counter()
1089 counter += oct->instr_queue[q_no]->stats.tx_tot_bytes; in lio_get_counter()
1093 for (i = 0; i < oct->num_oqs; i++) { in lio_get_counter()
1094 q_no = lio->linfo.rxpciq[i].s.q_no; in lio_get_counter()
1095 counter += oct->droq[q_no]->stats.rx_dropped; in lio_get_counter()
1099 for (i = 0; i < oct->num_iqs; i++) { in lio_get_counter()
1100 q_no = lio->linfo.txpciq[i].s.q_no; in lio_get_counter()
1101 counter += oct->instr_queue[q_no]->stats.tx_dropped; in lio_get_counter()
1105 counter = oct->link_stats.fromwire.total_mcst; in lio_get_counter()
1108 counter = oct->link_stats.fromhost.mcast_pkts_sent; in lio_get_counter()
1111 counter = oct->link_stats.fromhost.total_collisions; in lio_get_counter()
1114 counter = oct->link_stats.fromwire.fcs_err + in lio_get_counter()
1115 oct->link_stats.fromwire.l2_err + in lio_get_counter()
1116 oct->link_stats.fromwire.frame_err; in lio_get_counter()
1128 struct octeon_device *oct = lio->oct_dev; in lio_init_ifnet()
1129 if_t ifp = lio->ifp; in lio_init_ifnet()
1132 ifmedia_init(&lio->ifmedia, IFM_IMASK, lio_ifmedia_update, in lio_init_ifnet()
1136 ifmedia_add(&lio->ifmedia, in lio_init_ifnet()
1139 ifmedia_add(&lio->ifmedia, (IFM_ETHER | IFM_AUTO), 0, NULL); in lio_init_ifnet()
1140 ifmedia_set(&lio->ifmedia, (IFM_ETHER | IFM_AUTO)); in lio_init_ifnet()
1142 lio->ifmedia.ifm_media = lio->ifmedia.ifm_cur->ifm_media; in lio_init_ifnet()
1143 lio_dev_dbg(oct, "IFMEDIA flags : %x\n", lio->ifmedia.ifm_media); in lio_init_ifnet()
1145 if_initname(ifp, device_get_name(oct->device), in lio_init_ifnet()
1146 device_get_unit(oct->device)); in lio_init_ifnet()
1153 if_setmtu(ifp, lio->linfo.link.s.mtu); in lio_init_ifnet()
1154 lio->mtu = lio->linfo.link.s.mtu; in lio_init_ifnet()
1179 for (i = 0; i < octeon_dev->num_oqs; i++) { in lio_tcp_lro_free()
1180 q_no = lio->linfo.rxpciq[i].s.q_no; in lio_tcp_lro_free()
1181 droq = octeon_dev->droq[q_no]; in lio_tcp_lro_free()
1182 if (droq->lro.ifp) { in lio_tcp_lro_free()
1183 tcp_lro_free(&droq->lro); in lio_tcp_lro_free()
1184 droq->lro.ifp = NULL; in lio_tcp_lro_free()
1197 for (i = 0; i < octeon_dev->num_oqs; i++) { in lio_tcp_lro_init()
1198 q_no = lio->linfo.rxpciq[i].s.q_no; in lio_tcp_lro_init()
1199 droq = octeon_dev->droq[q_no]; in lio_tcp_lro_init()
1200 lro = &droq->lro; in lio_tcp_lro_init()
1208 lro->ifp = ifp; in lio_tcp_lro_init()
1242 for (i = 0; i < octeon_dev->ifcount; i++) { in lio_setup_nic_devices()
1251 resp = (struct lio_if_cfg_resp *)sc->virtrptr; in lio_setup_nic_devices()
1252 ctx = (struct lio_if_cfg_context *)sc->ctxptr; in lio_setup_nic_devices()
1253 vdata = (struct lio_version *)sc->virtdptr; in lio_setup_nic_devices()
1256 vdata->major = htobe16(LIO_BASE_MAJOR_VERSION); in lio_setup_nic_devices()
1257 vdata->minor = htobe16(LIO_BASE_MINOR_VERSION); in lio_setup_nic_devices()
1258 vdata->micro = htobe16(LIO_BASE_MICRO_VERSION); in lio_setup_nic_devices()
1260 num_iqueues = octeon_dev->sriov_info.num_pf_rings; in lio_setup_nic_devices()
1261 num_oqueues = octeon_dev->sriov_info.num_pf_rings; in lio_setup_nic_devices()
1262 base_queue = octeon_dev->sriov_info.pf_srn; in lio_setup_nic_devices()
1264 gmx_port_id = octeon_dev->pf_num; in lio_setup_nic_devices()
1265 ifidx_or_pfnum = octeon_dev->pf_num; in lio_setup_nic_devices()
1269 ctx->cond = 0; in lio_setup_nic_devices()
1270 ctx->octeon_id = lio_get_device_id(octeon_dev); in lio_setup_nic_devices()
1278 sc->iq_no = 0; in lio_setup_nic_devices()
1284 sc->callback = lio_if_cfg_callback; in lio_setup_nic_devices()
1285 sc->callback_arg = sc; in lio_setup_nic_devices()
1286 sc->wait_time = 3000; in lio_setup_nic_devices()
1298 * response arrived or timed-out. in lio_setup_nic_devices()
1300 lio_sleep_cond(octeon_dev, &ctx->cond); in lio_setup_nic_devices()
1302 retval = resp->status; in lio_setup_nic_devices()
1308 lio_swap_8B_data((uint64_t *)(&resp->cfg_info), in lio_setup_nic_devices()
1311 num_iqueues = bitcount64(resp->cfg_info.iqmask); in lio_setup_nic_devices()
1312 num_oqueues = bitcount64(resp->cfg_info.oqmask); in lio_setup_nic_devices()
1317 LIO_CAST64(resp->cfg_info.iqmask), in lio_setup_nic_devices()
1318 LIO_CAST64(resp->cfg_info.oqmask)); in lio_setup_nic_devices()
1324 i, LIO_CAST64(resp->cfg_info.iqmask), in lio_setup_nic_devices()
1325 LIO_CAST64(resp->cfg_info.oqmask), in lio_setup_nic_devices()
1343 lio->ifidx = ifidx_or_pfnum; in lio_setup_nic_devices()
1345 props = &octeon_dev->props; in lio_setup_nic_devices()
1346 props->gmxport = resp->cfg_info.linfo.gmxport; in lio_setup_nic_devices()
1347 props->ifp = ifp; in lio_setup_nic_devices()
1349 lio->linfo.num_rxpciq = num_oqueues; in lio_setup_nic_devices()
1350 lio->linfo.num_txpciq = num_iqueues; in lio_setup_nic_devices()
1352 lio->linfo.rxpciq[j].rxpciq64 = in lio_setup_nic_devices()
1353 resp->cfg_info.linfo.rxpciq[j].rxpciq64; in lio_setup_nic_devices()
1357 lio->linfo.txpciq[j].txpciq64 = in lio_setup_nic_devices()
1358 resp->cfg_info.linfo.txpciq[j].txpciq64; in lio_setup_nic_devices()
1361 lio->linfo.hw_addr = resp->cfg_info.linfo.hw_addr; in lio_setup_nic_devices()
1362 lio->linfo.gmxport = resp->cfg_info.linfo.gmxport; in lio_setup_nic_devices()
1363 lio->linfo.link.link_status64 = in lio_setup_nic_devices()
1364 resp->cfg_info.linfo.link.link_status64; in lio_setup_nic_devices()
1370 lio->oct_dev = octeon_dev; in lio_setup_nic_devices()
1371 lio->ifp = ifp; in lio_setup_nic_devices()
1374 lio->linfo.gmxport, LIO_CAST64(lio->linfo.hw_addr)); in lio_setup_nic_devices()
1376 /* 64-bit swap required on LE machines */ in lio_setup_nic_devices()
1377 lio_swap_8B_data(&lio->linfo.hw_addr, 1); in lio_setup_nic_devices()
1380 ((uint8_t *)&lio->linfo.hw_addr) + 2 + j)); in lio_setup_nic_devices()
1388 lio->txq = lio->linfo.txpciq[0].s.q_no; in lio_setup_nic_devices()
1389 lio->rxq = lio->linfo.rxpciq[0].s.q_no; in lio_setup_nic_devices()
1390 if (lio_setup_io_queues(octeon_dev, i, lio->linfo.num_txpciq, in lio_setup_nic_devices()
1391 lio->linfo.num_rxpciq)) { in lio_setup_nic_devices()
1398 lio->tx_qsize = lio_get_tx_qsize(octeon_dev, lio->txq); in lio_setup_nic_devices()
1399 lio->rx_qsize = lio_get_rx_qsize(octeon_dev, lio->rxq); in lio_setup_nic_devices()
1426 lio->link_changes++; in lio_setup_nic_devices()
1453 lio->vlan_attach = in lio_setup_nic_devices()
1457 lio->vlan_detach = in lio_setup_nic_devices()
1463 callout_init(&lio->stats_timer, 0); in lio_setup_nic_devices()
1464 lio->stats_interval = LIO_DEFAULT_STATS_INTERVAL; in lio_setup_nic_devices()
1475 while (i--) { in lio_setup_nic_devices()
1487 struct lio_recv_pkt *recv_pkt = recv_info->recv_pkt; in lio_link_info()
1492 if (recv_pkt->buffer_size[0] != (sizeof(*ls) + LIO_DROQ_INFO_SIZE)) { in lio_link_info()
1494 recv_pkt->buffer_size[0], in lio_link_info()
1495 recv_pkt->rh.r_nic_info.gmxport); in lio_link_info()
1498 gmxport = recv_pkt->rh.r_nic_info.gmxport; in lio_link_info()
1499 ls = (union octeon_link_status *)(recv_pkt->buffer_ptr[0]->m_data + in lio_link_info()
1504 if (oct->props.gmxport == gmxport) in lio_link_info()
1505 lio_update_link_status(oct->props.ifp, ls); in lio_link_info()
1508 for (i = 0; i < recv_pkt->buffer_count; i++) in lio_link_info()
1509 lio_recv_buffer_free(recv_pkt->buffer_ptr[i]); in lio_link_info()
1519 bus_dmamap_sync(iq->txtag, finfo->map, BUS_DMASYNC_POSTWRITE); in lio_free_mbuf()
1520 bus_dmamap_unload(iq->txtag, finfo->map); in lio_free_mbuf()
1521 m_freem(finfo->mb); in lio_free_mbuf()
1532 g = finfo->g; in lio_free_sgmbuf()
1533 iq_no = iq->txpciq.s.q_no; in lio_free_sgmbuf()
1534 oct = iq->oct_dev; in lio_free_sgmbuf()
1535 lio = if_getsoftc(oct->props.ifp); in lio_free_sgmbuf()
1537 mtx_lock(&lio->glist_lock[iq_no]); in lio_free_sgmbuf()
1538 STAILQ_INSERT_TAIL(&lio->ghead[iq_no], &g->node, entries); in lio_free_sgmbuf()
1539 mtx_unlock(&lio->glist_lock[iq_no]); in lio_free_sgmbuf()
1541 bus_dmamap_sync(iq->txtag, finfo->map, BUS_DMASYNC_POSTWRITE); in lio_free_sgmbuf()
1542 bus_dmamap_unload(iq->txtag, finfo->map); in lio_free_sgmbuf()
1543 m_freem(finfo->mb); in lio_free_sgmbuf()
1553 resp = (struct lio_if_cfg_resp *)sc->virtrptr; in lio_if_cfg_callback()
1554 ctx = (struct lio_if_cfg_context *)sc->ctxptr; in lio_if_cfg_callback()
1556 oct = lio_get_device(ctx->octeon_id); in lio_if_cfg_callback()
1557 if (resp->status) in lio_if_cfg_callback()
1559 LIO_CAST64(resp->status), status); in lio_if_cfg_callback()
1560 ctx->cond = 1; in lio_if_cfg_callback()
1562 snprintf(oct->fw_info.lio_firmware_version, 32, "%s", in lio_if_cfg_callback()
1563 resp->cfg_info.lio_firmware_version); in lio_if_cfg_callback()
1585 if_t ifp = lio->ifp; in lio_open()
1586 struct octeon_device *oct = lio->oct_dev; in lio_open()
1593 lio->intf_open = 1; in lio_open()
1601 memcpy(mac_old, ((uint8_t *)&lio->linfo.hw_addr) + 2, ETHER_HDR_LEN); in lio_open()
1620 struct octeon_device *oct = lio->oct_dev; in lio_set_rxcsum_command()
1626 nctrl.iq_no = lio->linfo.txpciq[0].s.q_no; in lio_set_rxcsum_command()
1631 ret = lio_send_ctrl_pkt(lio->oct_dev, &nctrl); in lio_set_rxcsum_command()
1647 if (!oct->ifcount) { in lio_stop_nic_module()
1652 mtx_lock(&oct->cmd_resp_wqlock); in lio_stop_nic_module()
1653 oct->cmd_resp_state = LIO_DRV_OFFLINE; in lio_stop_nic_module()
1654 mtx_unlock(&oct->cmd_resp_wqlock); in lio_stop_nic_module()
1656 for (i = 0; i < oct->ifcount; i++) { in lio_stop_nic_module()
1657 lio = if_getsoftc(oct->props.ifp); in lio_stop_nic_module()
1658 for (j = 0; j < oct->num_oqs; j++) in lio_stop_nic_module()
1660 lio->linfo.rxpciq[j].s.q_no); in lio_stop_nic_module()
1663 callout_drain(&lio->stats_timer); in lio_stop_nic_module()
1665 for (i = 0; i < oct->ifcount; i++) in lio_stop_nic_module()
1679 if (lio->glist_lock != NULL) { in lio_delete_glists()
1680 free((void *)lio->glist_lock, M_DEVBUF); in lio_delete_glists()
1681 lio->glist_lock = NULL; in lio_delete_glists()
1684 if (lio->ghead == NULL) in lio_delete_glists()
1687 for (i = 0; i < lio->linfo.num_txpciq; i++) { in lio_delete_glists()
1690 lio_delete_first_node(&lio->ghead[i]); in lio_delete_glists()
1694 if ((lio->glists_virt_base != NULL) && in lio_delete_glists()
1695 (lio->glists_virt_base[i] != NULL)) { in lio_delete_glists()
1696 lio_dma_free(lio->glist_entry_size * lio->tx_qsize, in lio_delete_glists()
1697 lio->glists_virt_base[i]); in lio_delete_glists()
1701 free(lio->glists_virt_base, M_DEVBUF); in lio_delete_glists()
1702 lio->glists_virt_base = NULL; in lio_delete_glists()
1704 free(lio->glists_dma_base, M_DEVBUF); in lio_delete_glists()
1705 lio->glists_dma_base = NULL; in lio_delete_glists()
1707 free(lio->ghead, M_DEVBUF); in lio_delete_glists()
1708 lio->ghead = NULL; in lio_delete_glists()
1717 lio->glist_lock = malloc(num_iqs * sizeof(*lio->glist_lock), M_DEVBUF, in lio_setup_glists()
1719 if (lio->glist_lock == NULL) in lio_setup_glists()
1722 lio->ghead = malloc(num_iqs * sizeof(*lio->ghead), M_DEVBUF, in lio_setup_glists()
1724 if (lio->ghead == NULL) { in lio_setup_glists()
1725 free((void *)lio->glist_lock, M_DEVBUF); in lio_setup_glists()
1726 lio->glist_lock = NULL; in lio_setup_glists()
1730 lio->glist_entry_size = ROUNDUP8((ROUNDUP4(LIO_MAX_SG) >> 2) * in lio_setup_glists()
1736 lio->glists_virt_base = malloc(num_iqs * sizeof(void *), M_DEVBUF, in lio_setup_glists()
1738 lio->glists_dma_base = malloc(num_iqs * sizeof(vm_paddr_t), M_DEVBUF, in lio_setup_glists()
1740 if ((lio->glists_virt_base == NULL) || (lio->glists_dma_base == NULL)) { in lio_setup_glists()
1746 mtx_init(&lio->glist_lock[i], "glist_lock", NULL, MTX_DEF); in lio_setup_glists()
1748 STAILQ_INIT(&lio->ghead[i]); in lio_setup_glists()
1750 lio->glists_virt_base[i] = in lio_setup_glists()
1751 lio_dma_alloc(lio->glist_entry_size * lio->tx_qsize, in lio_setup_glists()
1752 (vm_paddr_t *)&lio->glists_dma_base[i]); in lio_setup_glists()
1753 if (lio->glists_virt_base[i] == NULL) { in lio_setup_glists()
1758 for (j = 0; j < lio->tx_qsize; j++) { in lio_setup_glists()
1763 g->sg = (struct lio_sg_entry *)(uintptr_t) in lio_setup_glists()
1764 ((uint64_t)(uintptr_t)lio->glists_virt_base[i] + in lio_setup_glists()
1765 (j * lio->glist_entry_size)); in lio_setup_glists()
1766 g->sg_dma_ptr = (uint64_t)lio->glists_dma_base[i] + in lio_setup_glists()
1767 (j * lio->glist_entry_size); in lio_setup_glists()
1768 STAILQ_INSERT_TAIL(&lio->ghead[i], &g->node, entries); in lio_setup_glists()
1771 if (j != lio->tx_qsize) { in lio_setup_glists()
1784 struct octeon_device *oct = lio->oct_dev; in lio_stop()
1789 lio->intf_open = 0; in lio_stop()
1790 lio->linfo.link.s.link_up = 0; in lio_stop()
1791 lio->link_changes++; in lio_stop()
1805 struct octeon_device *oct = lio->oct_dev; in lio_check_rx_oom_status()
1809 for (q = 0; q < oct->num_oqs; q++) { in lio_check_rx_oom_status()
1810 q_no = lio->linfo.rxpciq[q].s.q_no; in lio_check_rx_oom_status()
1811 droq = oct->droq[q_no]; in lio_check_rx_oom_status()
1814 if (lio_read_csr32(oct, droq->pkts_credit_reg) <= 0x40) { in lio_check_rx_oom_status()
1815 mtx_lock(&droq->lock); in lio_check_rx_oom_status()
1823 lio_write_csr32(oct, droq->pkts_credit_reg, in lio_check_rx_oom_status()
1827 mtx_unlock(&droq->lock); in lio_check_rx_oom_status()
1836 struct lio *lio = rx_status_tq->ctxptr; in lio_poll_check_rx_oom_status()
1841 taskqueue_enqueue_timeout(rx_status_tq->tq, &rx_status_tq->work, in lio_poll_check_rx_oom_status()
1849 struct octeon_device *oct = lio->oct_dev; in lio_setup_rx_oom_poll_fn()
1852 rx_status_tq = &lio->rx_status_tq; in lio_setup_rx_oom_poll_fn()
1854 rx_status_tq->tq = taskqueue_create("lio_rx_oom_status", M_WAITOK, in lio_setup_rx_oom_poll_fn()
1856 &rx_status_tq->tq); in lio_setup_rx_oom_poll_fn()
1858 TIMEOUT_TASK_INIT(rx_status_tq->tq, &rx_status_tq->work, 0, in lio_setup_rx_oom_poll_fn()
1861 rx_status_tq->ctxptr = lio; in lio_setup_rx_oom_poll_fn()
1863 taskqueue_start_threads(&rx_status_tq->tq, 1, PI_NET, in lio_setup_rx_oom_poll_fn()
1865 oct->octeon_id); in lio_setup_rx_oom_poll_fn()
1867 taskqueue_enqueue_timeout(rx_status_tq->tq, &rx_status_tq->work, in lio_setup_rx_oom_poll_fn()
1878 if (lio->rx_status_tq.tq != NULL) { in lio_cleanup_rx_oom_poll_fn()
1879 while (taskqueue_cancel_timeout(lio->rx_status_tq.tq, in lio_cleanup_rx_oom_poll_fn()
1880 &lio->rx_status_tq.work, NULL)) in lio_cleanup_rx_oom_poll_fn()
1881 taskqueue_drain_timeout(lio->rx_status_tq.tq, in lio_cleanup_rx_oom_poll_fn()
1882 &lio->rx_status_tq.work); in lio_cleanup_rx_oom_poll_fn()
1884 taskqueue_free(lio->rx_status_tq.tq); in lio_cleanup_rx_oom_poll_fn()
1886 lio->rx_status_tq.tq = NULL; in lio_cleanup_rx_oom_poll_fn()
1893 if_t ifp = oct->props.ifp; in lio_destroy_nic_device()
1908 if (atomic_load_acq_int(&lio->ifstate) & LIO_IFSTATE_RUNNING) in lio_destroy_nic_device()
1920 if (atomic_load_acq_int(&lio->ifstate) & LIO_IFSTATE_REGISTERED) in lio_destroy_nic_device()
1929 EVENTHANDLER_DEREGISTER(vlan_config, lio->vlan_attach); in lio_destroy_nic_device()
1930 EVENTHANDLER_DEREGISTER(vlan_unconfig, lio->vlan_detach); in lio_destroy_nic_device()
1936 oct->props.gmxport = -1; in lio_destroy_nic_device()
1938 oct->props.ifp = NULL; in lio_destroy_nic_device()
1948 struct octeon_link_info *linfo = &lio->linfo; in print_link_info()
1950 if (linfo->link.s.link_up) { in print_link_info()
1951 lio_dev_info(lio->oct_dev, "%d Mbps %s Duplex UP\n", in print_link_info()
1952 linfo->link.s.speed, in print_link_info()
1953 (linfo->link.s.duplex) ? "Full" : "Half"); in print_link_info()
1955 lio_dev_info(lio->oct_dev, "Link Down\n"); in print_link_info()
1964 int changed = (lio->linfo.link.link_status64 != ls->link_status64); in lio_update_link_status()
1966 lio->linfo.link.link_status64 = ls->link_status64; in lio_update_link_status()
1968 if ((lio->intf_open) && (changed)) { in lio_update_link_status()
1970 lio->link_changes++; in lio_update_link_status()
1971 if (lio->linfo.link.s.link_up) in lio_update_link_status()
1989 ctx = (struct lio_rx_ctl_context *)sc->ctxptr; in lio_rx_ctl_callback()
1991 oct = lio_get_device(ctx->octeon_id); in lio_rx_ctl_callback()
1995 ctx->cond = 1; in lio_rx_ctl_callback()
2010 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in lio_send_rx_ctrl_cmd()
2014 if (oct->props.rx_on == start_stop) in lio_send_rx_ctrl_cmd()
2021 ncmd = (union octeon_cmd *)sc->virtdptr; in lio_send_rx_ctrl_cmd()
2022 ctx = (struct lio_rx_ctl_context *)sc->ctxptr; in lio_send_rx_ctrl_cmd()
2024 ctx->cond = 0; in lio_send_rx_ctrl_cmd()
2025 ctx->octeon_id = lio_get_device_id(oct); in lio_send_rx_ctrl_cmd()
2026 ncmd->cmd64 = 0; in lio_send_rx_ctrl_cmd()
2027 ncmd->s.cmd = LIO_CMD_RX_CTL; in lio_send_rx_ctrl_cmd()
2028 ncmd->s.param1 = start_stop; in lio_send_rx_ctrl_cmd()
2032 sc->iq_no = lio->linfo.txpciq[0].s.q_no; in lio_send_rx_ctrl_cmd()
2037 sc->callback = lio_rx_ctl_callback; in lio_send_rx_ctrl_cmd()
2038 sc->callback_arg = sc; in lio_send_rx_ctrl_cmd()
2039 sc->wait_time = 5000; in lio_send_rx_ctrl_cmd()
2047 * response arrived or timed-out. in lio_send_rx_ctrl_cmd()
2049 lio_sleep_cond(oct, &ctx->cond); in lio_send_rx_ctrl_cmd()
2050 oct->props.rx_on = start_stop; in lio_send_rx_ctrl_cmd()
2061 struct octeon_device *oct = lio->oct_dev; in lio_vlan_rx_add_vid()
2075 nctrl.iq_no = lio->linfo.txpciq[0].s.q_no; in lio_vlan_rx_add_vid()
2080 ret = lio_send_ctrl_pkt(lio->oct_dev, &nctrl); in lio_vlan_rx_add_vid()
2092 struct octeon_device *oct = lio->oct_dev; in lio_vlan_rx_kill_vid()
2106 nctrl.iq_no = lio->linfo.txpciq[0].s.q_no; in lio_vlan_rx_kill_vid()
2111 ret = lio_send_ctrl_pkt(lio->oct_dev, &nctrl); in lio_vlan_rx_kill_vid()
2128 if (!(oct->io_qmask.oq & BIT_ULL(i))) in lio_wait_for_oq_pkts()
2131 pkt_cnt = lio_droq_check_hw_for_pkts(oct->droq[i]); in lio_wait_for_oq_pkts()
2134 taskqueue_enqueue(oct->droq[i]->droq_taskqueue, in lio_wait_for_oq_pkts()
2135 &oct->droq[i]->droq_task); in lio_wait_for_oq_pkts()
2141 } while (retry-- && pending_pkts); in lio_wait_for_oq_pkts()
2151 switch (atomic_load_acq_int(&oct->status)) { in lio_destroy_resources()
2155 atomic_store_rel_int(&oct->status, LIO_DEV_IN_RESET); in lio_destroy_resources()
2157 oct->app_mode = LIO_DRV_INVALID_APP; in lio_destroy_resources()
2159 lio_get_state_string(&oct->status)); in lio_destroy_resources()
2184 oct->fn_list.disable_io_queues(oct); in lio_destroy_resources()
2192 oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); in lio_destroy_resources()
2194 if (oct->msix_on) { in lio_destroy_resources()
2195 for (i = 0; i < oct->num_msix_irqs - 1; i++) { in lio_destroy_resources()
2196 if (oct->ioq_vector[i].tag != NULL) { in lio_destroy_resources()
2197 bus_teardown_intr(oct->device, in lio_destroy_resources()
2198 oct->ioq_vector[i].msix_res, in lio_destroy_resources()
2199 oct->ioq_vector[i].tag); in lio_destroy_resources()
2200 oct->ioq_vector[i].tag = NULL; in lio_destroy_resources()
2202 if (oct->ioq_vector[i].msix_res != NULL) { in lio_destroy_resources()
2203 bus_release_resource(oct->device, in lio_destroy_resources()
2205 oct->ioq_vector[i].vector, in lio_destroy_resources()
2206 oct->ioq_vector[i].msix_res); in lio_destroy_resources()
2207 oct->ioq_vector[i].msix_res = NULL; in lio_destroy_resources()
2210 /* non-iov vector's argument is oct struct */ in lio_destroy_resources()
2211 if (oct->tag != NULL) { in lio_destroy_resources()
2212 bus_teardown_intr(oct->device, oct->msix_res, in lio_destroy_resources()
2213 oct->tag); in lio_destroy_resources()
2214 oct->tag = NULL; in lio_destroy_resources()
2217 if (oct->msix_res != NULL) { in lio_destroy_resources()
2218 bus_release_resource(oct->device, SYS_RES_IRQ, in lio_destroy_resources()
2219 oct->aux_vector, in lio_destroy_resources()
2220 oct->msix_res); in lio_destroy_resources()
2221 oct->msix_res = NULL; in lio_destroy_resources()
2224 pci_release_msi(oct->device); in lio_destroy_resources()
2232 if (!(oct->io_qmask.oq & BIT_ULL(i))) in lio_destroy_resources()
2240 if (oct->droq[i] != NULL) { in lio_destroy_resources()
2241 free(oct->droq[i], M_DEVBUF); in lio_destroy_resources()
2242 oct->droq[i] = NULL; in lio_destroy_resources()
2250 if (!(oct->io_qmask.iq & BIT_ULL(i))) in lio_destroy_resources()
2259 if (oct->instr_queue[i] != NULL) { in lio_destroy_resources()
2260 free(oct->instr_queue[i], M_DEVBUF); in lio_destroy_resources()
2261 oct->instr_queue[i] = NULL; in lio_destroy_resources()
2282 oct->fn_list.soft_reset(oct); in lio_destroy_resources()
2290 pci_disable_busmaster(oct->device); in lio_destroy_resources()
2295 } /* end switch (oct->status) */ in lio_destroy_resources()