| 1973 | } |
| 1974 | |
| 1975 | static void |
| 1976 | __vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t msix_vect, |
| 1977 | int base_queue, int nb_queue, |
| 1978 | uint16_t itr_idx) |
| 1979 | { |
| 1980 | int i; |
| 1981 | uint32_t val; |
| 1982 | struct i40e_hw *hw = I40E_VSI_TO_HW(vsi); |
| 1983 | struct i40e_pf *pf = I40E_VSI_TO_PF(vsi); |
| 1984 | |
| 1985 | /* Bind all RX queues to allocated MSIX interrupt */ |
| 1986 | for (i = 0; i < nb_queue; i++) { |
| 1987 | val = (msix_vect << I40E_QINT_RQCTL_MSIX_INDX_SHIFT) | |
| 1988 | itr_idx << I40E_QINT_RQCTL_ITR_INDX_SHIFT | |
| 1989 | ((base_queue + i + 1) << |
| 1990 | I40E_QINT_RQCTL_NEXTQ_INDX_SHIFT) | |
| 1991 | (0 << I40E_QINT_RQCTL_NEXTQ_TYPE_SHIFT) | |
| 1992 | I40E_QINT_RQCTL_CAUSE_ENA_MASK; |
| 1993 | |
| 1994 | if (i == nb_queue - 1) |
| 1995 | val |= I40E_QINT_RQCTL_NEXTQ_INDX_MASK; |
| 1996 | I40E_WRITE_REG(hw, I40E_QINT_RQCTL(base_queue + i), val); |
| 1997 | } |
| 1998 | |
| 1999 | /* Write first RX queue to Link list register as the head element */ |
| 2000 | if (vsi->type != I40E_VSI_SRIOV) { |
| 2001 | uint16_t interval = |
| 2002 | i40e_calc_itr_interval(1, pf->support_multi_driver); |
| 2003 | |
| 2004 | if (msix_vect == I40E_MISC_VEC_ID) { |
| 2005 | I40E_WRITE_REG(hw, I40E_PFINT_LNKLST0, |
| 2006 | (base_queue << |
| 2007 | I40E_PFINT_LNKLST0_FIRSTQ_INDX_SHIFT) | |
| 2008 | (0x0 << |
| 2009 | I40E_PFINT_LNKLST0_FIRSTQ_TYPE_SHIFT)); |
| 2010 | I40E_WRITE_REG(hw, |
| 2011 | I40E_PFINT_ITR0(I40E_ITR_INDEX_DEFAULT), |
| 2012 | interval); |
| 2013 | } else { |
| 2014 | I40E_WRITE_REG(hw, I40E_PFINT_LNKLSTN(msix_vect - 1), |
| 2015 | (base_queue << |
| 2016 | I40E_PFINT_LNKLSTN_FIRSTQ_INDX_SHIFT) | |
| 2017 | (0x0 << |
| 2018 | I40E_PFINT_LNKLSTN_FIRSTQ_TYPE_SHIFT)); |
| 2019 | I40E_WRITE_REG(hw, |
| 2020 | I40E_PFINT_ITRN(I40E_ITR_INDEX_DEFAULT, |
| 2021 | msix_vect - 1), |
| 2022 | interval); |
| 2023 | } |
| 2024 | } else { |
| 2025 | uint32_t reg; |
| 2026 | |
| 2027 | if (msix_vect == I40E_MISC_VEC_ID) { |
| 2028 | I40E_WRITE_REG(hw, |
| 2029 | I40E_VPINT_LNKLST0(vsi->user_param), |
| 2030 | (base_queue << |
| 2031 | I40E_VPINT_LNKLST0_FIRSTQ_INDX_SHIFT) | |
| 2032 | (0x0 << |
no test coverage detected