From 27399312efbe5822c81598f8c8592d37c3735d96 Mon Sep 17 00:00:00 2001 From: Qinglai Xiao Date: Mon, 21 Oct 2013 17:11:14 +0300 Subject: [PATCH] ixgbe: query assignment of VF queues Physical Function assignes Tx/Rx queues to each Virtual Function according to different schemes[1]. By querying through mailbox, VF is able to get number of Tx/Rx queues assigned to it. Note that current Intel ixgbe driver ixgbe-3.18.7 does not fully support mailbox message IXGBE_VF_GET_QUEUES. The service routine for IXGBE_VF_GET_QUEUES must be fixed, otherwise PF always return 1 as Tx/Rx queue number. [1] See section 7.2.1.2.1, 7.1.2.2 and 7.10.2.7.2 of Intel 82599 10 Gbe Controller Datasheet. Signed-off-by: Qinglai Xiao Acked-by: Thomas Monjalon --- lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c index a95bc28906..22761046dd 100644 --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c @@ -772,6 +772,21 @@ eth_ixgbe_dev_init(__attribute__((unused)) struct eth_driver *eth_drv, return 0; } +static void ixgbevf_get_queue_num(struct ixgbe_hw *hw) +{ + /* Traffic classes are not supported by now */ + unsigned int tcs, tc; + + /* + * Must let PF know we are at mailbox API version 1.1. + * Otherwise PF won't answer properly. + * In case that PF fails to provide Rx/Tx queue number, + * max_tx_queues and max_rx_queues remain to be 1. + */ + if (!ixgbevf_negotiate_api_version(hw, ixgbe_mbox_api_11)) + ixgbevf_get_queues(hw, &tcs, &tc); +} + /* * Virtual Function device init */ @@ -840,6 +855,9 @@ eth_ixgbevf_dev_init(__attribute__((unused)) struct eth_driver *eth_drv, return (diag); } + /* Get Rx/Tx queue count via mailbox, which is ready after reset_hw */ + ixgbevf_get_queue_num(hw); + /* Allocate memory for storing MAC addresses */ eth_dev->data->mac_addrs = rte_zmalloc("ixgbevf", ETHER_ADDR_LEN * hw->mac.num_rar_entries, 0); -- 2.20.1