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

Commit 91e745aa authored by Stephen Hemminger's avatar Stephen Hemminger Committed by Jeff Garzik
Browse files

qla3xxx: cleanup checksum offload code



The code for checksum is more complex than needed when dealing with VLAN's;
the higher layers already pass down the location of the IP header.

Compile tested only, no hardware available.

Signed-off-by: default avatarStephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: default avatarRon Mercer <ron.mercer@qlogic.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 59b34c12
Loading
Loading
Loading
Loading
+9 −24
Original line number Original line Diff line number Diff line
@@ -2433,37 +2433,22 @@ static int ql_get_seg_count(struct ql3_adapter *qdev,
	return -1;
	return -1;
}
}


static void ql_hw_csum_setup(struct sk_buff *skb,
static void ql_hw_csum_setup(const struct sk_buff *skb,
			     struct ob_mac_iocb_req *mac_iocb_ptr)
			     struct ob_mac_iocb_req *mac_iocb_ptr)
{
{
	struct ethhdr *eth;
	const struct iphdr *ip = ip_hdr(skb);
	struct iphdr *ip = NULL;
	u8 offset = ETH_HLEN;


	eth = (struct ethhdr *)(skb->data);
	mac_iocb_ptr->ip_hdr_off = skb_network_offset(skb);

	mac_iocb_ptr->ip_hdr_len = ip->ihl;
	if (eth->h_proto == __constant_htons(ETH_P_IP)) {
		ip = (struct iphdr *)&skb->data[ETH_HLEN];
	} else if (eth->h_proto == htons(ETH_P_8021Q) &&
		   ((struct vlan_ethhdr *)skb->data)->
		   h_vlan_encapsulated_proto == __constant_htons(ETH_P_IP)) {
		ip = (struct iphdr *)&skb->data[VLAN_ETH_HLEN];
		offset = VLAN_ETH_HLEN;
	}


	if (ip) {
	if (ip->protocol == IPPROTO_TCP) {
	if (ip->protocol == IPPROTO_TCP) {
		mac_iocb_ptr->flags1 |= OB_3032MAC_IOCB_REQ_TC |
		mac_iocb_ptr->flags1 |= OB_3032MAC_IOCB_REQ_TC |
			OB_3032MAC_IOCB_REQ_IC;
			OB_3032MAC_IOCB_REQ_IC;
			mac_iocb_ptr->ip_hdr_off = offset;
	} else {
			mac_iocb_ptr->ip_hdr_len = ip->ihl;
		} else if (ip->protocol == IPPROTO_UDP) {
		mac_iocb_ptr->flags1 |= OB_3032MAC_IOCB_REQ_UC |
		mac_iocb_ptr->flags1 |= OB_3032MAC_IOCB_REQ_UC |
			OB_3032MAC_IOCB_REQ_IC;
			OB_3032MAC_IOCB_REQ_IC;
			mac_iocb_ptr->ip_hdr_off = offset;
			mac_iocb_ptr->ip_hdr_len = ip->ihl;
		}
	}
	}

}
}


/*
/*