summaryrefslogtreecommitdiffstats
path: root/sys/dev/ti
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2011-11-07 22:47:25 +0000
committeryongari <yongari@FreeBSD.org>2011-11-07 22:47:25 +0000
commit990f68fb09d7d342937ca6db09af0013d3cb4413 (patch)
tree2e49bd9ad1c3898be080c3f50e0e4e119e8057d7 /sys/dev/ti
parente86f62e44784d3b1219a3896c7809e76d9e71528 (diff)
downloadFreeBSD-src-990f68fb09d7d342937ca6db09af0013d3cb4413.zip
FreeBSD-src-990f68fb09d7d342937ca6db09af0013d3cb4413.tar.gz
Show RX buffer allocation failure and do not blindly send alive
message to firmware. Probably the correct way for this error is to send a TI_CMD_CODE_STACK_DOWN message to firmware and let firmware handle the rest.
Diffstat (limited to 'sys/dev/ti')
-rw-r--r--sys/dev/ti/if_ti.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/sys/dev/ti/if_ti.c b/sys/dev/ti/if_ti.c
index 0901f1a..5734d46 100644
--- a/sys/dev/ti/if_ti.c
+++ b/sys/dev/ti/if_ti.c
@@ -3160,18 +3160,34 @@ static void ti_init2(struct ti_softc *sc)
}
/* Init RX ring. */
- ti_init_rx_ring_std(sc);
+ if (ti_init_rx_ring_std(sc) != 0) {
+ /* XXX */
+ device_printf(sc->ti_dev, "no memory for std Rx buffers.\n");
+ return;
+ }
/* Init jumbo RX ring. */
- if (ifp->if_mtu > (ETHERMTU + ETHER_HDR_LEN + ETHER_CRC_LEN))
- ti_init_rx_ring_jumbo(sc);
+ if (ifp->if_mtu > (ETHERMTU + ETHER_HDR_LEN + ETHER_CRC_LEN)) {
+ if (ti_init_rx_ring_jumbo(sc) != 0) {
+ /* XXX */
+ device_printf(sc->ti_dev,
+ "no memory for jumbo Rx buffers.\n");
+ return;
+ }
+ }
/*
* If this is a Tigon 2, we can also configure the
* mini ring.
*/
- if (sc->ti_hwrev == TI_HWREV_TIGON_II)
- ti_init_rx_ring_mini(sc);
+ if (sc->ti_hwrev == TI_HWREV_TIGON_II) {
+ if (ti_init_rx_ring_mini(sc) != 0) {
+ /* XXX */
+ device_printf(sc->ti_dev,
+ "no memory for mini Rx buffers.\n");
+ return;
+ }
+ }
CSR_WRITE_4(sc, TI_GCR_RXRETURNCONS_IDX, 0);
sc->ti_rx_saved_considx = 0;
OpenPOWER on IntegriCloud