summaryrefslogtreecommitdiff
path: root/sys/dev/pci
diff options
context:
space:
mode:
authorPatrick Wildt <patrick@cvs.openbsd.org>2018-01-01 22:41:04 +0000
committerPatrick Wildt <patrick@cvs.openbsd.org>2018-01-01 22:41:04 +0000
commit4c1185904765c643faab318b195102a3a645fecd (patch)
tree1fa5c9925f6d93da18c48299bc8d34ddb9a25f3c /sys/dev/pci
parente25125a30d3060dae5fc4283bf2280b1dc633d4c (diff)
Put the code that prints the firmware's debug console into a function
so we can read and print the messages printed by the firmware when we are debugging the driver.
Diffstat (limited to 'sys/dev/pci')
-rw-r--r--sys/dev/pci/if_bwfm_pci.c48
1 files changed, 30 insertions, 18 deletions
diff --git a/sys/dev/pci/if_bwfm_pci.c b/sys/dev/pci/if_bwfm_pci.c
index 84fdcb36ce0..6fa13c7cce4 100644
--- a/sys/dev/pci/if_bwfm_pci.c
+++ b/sys/dev/pci/if_bwfm_pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_bwfm_pci.c,v 1.1 2017/12/24 19:50:56 patrick Exp $ */
+/* $OpenBSD: if_bwfm_pci.c,v 1.2 2018/01/01 22:41:03 patrick Exp $ */
/*
* Copyright (c) 2010-2016 Broadcom Corporation
* Copyright (c) 2017 Patrick Wildt <patrick@blueri.se>
@@ -128,6 +128,7 @@ struct bwfm_pci_softc {
uint32_t sc_console_base_addr;
uint32_t sc_console_buf_addr;
uint32_t sc_console_buf_size;
+ uint32_t sc_console_readidx;
uint16_t sc_max_flowrings;
uint16_t sc_max_submissionrings;
@@ -233,6 +234,7 @@ int bwfm_pci_buscore_reset(struct bwfm_softc *);
void bwfm_pci_buscore_activate(struct bwfm_softc *, uint32_t);
int bwfm_pci_txdata(struct bwfm_softc *, struct mbuf *);
+void bwfm_pci_debug_console(struct bwfm_pci_softc *);
int bwfm_pci_msgbuf_query_dcmd(struct bwfm_softc *, int,
int, char *, size_t *);
@@ -600,6 +602,11 @@ bwfm_pci_attachhook(struct device *self)
if_rxr_init(&sc->sc_rxbuf_ring, 2, sc->sc_max_rxbufpost);
bwfm_pci_fill_rx_rings(sc);
+#ifdef BWFM_DEBUG
+ sc->sc_console_readidx = 0;
+ bwfm_pci_debug_console(sc);
+#endif
+
sc->sc_ioctl_poll = 1;
sc->sc_sc.sc_bus_ops = &bwfm_pci_bus_ops;
sc->sc_sc.sc_proto_ops = &bwfm_pci_msgbuf_ops;
@@ -1290,6 +1297,26 @@ bwfm_pci_txdata(struct bwfm_softc *bwfm, struct mbuf *m)
return ENOBUFS;
}
+void
+bwfm_pci_debug_console(struct bwfm_pci_softc *sc)
+{
+ uint32_t newidx = bus_space_read_4(sc->sc_tcm_iot, sc->sc_tcm_ioh,
+ sc->sc_console_base_addr + BWFM_CONSOLE_WRITEIDX);
+
+ if (newidx != sc->sc_console_readidx)
+ printf("BWFM CONSOLE: ");
+ while (newidx != sc->sc_console_readidx) {
+ uint8_t ch = bus_space_read_1(sc->sc_tcm_iot, sc->sc_tcm_ioh,
+ sc->sc_console_buf_addr + sc->sc_console_readidx);
+ sc->sc_console_readidx++;
+ if (sc->sc_console_readidx == sc->sc_console_buf_size)
+ sc->sc_console_readidx = 0;
+ if (ch == '\r')
+ continue;
+ printf("%c", ch);
+ }
+}
+
int
bwfm_pci_intr(void *v)
{
@@ -1314,23 +1341,8 @@ bwfm_pci_intr(void *v)
bwfm_pci_ring_rx(sc, &sc->sc_ctrl_complete);
}
-#if 0
- {
- uint32_t newidx = bus_space_read_4(sc->sc_tcm_iot, sc->sc_tcm_ioh,
- sc->sc_console_base_addr + BWFM_CONSOLE_WRITEIDX);
- uint32_t readidx = 0;
-
- while (newidx != readidx) {
- uint8_t ch = bus_space_read_1(sc->sc_tcm_iot, sc->sc_tcm_ioh,
- sc->sc_console_buf_addr + readidx);
- readidx++;
- if (readidx == sc->sc_console_buf_size)
- readidx = 0;
- if (ch == '\r')
- continue;
- printf("%c", ch);
- }
- }
+#ifdef BWFM_DEBUG
+ bwfm_pci_debug_console(sc);
#endif
bwfm_pci_intr_enable(sc);