Lines Matching refs:apc

18 	struct mana_port_context *apc = netdev_priv(ndev);  in mana_open()  local
25 apc->port_is_up = true; in mana_open()
38 struct mana_port_context *apc = netdev_priv(ndev); in mana_close() local
40 if (!apc->port_is_up) in mana_close()
75 static int mana_map_skb(struct sk_buff *skb, struct mana_port_context *apc, in mana_map_skb() argument
79 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_map_skb()
131 struct mana_port_context *apc = netdev_priv(ndev); in mana_start_xmit() local
133 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_start_xmit()
144 if (unlikely(!apc->port_is_up)) in mana_start_xmit()
150 txq = &apc->tx_qp[txq_idx].txq; in mana_start_xmit()
152 cq = &apc->tx_qp[txq_idx].tx_cq; in mana_start_xmit()
241 if (mana_map_skb(skb, apc, &pkg)) in mana_start_xmit()
253 apc->eth_stats.stop_queue++; in mana_start_xmit()
280 apc->eth_stats.wake_queue++; in mana_start_xmit()
298 struct mana_port_context *apc = netdev_priv(ndev); in mana_get_stats64() local
299 unsigned int num_queues = apc->num_queues; in mana_get_stats64()
305 if (!apc->port_is_up) in mana_get_stats64()
311 stats = &apc->rxqs[q]->stats; in mana_get_stats64()
324 stats = &apc->tx_qp[q].txq.stats; in mana_get_stats64()
340 struct mana_port_context *apc = netdev_priv(ndev); in mana_get_tx_queue() local
345 txq = apc->indir_table[hash & MANA_INDIRECT_TABLE_MASK]; in mana_get_tx_queue()
383 static void mana_cleanup_port_context(struct mana_port_context *apc) in mana_cleanup_port_context() argument
385 kfree(apc->rxqs); in mana_cleanup_port_context()
386 apc->rxqs = NULL; in mana_cleanup_port_context()
389 static int mana_init_port_context(struct mana_port_context *apc) in mana_init_port_context() argument
391 apc->rxqs = kcalloc(apc->num_queues, sizeof(struct mana_rxq *), in mana_init_port_context()
394 return !apc->rxqs ? -ENOMEM : 0; in mana_init_port_context()
482 static int mana_query_vport_cfg(struct mana_port_context *apc, u32 vport_index, in mana_query_vport_cfg() argument
494 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_query_vport_cfg()
511 apc->port_handle = resp.vport; in mana_query_vport_cfg()
512 ether_addr_copy(apc->mac_addr, resp.mac_addr); in mana_query_vport_cfg()
517 static int mana_cfg_vport(struct mana_port_context *apc, u32 protection_dom_id, in mana_cfg_vport() argument
526 req.vport = apc->port_handle; in mana_cfg_vport()
530 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_cfg_vport()
533 netdev_err(apc->ndev, "Failed to configure vPort: %d\n", err); in mana_cfg_vport()
540 netdev_err(apc->ndev, "Failed to configure vPort: %d, 0x%x\n", in mana_cfg_vport()
548 apc->tx_shortform_allowed = resp.short_form_allowed; in mana_cfg_vport()
549 apc->tx_vp_offset = resp.tx_vport_offset; in mana_cfg_vport()
554 static int mana_cfg_vport_steering(struct mana_port_context *apc, in mana_cfg_vport_steering() argument
562 struct net_device *ndev = apc->ndev; in mana_cfg_vport_steering()
575 req->vport = apc->port_handle; in mana_cfg_vport_steering()
579 req->rss_enable = apc->rss_state; in mana_cfg_vport_steering()
583 req->default_rxobj = apc->default_rxobj; in mana_cfg_vport_steering()
586 memcpy(&req->hashkey, apc->hashkey, MANA_HASH_KEY_SIZE); in mana_cfg_vport_steering()
590 memcpy(req_indir_tab, apc->rxobj_table, in mana_cfg_vport_steering()
594 err = mana_send_request(apc->ac, req, req_buf_size, &resp, in mana_cfg_vport_steering()
618 static int mana_create_wq_obj(struct mana_port_context *apc, in mana_create_wq_obj() argument
626 struct net_device *ndev = apc->ndev; in mana_create_wq_obj()
640 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_create_wq_obj()
672 static void mana_destroy_wq_obj(struct mana_port_context *apc, u32 wq_type, in mana_destroy_wq_obj() argument
677 struct net_device *ndev = apc->ndev; in mana_destroy_wq_obj()
685 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_destroy_wq_obj()
767 static void mana_unmap_skb(struct sk_buff *skb, struct mana_port_context *apc) in mana_unmap_skb() argument
770 struct gdma_context *gc = apc->ac->gdma_dev->gdma_context; in mana_unmap_skb()
788 struct mana_port_context *apc; in mana_poll_tx_cq() local
799 apc = netdev_priv(ndev); in mana_poll_tx_cq()
854 mana_unmap_skb(skb, apc); in mana_poll_tx_cq()
878 if (txq_stopped && apc->port_is_up && avail_space >= MAX_TX_WQE_SIZE) { in mana_poll_tx_cq()
880 apc->eth_stats.wake_queue++; in mana_poll_tx_cq()
1112 static void mana_deinit_cq(struct mana_port_context *apc, struct mana_cq *cq) in mana_deinit_cq() argument
1114 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_deinit_cq()
1122 static void mana_deinit_txq(struct mana_port_context *apc, struct mana_txq *txq) in mana_deinit_txq() argument
1124 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_deinit_txq()
1132 static void mana_destroy_txq(struct mana_port_context *apc) in mana_destroy_txq() argument
1137 if (!apc->tx_qp) in mana_destroy_txq()
1140 for (i = 0; i < apc->num_queues; i++) { in mana_destroy_txq()
1141 napi = &apc->tx_qp[i].tx_cq.napi; in mana_destroy_txq()
1146 mana_destroy_wq_obj(apc, GDMA_SQ, apc->tx_qp[i].tx_object); in mana_destroy_txq()
1148 mana_deinit_cq(apc, &apc->tx_qp[i].tx_cq); in mana_destroy_txq()
1150 mana_deinit_txq(apc, &apc->tx_qp[i].txq); in mana_destroy_txq()
1153 kfree(apc->tx_qp); in mana_destroy_txq()
1154 apc->tx_qp = NULL; in mana_destroy_txq()
1157 static int mana_create_txq(struct mana_port_context *apc, in mana_create_txq() argument
1160 struct mana_context *ac = apc->ac; in mana_create_txq()
1173 apc->tx_qp = kcalloc(apc->num_queues, sizeof(struct mana_tx_qp), in mana_create_txq()
1175 if (!apc->tx_qp) in mana_create_txq()
1191 for (i = 0; i < apc->num_queues; i++) { in mana_create_txq()
1192 apc->tx_qp[i].tx_object = INVALID_MANA_HANDLE; in mana_create_txq()
1195 txq = &apc->tx_qp[i].txq; in mana_create_txq()
1200 txq->vp_offset = apc->tx_vp_offset; in mana_create_txq()
1212 cq = &apc->tx_qp[i].tx_cq; in mana_create_txq()
1239 err = mana_create_wq_obj(apc, apc->port_handle, GDMA_SQ, in mana_create_txq()
1241 &apc->tx_qp[i].tx_object); in mana_create_txq()
1271 mana_destroy_txq(apc); in mana_create_txq()
1275 static void mana_destroy_rxq(struct mana_port_context *apc, in mana_destroy_rxq() argument
1279 struct gdma_context *gc = apc->ac->gdma_dev->gdma_context; in mana_destroy_rxq()
1296 mana_destroy_wq_obj(apc, GDMA_RQ, rxq->rxobj); in mana_destroy_rxq()
1298 mana_deinit_cq(apc, &rxq->rx_cq); in mana_destroy_rxq()
1322 static int mana_alloc_rx_wqe(struct mana_port_context *apc, in mana_alloc_rx_wqe() argument
1325 struct gdma_context *gc = apc->ac->gdma_dev->gdma_context; in mana_alloc_rx_wqe()
1358 rx_oob->sgl[0].mem_key = apc->ac->gdma_dev->gpa_mkey; in mana_alloc_rx_wqe()
1393 static struct mana_rxq *mana_create_rxq(struct mana_port_context *apc, in mana_create_rxq() argument
1397 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_create_rxq()
1420 err = mana_alloc_rx_wqe(apc, rxq, &rq_size, &cq_size); in mana_create_rxq()
1462 err = mana_create_wq_obj(apc, apc->port_handle, GDMA_RQ, in mana_create_rxq()
1497 mana_destroy_rxq(apc, rxq, false); in mana_create_rxq()
1500 mana_deinit_cq(apc, cq); in mana_create_rxq()
1505 static int mana_add_rx_queues(struct mana_port_context *apc, in mana_add_rx_queues() argument
1508 struct mana_context *ac = apc->ac; in mana_add_rx_queues()
1513 for (i = 0; i < apc->num_queues; i++) { in mana_add_rx_queues()
1514 rxq = mana_create_rxq(apc, i, &ac->eqs[i], ndev); in mana_add_rx_queues()
1522 apc->rxqs[i] = rxq; in mana_add_rx_queues()
1525 apc->default_rxobj = apc->rxqs[0]->rxobj; in mana_add_rx_queues()
1530 static void mana_destroy_vport(struct mana_port_context *apc) in mana_destroy_vport() argument
1535 for (rxq_idx = 0; rxq_idx < apc->num_queues; rxq_idx++) { in mana_destroy_vport()
1536 rxq = apc->rxqs[rxq_idx]; in mana_destroy_vport()
1540 mana_destroy_rxq(apc, rxq, true); in mana_destroy_vport()
1541 apc->rxqs[rxq_idx] = NULL; in mana_destroy_vport()
1544 mana_destroy_txq(apc); in mana_destroy_vport()
1547 static int mana_create_vport(struct mana_port_context *apc, in mana_create_vport() argument
1550 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_create_vport()
1553 apc->default_rxobj = INVALID_MANA_HANDLE; in mana_create_vport()
1555 err = mana_cfg_vport(apc, gd->pdid, gd->doorbell); in mana_create_vport()
1559 return mana_create_txq(apc, net); in mana_create_vport()
1562 static void mana_rss_table_init(struct mana_port_context *apc) in mana_rss_table_init() argument
1567 apc->indir_table[i] = in mana_rss_table_init()
1568 ethtool_rxfh_indir_default(i, apc->num_queues); in mana_rss_table_init()
1571 int mana_config_rss(struct mana_port_context *apc, enum TRI_STATE rx, in mana_config_rss() argument
1579 queue_idx = apc->indir_table[i]; in mana_config_rss()
1580 apc->rxobj_table[i] = apc->rxqs[queue_idx]->rxobj; in mana_config_rss()
1584 return mana_cfg_vport_steering(apc, rx, true, update_hash, update_tab); in mana_config_rss()
1589 struct mana_port_context *apc = netdev_priv(ndev); in mana_init_port() local
1591 int port_idx = apc->port_idx; in mana_init_port()
1595 err = mana_init_port_context(apc); in mana_init_port()
1599 err = mana_query_vport_cfg(apc, port_idx, &max_txq, &max_rxq, in mana_init_port()
1607 if (apc->max_queues > max_queues) in mana_init_port()
1608 apc->max_queues = max_queues; in mana_init_port()
1610 if (apc->num_queues > apc->max_queues) in mana_init_port()
1611 apc->num_queues = apc->max_queues; in mana_init_port()
1613 ether_addr_copy(ndev->dev_addr, apc->mac_addr); in mana_init_port()
1618 kfree(apc->rxqs); in mana_init_port()
1619 apc->rxqs = NULL; in mana_init_port()
1625 struct mana_port_context *apc = netdev_priv(ndev); in mana_alloc_queues() local
1628 err = mana_create_vport(apc, ndev); in mana_alloc_queues()
1632 err = netif_set_real_num_tx_queues(ndev, apc->num_queues); in mana_alloc_queues()
1636 err = mana_add_rx_queues(apc, ndev); in mana_alloc_queues()
1640 apc->rss_state = apc->num_queues > 1 ? TRI_STATE_TRUE : TRI_STATE_FALSE; in mana_alloc_queues()
1642 err = netif_set_real_num_rx_queues(ndev, apc->num_queues); in mana_alloc_queues()
1646 mana_rss_table_init(apc); in mana_alloc_queues()
1648 err = mana_config_rss(apc, TRI_STATE_TRUE, true, true); in mana_alloc_queues()
1655 mana_destroy_vport(apc); in mana_alloc_queues()
1661 struct mana_port_context *apc = netdev_priv(ndev); in mana_attach() local
1672 kfree(apc->rxqs); in mana_attach()
1673 apc->rxqs = NULL; in mana_attach()
1679 apc->port_is_up = apc->port_st_save; in mana_attach()
1684 if (apc->port_is_up) { in mana_attach()
1694 struct mana_port_context *apc = netdev_priv(ndev); in mana_dealloc_queues() local
1698 if (apc->port_is_up) in mana_dealloc_queues()
1709 for (i = 0; i < apc->num_queues; i++) { in mana_dealloc_queues()
1710 txq = &apc->tx_qp[i].txq; in mana_dealloc_queues()
1720 apc->rss_state = TRI_STATE_FALSE; in mana_dealloc_queues()
1721 err = mana_config_rss(apc, TRI_STATE_FALSE, false, false); in mana_dealloc_queues()
1730 mana_destroy_vport(apc); in mana_dealloc_queues()
1737 struct mana_port_context *apc = netdev_priv(ndev); in mana_detach() local
1742 apc->port_st_save = apc->port_is_up; in mana_detach()
1743 apc->port_is_up = false; in mana_detach()
1751 if (apc->port_st_save) { in mana_detach()
1759 mana_cleanup_port_context(apc); in mana_detach()
1769 struct mana_port_context *apc; in mana_probe_port() local
1780 apc = netdev_priv(ndev); in mana_probe_port()
1781 apc->ac = ac; in mana_probe_port()
1782 apc->ndev = ndev; in mana_probe_port()
1783 apc->max_queues = gc->max_num_queues; in mana_probe_port()
1784 apc->num_queues = gc->max_num_queues; in mana_probe_port()
1785 apc->port_handle = INVALID_MANA_HANDLE; in mana_probe_port()
1786 apc->port_idx = port_idx; in mana_probe_port()
1798 netdev_rss_key_fill(apc->hashkey, MANA_HASH_KEY_SIZE); in mana_probe_port()
1822 kfree(apc->rxqs); in mana_probe_port()
1823 apc->rxqs = NULL; in mana_probe_port()