Commit 53c06856 authored by Michael Buesch's avatar Michael Buesch Committed by John W. Linville

b43: Add firmware markers support

This adds support for firmware markers.
With firmware markers it's easily possible to check whether the
firmware runs some codepath or not. The driver will throw a message
when the firmware executes a MARKER(x).
Signed-off-by: default avatarMichael Buesch <mb@bu3sch.de>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent afa83e23
...@@ -428,8 +428,13 @@ enum { ...@@ -428,8 +428,13 @@ enum {
#define B43_DEBUGIRQ_PANIC 0 /* The firmware panic'ed */ #define B43_DEBUGIRQ_PANIC 0 /* The firmware panic'ed */
#define B43_DEBUGIRQ_DUMP_SHM 1 /* Dump shared SHM */ #define B43_DEBUGIRQ_DUMP_SHM 1 /* Dump shared SHM */
#define B43_DEBUGIRQ_DUMP_REGS 2 /* Dump the microcode registers */ #define B43_DEBUGIRQ_DUMP_REGS 2 /* Dump the microcode registers */
#define B43_DEBUGIRQ_MARKER 3 /* A "marker" was thrown by the firmware. */
#define B43_DEBUGIRQ_ACK 0xFFFF /* The host writes that to ACK the IRQ */ #define B43_DEBUGIRQ_ACK 0xFFFF /* The host writes that to ACK the IRQ */
/* The firmware register that contains the "marker" line. */
#define B43_MARKER_ID_REG 2
#define B43_MARKER_LINE_REG 3
/* The firmware register to fetch the panic reason from. */ /* The firmware register to fetch the panic reason from. */
#define B43_FWPANIC_REASON_REG 3 #define B43_FWPANIC_REASON_REG 3
/* Firmware panic reason codes */ /* Firmware panic reason codes */
......
...@@ -1689,7 +1689,7 @@ static void b43_handle_firmware_panic(struct b43_wldev *dev) ...@@ -1689,7 +1689,7 @@ static void b43_handle_firmware_panic(struct b43_wldev *dev)
static void handle_irq_ucode_debug(struct b43_wldev *dev) static void handle_irq_ucode_debug(struct b43_wldev *dev)
{ {
unsigned int i, cnt; unsigned int i, cnt;
u16 reason; u16 reason, marker_id, marker_line;
__le16 *buf; __le16 *buf;
/* The proprietary firmware doesn't have this IRQ. */ /* The proprietary firmware doesn't have this IRQ. */
...@@ -1737,6 +1737,17 @@ static void handle_irq_ucode_debug(struct b43_wldev *dev) ...@@ -1737,6 +1737,17 @@ static void handle_irq_ucode_debug(struct b43_wldev *dev)
} }
printk("\n"); printk("\n");
break; break;
case B43_DEBUGIRQ_MARKER:
if (!B43_DEBUG)
break; /* Only with driver debugging enabled. */
marker_id = b43_shm_read16(dev, B43_SHM_SCRATCH,
B43_MARKER_ID_REG);
marker_line = b43_shm_read16(dev, B43_SHM_SCRATCH,
B43_MARKER_LINE_REG);
b43info(dev->wl, "The firmware just executed the MARKER(%u) "
"at line number %u\n",
marker_id, marker_line);
break;
default: default:
b43dbg(dev->wl, "Debug-IRQ triggered for unknown reason: %u\n", b43dbg(dev->wl, "Debug-IRQ triggered for unknown reason: %u\n",
reason); reason);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment