diff options
Diffstat (limited to 'sys/dev/dc')
| -rw-r--r-- | sys/dev/dc/if_dc.c | 8 | ||||
| -rw-r--r-- | sys/dev/dc/if_dcreg.h | 1 |
2 files changed, 7 insertions, 2 deletions
diff --git a/sys/dev/dc/if_dc.c b/sys/dev/dc/if_dc.c index 7a0c54dc2a70c..139983bb089a9 100644 --- a/sys/dev/dc/if_dc.c +++ b/sys/dev/dc/if_dc.c @@ -1942,10 +1942,12 @@ static int dc_attach(dev) break; case DC_DEVICEID_X3201: sc->dc_type = DC_TYPE_XIRCOM; - sc->dc_flags |= DC_TX_INTR_ALWAYS | DC_TX_COALESCE; + sc->dc_flags |= DC_TX_INTR_ALWAYS | DC_TX_COALESCE | + DC_TX_ALIGN ; /* * We don't actually need to coalesce, but we're doing * it to obtain a double word aligned buffer. + * The DC_TX_COALESCE flag is required. */ break; case DC_DEVICEID_RS7112: @@ -2996,7 +2998,9 @@ static void dc_start(ifp) if (m_head == NULL) break; - if (sc->dc_flags & DC_TX_COALESCE) { + if (sc->dc_flags & DC_TX_COALESCE && + (m_head->m_next != NULL || + sc->dc_flags & DC_TX_ALIGN) ) { if (dc_coal(sc, &m_head)) { IF_PREPEND(&ifp->if_snd, m_head); ifp->if_flags |= IFF_OACTIVE; diff --git a/sys/dev/dc/if_dcreg.h b/sys/dev/dc/if_dcreg.h index 9336728f2756c..0052d33d9220f 100644 --- a/sys/dev/dc/if_dcreg.h +++ b/sys/dev/dc/if_dcreg.h @@ -739,6 +739,7 @@ struct dc_softc { #define DC_64BIT_HASH 0x00002000 #define DC_TULIP_LEDS 0x00004000 #define DC_TX_ONE 0x00008000 +#define DC_TX_ALIGN 0x00010000 /* align mbuf on tx */ /* * register space access macros |
