Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1bbcb569 authored by Ravinder Konka's avatar Ravinder Konka Committed by Gerrit - the friendly Code Review server
Browse files

rmnet_data : Changes to support Scatter Gather and GSO.



This patch enables hardware device features such as
NETIF_F_SG NETIF_F_GSO NETIF_F_GSO_UDP_TUNNEL
NETIF_F_GSO_UDP_TUNNEL_CSUM. This patch also ensures
to skip padding(to align length to word boundaries)
for outgoing  non linear skbs.

This patch also adds a new ioctl interface
RMNET_IOCTL_GET_SG_SUPPORT  to query the physical
 network devices for Scatter Gather support.

Change-Id: I9788d75c249ab2dac5b598dad131c0692ed84e4d
Acked-by: default avatarAbhishek Chauhan <abchauha@qti.qualcomm.com>
Signed-off-by: default avatarRavinder Konka <rkonka@codeaurora.org>
parent c2752cc0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -59,7 +59,8 @@ enum rmnet_ioctl_extended_cmds_e {
	RMNET_IOCTL_SET_SLEEP_STATE            = 0x0014,   /* Set sleep state */
	RMNET_IOCTL_SET_XLAT_DEV_INFO          = 0x0015,   /* xlat dev name   */
	RMNET_IOCTL_DEREGISTER_DEV             = 0x0016,   /* Dereg a net dev */
	RMNET_IOCTL_EXTENDED_MAX               = 0x0017
	RMNET_IOCTL_GET_SG_SUPPORT             = 0x0017,   /* Query sg support*/
	RMNET_IOCTL_EXTENDED_MAX               = 0x0018
};

/* Return values for the RMNET_IOCTL_GET_SUPPORTED_FEATURES IOCTL */
+6 −0
Original line number Diff line number Diff line
@@ -615,6 +615,12 @@ int rmnet_vnd_create_dev(int id, struct net_device **new_device,
			NETIF_F_IPV6_UDP_CSUM;
		/* Configuring GRO on rmnet_data interfaces */
		dev->hw_features |= NETIF_F_GRO;
		/* Configuring Scatter-Gather on rmnet_data interfaces */
		dev->hw_features |= NETIF_F_SG;
		/* Configuring GSO on rmnet_data interfaces */
		dev->hw_features |= NETIF_F_GSO;
		dev->hw_features |= NETIF_F_GSO_UDP_TUNNEL;
		dev->hw_features |= NETIF_F_GSO_UDP_TUNNEL_CSUM;
	}

	rc = register_netdevice(dev);
+10 −0
Original line number Diff line number Diff line
@@ -99,6 +99,15 @@ struct rmnet_map_header_s *rmnet_map_add_map_header(struct sk_buff *skb,

	padding = ALIGN(map_datalen, 4) - map_datalen;

	if (padding == 0)
		goto done;

	if ((skb->dev->features & NETIF_F_GSO) &&
	    skb_is_nonlinear(skb) && unlikely((padding != 0))) {
		LOGE("pad:%d required for non linear skb", padding);
		BUG();
	}

	if (skb_tailroom(skb) < padding)
		return 0;

@@ -106,6 +115,7 @@ struct rmnet_map_header_s *rmnet_map_add_map_header(struct sk_buff *skb,
	LOGD("pad: %d", padding);
	memset(padbytes, 0, padding);

done:
	map_header->pkt_len = htons(map_datalen + padding);
	map_header->pad_len = padding&0x3F;