svn commit: r192726 - head/sys/dev/msk
Pyun YongHyeon
yongari at FreeBSD.org
Mon May 25 06:09:22 UTC 2009
Author: yongari
Date: Mon May 25 06:09:18 2009
New Revision: 192726
URL: http://svn.freebsd.org/changeset/base/192726
Log:
Add support for newer descriptor format. This format is used on
Yukon FE+, Yukon Extreme and Yukon Supreme.
Modified:
head/sys/dev/msk/if_msk.c
head/sys/dev/msk/if_mskreg.h
Modified: head/sys/dev/msk/if_msk.c
==============================================================================
--- head/sys/dev/msk/if_msk.c Mon May 25 04:27:12 2009 (r192725)
+++ head/sys/dev/msk/if_msk.c Mon May 25 06:09:18 2009 (r192726)
@@ -2399,7 +2399,8 @@ msk_encap(struct msk_if_softc *sc_if, st
tcp_offset = offset = 0;
m = *m_head;
- if ((m->m_pkthdr.csum_flags & (MSK_CSUM_FEATURES | CSUM_TSO)) != 0) {
+ if ((sc_if->msk_flags & MSK_FLAG_DESCV2) == 0 &&
+ (m->m_pkthdr.csum_flags & (MSK_CSUM_FEATURES | CSUM_TSO)) != 0) {
/*
* Since mbuf has no protocol specific structure information
* in it we have to inspect protocol information here to
@@ -2526,11 +2527,18 @@ msk_encap(struct msk_if_softc *sc_if, st
/* Check TSO support. */
if ((m->m_pkthdr.csum_flags & CSUM_TSO) != 0) {
- tso_mtu = offset + m->m_pkthdr.tso_segsz;
+ if ((sc_if->msk_flags & MSK_FLAG_DESCV2) != 0)
+ tso_mtu = m->m_pkthdr.tso_segsz;
+ else
+ tso_mtu = offset + m->m_pkthdr.tso_segsz;
if (tso_mtu != sc_if->msk_cdata.msk_tso_mtu) {
tx_le = &sc_if->msk_rdata.msk_tx_ring[prod];
tx_le->msk_addr = htole32(tso_mtu);
- tx_le->msk_control = htole32(OP_LRGLEN | HW_OWNER);
+ if ((sc_if->msk_flags & MSK_FLAG_DESCV2) != 0)
+ tx_le->msk_control = htole32(OP_MSS | HW_OWNER);
+ else
+ tx_le->msk_control =
+ htole32(OP_LRGLEN | HW_OWNER);
sc_if->msk_cdata.msk_tx_cnt++;
MSK_INC(prod, MSK_TX_RING_CNT);
sc_if->msk_cdata.msk_tso_mtu = tso_mtu;
@@ -2554,15 +2562,21 @@ msk_encap(struct msk_if_softc *sc_if, st
}
/* Check if we have to handle checksum offload. */
if (tso == 0 && (m->m_pkthdr.csum_flags & MSK_CSUM_FEATURES) != 0) {
- tx_le = &sc_if->msk_rdata.msk_tx_ring[prod];
- tx_le->msk_addr = htole32(((tcp_offset + m->m_pkthdr.csum_data)
- & 0xffff) | ((uint32_t)tcp_offset << 16));
- tx_le->msk_control = htole32(1 << 16 | (OP_TCPLISW | HW_OWNER));
- control = CALSUM | WR_SUM | INIT_SUM | LOCK_SUM;
- if ((m->m_pkthdr.csum_flags & CSUM_UDP) != 0)
- control |= UDPTCP;
- sc_if->msk_cdata.msk_tx_cnt++;
- MSK_INC(prod, MSK_TX_RING_CNT);
+ if ((sc_if->msk_flags & MSK_FLAG_DESCV2) != 0)
+ control |= CALSUM;
+ else {
+ tx_le = &sc_if->msk_rdata.msk_tx_ring[prod];
+ tx_le->msk_addr = htole32(((tcp_offset +
+ m->m_pkthdr.csum_data) & 0xffff) |
+ ((uint32_t)tcp_offset << 16));
+ tx_le->msk_control = htole32(1 << 16 |
+ (OP_TCPLISW | HW_OWNER));
+ control = CALSUM | WR_SUM | INIT_SUM | LOCK_SUM;
+ if ((m->m_pkthdr.csum_flags & CSUM_UDP) != 0)
+ control |= UDPTCP;
+ sc_if->msk_cdata.msk_tx_cnt++;
+ MSK_INC(prod, MSK_TX_RING_CNT);
+ }
}
si = prod;
Modified: head/sys/dev/msk/if_mskreg.h
==============================================================================
--- head/sys/dev/msk/if_mskreg.h Mon May 25 04:27:12 2009 (r192725)
+++ head/sys/dev/msk/if_mskreg.h Mon May 25 06:09:18 2009 (r192726)
@@ -2122,6 +2122,8 @@ struct msk_stat_desc {
#define OP_ADDR64VLAN (OP_ADDR64 | OP_VLAN)
#define OP_LRGLEN 0x24000000
#define OP_LRGLENVLAN (OP_LRGLEN | OP_VLAN)
+#define OP_MSS 0x28000000
+#define OP_MSSVLAN (OP_MSS | OP_VLAN)
#define OP_BUFFER 0x40000000
#define OP_PACKET 0x41000000
#define OP_LARGESEND 0x43000000
@@ -2386,6 +2388,7 @@ struct msk_if_softc {
#define MSK_FLAG_JUMBO 0x0008
#define MSK_FLAG_JUMBO_NOCSUM 0x0010
#define MSK_FLAG_RAMBUF 0x0020
+#define MSK_FLAG_DESCV2 0x0040
#define MSK_FLAG_SUSPEND 0x2000
#define MSK_FLAG_DETACH 0x4000
#define MSK_FLAG_LINK 0x8000
More information about the svn-src-head
mailing list