mirror of https://gitee.com/openkylin/linux.git
liquidio: Vlan offloads changes
This patch adds support for vlan offloads for the driver and receive header structures are also modified appropriately. Also requestID will not be used in reveive header any more. Signed-off-by: Derek Chickles <derek.chickles@caviumnetworks.com> Signed-off-by: Satanand Burla <satananda.burla@caviumnetworks.com> Signed-off-by: Felix Manlunas <felix.manlunas@caviumnetworks.com> Signed-off-by: Raghu Vatsavayi <raghu.vatsavayi@caviumnetworks.com> Signed-off-by: Raghu Vatsavayi <rvatsavayi@caviumnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
63da84049b
commit
0da0b77cde
|
@ -1849,6 +1849,7 @@ liquidio_push_packet(u32 octeon_id,
|
|||
struct sk_buff *skb = (struct sk_buff *)skbuff;
|
||||
struct skb_shared_hwtstamps *shhwtstamps;
|
||||
u64 ns;
|
||||
u16 vtag = 0;
|
||||
struct net_device *netdev = (struct net_device *)arg;
|
||||
struct octeon_droq *droq = container_of(param, struct octeon_droq,
|
||||
napi);
|
||||
|
@ -1925,6 +1926,16 @@ liquidio_push_packet(u32 octeon_id,
|
|||
else
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
|
||||
/* inbound VLAN tag */
|
||||
if ((netdev->features & NETIF_F_HW_VLAN_CTAG_RX) &&
|
||||
(rh->r_dh.vlan != 0)) {
|
||||
u16 vid = rh->r_dh.vlan;
|
||||
u16 priority = rh->r_dh.priority;
|
||||
|
||||
vtag = priority << 13 | vid;
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vtag);
|
||||
}
|
||||
|
||||
packet_was_received = napi_gro_receive(napi, skb) != GRO_DROP;
|
||||
|
||||
if (packet_was_received) {
|
||||
|
@ -2900,6 +2911,11 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|||
tx_info->s.gso_size = skb_shinfo(skb)->gso_size;
|
||||
tx_info->s.gso_segs = skb_shinfo(skb)->gso_segs;
|
||||
}
|
||||
/* HW insert VLAN tag */
|
||||
if (skb_vlan_tag_present(skb)) {
|
||||
irh->priority = skb_vlan_tag_get(skb) >> 13;
|
||||
irh->vlan = skb_vlan_tag_get(skb) & 0xfff;
|
||||
}
|
||||
|
||||
xmit_more = skb->xmit_more;
|
||||
|
||||
|
@ -3301,11 +3317,17 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)
|
|||
| NETIF_F_LRO;
|
||||
netif_set_gso_max_size(netdev, OCTNIC_GSO_MAX_SIZE);
|
||||
|
||||
netdev->vlan_features = lio->dev_capability;
|
||||
/* Add any unchangeable hw features */
|
||||
lio->dev_capability |= NETIF_F_HW_VLAN_CTAG_RX |
|
||||
NETIF_F_HW_VLAN_CTAG_TX;
|
||||
|
||||
netdev->features = (lio->dev_capability & ~NETIF_F_LRO);
|
||||
|
||||
netdev->vlan_features = lio->dev_capability;
|
||||
|
||||
netdev->hw_features = lio->dev_capability;
|
||||
/*HW_VLAN_RX and HW_VLAN_FILTER is always on*/
|
||||
netdev->hw_features = netdev->hw_features &
|
||||
~NETIF_F_HW_VLAN_CTAG_RX;
|
||||
|
||||
/* Point to the properties for octeon device to which this
|
||||
* interface belongs.
|
||||
|
|
|
@ -482,15 +482,15 @@ struct octeon_instr_irh {
|
|||
u64 opcode:4;
|
||||
u64 rflag:1;
|
||||
u64 subcode:7;
|
||||
u64 len:3;
|
||||
u64 rid:13;
|
||||
u64 reserved:4;
|
||||
u64 vlan:12;
|
||||
u64 priority:3;
|
||||
u64 reserved:5;
|
||||
u64 ossp:32; /* opcode/subcode specific parameters */
|
||||
#else
|
||||
u64 ossp:32; /* opcode/subcode specific parameters */
|
||||
u64 reserved:4;
|
||||
u64 rid:13;
|
||||
u64 len:3;
|
||||
u64 reserved:5;
|
||||
u64 priority:3;
|
||||
u64 vlan:12;
|
||||
u64 subcode:7;
|
||||
u64 rflag:1;
|
||||
u64 opcode:4;
|
||||
|
@ -517,28 +517,27 @@ union octeon_rh {
|
|||
struct {
|
||||
u64 opcode:4;
|
||||
u64 subcode:8;
|
||||
u64 len:3; /** additional 64-bit words */
|
||||
u64 rid:13; /** request id in response to pkt sent by host */
|
||||
u64 reserved:4;
|
||||
u64 ossp:32; /** opcode/subcode specific parameters */
|
||||
u64 len:3; /** additional 64-bit words */
|
||||
u64 reserved:17;
|
||||
u64 ossp:32; /** opcode/subcode specific parameters */
|
||||
} r;
|
||||
struct {
|
||||
u64 opcode:4;
|
||||
u64 subcode:8;
|
||||
u64 len:3; /** additional 64-bit words */
|
||||
u64 rid:13; /** request id in response to pkt sent by host */
|
||||
u64 extra:24;
|
||||
u64 link:8;
|
||||
u64 len:3; /** additional 64-bit words */
|
||||
u64 extra:28;
|
||||
u64 vlan:12;
|
||||
u64 priority:3;
|
||||
u64 csum_verified:3; /** checksum verified. */
|
||||
u64 has_hwtstamp:1; /** Has hardware timestamp. 1 = yes. */
|
||||
} r_dh;
|
||||
struct {
|
||||
u64 opcode:4;
|
||||
u64 subcode:8;
|
||||
u64 len:3; /** additional 64-bit words */
|
||||
u64 rid:13; /** request id in response to pkt sent by host */
|
||||
u64 len:3; /** additional 64-bit words */
|
||||
u64 reserved:11;
|
||||
u64 num_gmx_ports:8;
|
||||
u64 max_nic_ports:8;
|
||||
u64 max_nic_ports:10;
|
||||
u64 app_cap_flags:4;
|
||||
u64 app_mode:16;
|
||||
} r_core_drv_init;
|
||||
|
@ -554,8 +553,7 @@ union octeon_rh {
|
|||
u64 u64;
|
||||
struct {
|
||||
u64 ossp:32; /** opcode/subcode specific parameters */
|
||||
u64 reserved:4;
|
||||
u64 rid:13; /** req id in response to pkt sent by host */
|
||||
u64 reserved:17;
|
||||
u64 len:3; /** additional 64-bit words */
|
||||
u64 subcode:8;
|
||||
u64 opcode:4;
|
||||
|
@ -563,9 +561,9 @@ union octeon_rh {
|
|||
struct {
|
||||
u64 has_hwtstamp:1; /** 1 = has hwtstamp */
|
||||
u64 csum_verified:3; /** checksum verified. */
|
||||
u64 link:8;
|
||||
u64 extra:24;
|
||||
u64 rid:13; /** req id in response to pkt sent by host */
|
||||
u64 priority:3;
|
||||
u64 vlan:12;
|
||||
u64 extra:28;
|
||||
u64 len:3; /** additional 64-bit words */
|
||||
u64 subcode:8;
|
||||
u64 opcode:4;
|
||||
|
@ -573,9 +571,9 @@ union octeon_rh {
|
|||
struct {
|
||||
u64 app_mode:16;
|
||||
u64 app_cap_flags:4;
|
||||
u64 max_nic_ports:8;
|
||||
u64 max_nic_ports:10;
|
||||
u64 num_gmx_ports:8;
|
||||
u64 rid:13;
|
||||
u64 reserved:11;
|
||||
u64 len:3; /** additional 64-bit words */
|
||||
u64 subcode:8;
|
||||
u64 opcode:4;
|
||||
|
|
Loading…
Reference in New Issue