Lines Matching refs:lif

15 static int ionic_lif_addr_add(struct ionic_lif *lif, const uint8_t *addr);
16 static int ionic_lif_addr_del(struct ionic_lif *lif, const uint8_t *addr);
22 struct ionic_lif *lif = q->lif; in ionic_qcq_enable() local
23 struct ionic_dev *idev = &lif->adapter->idev; in ionic_qcq_enable()
28 .lif_index = lif->index, in ionic_qcq_enable()
40 return ionic_adminq_post_wait(lif, &ctx); in ionic_qcq_enable()
47 struct ionic_lif *lif = q->lif; in ionic_qcq_disable() local
48 struct ionic_dev *idev = &lif->adapter->idev; in ionic_qcq_disable()
53 .lif_index = lif->index, in ionic_qcq_disable()
65 return ionic_adminq_post_wait(lif, &ctx); in ionic_qcq_disable()
69 ionic_lif_stop(struct ionic_lif *lif __rte_unused) in ionic_lif_stop()
77 ionic_lif_reset(struct ionic_lif *lif) in ionic_lif_reset() argument
79 struct ionic_dev *idev = &lif->adapter->idev; in ionic_lif_reset()
83 ionic_dev_cmd_lif_reset(idev, lif->index); in ionic_lif_reset()
88 ionic_lif_get_abs_stats(const struct ionic_lif *lif, struct rte_eth_stats *stats) in ionic_lif_get_abs_stats() argument
90 struct ionic_lif_stats *ls = &lif->info->stats; in ionic_lif_get_abs_stats()
92 uint32_t num_rx_q_counters = RTE_MIN(lif->nrxqcqs, (uint32_t) in ionic_lif_get_abs_stats()
94 uint32_t num_tx_q_counters = RTE_MIN(lif->ntxqcqs, (uint32_t) in ionic_lif_get_abs_stats()
101 lif->port_id); in ionic_lif_get_abs_stats()
115 for (i = 0; i < lif->nrxqcqs; i++) { in ionic_lif_get_abs_stats()
116 struct ionic_rx_stats *rx_stats = &lif->rxqcqs[i]->stats.rx; in ionic_lif_get_abs_stats()
137 struct ionic_rx_stats *rx_stats = &lif->rxqcqs[i]->stats.rx; in ionic_lif_get_abs_stats()
157 for (i = 0; i < lif->ntxqcqs; i++) { in ionic_lif_get_abs_stats()
158 struct ionic_tx_stats *tx_stats = &lif->txqcqs[i]->stats.tx; in ionic_lif_get_abs_stats()
174 struct ionic_tx_stats *tx_stats = &lif->txqcqs[i]->stats.tx; in ionic_lif_get_abs_stats()
181 ionic_lif_get_stats(const struct ionic_lif *lif, in ionic_lif_get_stats() argument
184 ionic_lif_get_abs_stats(lif, stats); in ionic_lif_get_stats()
186 stats->ipackets -= lif->stats_base.ipackets; in ionic_lif_get_stats()
187 stats->opackets -= lif->stats_base.opackets; in ionic_lif_get_stats()
188 stats->ibytes -= lif->stats_base.ibytes; in ionic_lif_get_stats()
189 stats->obytes -= lif->stats_base.obytes; in ionic_lif_get_stats()
190 stats->imissed -= lif->stats_base.imissed; in ionic_lif_get_stats()
191 stats->ierrors -= lif->stats_base.ierrors; in ionic_lif_get_stats()
192 stats->oerrors -= lif->stats_base.oerrors; in ionic_lif_get_stats()
193 stats->rx_nombuf -= lif->stats_base.rx_nombuf; in ionic_lif_get_stats()
197 ionic_lif_reset_stats(struct ionic_lif *lif) in ionic_lif_reset_stats() argument
201 for (i = 0; i < lif->nrxqcqs; i++) { in ionic_lif_reset_stats()
202 memset(&lif->rxqcqs[i]->stats.rx, 0, in ionic_lif_reset_stats()
204 memset(&lif->txqcqs[i]->stats.tx, 0, in ionic_lif_reset_stats()
208 ionic_lif_get_abs_stats(lif, &lif->stats_base); in ionic_lif_reset_stats()
212 ionic_lif_get_hw_stats(struct ionic_lif *lif, struct ionic_lif_stats *stats) in ionic_lif_get_hw_stats() argument
216 uint64_t *lif_stats64 = (uint64_t *)&lif->info->stats; in ionic_lif_get_hw_stats()
217 uint64_t *lif_stats64_base = (uint64_t *)&lif->lif_stats_base; in ionic_lif_get_hw_stats()
224 ionic_lif_reset_hw_stats(struct ionic_lif *lif) in ionic_lif_reset_hw_stats() argument
227 uint64_t *lif_stats64 = (uint64_t *)&lif->info->stats; in ionic_lif_reset_hw_stats()
228 uint64_t *lif_stats64_base = (uint64_t *)&lif->lif_stats_base; in ionic_lif_reset_hw_stats()
235 ionic_lif_addr_add(struct ionic_lif *lif, const uint8_t *addr) in ionic_lif_addr_add() argument
248 err = ionic_adminq_post_wait(lif, &ctx); in ionic_lif_addr_add()
255 return ionic_rx_filter_save(lif, 0, IONIC_RXQ_INDEX_ANY, &ctx); in ionic_lif_addr_add()
259 ionic_lif_addr_del(struct ionic_lif *lif, const uint8_t *addr) in ionic_lif_addr_del() argument
272 rte_spinlock_lock(&lif->rx_filters.lock); in ionic_lif_addr_del()
274 f = ionic_rx_filter_by_addr(lif, addr); in ionic_lif_addr_del()
276 rte_spinlock_unlock(&lif->rx_filters.lock); in ionic_lif_addr_del()
283 rte_spinlock_unlock(&lif->rx_filters.lock); in ionic_lif_addr_del()
285 err = ionic_adminq_post_wait(lif, &ctx); in ionic_lif_addr_del()
300 struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); in ionic_dev_add_mac() local
304 return ionic_lif_addr_add(lif, (const uint8_t *)mac_addr); in ionic_dev_add_mac()
310 struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); in ionic_dev_remove_mac() local
311 struct ionic_adapter *adapter = lif->adapter; in ionic_dev_remove_mac()
325 ionic_lif_addr_del(lif, (const uint8_t *) in ionic_dev_remove_mac()
332 struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); in ionic_dev_set_mac() local
341 if (!rte_is_zero_ether_addr((struct rte_ether_addr *)lif->mac_addr)) { in ionic_dev_set_mac()
343 lif->mac_addr); in ionic_dev_set_mac()
344 ionic_lif_addr_del(lif, lif->mac_addr); in ionic_dev_set_mac()
345 memset(lif->mac_addr, 0, RTE_ETHER_ADDR_LEN); in ionic_dev_set_mac()
350 rte_ether_addr_copy(mac_addr, (struct rte_ether_addr *)lif->mac_addr); in ionic_dev_set_mac()
352 return ionic_lif_addr_add(lif, (const uint8_t *)mac_addr); in ionic_dev_set_mac()
356 ionic_vlan_rx_add_vid(struct ionic_lif *lif, uint16_t vid) in ionic_vlan_rx_add_vid() argument
368 err = ionic_adminq_post_wait(lif, &ctx); in ionic_vlan_rx_add_vid()
375 return ionic_rx_filter_save(lif, 0, IONIC_RXQ_INDEX_ANY, &ctx); in ionic_vlan_rx_add_vid()
379 ionic_vlan_rx_kill_vid(struct ionic_lif *lif, uint16_t vid) in ionic_vlan_rx_kill_vid() argument
392 rte_spinlock_lock(&lif->rx_filters.lock); in ionic_vlan_rx_kill_vid()
394 f = ionic_rx_filter_by_vlan(lif, vid); in ionic_vlan_rx_kill_vid()
396 rte_spinlock_unlock(&lif->rx_filters.lock); in ionic_vlan_rx_kill_vid()
402 rte_spinlock_unlock(&lif->rx_filters.lock); in ionic_vlan_rx_kill_vid()
404 err = ionic_adminq_post_wait(lif, &ctx); in ionic_vlan_rx_kill_vid()
418 struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); in ionic_dev_vlan_filter_set() local
422 err = ionic_vlan_rx_add_vid(lif, vlan_id); in ionic_dev_vlan_filter_set()
424 err = ionic_vlan_rx_kill_vid(lif, vlan_id); in ionic_dev_vlan_filter_set()
430 ionic_lif_rx_mode(struct ionic_lif *lif, uint32_t rx_mode) in ionic_lif_rx_mode() argument
436 .lif_index = lif->index, in ionic_lif_rx_mode()
453 err = ionic_adminq_post_wait(lif, &ctx); in ionic_lif_rx_mode()
459 ionic_set_rx_mode(struct ionic_lif *lif, uint32_t rx_mode) in ionic_set_rx_mode() argument
461 if (lif->rx_mode != rx_mode) { in ionic_set_rx_mode()
462 lif->rx_mode = rx_mode; in ionic_set_rx_mode()
463 ionic_lif_rx_mode(lif, rx_mode); in ionic_set_rx_mode()
470 struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); in ionic_dev_promiscuous_enable() local
471 uint32_t rx_mode = lif->rx_mode; in ionic_dev_promiscuous_enable()
477 ionic_set_rx_mode(lif, rx_mode); in ionic_dev_promiscuous_enable()
485 struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); in ionic_dev_promiscuous_disable() local
486 uint32_t rx_mode = lif->rx_mode; in ionic_dev_promiscuous_disable()
490 ionic_set_rx_mode(lif, rx_mode); in ionic_dev_promiscuous_disable()
498 struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); in ionic_dev_allmulticast_enable() local
499 uint32_t rx_mode = lif->rx_mode; in ionic_dev_allmulticast_enable()
503 ionic_set_rx_mode(lif, rx_mode); in ionic_dev_allmulticast_enable()
511 struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); in ionic_dev_allmulticast_disable() local
512 uint32_t rx_mode = lif->rx_mode; in ionic_dev_allmulticast_disable()
516 ionic_set_rx_mode(lif, rx_mode); in ionic_dev_allmulticast_disable()
522 ionic_lif_change_mtu(struct ionic_lif *lif, int new_mtu) in ionic_lif_change_mtu() argument
528 .index = lif->index, in ionic_lif_change_mtu()
535 err = ionic_adminq_post_wait(lif, &ctx); in ionic_lif_change_mtu()
539 lif->mtu = new_mtu; in ionic_lif_change_mtu()
545 ionic_intr_alloc(struct ionic_lif *lif, struct ionic_intr_info *intr) in ionic_intr_alloc() argument
547 struct ionic_adapter *adapter = lif->adapter; in ionic_intr_alloc()
572 ionic_intr_free(struct ionic_lif *lif, struct ionic_intr_info *intr) in ionic_intr_free() argument
575 lif->adapter->intrs[intr->index] = false; in ionic_intr_free()
579 ionic_qcq_alloc(struct ionic_lif *lif, uint8_t type, in ionic_qcq_alloc() argument
588 struct ionic_dev *idev = &lif->adapter->idev; in ionic_qcq_alloc()
624 new->lif = lif; in ionic_qcq_alloc()
635 err = ionic_q_init(lif, idev, &new->q, index, num_descs, in ionic_qcq_alloc()
643 err = ionic_intr_alloc(lif, &new->intr); in ionic_qcq_alloc()
653 err = ionic_cq_init(lif, &new->cq, &new->intr, in ionic_qcq_alloc()
660 new->base_z = rte_eth_dma_zone_reserve(lif->eth_dev, in ionic_qcq_alloc()
701 ionic_intr_free(lif, &new->intr); in ionic_qcq_alloc()
725 ionic_rx_qcq_alloc(struct ionic_lif *lif, uint32_t index, uint16_t nrxq_descs, in ionic_rx_qcq_alloc() argument
732 err = ionic_qcq_alloc(lif, IONIC_QTYPE_RXQ, index, "rx", flags, in ionic_rx_qcq_alloc()
737 lif->kern_pid, &lif->rxqcqs[index]); in ionic_rx_qcq_alloc()
741 *qcq = lif->rxqcqs[index]; in ionic_rx_qcq_alloc()
747 ionic_tx_qcq_alloc(struct ionic_lif *lif, uint32_t index, uint16_t ntxq_descs, in ionic_tx_qcq_alloc() argument
754 err = ionic_qcq_alloc(lif, IONIC_QTYPE_TXQ, index, "tx", flags, in ionic_tx_qcq_alloc()
759 lif->kern_pid, &lif->txqcqs[index]); in ionic_tx_qcq_alloc()
763 *qcq = lif->txqcqs[index]; in ionic_tx_qcq_alloc()
769 ionic_admin_qcq_alloc(struct ionic_lif *lif) in ionic_admin_qcq_alloc() argument
775 err = ionic_qcq_alloc(lif, IONIC_QTYPE_ADMINQ, 0, "admin", flags, in ionic_admin_qcq_alloc()
780 lif->kern_pid, &lif->adminqcq); in ionic_admin_qcq_alloc()
788 ionic_notify_qcq_alloc(struct ionic_lif *lif) in ionic_notify_qcq_alloc() argument
795 err = ionic_qcq_alloc(lif, IONIC_QTYPE_NOTIFYQ, 0, "notify", in ionic_notify_qcq_alloc()
801 lif->kern_pid, &lif->notifyqcq); in ionic_notify_qcq_alloc()
820 ionic_lif_alloc(struct ionic_lif *lif) in ionic_lif_alloc() argument
822 struct ionic_adapter *adapter = lif->adapter; in ionic_lif_alloc()
827 snprintf(lif->name, sizeof(lif->name), "lif%u", lif->index); in ionic_lif_alloc()
831 rte_spinlock_init(&lif->adminq_lock); in ionic_lif_alloc()
832 rte_spinlock_init(&lif->adminq_service_lock); in ionic_lif_alloc()
834 lif->kern_pid = 0; in ionic_lif_alloc()
836 dbpage_num = ionic_db_page_num(lif, 0); in ionic_lif_alloc()
838 lif->kern_dbpage = ionic_bus_map_dbpage(adapter, dbpage_num); in ionic_lif_alloc()
839 if (!lif->kern_dbpage) { in ionic_lif_alloc()
844 lif->txqcqs = rte_zmalloc("ionic", sizeof(*lif->txqcqs) * in ionic_lif_alloc()
847 if (!lif->txqcqs) { in ionic_lif_alloc()
852 lif->rxqcqs = rte_zmalloc("ionic", sizeof(*lif->rxqcqs) * in ionic_lif_alloc()
855 if (!lif->rxqcqs) { in ionic_lif_alloc()
862 err = ionic_notify_qcq_alloc(lif); in ionic_lif_alloc()
872 err = ionic_admin_qcq_alloc(lif); in ionic_lif_alloc()
880 lif->info_sz = RTE_ALIGN(sizeof(*lif->info), PAGE_SIZE); in ionic_lif_alloc()
882 lif->info_z = rte_eth_dma_zone_reserve(lif->eth_dev, in ionic_lif_alloc()
884 lif->info_sz, IONIC_ALIGN, socket_id); in ionic_lif_alloc()
885 if (!lif->info_z) { in ionic_lif_alloc()
890 lif->info = lif->info_z->addr; in ionic_lif_alloc()
891 lif->info_pa = lif->info_z->iova; in ionic_lif_alloc()
897 ionic_lif_free(struct ionic_lif *lif) in ionic_lif_free() argument
899 if (lif->notifyqcq) { in ionic_lif_free()
900 ionic_qcq_free(lif->notifyqcq); in ionic_lif_free()
901 lif->notifyqcq = NULL; in ionic_lif_free()
904 if (lif->adminqcq) { in ionic_lif_free()
905 ionic_qcq_free(lif->adminqcq); in ionic_lif_free()
906 lif->adminqcq = NULL; in ionic_lif_free()
909 if (lif->txqcqs) { in ionic_lif_free()
910 rte_free(lif->txqcqs); in ionic_lif_free()
911 lif->txqcqs = NULL; in ionic_lif_free()
914 if (lif->rxqcqs) { in ionic_lif_free()
915 rte_free(lif->rxqcqs); in ionic_lif_free()
916 lif->rxqcqs = NULL; in ionic_lif_free()
919 if (lif->info) { in ionic_lif_free()
920 rte_memzone_free(lif->info_z); in ionic_lif_free()
921 lif->info = NULL; in ionic_lif_free()
926 ionic_lif_rss_config(struct ionic_lif *lif, in ionic_lif_rss_config() argument
935 .rss.addr = lif->rss_ind_tbl_pa, in ionic_lif_rss_config()
942 lif->rss_types = types; in ionic_lif_rss_config()
945 memcpy(lif->rss_hash_key, key, IONIC_RSS_HASH_KEY_SIZE); in ionic_lif_rss_config()
948 for (i = 0; i < lif->adapter->ident.lif.eth.rss_ind_tbl_sz; i++) in ionic_lif_rss_config()
949 lif->rss_ind_tbl[i] = indir[i]; in ionic_lif_rss_config()
951 memcpy(ctx.cmd.lif_setattr.rss.key, lif->rss_hash_key, in ionic_lif_rss_config()
954 return ionic_adminq_post_wait(lif, &ctx); in ionic_lif_rss_config()
958 ionic_lif_rss_setup(struct ionic_lif *lif) in ionic_lif_rss_setup() argument
960 size_t tbl_size = sizeof(*lif->rss_ind_tbl) * in ionic_lif_rss_setup()
961 lif->adapter->ident.lif.eth.rss_ind_tbl_sz; in ionic_lif_rss_setup()
975 lif->rss_ind_tbl_z = rte_eth_dma_zone_reserve(lif->eth_dev, in ionic_lif_rss_setup()
979 if (!lif->rss_ind_tbl_z) { in ionic_lif_rss_setup()
984 lif->rss_ind_tbl = lif->rss_ind_tbl_z->addr; in ionic_lif_rss_setup()
985 lif->rss_ind_tbl_pa = lif->rss_ind_tbl_z->iova; in ionic_lif_rss_setup()
988 for (i = 0; i < lif->adapter->ident.lif.eth.rss_ind_tbl_sz; i++) in ionic_lif_rss_setup()
989 lif->rss_ind_tbl[i] = i % lif->nrxqcqs; in ionic_lif_rss_setup()
991 err = ionic_lif_rss_config(lif, IONIC_RSS_OFFLOAD_ALL, in ionic_lif_rss_setup()
1000 ionic_lif_rss_teardown(struct ionic_lif *lif) in ionic_lif_rss_teardown() argument
1002 if (!lif->rss_ind_tbl) in ionic_lif_rss_teardown()
1005 if (lif->rss_ind_tbl_z) { in ionic_lif_rss_teardown()
1007 ionic_lif_rss_config(lif, 0x0, NULL, NULL); in ionic_lif_rss_teardown()
1009 lif->rss_ind_tbl = NULL; in ionic_lif_rss_teardown()
1010 lif->rss_ind_tbl_pa = 0; in ionic_lif_rss_teardown()
1011 rte_memzone_free(lif->rss_ind_tbl_z); in ionic_lif_rss_teardown()
1012 lif->rss_ind_tbl_z = NULL; in ionic_lif_rss_teardown()
1017 ionic_lif_qcq_deinit(struct ionic_lif *lif, struct ionic_qcq *qcq) in ionic_lif_qcq_deinit() argument
1019 struct ionic_dev *idev = &lif->adapter->idev; in ionic_lif_qcq_deinit()
1034 ionic_lif_qcq_deinit(qcq->lif, qcq); in ionic_lif_txq_deinit()
1040 ionic_lif_qcq_deinit(qcq->lif, qcq); in ionic_lif_rxq_deinit()
1072 ionic_link_status_check(struct ionic_lif *lif) in ionic_link_status_check() argument
1074 struct ionic_adapter *adapter = lif->adapter; in ionic_link_status_check()
1077 lif->state &= ~IONIC_LIF_F_LINK_CHECK_NEEDED; in ionic_link_status_check()
1079 if (!lif->info) in ionic_link_status_check()
1082 link_up = (lif->info->status.link_status == IONIC_PORT_OPER_STATUS_UP); in ionic_link_status_check()
1090 lif->info->status.link_speed); in ionic_link_status_check()
1091 adapter->link_speed = lif->info->status.link_speed; in ionic_link_status_check()
1104 struct ionic_lif *lif = cb_arg; in ionic_notifyq_cb() local
1110 if (!(cq_desc->event.eid > lif->last_eid)) in ionic_notifyq_cb()
1113 lif->last_eid = cq_desc->event.eid; in ionic_notifyq_cb()
1123 lif->state |= IONIC_LIF_F_LINK_CHECK_NEEDED; in ionic_notifyq_cb()
1136 ionic_notifyq_handler(struct ionic_lif *lif, int budget) in ionic_notifyq_handler() argument
1138 struct ionic_dev *idev = &lif->adapter->idev; in ionic_notifyq_handler()
1139 struct ionic_qcq *qcq = lif->notifyqcq; in ionic_notifyq_handler()
1150 work_done = ionic_qcq_service(qcq, budget, ionic_notifyq_cb, lif); in ionic_notifyq_handler()
1152 if (lif->state & IONIC_LIF_F_LINK_CHECK_NEEDED) in ionic_notifyq_handler()
1153 ionic_link_status_check(lif); in ionic_notifyq_handler()
1165 ionic_lif_adminq_init(struct ionic_lif *lif) in ionic_lif_adminq_init() argument
1167 struct ionic_dev *idev = &lif->adapter->idev; in ionic_lif_adminq_init()
1168 struct ionic_qcq *qcq = lif->adminqcq; in ionic_lif_adminq_init()
1173 ionic_dev_cmd_adminq_init(idev, qcq, lif->index, qcq->intr.index); in ionic_lif_adminq_init()
1182 q->db = ionic_db_map(lif, q); in ionic_lif_adminq_init()
1198 ionic_lif_notifyq_init(struct ionic_lif *lif) in ionic_lif_notifyq_init() argument
1200 struct ionic_dev *idev = &lif->adapter->idev; in ionic_lif_notifyq_init()
1201 struct ionic_qcq *qcq = lif->notifyqcq; in ionic_lif_notifyq_init()
1209 .lif_index = lif->index, in ionic_lif_notifyq_init()
1228 err = ionic_adminq_post_wait(lif, &ctx); in ionic_lif_notifyq_init()
1250 ionic_lif_set_features(struct ionic_lif *lif) in ionic_lif_set_features() argument
1256 .index = lif->index, in ionic_lif_set_features()
1258 .features = lif->features, in ionic_lif_set_features()
1263 err = ionic_adminq_post_wait(lif, &ctx); in ionic_lif_set_features()
1267 lif->hw_features = (ctx.cmd.lif_setattr.features & in ionic_lif_set_features()
1270 if (lif->hw_features & IONIC_ETH_HW_VLAN_TX_TAG) in ionic_lif_set_features()
1272 if (lif->hw_features & IONIC_ETH_HW_VLAN_RX_STRIP) in ionic_lif_set_features()
1274 if (lif->hw_features & IONIC_ETH_HW_VLAN_RX_FILTER) in ionic_lif_set_features()
1276 if (lif->hw_features & IONIC_ETH_HW_RX_HASH) in ionic_lif_set_features()
1278 if (lif->hw_features & IONIC_ETH_HW_TX_SG) in ionic_lif_set_features()
1280 if (lif->hw_features & IONIC_ETH_HW_RX_SG) in ionic_lif_set_features()
1282 if (lif->hw_features & IONIC_ETH_HW_TX_CSUM) in ionic_lif_set_features()
1284 if (lif->hw_features & IONIC_ETH_HW_RX_CSUM) in ionic_lif_set_features()
1286 if (lif->hw_features & IONIC_ETH_HW_TSO) in ionic_lif_set_features()
1288 if (lif->hw_features & IONIC_ETH_HW_TSO_IPV6) in ionic_lif_set_features()
1290 if (lif->hw_features & IONIC_ETH_HW_TSO_ECN) in ionic_lif_set_features()
1292 if (lif->hw_features & IONIC_ETH_HW_TSO_GRE) in ionic_lif_set_features()
1294 if (lif->hw_features & IONIC_ETH_HW_TSO_GRE_CSUM) in ionic_lif_set_features()
1296 if (lif->hw_features & IONIC_ETH_HW_TSO_IPXIP4) in ionic_lif_set_features()
1298 if (lif->hw_features & IONIC_ETH_HW_TSO_IPXIP6) in ionic_lif_set_features()
1300 if (lif->hw_features & IONIC_ETH_HW_TSO_UDP) in ionic_lif_set_features()
1302 if (lif->hw_features & IONIC_ETH_HW_TSO_UDP_CSUM) in ionic_lif_set_features()
1312 struct ionic_lif *lif = qcq->lif; in ionic_lif_txq_init() local
1318 .lif_index = lif->index, in ionic_lif_txq_init()
1339 err = ionic_adminq_post_wait(qcq->lif, &ctx); in ionic_lif_txq_init()
1345 q->db = ionic_db_map(lif, q); in ionic_lif_txq_init()
1360 struct ionic_lif *lif = qcq->lif; in ionic_lif_rxq_init() local
1366 .lif_index = lif->index, in ionic_lif_rxq_init()
1387 err = ionic_adminq_post_wait(qcq->lif, &ctx); in ionic_lif_rxq_init()
1393 q->db = ionic_db_map(lif, q); in ionic_lif_rxq_init()
1405 ionic_station_set(struct ionic_lif *lif) in ionic_station_set() argument
1411 .index = lif->index, in ionic_station_set()
1419 err = ionic_adminq_post_wait(lif, &ctx); in ionic_station_set()
1424 lif->mac_addr)) { in ionic_station_set()
1427 ionic_lif_addr_del(lif, lif->mac_addr); in ionic_station_set()
1430 memcpy(lif->mac_addr, ctx.comp.lif_getattr.mac, RTE_ETHER_ADDR_LEN); in ionic_station_set()
1432 if (rte_is_zero_ether_addr((struct rte_ether_addr *)lif->mac_addr)) { in ionic_station_set()
1439 ionic_lif_addr_add(lif, lif->mac_addr); in ionic_station_set()
1445 ionic_lif_set_name(struct ionic_lif *lif) in ionic_lif_set_name() argument
1451 .index = lif->index, in ionic_lif_set_name()
1457 "%d", lif->port_id); in ionic_lif_set_name()
1459 ionic_adminq_post_wait(lif, &ctx); in ionic_lif_set_name()
1463 ionic_lif_init(struct ionic_lif *lif) in ionic_lif_init() argument
1465 struct ionic_dev *idev = &lif->adapter->idev; in ionic_lif_init()
1469 memset(&lif->stats_base, 0, sizeof(lif->stats_base)); in ionic_lif_init()
1471 ionic_dev_cmd_lif_init(idev, lif->index, lif->info_pa); in ionic_lif_init()
1477 lif->hw_index = comp.hw_index; in ionic_lif_init()
1479 err = ionic_lif_adminq_init(lif); in ionic_lif_init()
1483 err = ionic_lif_notifyq_init(lif); in ionic_lif_init()
1487 lif->features = in ionic_lif_init()
1500 err = ionic_lif_set_features(lif); in ionic_lif_init()
1504 err = ionic_rx_filters_init(lif); in ionic_lif_init()
1508 err = ionic_station_set(lif); in ionic_lif_init()
1512 ionic_lif_set_name(lif); in ionic_lif_init()
1514 lif->state |= IONIC_LIF_F_INITED; in ionic_lif_init()
1519 ionic_rx_filters_deinit(lif); in ionic_lif_init()
1522 ionic_lif_qcq_deinit(lif, lif->notifyqcq); in ionic_lif_init()
1525 ionic_lif_qcq_deinit(lif, lif->adminqcq); in ionic_lif_init()
1531 ionic_lif_deinit(struct ionic_lif *lif) in ionic_lif_deinit() argument
1533 if (!(lif->state & IONIC_LIF_F_INITED)) in ionic_lif_deinit()
1536 ionic_rx_filters_deinit(lif); in ionic_lif_deinit()
1537 ionic_lif_rss_teardown(lif); in ionic_lif_deinit()
1538 ionic_lif_qcq_deinit(lif, lif->notifyqcq); in ionic_lif_deinit()
1539 ionic_lif_qcq_deinit(lif, lif->adminqcq); in ionic_lif_deinit()
1541 lif->state &= ~IONIC_LIF_F_INITED; in ionic_lif_deinit()
1545 ionic_lif_configure(struct ionic_lif *lif) in ionic_lif_configure() argument
1547 struct ionic_identity *ident = &lif->adapter->ident; in ionic_lif_configure()
1549 ident->lif.eth.config.queue_count[IONIC_QTYPE_TXQ]; in ionic_lif_configure()
1551 ident->lif.eth.config.queue_count[IONIC_QTYPE_RXQ]; in ionic_lif_configure()
1552 uint32_t nrxqs = lif->eth_dev->data->nb_rx_queues; in ionic_lif_configure()
1553 uint32_t ntxqs = lif->eth_dev->data->nb_tx_queues; in ionic_lif_configure()
1555 lif->port_id = lif->eth_dev->data->port_id; in ionic_lif_configure()
1558 lif->port_id); in ionic_lif_configure()
1566 lif->nrxqcqs = nrxqs_per_lif; in ionic_lif_configure()
1567 lif->ntxqcqs = ntxqs_per_lif; in ionic_lif_configure()
1573 ionic_lif_start(struct ionic_lif *lif) in ionic_lif_start() argument
1580 lif->port_id); in ionic_lif_start()
1582 err = ionic_lif_rss_setup(lif); in ionic_lif_start()
1587 lif->port_id); in ionic_lif_start()
1593 lif->rx_mode = 0; /* set by ionic_set_rx_mode */ in ionic_lif_start()
1595 ionic_set_rx_mode(lif, rx_mode); in ionic_lif_start()
1599 lif->nrxqcqs, lif->ntxqcqs, lif->port_id); in ionic_lif_start()
1601 for (i = 0; i < lif->nrxqcqs; i++) { in ionic_lif_start()
1602 struct ionic_qcq *rxq = lif->rxqcqs[i]; in ionic_lif_start()
1604 err = ionic_dev_rx_queue_start(lif->eth_dev, i); in ionic_lif_start()
1611 for (i = 0; i < lif->ntxqcqs; i++) { in ionic_lif_start()
1612 struct ionic_qcq *txq = lif->txqcqs[i]; in ionic_lif_start()
1614 err = ionic_dev_tx_queue_start(lif->eth_dev, i); in ionic_lif_start()
1621 ionic_link_status_check(lif); in ionic_lif_start()
1635 unsigned int lif_words = sizeof(ident->lif.words) / in ionic_lif_identify()
1636 sizeof(ident->lif.words[0]); in ionic_lif_identify()
1649 ident->lif.words[i] = ioread32(&idev->dev_cmd->data[i]); in ionic_lif_identify()
1652 ident->lif.capabilities); in ionic_lif_identify()
1655 ident->lif.eth.max_ucast_filters); in ionic_lif_identify()
1657 ident->lif.eth.max_mcast_filters); in ionic_lif_identify()
1660 ident->lif.eth.config.features); in ionic_lif_identify()
1662 ident->lif.eth.config.queue_count[IONIC_QTYPE_ADMINQ]); in ionic_lif_identify()
1664 ident->lif.eth.config.queue_count[IONIC_QTYPE_NOTIFYQ]); in ionic_lif_identify()
1666 ident->lif.eth.config.queue_count[IONIC_QTYPE_RXQ]); in ionic_lif_identify()
1668 ident->lif.eth.config.queue_count[IONIC_QTYPE_TXQ]); in ionic_lif_identify()
1681 ident->lif.eth.config.queue_count[IONIC_QTYPE_TXQ]; in ionic_lifs_size()
1683 ident->lif.eth.config.queue_count[IONIC_QTYPE_RXQ]; in ionic_lifs_size()