[gPXE-devel] [PATCH 2/2] [jme] Adding hardware RX checksum offload support

Guo-Fu Tseng cooldavid at cooldavid.org
Fri Jul 30 09:02:19 EDT 2010


From: Guo-Fu Tseng <cooldavid at cooldavid.org>

Read corresponding flags for RX checksum status, and update the
csum_stat field of the struct io_buffer.

Signed-off-by: Guo-Fu Tseng <cooldavid at cooldavid.org>
---
 src/drivers/net/jme.c |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/src/drivers/net/jme.c b/src/drivers/net/jme.c
index 17277d1..cc39222 100644
--- a/src/drivers/net/jme.c
+++ b/src/drivers/net/jme.c
@@ -589,6 +589,29 @@ jme_disable_rx_engine(struct jme_adapter *jme)
 
 }
 
+static int
+jme_rxsum(u16 flags)
+{
+	if (!(flags & (RXWBFLAG_TCPON | RXWBFLAG_UDPON | RXWBFLAG_IPV4)))
+		return CHECKSUM_NONE;
+
+	if ((flags & (RXWBFLAG_MF | RXWBFLAG_TCPON | RXWBFLAG_TCPCS))
+			== RXWBFLAG_TCPON) {
+		return CHECKSUM_NONE;
+	}
+
+	if ((flags & (RXWBFLAG_MF | RXWBFLAG_UDPON | RXWBFLAG_UDPCS))
+			== RXWBFLAG_UDPON) {
+		return CHECKSUM_NONE;
+	}
+
+	if ((flags & (RXWBFLAG_IPV4 | RXWBFLAG_IPCS)) == RXWBFLAG_IPV4) {
+		return CHECKSUM_NONE;
+	}
+
+	return CHECKSUM_COMPLETE;
+}
+
 static void
 jme_refill_rx_ring(struct jme_adapter *jme, int curhole)
 {
@@ -624,6 +647,7 @@ jme_alloc_and_feed_iob(struct jme_adapter *jme, int idx)
 
 	framesize = le16_to_cpu(rxdesc->descwb.framesize);
 	iob_put(rxbi, framesize);
+	rxbi->csum_stat = jme_rxsum(le16_to_cpu(rxdesc->descwb.flags));
 	netdev_rx(netdev, rxbi);
 
 	rxring->bufinf[idx] = NULL;
-- 
1.7.1



More information about the gPXE-devel mailing list