blob: d83378b64c22200db5928e1399d7ff50d5106067 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#ifndef DEBUG_H_
#define DEBUG_H_
/* Magic value to detect stack overflows. */
#define MAGIC_STACK_END 0x574C
/* Reason codes for PANICs */
#define PANIC_DIE 0 /* Die and don't let the driver auto-reload us. */
#define PANIC_RESTART 1 /* The driver will restart the device and firmware. */
/* Macro to conveniently trigger a panic and loop forever. */
#if DEBUG
# define PANIC(reason) \
mov reason, R_PANIC_REASON; \
call lr0, __panic;
#else
# define PANIC(reason) call lr0, __panic;
#endif
/* Reason codes for the debug-IRQ */
#define DEBUGIRQ_PANIC 0 /* The firmware panic'ed */
#define DEBUGIRQ_DUMP_SHM 1 /* Dump shared SHM */
#define DEBUGIRQ_DUMP_REGS 2 /* Dump the microcode registers */
#define DEBUGIRQ_MARKER 3 /* Throw a "marker" */
#define DEBUGIRQ_ACK 0xFFFF /* ACK from the kernel */
/* Macro to conveniently trigger a debug-IRQ. Clobbers lr0 and Rz */
#if DEBUG
# define DEBUGIRQ_THROW(reason) \
mov reason, R_DEBUGIRQ_REASON; \
call lr0, debug_irq;
#else
# define DEBUGIRQ_THROW(reason) /* Nothing */
#endif
/* A marker can be used to let the kernel driver print a message
* telling the user that the firmware just executed the code line the
* MARKER statement was put into. The marker can't tell which codefile
* it was triggered from (only the line number), but it does have an ID
* number that can be used for file identification.
* This is only for temporary local debugging,
* as it adds a lot of inline code. Do not put this into release code. */
#if DEBUG
# define MARKER(id) \
PUSH(SPR_PC0); \
PUSH(R_MARKER_ID); \
PUSH(R_MARKER_LINE); \
PUSH(R_DEBUGIRQ_REASON); \
mov id , R_MARKER_ID; \
mov __LINE__ , R_MARKER_LINE; \
DEBUGIRQ_THROW(DEBUGIRQ_MARKER); \
POP(R_DEBUGIRQ_REASON); \
POP(R_MARKER_LINE); \
POP(R_MARKER_ID); \
POP(SPR_PC0); \
mov SPR_PC0, 0;
#else
# define MARKER(id) /* Nothing */
#endif
#endif /* DEBUG_H_ */
// vim: syntax=b43 ts=8
|