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

Commit bbb18b97 authored by Mithlesh Thukral's avatar Mithlesh Thukral Committed by Greg Kroah-Hartman
Browse files

Staging: sxg: Add checksum control option through ethtool interface



* This patch adds support for controling checksum feature using the ethtool
  interface.

Signed-off-by: default avatarLinSysSoft Sahara Team <saharaproj@linsyssoft.com>
Signed-off-by: default avatarMithlesh Thukral <mithlesh@linsyssoft.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 7876ce07
Loading
Loading
Loading
Loading
+13 −11
Original line number Diff line number Diff line
@@ -1486,22 +1486,24 @@ static int sxg_process_isr(struct adapter_t *adapter, u32 MessageId)
 * sxg_rcv_checksum - Set the checksum for received packet
 *
 * Arguements:
 * 		@adapter - Adapter structure on which packet is received
 * 		@skb - Packet which is receieved
 * 		@Event - Event read from hardware
 */

void sxg_rcv_checksum(struct sk_buff *skb, struct sxg_event *Event)
void sxg_rcv_checksum(struct adapter_t *adapter, struct sk_buff *skb,
			 struct sxg_event *Event)
{
	skb->ip_summed = CHECKSUM_NONE;
	if(Event->Status & EVENT_STATUS_TCPIP) {
		if(!(Event->Status & EVENT_STATUS_TCPBAD)) {
	if (likely(adapter->flags & SXG_RCV_IP_CSUM_ENABLED)) {
		if (likely(adapter->flags & SXG_RCV_TCP_CSUM_ENABLED)
			&& (Event->Status & EVENT_STATUS_TCPIP)) {
			if(!(Event->Status & EVENT_STATUS_TCPBAD))
				skb->ip_summed = CHECKSUM_UNNECESSARY;
		}
		if(!(Event->Status & EVENT_STATUS_IPBAD)) {
		if(!(Event->Status & EVENT_STATUS_IPBAD))
			skb->ip_summed = CHECKSUM_UNNECESSARY;
		}
		} else if(Event->Status & EVENT_STATUS_IPONLY) {
		if(!(Event->Status & EVENT_STATUS_IPBAD)) {
			if(!(Event->Status & EVENT_STATUS_IPBAD))
				skb->ip_summed = CHECKSUM_UNNECESSARY;
		}
	}
@@ -1581,7 +1583,7 @@ static u32 sxg_process_event_queue(struct adapter_t *adapter, u32 RssId,
				rx_bytes = Event->Length;
				adapter->stats.rx_packets++;
				adapter->stats.rx_bytes += rx_bytes;
				sxg_rcv_checksum(skb, Event);
				sxg_rcv_checksum(adapter, skb, Event);
				skb->dev = adapter->netdev;
				netif_receive_skb(skb);
#endif
+5 −4
Original line number Diff line number Diff line
@@ -221,7 +221,7 @@ static int sxg_nic_get_settings(struct net_device *netdev,
static u32 sxg_nic_get_rx_csum(struct net_device *netdev)
{
	struct adapter_t *adapter = netdev_priv(netdev);
	return ((adapter->flags & SXG_RCV_IP_CSUM_ENABLED) ||
	return ((adapter->flags & SXG_RCV_IP_CSUM_ENABLED) &&
		 (adapter->flags & SXG_RCV_TCP_CSUM_ENABLED));
}

@@ -232,9 +232,10 @@ static int sxg_nic_set_rx_csum(struct net_device *netdev, u32 data)
		adapter->flags |= SXG_RCV_IP_CSUM_ENABLED;
	else
		adapter->flags &= ~SXG_RCV_IP_CSUM_ENABLED;

	/* Reset the card here (call the reset functions .. currently unavailable)*/

	/*
	 * We dont need to write to the card to do checksums.
	 * It does it anyways.
	 */
	return 0;
}