Page MenuHomeFreeBSD

D61017.1793610178.diff
No OneTemporary

Authored By
Unknown
Size
1 KB
Referenced Files
None
Subscribers
None

D61017.1793610178.diff

diff --git a/sys/dev/dwc/dwc4_dma.c b/sys/dev/dwc/dwc4_dma.c
--- a/sys/dev/dwc/dwc4_dma.c
+++ b/sys/dev/dwc/dwc4_dma.c
@@ -112,6 +112,7 @@
#define TDES3_CIC_FULLP (0x3 << TDES3_CIC_S) /* IP header, payload, pseudo-hdr*/
#define TDES3_TPL_S 0 /* TCP Payload Length */
#define TDES3_TPL_M (0x3ffff << TDES3_TPL_S)
+#define TDES3_PL_M 0x7fff /* Packet Length */
/*
* A hardware buffer descriptor. Rx and Tx buffers have the same descriptor
@@ -170,7 +171,7 @@
inline static void
txdesc_setup(struct dwc_softc *sc, int idx, bus_addr_t paddr,
- uint32_t len, uint32_t flags, bool first, bool last)
+ uint32_t len, uint32_t pktlen, uint32_t flags, bool first, bool last)
{
uint32_t tdes0, tdes1, tdes2, tdes3;
@@ -178,7 +179,8 @@
tdes0 = (uint32_t)paddr;
tdes1 = (uint32_t)((uint64_t)paddr >> 32);
tdes2 = len | TDES2_TTSE;
- tdes3 = flags;
+ /* The core needs the total packet length in TDES3. */
+ tdes3 = flags | (pktlen & TDES3_PL_M);
if (first)
tdes3 |= TDES3_FD;
@@ -275,7 +277,7 @@
for (i = 0; i < nsegs; i++) {
txdesc_setup(sc, sc->tx_desc_head,
- segs[i].ds_addr, segs[i].ds_len,
+ segs[i].ds_addr, segs[i].ds_len, m->m_pkthdr.len,
(i == 0) ? flags : 0, /* only first desc needs flags */
(i == 0),
(i == nsegs - 1));

File Metadata

Mime Type
text/plain
Expires
Mon, Nov 2, 9:02 AM (10 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41256934
Default Alt Text
D61017.1793610178.diff (1 KB)

Event Timeline