Loading drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h +1 −0 Original line number Diff line number Diff line Loading @@ -145,6 +145,7 @@ struct rmnet_priv_stats { u64 csum_sw; u64 csum_hw; struct rmnet_coal_stats coal; u64 ul_prio; }; struct rmnet_priv { Loading drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c +4 −2 Original line number Diff line number Diff line Loading @@ -373,7 +373,8 @@ static int rmnet_map_egress_handler(struct sk_buff *skb, if (port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV4) { additional_header_len = sizeof(struct rmnet_map_ul_csum_header); csum_type = RMNET_FLAGS_EGRESS_MAP_CKSUMV4; } else if (port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV5) { } else if ((port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV5) || (port->data_format & RMNET_EGRESS_FORMAT_PRIORITY)) { additional_header_len = sizeof(struct rmnet_map_v5_csum_header); csum_type = RMNET_FLAGS_EGRESS_MAP_CKSUMV5; } Loading @@ -391,7 +392,8 @@ static int rmnet_map_egress_handler(struct sk_buff *skb, #endif if (csum_type) rmnet_map_checksum_uplink_packet(skb, orig_dev, csum_type); rmnet_map_checksum_uplink_packet(skb, port, orig_dev, csum_type); map_header = rmnet_map_add_map_header(skb, additional_header_len, 0, port); Loading drivers/net/ethernet/qualcomm/rmnet/rmnet_map.h +4 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,9 @@ struct rmnet_map_header { struct rmnet_map_v5_csum_header { u8 next_hdr:1; u8 header_type:7; u8 hw_reserved:7; u8 hw_reserved:5; u8 priority:1; u8 hw_reserved_bit:1; u8 csum_valid_required:1; __be16 reserved; } __aligned(1); Loading Loading @@ -251,6 +253,7 @@ struct rmnet_map_header *rmnet_map_add_map_header(struct sk_buff *skb, void rmnet_map_command(struct sk_buff *skb, struct rmnet_port *port); int rmnet_map_checksum_downlink_packet(struct sk_buff *skb, u16 len); void rmnet_map_checksum_uplink_packet(struct sk_buff *skb, struct rmnet_port *port, struct net_device *orig_dev, int csum_type); bool rmnet_map_v5_csum_buggy(struct rmnet_map_v5_coal_header *coal_hdr); Loading drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c +22 −1 Original line number Diff line number Diff line Loading @@ -481,7 +481,20 @@ void rmnet_map_v4_checksum_uplink_packet(struct sk_buff *skb, priv->stats.csum_sw++; } static void rmnet_map_v5_check_priority(struct sk_buff *skb, struct net_device *orig_dev, struct rmnet_map_v5_csum_header *hdr) { struct rmnet_priv *priv = netdev_priv(orig_dev); if (skb->priority) { priv->stats.ul_prio++; hdr->priority = 1; } } void rmnet_map_v5_checksum_uplink_packet(struct sk_buff *skb, struct rmnet_port *port, struct net_device *orig_dev) { struct rmnet_priv *priv = netdev_priv(orig_dev); Loading @@ -492,6 +505,13 @@ void rmnet_map_v5_checksum_uplink_packet(struct sk_buff *skb, memset(ul_header, 0, sizeof(*ul_header)); ul_header->header_type = RMNET_MAP_HEADER_TYPE_CSUM_OFFLOAD; if (port->data_format & RMNET_EGRESS_FORMAT_PRIORITY) rmnet_map_v5_check_priority(skb, orig_dev, ul_header); /* Allow priority w/o csum offload */ if (!(port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV5)) return; if (skb->ip_summed == CHECKSUM_PARTIAL) { void *iph = (char *)ul_header + sizeof(*ul_header); void *trans; Loading Loading @@ -532,6 +552,7 @@ void rmnet_map_v5_checksum_uplink_packet(struct sk_buff *skb, * packets that are supported for UL checksum offload. */ void rmnet_map_checksum_uplink_packet(struct sk_buff *skb, struct rmnet_port *port, struct net_device *orig_dev, int csum_type) { Loading @@ -540,7 +561,7 @@ void rmnet_map_checksum_uplink_packet(struct sk_buff *skb, rmnet_map_v4_checksum_uplink_packet(skb, orig_dev); break; case RMNET_FLAGS_EGRESS_MAP_CKSUMV5: rmnet_map_v5_checksum_uplink_packet(skb, orig_dev); rmnet_map_v5_checksum_uplink_packet(skb, port, orig_dev); break; default: break; Loading drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h +3 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ #define RMNET_INGRESS_FORMAT_DL_MARKER (RMNET_INGRESS_FORMAT_DL_MARKER_V1 |\ RMNET_INGRESS_FORMAT_DL_MARKER_V2) /* UL Packet prioritization */ #define RMNET_EGRESS_FORMAT_PRIORITY BIT(28) /* Power save feature*/ #define RMNET_INGRESS_FORMAT_PS BIT(27) #define RMNET_FORMAT_PS_NOTIF BIT(26) Loading Loading
drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h +1 −0 Original line number Diff line number Diff line Loading @@ -145,6 +145,7 @@ struct rmnet_priv_stats { u64 csum_sw; u64 csum_hw; struct rmnet_coal_stats coal; u64 ul_prio; }; struct rmnet_priv { Loading
drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c +4 −2 Original line number Diff line number Diff line Loading @@ -373,7 +373,8 @@ static int rmnet_map_egress_handler(struct sk_buff *skb, if (port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV4) { additional_header_len = sizeof(struct rmnet_map_ul_csum_header); csum_type = RMNET_FLAGS_EGRESS_MAP_CKSUMV4; } else if (port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV5) { } else if ((port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV5) || (port->data_format & RMNET_EGRESS_FORMAT_PRIORITY)) { additional_header_len = sizeof(struct rmnet_map_v5_csum_header); csum_type = RMNET_FLAGS_EGRESS_MAP_CKSUMV5; } Loading @@ -391,7 +392,8 @@ static int rmnet_map_egress_handler(struct sk_buff *skb, #endif if (csum_type) rmnet_map_checksum_uplink_packet(skb, orig_dev, csum_type); rmnet_map_checksum_uplink_packet(skb, port, orig_dev, csum_type); map_header = rmnet_map_add_map_header(skb, additional_header_len, 0, port); Loading
drivers/net/ethernet/qualcomm/rmnet/rmnet_map.h +4 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,9 @@ struct rmnet_map_header { struct rmnet_map_v5_csum_header { u8 next_hdr:1; u8 header_type:7; u8 hw_reserved:7; u8 hw_reserved:5; u8 priority:1; u8 hw_reserved_bit:1; u8 csum_valid_required:1; __be16 reserved; } __aligned(1); Loading Loading @@ -251,6 +253,7 @@ struct rmnet_map_header *rmnet_map_add_map_header(struct sk_buff *skb, void rmnet_map_command(struct sk_buff *skb, struct rmnet_port *port); int rmnet_map_checksum_downlink_packet(struct sk_buff *skb, u16 len); void rmnet_map_checksum_uplink_packet(struct sk_buff *skb, struct rmnet_port *port, struct net_device *orig_dev, int csum_type); bool rmnet_map_v5_csum_buggy(struct rmnet_map_v5_coal_header *coal_hdr); Loading
drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c +22 −1 Original line number Diff line number Diff line Loading @@ -481,7 +481,20 @@ void rmnet_map_v4_checksum_uplink_packet(struct sk_buff *skb, priv->stats.csum_sw++; } static void rmnet_map_v5_check_priority(struct sk_buff *skb, struct net_device *orig_dev, struct rmnet_map_v5_csum_header *hdr) { struct rmnet_priv *priv = netdev_priv(orig_dev); if (skb->priority) { priv->stats.ul_prio++; hdr->priority = 1; } } void rmnet_map_v5_checksum_uplink_packet(struct sk_buff *skb, struct rmnet_port *port, struct net_device *orig_dev) { struct rmnet_priv *priv = netdev_priv(orig_dev); Loading @@ -492,6 +505,13 @@ void rmnet_map_v5_checksum_uplink_packet(struct sk_buff *skb, memset(ul_header, 0, sizeof(*ul_header)); ul_header->header_type = RMNET_MAP_HEADER_TYPE_CSUM_OFFLOAD; if (port->data_format & RMNET_EGRESS_FORMAT_PRIORITY) rmnet_map_v5_check_priority(skb, orig_dev, ul_header); /* Allow priority w/o csum offload */ if (!(port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV5)) return; if (skb->ip_summed == CHECKSUM_PARTIAL) { void *iph = (char *)ul_header + sizeof(*ul_header); void *trans; Loading Loading @@ -532,6 +552,7 @@ void rmnet_map_v5_checksum_uplink_packet(struct sk_buff *skb, * packets that are supported for UL checksum offload. */ void rmnet_map_checksum_uplink_packet(struct sk_buff *skb, struct rmnet_port *port, struct net_device *orig_dev, int csum_type) { Loading @@ -540,7 +561,7 @@ void rmnet_map_checksum_uplink_packet(struct sk_buff *skb, rmnet_map_v4_checksum_uplink_packet(skb, orig_dev); break; case RMNET_FLAGS_EGRESS_MAP_CKSUMV5: rmnet_map_v5_checksum_uplink_packet(skb, orig_dev); rmnet_map_v5_checksum_uplink_packet(skb, port, orig_dev); break; default: break; Loading
drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h +3 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ #define RMNET_INGRESS_FORMAT_DL_MARKER (RMNET_INGRESS_FORMAT_DL_MARKER_V1 |\ RMNET_INGRESS_FORMAT_DL_MARKER_V2) /* UL Packet prioritization */ #define RMNET_EGRESS_FORMAT_PRIORITY BIT(28) /* Power save feature*/ #define RMNET_INGRESS_FORMAT_PS BIT(27) #define RMNET_FORMAT_PS_NOTIF BIT(26) Loading