diff options
Diffstat (limited to 'drivers/staging/sxg/sxg.c')
-rw-r--r-- | drivers/staging/sxg/sxg.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/staging/sxg/sxg.c b/drivers/staging/sxg/sxg.c index 09ff800..d52212a 100644 --- a/drivers/staging/sxg/sxg.c +++ b/drivers/staging/sxg/sxg.c @@ -1486,23 +1486,25 @@ 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)) { - skb->ip_summed = CHECKSUM_UNNECESSARY; - } - 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 (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)) skb->ip_summed = CHECKSUM_UNNECESSARY; + } else if(Event->Status & EVENT_STATUS_IPONLY) { + 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 |