b43: Add firmware markers support
PATCH 1/1 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 Michael Buesch <[email protected]>
---
John, this is for 2.6.27
drivers/net/wireless/b43/b43.h +5 -0
@@ -425,14 +425,19 @@ enum {/* The firmware register to fetch the debug-IRQ reason from. */ #define B43_DEBUGIRQ_REASON_REG 63/* Debug-IRQ reasons. */ #define B43_DEBUGIRQ_PANIC 0/* The firmware panic'ed */ #define B43_DEBUGIRQ_DUMP_SHM 1/* Dump shared SHM */ #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 */ +/* 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. */ #define B43_FWPANIC_REASON_REG 3/* Firmware panic reason codes */ #define B43_FWPANIC_DIE 0/* Firmware died. Don't auto-restart it. */ #define B43_FWPANIC_RESTART 1/* Firmware died. Schedule a controller reset. */
drivers/net/wireless/b43/main.c +12 -1
@@ -1688,13 +1688,13 @@ static void b43_handle_firmware_panic(st } }static void handle_irq_ucode_debug (struct b43_wldev *dev) {unsigned int i, cnt; -u16 reason; +u16 reason, marker_id, marker_line;__le16 *buf;/* The proprietary firmware doesn't have this IRQ. */ if (!dev->fw.opensource)return ;
@@ -1736,12 +1736,23 @@ static void handle_irq_ucode_debug(strucprintk ("\n" ); cnt =0 ; } }printk ("\n" );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 :b43dbg (dev->wl,"Debug-IRQ triggered for unknown reason: %u\n" , reason); } out:/* Acknowledge the debug-IRQ, so the firmware can continue. */