Lines Matching refs:ionic

54 	new_coal = ionic_coal_usec_to_hw(qcq->q.lif->ionic, cur_moder.usec);  in ionic_dim_work()
129 ionic_port_identify(lif->ionic); in ionic_link_status_check()
191 struct device *dev = lif->ionic->dev; in ionic_request_irq()
209 struct ionic *ionic = lif->ionic; in ionic_intr_alloc() local
212 index = find_first_zero_bit(ionic->intrs, ionic->nintrs); in ionic_intr_alloc()
213 if (index == ionic->nintrs) { in ionic_intr_alloc()
215 __func__, index, ionic->nintrs); in ionic_intr_alloc()
219 set_bit(index, ionic->intrs); in ionic_intr_alloc()
220 ionic_intr_init(&ionic->idev, intr, index); in ionic_intr_alloc()
225 static void ionic_intr_free(struct ionic *ionic, int index) in ionic_intr_free() argument
227 if (index != IONIC_INTR_INDEX_NOT_ASSIGNED && index < ionic->nintrs) in ionic_intr_free()
228 clear_bit(index, ionic->intrs); in ionic_intr_free()
249 idev = &lif->ionic->idev; in ionic_qcq_enable()
250 dev = lif->ionic->dev; in ionic_qcq_enable()
288 struct ionic_dev *idev = &lif->ionic->idev; in ionic_qcq_disable()
302 dev_dbg(lif->ionic->dev, "q_disable.index %d q_disable.qtype %d\n", in ionic_qcq_disable()
313 struct ionic_dev *idev = &lif->ionic->idev; in ionic_lif_qcq_deinit()
336 devm_free_irq(lif->ionic->dev, qcq->intr.vector, &qcq->napi); in ionic_qcq_intr_free()
338 ionic_intr_free(lif->ionic, qcq->intr.index); in ionic_qcq_intr_free()
344 struct device *dev = lif->ionic->dev; in ionic_qcq_free()
383 struct device *dev = lif->ionic->dev; in ionic_qcqs_free()
416 ionic_intr_free(n_qcq->cq.lif->ionic, n_qcq->intr.index); in ionic_link_qcq_interrupts()
440 err = ionic_bus_get_irq(lif->ionic, qcq->intr.index); in ionic_alloc_qcq_interrupt()
447 ionic_intr_mask_assert(lif->ionic->idev.intr_ctrl, qcq->intr.index, in ionic_alloc_qcq_interrupt()
458 dev_to_node(lif->ionic->dev)); in ionic_alloc_qcq_interrupt()
466 ionic_intr_free(lif->ionic, qcq->intr.index); in ionic_alloc_qcq_interrupt()
479 struct ionic_dev *idev = &lif->ionic->idev; in ionic_qcq_alloc()
480 struct device *dev = lif->ionic->dev; in ionic_qcq_alloc()
614 ionic_intr_free(lif->ionic, new->intr.index); in ionic_qcq_alloc()
627 struct device *dev = lif->ionic->dev; in ionic_qcqs_alloc()
641 if (lif->ionic->nnqs_per_lif) { in ionic_qcqs_alloc()
657 lif->txqcqs = devm_kcalloc(dev, lif->ionic->ntxqs_per_lif, in ionic_qcqs_alloc()
661 lif->rxqcqs = devm_kcalloc(dev, lif->ionic->nrxqs_per_lif, in ionic_qcqs_alloc()
666 lif->txqstats = devm_kcalloc(dev, lif->ionic->ntxqs_per_lif, in ionic_qcqs_alloc()
670 lif->rxqstats = devm_kcalloc(dev, lif->ionic->nrxqs_per_lif, in ionic_qcqs_alloc()
695 struct device *dev = lif->ionic->dev; in ionic_lif_txq_init()
756 struct device *dev = lif->ionic->dev; in ionic_lif_rxq_init()
833 dev_dbg(lif->ionic->dev, "notifyq event:\n"); in ionic_notifyq_service()
876 struct ionic_dev *idev = &lif->ionic->idev; in ionic_adminq_napi()
1255 struct device *dev = lif->ionic->dev; in ionic_set_nic_features()
1284 dev_info_once(lif->ionic->dev, "NIC is not supporting vlan offload, likely in SmartNIC mode\n"); in ionic_set_nic_features()
1586 tbl_sz = le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); in ionic_lif_rss_config()
1610 tbl_sz = le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); in ionic_lif_rss_init()
1621 tbl_sz = le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); in ionic_lif_rss_deinit()
1670 for (i = 0; i < lif->ionic->ntxqs_per_lif && lif->txqcqs[i]; i++) { in ionic_txrx_free()
1672 devm_kfree(lif->ionic->dev, lif->txqcqs[i]); in ionic_txrx_free()
1678 for (i = 0; i < lif->ionic->nrxqs_per_lif && lif->rxqcqs[i]; i++) { in ionic_txrx_free()
1680 devm_kfree(lif->ionic->dev, lif->rxqcqs[i]); in ionic_txrx_free()
1714 ionic_intr_coal_init(lif->ionic->idev.intr_ctrl, in ionic_txrx_alloc()
1735 ionic_intr_coal_init(lif->ionic->idev.intr_ctrl, in ionic_txrx_alloc()
1796 dev_err(lif->ionic->dev, "%s: bad qcq %d\n", __func__, i); in ionic_txrx_enable()
1905 struct ionic *ionic = lif->ionic; in ionic_get_vf_config() local
1911 down_read(&ionic->vf_op_lock); in ionic_get_vf_config()
1913 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) { in ionic_get_vf_config()
1917 ivf->vlan = le16_to_cpu(ionic->vfs[vf].vlanid); in ionic_get_vf_config()
1919 ivf->spoofchk = ionic->vfs[vf].spoofchk; in ionic_get_vf_config()
1920 ivf->linkstate = ionic->vfs[vf].linkstate; in ionic_get_vf_config()
1921 ivf->max_tx_rate = le32_to_cpu(ionic->vfs[vf].maxrate); in ionic_get_vf_config()
1922 ivf->trusted = ionic->vfs[vf].trusted; in ionic_get_vf_config()
1923 ether_addr_copy(ivf->mac, ionic->vfs[vf].macaddr); in ionic_get_vf_config()
1926 up_read(&ionic->vf_op_lock); in ionic_get_vf_config()
1934 struct ionic *ionic = lif->ionic; in ionic_get_vf_stats() local
1941 down_read(&ionic->vf_op_lock); in ionic_get_vf_stats()
1943 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) { in ionic_get_vf_stats()
1947 vs = &ionic->vfs[vf].stats; in ionic_get_vf_stats()
1963 up_read(&ionic->vf_op_lock); in ionic_get_vf_stats()
1970 struct ionic *ionic = lif->ionic; in ionic_set_vf_mac() local
1979 down_write(&ionic->vf_op_lock); in ionic_set_vf_mac()
1981 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) { in ionic_set_vf_mac()
1984 ret = ionic_set_vf_config(ionic, vf, IONIC_VF_ATTR_MAC, mac); in ionic_set_vf_mac()
1986 ether_addr_copy(ionic->vfs[vf].macaddr, mac); in ionic_set_vf_mac()
1989 up_write(&ionic->vf_op_lock); in ionic_set_vf_mac()
1997 struct ionic *ionic = lif->ionic; in ionic_set_vf_vlan() local
2013 down_write(&ionic->vf_op_lock); in ionic_set_vf_vlan()
2015 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) { in ionic_set_vf_vlan()
2018 ret = ionic_set_vf_config(ionic, vf, in ionic_set_vf_vlan()
2021 ionic->vfs[vf].vlanid = cpu_to_le16(vlan); in ionic_set_vf_vlan()
2024 up_write(&ionic->vf_op_lock); in ionic_set_vf_vlan()
2032 struct ionic *ionic = lif->ionic; in ionic_set_vf_rate() local
2042 down_write(&ionic->vf_op_lock); in ionic_set_vf_rate()
2044 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) { in ionic_set_vf_rate()
2047 ret = ionic_set_vf_config(ionic, vf, in ionic_set_vf_rate()
2050 lif->ionic->vfs[vf].maxrate = cpu_to_le32(tx_max); in ionic_set_vf_rate()
2053 up_write(&ionic->vf_op_lock); in ionic_set_vf_rate()
2060 struct ionic *ionic = lif->ionic; in ionic_set_vf_spoofchk() local
2067 down_write(&ionic->vf_op_lock); in ionic_set_vf_spoofchk()
2069 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) { in ionic_set_vf_spoofchk()
2072 ret = ionic_set_vf_config(ionic, vf, in ionic_set_vf_spoofchk()
2075 ionic->vfs[vf].spoofchk = data; in ionic_set_vf_spoofchk()
2078 up_write(&ionic->vf_op_lock); in ionic_set_vf_spoofchk()
2085 struct ionic *ionic = lif->ionic; in ionic_set_vf_trust() local
2092 down_write(&ionic->vf_op_lock); in ionic_set_vf_trust()
2094 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) { in ionic_set_vf_trust()
2097 ret = ionic_set_vf_config(ionic, vf, in ionic_set_vf_trust()
2100 ionic->vfs[vf].trusted = data; in ionic_set_vf_trust()
2103 up_write(&ionic->vf_op_lock); in ionic_set_vf_trust()
2110 struct ionic *ionic = lif->ionic; in ionic_set_vf_link_state() local
2131 down_write(&ionic->vf_op_lock); in ionic_set_vf_link_state()
2133 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) { in ionic_set_vf_link_state()
2136 ret = ionic_set_vf_config(ionic, vf, in ionic_set_vf_link_state()
2139 ionic->vfs[vf].linkstate = set; in ionic_set_vf_link_state()
2142 up_write(&ionic->vf_op_lock); in ionic_set_vf_link_state()
2207 tx_qcqs = devm_kcalloc(lif->ionic->dev, lif->ionic->ntxqs_per_lif, in ionic_reconfigure_queues()
2213 rx_qcqs = devm_kcalloc(lif->ionic->dev, lif->ionic->nrxqs_per_lif, in ionic_reconfigure_queues()
2296 for (i = 0; i < lif->ionic->ntxqs_per_lif; i++) { in ionic_reconfigure_queues()
2305 ionic_intr_coal_init(lif->ionic->idev.intr_ctrl, in ionic_reconfigure_queues()
2312 ionic_intr_coal_init(lif->ionic->idev.intr_ctrl, in ionic_reconfigure_queues()
2354 devm_kfree(lif->ionic->dev, tx_qcqs[i]); in ionic_reconfigure_queues()
2360 devm_kfree(lif->ionic->dev, rx_qcqs[i]); in ionic_reconfigure_queues()
2367 devm_kfree(lif->ionic->dev, rx_qcqs); in ionic_reconfigure_queues()
2371 devm_kfree(lif->ionic->dev, tx_qcqs); in ionic_reconfigure_queues()
2378 for (i = lif->nxqs; i < lif->ionic->ntxqs_per_lif; i++) { in ionic_reconfigure_queues()
2389 int ionic_lif_alloc(struct ionic *ionic) in ionic_lif_alloc() argument
2391 struct device *dev = ionic->dev; in ionic_lif_alloc()
2403 ionic->ntxqs_per_lif, ionic->ntxqs_per_lif); in ionic_lif_alloc()
2414 ionic->lif = lif; in ionic_lif_alloc()
2423 err = ionic_lif_identify(ionic, lif->lif_type, lif->identity); in ionic_lif_alloc()
2425 dev_err(ionic->dev, "Cannot identify type %d: %d\n", in ionic_lif_alloc()
2434 lif->neqs = ionic->neqs_per_lif; in ionic_lif_alloc()
2435 lif->nxqs = ionic->ntxqs_per_lif; in ionic_lif_alloc()
2437 lif->ionic = ionic; in ionic_lif_alloc()
2445 lif->rx_coalesce_hw = ionic_coal_usec_to_hw(lif->ionic, in ionic_lif_alloc()
2479 tbl_sz = le16_to_cpu(lif->ionic->ident.lif.eth.rss_ind_tbl_sz); in ionic_lif_alloc()
2511 struct ionic_dev *idev = &lif->ionic->idev; in ionic_lif_reset()
2513 mutex_lock(&lif->ionic->dev_cmd_lock); in ionic_lif_reset()
2515 ionic_dev_cmd_wait(lif->ionic, DEVCMD_TIMEOUT); in ionic_lif_reset()
2516 mutex_unlock(&lif->ionic->dev_cmd_lock); in ionic_lif_reset()
2521 struct ionic *ionic = lif->ionic; in ionic_lif_handle_fw_down() local
2526 dev_info(ionic->dev, "FW Down: Stopping LIFs\n"); in ionic_lif_handle_fw_down()
2531 dev_info(ionic->dev, "Surprise FW stop, stopping queues\n"); in ionic_lif_handle_fw_down()
2542 ionic_reset(ionic); in ionic_lif_handle_fw_down()
2545 dev_info(ionic->dev, "FW Down: LIFs stopped\n"); in ionic_lif_handle_fw_down()
2550 struct ionic *ionic = lif->ionic; in ionic_lif_handle_fw_up() local
2556 dev_info(ionic->dev, "FW Up: restarting LIFs\n"); in ionic_lif_handle_fw_up()
2558 ionic_init_devinfo(ionic); in ionic_lif_handle_fw_up()
2559 err = ionic_identify(ionic); in ionic_lif_handle_fw_up()
2562 err = ionic_port_identify(ionic); in ionic_lif_handle_fw_up()
2565 err = ionic_port_init(ionic); in ionic_lif_handle_fw_up()
2594 dev_info(ionic->dev, "FW Up: LIFs restarted\n"); in ionic_lif_handle_fw_up()
2605 dev_err(ionic->dev, "FW Up: LIFs restart failed - err %d\n", err); in ionic_lif_handle_fw_up()
2610 struct device *dev = lif->ionic->dev; in ionic_lif_free()
2630 ionic_bus_unmap_dbpage(lif->ionic, lif->kern_dbpage); in ionic_lif_free()
2663 struct device *dev = lif->ionic->dev; in ionic_lif_adminq_init()
2670 idev = &lif->ionic->idev; in ionic_lif_adminq_init()
2674 mutex_lock(&lif->ionic->dev_cmd_lock); in ionic_lif_adminq_init()
2676 err = ionic_dev_cmd_wait(lif->ionic, DEVCMD_TIMEOUT); in ionic_lif_adminq_init()
2678 mutex_unlock(&lif->ionic->dev_cmd_lock); in ionic_lif_adminq_init()
2708 struct device *dev = lif->ionic->dev; in ionic_lif_notifyq_init()
2808 struct ionic_dev *idev = &lif->ionic->idev; in ionic_lif_init()
2809 struct device *dev = lif->ionic->dev; in ionic_lif_init()
2814 mutex_lock(&lif->ionic->dev_cmd_lock); in ionic_lif_init()
2816 err = ionic_dev_cmd_wait(lif->ionic, DEVCMD_TIMEOUT); in ionic_lif_init()
2818 mutex_unlock(&lif->ionic->dev_cmd_lock); in ionic_lif_init()
2826 lif->dbid_count = le32_to_cpu(lif->ionic->ident.dev.ndbpgs_per_lif); in ionic_lif_init()
2843 lif->kern_dbpage = ionic_bus_map_dbpage(lif->ionic, dbpage_num); in ionic_lif_init()
2854 if (lif->ionic->nnqs_per_lif) { in ionic_lif_init()
2887 ionic_bus_unmap_dbpage(lif->ionic, lif->kern_dbpage); in ionic_lif_init()
2929 struct ionic *ionic = container_of(nb, struct ionic, nb); in ionic_lif_notify() local
2932 if (!lif || lif->ionic != ionic) in ionic_lif_notify()
2948 INIT_WORK(&lif->ionic->nb_work, ionic_lif_notify_work); in ionic_lif_register()
2950 lif->ionic->nb.notifier_call = ionic_lif_notify; in ionic_lif_register()
2952 err = register_netdevice_notifier(&lif->ionic->nb); in ionic_lif_register()
2954 lif->ionic->nb.notifier_call = NULL; in ionic_lif_register()
2959 dev_err(lif->ionic->dev, "Cannot register net device, aborting\n"); in ionic_lif_register()
2970 if (lif->ionic->nb.notifier_call) { in ionic_lif_unregister()
2971 unregister_netdevice_notifier(&lif->ionic->nb); in ionic_lif_unregister()
2972 cancel_work_sync(&lif->ionic->nb_work); in ionic_lif_unregister()
2973 lif->ionic->nb.notifier_call = NULL; in ionic_lif_unregister()
2984 struct ionic *ionic = lif->ionic; in ionic_lif_queue_identify() local
2989 idev = &lif->ionic->idev; in ionic_lif_queue_identify()
3008 mutex_lock(&ionic->dev_cmd_lock); in ionic_lif_queue_identify()
3011 err = ionic_dev_cmd_wait(ionic, DEVCMD_TIMEOUT); in ionic_lif_queue_identify()
3022 mutex_unlock(&ionic->dev_cmd_lock); in ionic_lif_queue_identify()
3025 dev_err(ionic->dev, "qtype %d not supported\n", qtype); in ionic_lif_queue_identify()
3028 dev_err(ionic->dev, "q_ident failed, not supported on older FW\n"); in ionic_lif_queue_identify()
3031 dev_err(ionic->dev, "q_ident failed, qtype %d: %d\n", in ionic_lif_queue_identify()
3036 dev_dbg(ionic->dev, " qtype[%d].version = %d\n", in ionic_lif_queue_identify()
3038 dev_dbg(ionic->dev, " qtype[%d].supported = 0x%02x\n", in ionic_lif_queue_identify()
3040 dev_dbg(ionic->dev, " qtype[%d].features = 0x%04llx\n", in ionic_lif_queue_identify()
3042 dev_dbg(ionic->dev, " qtype[%d].desc_sz = %d\n", in ionic_lif_queue_identify()
3044 dev_dbg(ionic->dev, " qtype[%d].comp_sz = %d\n", in ionic_lif_queue_identify()
3046 dev_dbg(ionic->dev, " qtype[%d].sg_desc_sz = %d\n", in ionic_lif_queue_identify()
3048 dev_dbg(ionic->dev, " qtype[%d].max_sg_elems = %d\n", in ionic_lif_queue_identify()
3050 dev_dbg(ionic->dev, " qtype[%d].sg_desc_stride = %d\n", in ionic_lif_queue_identify()
3055 int ionic_lif_identify(struct ionic *ionic, u8 lif_type, in ionic_lif_identify() argument
3058 struct ionic_dev *idev = &ionic->idev; in ionic_lif_identify()
3064 mutex_lock(&ionic->dev_cmd_lock); in ionic_lif_identify()
3066 err = ionic_dev_cmd_wait(ionic, DEVCMD_TIMEOUT); in ionic_lif_identify()
3068 mutex_unlock(&ionic->dev_cmd_lock); in ionic_lif_identify()
3072 dev_dbg(ionic->dev, "capabilities 0x%llx\n", in ionic_lif_identify()
3075 dev_dbg(ionic->dev, "eth.max_ucast_filters %d\n", in ionic_lif_identify()
3077 dev_dbg(ionic->dev, "eth.max_mcast_filters %d\n", in ionic_lif_identify()
3079 dev_dbg(ionic->dev, "eth.features 0x%llx\n", in ionic_lif_identify()
3081 dev_dbg(ionic->dev, "eth.queue_count[IONIC_QTYPE_ADMINQ] %d\n", in ionic_lif_identify()
3083 dev_dbg(ionic->dev, "eth.queue_count[IONIC_QTYPE_NOTIFYQ] %d\n", in ionic_lif_identify()
3085 dev_dbg(ionic->dev, "eth.queue_count[IONIC_QTYPE_RXQ] %d\n", in ionic_lif_identify()
3087 dev_dbg(ionic->dev, "eth.queue_count[IONIC_QTYPE_TXQ] %d\n", in ionic_lif_identify()
3089 dev_dbg(ionic->dev, "eth.config.name %s\n", lid->eth.config.name); in ionic_lif_identify()
3090 dev_dbg(ionic->dev, "eth.config.mac %pM\n", lid->eth.config.mac); in ionic_lif_identify()
3091 dev_dbg(ionic->dev, "eth.config.mtu %d\n", in ionic_lif_identify()
3097 int ionic_lif_size(struct ionic *ionic) in ionic_lif_size() argument
3099 struct ionic_identity *ident = &ionic->ident; in ionic_lif_size()
3133 err = ionic_bus_alloc_irq_vectors(ionic, nintrs); in ionic_lif_size()
3135 dev_err(ionic->dev, "Can't get intrs from OS: %d\n", err); in ionic_lif_size()
3142 ionic_bus_free_irq_vectors(ionic); in ionic_lif_size()
3146 ionic->nnqs_per_lif = nnqs_per_lif; in ionic_lif_size()
3147 ionic->neqs_per_lif = neqs; in ionic_lif_size()
3148 ionic->ntxqs_per_lif = nxqs; in ionic_lif_size()
3149 ionic->nrxqs_per_lif = nxqs; in ionic_lif_size()
3150 ionic->nintrs = nintrs; in ionic_lif_size()
3152 ionic_debugfs_add_sizes(ionic); in ionic_lif_size()
3169 dev_err(ionic->dev, "Can't get minimum %d intrs from OS\n", min_intrs); in ionic_lif_size()