• Guojia Liao's avatar
    net: hns3: refine the VLAN tag handle for port based VLAN · 592b0179
    Guojia Liao authored
    For DEVICE_VERSION_V2, the hardware only supports max two layer
    VLAN tags, including port based tag inserted by hardware, tag in
    tx buffer descriptor(get from skb->tci) and tag in packet.
    
    For transmit packet:
    If port based VLAN disabled, and vf driver gets a VLAN tag from
    skb, the VLAN tag must be filled to the Outer_VLAN_TAG field
    (tag near to DMAC) of tx buffer descriptor, otherwise it may
    be inserted after the tag in packet.
    
    If port based VLAN enabled, and vf driver gets a VLAN tag from
    skb, the VLAN tag must be filled to the VLAN_TAG field (tag
    far to DMAC) of tx buffer descriptor, otherwise it may be
    conflicted with port based VLAN, and raise a hardware error.
    
    For receive packet:
    The hardware will strip the VLAN tags and fill them in the rx
    buffer descriptor, no matter port based VLAN enable or not.
    Because port based VLAN tag is useless for stack, so vf driver
    needs to discard the port based VLAN tag get from rx buffer
    descriptor when port based VLAN enabled.
    
    So vf must know about the port based VLAN state.
    
    For DEVICE_VERSION_V3, the hardware provides some new
    configuration to improve it.
    
    For transmit packet:
    When enable tag shift mode, hardware will handle the VLAN tag
    in outer_VLAN_TAG field as VLAN_TAG, so it won't conflict with
    port based VLAN. And hardware also make sure the tag before
    the tag in packet. So vf driver doesn't need to specify the tag
    position according to the port based VLAN state anymore.
    
    For receive packet:
    When enable discard mode, hardware will strip and discard the
    port based VLAN tag, so vf driver doesn't need to identify it
    from rx buffer descriptor.
    
    So modify the port based VLAN configuration, simplify the process
    for vf handling the VLAN tag.
    Signed-off-by: default avatarGuojia Liao <liaoguojia@huawei.com>
    Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    592b0179
hclge_main.c 304 KB