diff options
author | yongari <yongari@FreeBSD.org> | 2008-09-25 07:31:45 +0000 |
---|---|---|
committer | yongari <yongari@FreeBSD.org> | 2008-09-25 07:31:45 +0000 |
commit | 71c4e3af8912c81a6b9fd9f363ac48c2aa96f33f (patch) | |
tree | 848ac8245fe62276cc05e4a2824235cbbd68a6cd /sys/dev/msk/if_mskreg.h | |
parent | b178e06d63d44e7e7b5586626aaa7f46a38fa208 (diff) | |
download | FreeBSD-src-71c4e3af8912c81a6b9fd9f363ac48c2aa96f33f.zip FreeBSD-src-71c4e3af8912c81a6b9fd9f363ac48c2aa96f33f.tar.gz |
Add another hardware bug workaround for Yukon II controllers that
have hardware ram buffer. The silicon bug seem to be triggered by
pause frames if receive buffer is not aligned on FIFO word(8 bytes).
To workaround the issue, make sure to align Rx buffers on 8 bytes.
Unfortunately this workaround requires yet another Rx fixup for
strict alignment architecture machines to align IP header.
For newer hardwares that lacks ram buffer may not have this bug so
check number of available ram buffer size to see the existence of
ram buffer.
Reported by: Ian Freislich (ianf <at> clue dot co dot za), das
Tested by: Ian Freislich (ianf <at> clue dot co dot za)
Diffstat (limited to 'sys/dev/msk/if_mskreg.h')
-rw-r--r-- | sys/dev/msk/if_mskreg.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/dev/msk/if_mskreg.h b/sys/dev/msk/if_mskreg.h index ba0d730..c0bd90e 100644 --- a/sys/dev/msk/if_mskreg.h +++ b/sys/dev/msk/if_mskreg.h @@ -2158,6 +2158,7 @@ struct msk_stat_desc { #define MSK_TX_RING_CNT 256 #define MSK_RX_RING_CNT 256 +#define MSK_RX_BUF_ALIGN 8 #define MSK_JUMBO_RX_RING_CNT MSK_RX_RING_CNT #define MSK_STAT_RING_CNT ((1 + 3) * (MSK_TX_RING_CNT + MSK_RX_RING_CNT)) #define MSK_MAXTXSEGS 32 @@ -2307,6 +2308,7 @@ struct msk_softc { uint32_t msk_coppertype; uint32_t msk_intrmask; uint32_t msk_intrhwemask; + uint32_t msk_pflags; int msk_suspended; int msk_clock; int msk_msi; @@ -2348,6 +2350,8 @@ struct msk_if_softc { int msk_phytype; int msk_phyaddr; int msk_link; + uint32_t msk_flags; +#define MSK_FLAG_RAMBUF 0x0010 struct callout msk_tick_ch; int msk_watchdog_timer; uint32_t msk_txq; /* Tx. Async Queue offset */ |