Lines Matching refs:apc

34 	struct mana_port_context *apc = netdev_priv(ndev);  in mana_open()  local
41 apc->port_is_up = true; in mana_open()
54 struct mana_port_context *apc = netdev_priv(ndev); in mana_close() local
56 if (!apc->port_is_up) in mana_close()
91 static int mana_map_skb(struct sk_buff *skb, struct mana_port_context *apc, in mana_map_skb() argument
95 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_map_skb()
147 struct mana_port_context *apc = netdev_priv(ndev); in mana_start_xmit() local
149 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_start_xmit()
160 if (unlikely(!apc->port_is_up)) in mana_start_xmit()
166 txq = &apc->tx_qp[txq_idx].txq; in mana_start_xmit()
168 cq = &apc->tx_qp[txq_idx].tx_cq; in mana_start_xmit()
257 if (mana_map_skb(skb, apc, &pkg)) in mana_start_xmit()
269 apc->eth_stats.stop_queue++; in mana_start_xmit()
296 apc->eth_stats.wake_queue++; in mana_start_xmit()
314 struct mana_port_context *apc = netdev_priv(ndev); in mana_get_stats64() local
315 unsigned int num_queues = apc->num_queues; in mana_get_stats64()
322 if (!apc->port_is_up) in mana_get_stats64()
328 rx_stats = &apc->rxqs[q]->stats; in mana_get_stats64()
341 tx_stats = &apc->tx_qp[q].txq.stats; in mana_get_stats64()
357 struct mana_port_context *apc = netdev_priv(ndev); in mana_get_tx_queue() local
362 txq = apc->indir_table[hash & MANA_INDIRECT_TABLE_MASK]; in mana_get_tx_queue()
402 static void mana_cleanup_port_context(struct mana_port_context *apc) in mana_cleanup_port_context() argument
404 kfree(apc->rxqs); in mana_cleanup_port_context()
405 apc->rxqs = NULL; in mana_cleanup_port_context()
408 static int mana_init_port_context(struct mana_port_context *apc) in mana_init_port_context() argument
410 apc->rxqs = kcalloc(apc->num_queues, sizeof(struct mana_rxq *), in mana_init_port_context()
413 return !apc->rxqs ? -ENOMEM : 0; in mana_init_port_context()
464 static int mana_pf_register_hw_vport(struct mana_port_context *apc) in mana_pf_register_hw_vport() argument
476 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_pf_register_hw_vport()
479 netdev_err(apc->ndev, "Failed to register hw vPort: %d\n", err); in mana_pf_register_hw_vport()
486 netdev_err(apc->ndev, "Failed to register hw vPort: %d, 0x%x\n", in mana_pf_register_hw_vport()
491 apc->port_handle = resp.hw_vport_handle; in mana_pf_register_hw_vport()
495 static void mana_pf_deregister_hw_vport(struct mana_port_context *apc) in mana_pf_deregister_hw_vport() argument
503 req.hw_vport_handle = apc->port_handle; in mana_pf_deregister_hw_vport()
505 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_pf_deregister_hw_vport()
508 netdev_err(apc->ndev, "Failed to unregister hw vPort: %d\n", in mana_pf_deregister_hw_vport()
516 netdev_err(apc->ndev, in mana_pf_deregister_hw_vport()
521 static int mana_pf_register_filter(struct mana_port_context *apc) in mana_pf_register_filter() argument
529 req.vport = apc->port_handle; in mana_pf_register_filter()
530 memcpy(req.mac_addr, apc->mac_addr, ETH_ALEN); in mana_pf_register_filter()
532 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_pf_register_filter()
535 netdev_err(apc->ndev, "Failed to register filter: %d\n", err); in mana_pf_register_filter()
542 netdev_err(apc->ndev, "Failed to register filter: %d, 0x%x\n", in mana_pf_register_filter()
547 apc->pf_filter_handle = resp.filter_handle; in mana_pf_register_filter()
551 static void mana_pf_deregister_filter(struct mana_port_context *apc) in mana_pf_deregister_filter() argument
559 req.filter_handle = apc->pf_filter_handle; in mana_pf_deregister_filter()
561 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_pf_deregister_filter()
564 netdev_err(apc->ndev, "Failed to unregister filter: %d\n", in mana_pf_deregister_filter()
572 netdev_err(apc->ndev, in mana_pf_deregister_filter()
614 static int mana_query_vport_cfg(struct mana_port_context *apc, u32 vport_index, in mana_query_vport_cfg() argument
626 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_query_vport_cfg()
643 apc->port_handle = resp.vport; in mana_query_vport_cfg()
644 ether_addr_copy(apc->mac_addr, resp.mac_addr); in mana_query_vport_cfg()
649 void mana_uncfg_vport(struct mana_port_context *apc) in mana_uncfg_vport() argument
651 mutex_lock(&apc->vport_mutex); in mana_uncfg_vport()
652 apc->vport_use_count--; in mana_uncfg_vport()
653 WARN_ON(apc->vport_use_count < 0); in mana_uncfg_vport()
654 mutex_unlock(&apc->vport_mutex); in mana_uncfg_vport()
658 int mana_cfg_vport(struct mana_port_context *apc, u32 protection_dom_id, in mana_cfg_vport() argument
683 mutex_lock(&apc->vport_mutex); in mana_cfg_vport()
684 if (apc->vport_use_count > 0) { in mana_cfg_vport()
685 mutex_unlock(&apc->vport_mutex); in mana_cfg_vport()
688 apc->vport_use_count++; in mana_cfg_vport()
689 mutex_unlock(&apc->vport_mutex); in mana_cfg_vport()
693 req.vport = apc->port_handle; in mana_cfg_vport()
697 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_cfg_vport()
700 netdev_err(apc->ndev, "Failed to configure vPort: %d\n", err); in mana_cfg_vport()
707 netdev_err(apc->ndev, "Failed to configure vPort: %d, 0x%x\n", in mana_cfg_vport()
715 apc->tx_shortform_allowed = resp.short_form_allowed; in mana_cfg_vport()
716 apc->tx_vp_offset = resp.tx_vport_offset; in mana_cfg_vport()
718 netdev_info(apc->ndev, "Configured vPort %llu PD %u DB %u\n", in mana_cfg_vport()
719 apc->port_handle, protection_dom_id, doorbell_pg_id); in mana_cfg_vport()
722 mana_uncfg_vport(apc); in mana_cfg_vport()
728 static int mana_cfg_vport_steering(struct mana_port_context *apc, in mana_cfg_vport_steering() argument
736 struct net_device *ndev = apc->ndev; in mana_cfg_vport_steering()
749 req->vport = apc->port_handle; in mana_cfg_vport_steering()
753 req->rss_enable = apc->rss_state; in mana_cfg_vport_steering()
757 req->default_rxobj = apc->default_rxobj; in mana_cfg_vport_steering()
760 memcpy(&req->hashkey, apc->hashkey, MANA_HASH_KEY_SIZE); in mana_cfg_vport_steering()
764 memcpy(req_indir_tab, apc->rxobj_table, in mana_cfg_vport_steering()
768 err = mana_send_request(apc->ac, req, req_buf_size, &resp, in mana_cfg_vport_steering()
789 apc->port_handle, num_entries); in mana_cfg_vport_steering()
795 int mana_create_wq_obj(struct mana_port_context *apc, in mana_create_wq_obj() argument
803 struct net_device *ndev = apc->ndev; in mana_create_wq_obj()
817 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_create_wq_obj()
850 void mana_destroy_wq_obj(struct mana_port_context *apc, u32 wq_type, in mana_destroy_wq_obj() argument
855 struct net_device *ndev = apc->ndev; in mana_destroy_wq_obj()
863 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_destroy_wq_obj()
931 static int mana_fence_rq(struct mana_port_context *apc, struct mana_rxq *rxq) in mana_fence_rq() argument
943 err = mana_send_request(apc->ac, &req, sizeof(req), &resp, in mana_fence_rq()
946 netdev_err(apc->ndev, "Failed to fence RQ %u: %d\n", in mana_fence_rq()
953 netdev_err(apc->ndev, "Failed to fence RQ %u: %d, 0x%x\n", in mana_fence_rq()
962 netdev_err(apc->ndev, "Failed to fence RQ %u: timed out\n", in mana_fence_rq()
970 static void mana_fence_rqs(struct mana_port_context *apc) in mana_fence_rqs() argument
976 for (rxq_idx = 0; rxq_idx < apc->num_queues; rxq_idx++) { in mana_fence_rqs()
977 rxq = apc->rxqs[rxq_idx]; in mana_fence_rqs()
978 err = mana_fence_rq(apc, rxq); in mana_fence_rqs()
1001 static void mana_unmap_skb(struct sk_buff *skb, struct mana_port_context *apc) in mana_unmap_skb() argument
1004 struct gdma_context *gc = apc->ac->gdma_dev->gdma_context; in mana_unmap_skb()
1022 struct mana_port_context *apc; in mana_poll_tx_cq() local
1033 apc = netdev_priv(ndev); in mana_poll_tx_cq()
1088 mana_unmap_skb(skb, apc); in mana_poll_tx_cq()
1112 if (txq_stopped && apc->port_is_up && avail_space >= MAX_TX_WQE_SIZE) { in mana_poll_tx_cq()
1114 apc->eth_stats.wake_queue++; in mana_poll_tx_cq()
1413 static void mana_deinit_cq(struct mana_port_context *apc, struct mana_cq *cq) in mana_deinit_cq() argument
1415 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_deinit_cq()
1423 static void mana_deinit_txq(struct mana_port_context *apc, struct mana_txq *txq) in mana_deinit_txq() argument
1425 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_deinit_txq()
1433 static void mana_destroy_txq(struct mana_port_context *apc) in mana_destroy_txq() argument
1438 if (!apc->tx_qp) in mana_destroy_txq()
1441 for (i = 0; i < apc->num_queues; i++) { in mana_destroy_txq()
1442 napi = &apc->tx_qp[i].tx_cq.napi; in mana_destroy_txq()
1447 mana_destroy_wq_obj(apc, GDMA_SQ, apc->tx_qp[i].tx_object); in mana_destroy_txq()
1449 mana_deinit_cq(apc, &apc->tx_qp[i].tx_cq); in mana_destroy_txq()
1451 mana_deinit_txq(apc, &apc->tx_qp[i].txq); in mana_destroy_txq()
1454 kfree(apc->tx_qp); in mana_destroy_txq()
1455 apc->tx_qp = NULL; in mana_destroy_txq()
1458 static int mana_create_txq(struct mana_port_context *apc, in mana_create_txq() argument
1461 struct mana_context *ac = apc->ac; in mana_create_txq()
1474 apc->tx_qp = kcalloc(apc->num_queues, sizeof(struct mana_tx_qp), in mana_create_txq()
1476 if (!apc->tx_qp) in mana_create_txq()
1492 for (i = 0; i < apc->num_queues; i++) { in mana_create_txq()
1493 apc->tx_qp[i].tx_object = INVALID_MANA_HANDLE; in mana_create_txq()
1496 txq = &apc->tx_qp[i].txq; in mana_create_txq()
1501 txq->vp_offset = apc->tx_vp_offset; in mana_create_txq()
1513 cq = &apc->tx_qp[i].tx_cq; in mana_create_txq()
1540 err = mana_create_wq_obj(apc, apc->port_handle, GDMA_SQ, in mana_create_txq()
1542 &apc->tx_qp[i].tx_object); in mana_create_txq()
1574 mana_destroy_txq(apc); in mana_create_txq()
1578 static void mana_destroy_rxq(struct mana_port_context *apc, in mana_destroy_rxq() argument
1582 struct gdma_context *gc = apc->ac->gdma_dev->gdma_context; in mana_destroy_rxq()
1602 mana_destroy_wq_obj(apc, GDMA_RQ, rxq->rxobj); in mana_destroy_rxq()
1604 mana_deinit_cq(apc, &rxq->rx_cq); in mana_destroy_rxq()
1631 static int mana_alloc_rx_wqe(struct mana_port_context *apc, in mana_alloc_rx_wqe() argument
1634 struct gdma_context *gc = apc->ac->gdma_dev->gdma_context; in mana_alloc_rx_wqe()
1668 rx_oob->sgl[0].mem_key = apc->ac->gdma_dev->gpa_mkey; in mana_alloc_rx_wqe()
1703 static struct mana_rxq *mana_create_rxq(struct mana_port_context *apc, in mana_create_rxq() argument
1707 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_create_rxq()
1730 err = mana_alloc_rx_wqe(apc, rxq, &rq_size, &cq_size); in mana_create_rxq()
1772 err = mana_create_wq_obj(apc, apc->port_handle, GDMA_RQ, in mana_create_rxq()
1813 mana_destroy_rxq(apc, rxq, false); in mana_create_rxq()
1816 mana_deinit_cq(apc, cq); in mana_create_rxq()
1821 static int mana_add_rx_queues(struct mana_port_context *apc, in mana_add_rx_queues() argument
1824 struct mana_context *ac = apc->ac; in mana_add_rx_queues()
1829 for (i = 0; i < apc->num_queues; i++) { in mana_add_rx_queues()
1830 rxq = mana_create_rxq(apc, i, &ac->eqs[i], ndev); in mana_add_rx_queues()
1838 apc->rxqs[i] = rxq; in mana_add_rx_queues()
1841 apc->default_rxobj = apc->rxqs[0]->rxobj; in mana_add_rx_queues()
1846 static void mana_destroy_vport(struct mana_port_context *apc) in mana_destroy_vport() argument
1848 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_destroy_vport()
1852 for (rxq_idx = 0; rxq_idx < apc->num_queues; rxq_idx++) { in mana_destroy_vport()
1853 rxq = apc->rxqs[rxq_idx]; in mana_destroy_vport()
1857 mana_destroy_rxq(apc, rxq, true); in mana_destroy_vport()
1858 apc->rxqs[rxq_idx] = NULL; in mana_destroy_vport()
1861 mana_destroy_txq(apc); in mana_destroy_vport()
1862 mana_uncfg_vport(apc); in mana_destroy_vport()
1865 mana_pf_deregister_hw_vport(apc); in mana_destroy_vport()
1868 static int mana_create_vport(struct mana_port_context *apc, in mana_create_vport() argument
1871 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_create_vport()
1874 apc->default_rxobj = INVALID_MANA_HANDLE; in mana_create_vport()
1877 err = mana_pf_register_hw_vport(apc); in mana_create_vport()
1882 err = mana_cfg_vport(apc, gd->pdid, gd->doorbell); in mana_create_vport()
1886 return mana_create_txq(apc, net); in mana_create_vport()
1889 static void mana_rss_table_init(struct mana_port_context *apc) in mana_rss_table_init() argument
1894 apc->indir_table[i] = in mana_rss_table_init()
1895 ethtool_rxfh_indir_default(i, apc->num_queues); in mana_rss_table_init()
1898 int mana_config_rss(struct mana_port_context *apc, enum TRI_STATE rx, in mana_config_rss() argument
1907 queue_idx = apc->indir_table[i]; in mana_config_rss()
1908 apc->rxobj_table[i] = apc->rxqs[queue_idx]->rxobj; in mana_config_rss()
1912 err = mana_cfg_vport_steering(apc, rx, true, update_hash, update_tab); in mana_config_rss()
1916 mana_fence_rqs(apc); in mana_config_rss()
1923 struct mana_port_context *apc = netdev_priv(ndev); in mana_init_port() local
1925 int port_idx = apc->port_idx; in mana_init_port()
1929 err = mana_init_port_context(apc); in mana_init_port()
1933 err = mana_query_vport_cfg(apc, port_idx, &max_txq, &max_rxq, in mana_init_port()
1942 if (apc->max_queues > max_queues) in mana_init_port()
1943 apc->max_queues = max_queues; in mana_init_port()
1945 if (apc->num_queues > apc->max_queues) in mana_init_port()
1946 apc->num_queues = apc->max_queues; in mana_init_port()
1948 eth_hw_addr_set(ndev, apc->mac_addr); in mana_init_port()
1953 kfree(apc->rxqs); in mana_init_port()
1954 apc->rxqs = NULL; in mana_init_port()
1960 struct mana_port_context *apc = netdev_priv(ndev); in mana_alloc_queues() local
1961 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_alloc_queues()
1964 err = mana_create_vport(apc, ndev); in mana_alloc_queues()
1968 err = netif_set_real_num_tx_queues(ndev, apc->num_queues); in mana_alloc_queues()
1972 err = mana_add_rx_queues(apc, ndev); in mana_alloc_queues()
1976 apc->rss_state = apc->num_queues > 1 ? TRI_STATE_TRUE : TRI_STATE_FALSE; in mana_alloc_queues()
1978 err = netif_set_real_num_rx_queues(ndev, apc->num_queues); in mana_alloc_queues()
1982 mana_rss_table_init(apc); in mana_alloc_queues()
1984 err = mana_config_rss(apc, TRI_STATE_TRUE, true, true); in mana_alloc_queues()
1989 err = mana_pf_register_filter(apc); in mana_alloc_queues()
1994 mana_chn_setxdp(apc, mana_xdp_get(apc)); in mana_alloc_queues()
1999 mana_destroy_vport(apc); in mana_alloc_queues()
2005 struct mana_port_context *apc = netdev_priv(ndev); in mana_attach() local
2014 if (apc->port_st_save) { in mana_attach()
2017 mana_cleanup_port_context(apc); in mana_attach()
2022 apc->port_is_up = apc->port_st_save; in mana_attach()
2027 if (apc->port_is_up) in mana_attach()
2037 struct mana_port_context *apc = netdev_priv(ndev); in mana_dealloc_queues() local
2038 struct gdma_dev *gd = apc->ac->gdma_dev; in mana_dealloc_queues()
2042 if (apc->port_is_up) in mana_dealloc_queues()
2045 mana_chn_setxdp(apc, NULL); in mana_dealloc_queues()
2048 mana_pf_deregister_filter(apc); in mana_dealloc_queues()
2058 for (i = 0; i < apc->num_queues; i++) { in mana_dealloc_queues()
2059 txq = &apc->tx_qp[i].txq; in mana_dealloc_queues()
2069 apc->rss_state = TRI_STATE_FALSE; in mana_dealloc_queues()
2070 err = mana_config_rss(apc, TRI_STATE_FALSE, false, false); in mana_dealloc_queues()
2076 mana_destroy_vport(apc); in mana_dealloc_queues()
2083 struct mana_port_context *apc = netdev_priv(ndev); in mana_detach() local
2088 apc->port_st_save = apc->port_is_up; in mana_detach()
2089 apc->port_is_up = false; in mana_detach()
2097 if (apc->port_st_save) { in mana_detach()
2105 mana_cleanup_port_context(apc); in mana_detach()
2115 struct mana_port_context *apc; in mana_probe_port() local
2126 apc = netdev_priv(ndev); in mana_probe_port()
2127 apc->ac = ac; in mana_probe_port()
2128 apc->ndev = ndev; in mana_probe_port()
2129 apc->max_queues = gc->max_num_queues; in mana_probe_port()
2130 apc->num_queues = gc->max_num_queues; in mana_probe_port()
2131 apc->port_handle = INVALID_MANA_HANDLE; in mana_probe_port()
2132 apc->pf_filter_handle = INVALID_MANA_HANDLE; in mana_probe_port()
2133 apc->port_idx = port_idx; in mana_probe_port()
2135 mutex_init(&apc->vport_mutex); in mana_probe_port()
2136 apc->vport_use_count = 0; in mana_probe_port()
2149 netdev_rss_key_fill(apc->hashkey, MANA_HASH_KEY_SIZE); in mana_probe_port()
2175 kfree(apc->rxqs); in mana_probe_port()
2176 apc->rxqs = NULL; in mana_probe_port()