• Brett Creeley's avatar
    iavf: Add support for VIRTCHNL_VF_OFFLOAD_VLAN_V2 hotpath · ccd219d2
    Brett Creeley authored
    The new VIRTCHNL_VF_OFFLOAD_VLAN_V2 capability added support that allows
    the PF to set the location of the Tx and Rx VLAN tag for insertion and
    stripping offloads. In order to support this functionality a few changes
    are needed.
    
    1. Add a new method to cache the VLAN tag location based on negotiated
       capabilities for the Tx and Rx ring flags. This needs to be called in
       the initialization and reset paths.
    
    2. Refactor the transmit hotpath to account for the new Tx ring flags.
       When IAVF_TXR_FLAGS_VLAN_LOC_L2TAG2 is set, then the driver needs to
       insert the VLAN tag in the L2TAG2 field of the transmit descriptor.
       When the IAVF_TXRX_FLAGS_VLAN_LOC_L2TAG1 is set, then the driver needs
       to use the l2tag1 field of the data descriptor (same behavior as
       before).
    
    3. Refactor the iavf_tx_prepare_vlan_flags() function to simplify
       transmit hardware VLAN offload functionality by only depending on the
       skb_vlan_tag_present() function. This can be done because the OS
       won't request transmit offload for a VLAN unless the driver told the
       OS it's supported and enabled.
    
    4. Refactor the receive hotpath to account for the new Rx ring flags and
       VLAN ethertypes. This requires checking the Rx ring flags and
       descriptor status bits to determine the location of the VLAN tag.
       Also, since only a single ethertype can be supported at a time, check
       the enabled netdev features before specifying a VLAN ethertype in
       __vlan_hwaccel_put_tag().
    Signed-off-by: default avatarBrett Creeley <brett.creeley@intel.com>
    Tested-by: default avatarKonrad Jankowski <konrad0.jankowski@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    ccd219d2
iavf_txrx.c 70.3 KB