[dpdk-dev] [PATCH 30/31] net/i40e: support Linux VF to configure IRQ link list
Ferruh Yigit
ferruh.yigit at intel.com
Fri Dec 2 12:25:46 CET 2016
On 12/2/2016 12:12 AM, Wenzhuo Lu wrote:
> i40e PF host only support to work with DPDK VF driver, Linux
> VF driver is not supported. This change will enhance in
> configuring IRQ link list.
>
> This Change will identify VF client by number of vector
> requested. DPDK VF will ask only single one while Linux VF
> will request at least 2. It will have different configuration
> for different clients. DPDK VF will be configured to link all
> queue together, while Linux VF will be configured per request.
>
> Signed-off-by: Chen Jing D(Mark) <jing.d.chen at intel.com>
> ---
> drivers/net/i40e/i40e_pf.c | 151 +++++++++++++++++++++++++++++++++++++++++----
> 1 file changed, 138 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/net/i40e/i40e_pf.c b/drivers/net/i40e/i40e_pf.c
> index 1ad5ed1..4b0da75 100644
> --- a/drivers/net/i40e/i40e_pf.c
> +++ b/drivers/net/i40e/i40e_pf.c
> @@ -585,14 +585,116 @@
> return ret;
> }
>
> +static void
> +i40e_pf_config_irq_link_list(struct i40e_pf_vf *vf,
> + struct i40e_virtchnl_vector_map *vvm)
> +{
> + uint64_t linklistmap = 0, tempmap;
> + struct i40e_hw *hw = I40E_PF_TO_HW(vf->pf);
> + uint16_t qid;
> + bool b_first_q = true;
> + enum i40e_queue_type qtype;
> + uint16_t vector_id;
> + uint32_t reg, reg_idx;
> + uint16_t itr_idx = 0, i;
> +
> + vector_id = vvm->vector_id;
> + /* setup the head */
> + if (!vector_id)
> + reg_idx = I40E_VPINT_LNKLST0(vf->vf_idx);
> + else
> + reg_idx = I40E_VPINT_LNKLSTN(
> + ((hw->func_caps.num_msix_vectors_vf - 1) * vf->vf_idx)
> + + (vector_id - 1));
> +
> + if (vvm->rxq_map == 0 && vvm->txq_map == 0) {
> + I40E_WRITE_REG(hw, reg_idx,
> + I40E_VPINT_LNKLST0_FIRSTQ_INDX_MASK);
> + goto cfg_irq_done;
> + }
> +
> + /* sort all rx and tx queues */
> + tempmap = vvm->rxq_map;
> + for (i = 0; i < sizeof(vvm->rxq_map) * 8; i++) {
> + if (tempmap & 0x1)
> + linklistmap |= (1 << (2 * i));
> + tempmap >>= 1;
> + }
> +
> + tempmap = vvm->txq_map;
> + for (i = 0; i < sizeof(vvm->txq_map) * 8; i++) {
> + if (tempmap & 0x1)
> + linklistmap |= (1 << (2 * i + 1));
> + tempmap >>= 1;
> + }
> +
> + /* Link all rx and tx queues into a chained list */
> + tempmap = linklistmap;
> + i = 0;
> + b_first_q = true;
> + do {
> + if (tempmap & 0x1) {
> + qtype = i % 2;
This cause ICC compilation error:
.../app/test-pmd/cmdline.c:(.text+0x79d4): undefined reference to
`rte_pmd_i40e_set_vf_vlan_stripq'
More information about the dev
mailing list