1. Change CONFIG_DEBUG to DEBUG in util/x86emu/*
[coreboot.git] / util / x86emu / yabel / debug.h
1 /******************************************************************************
2  * Copyright (c) 2004, 2008 IBM Corporation
3  * Copyright (c) 2009 Pattrick Hueper <phueper@hueper.net>
4  * All rights reserved.
5  * This program and the accompanying materials
6  * are made available under the terms of the BSD License
7  * which accompanies this distribution, and is available at
8  * http://www.opensource.org/licenses/bsd-license.php
9  *
10  * Contributors:
11  *     IBM Corporation - initial implementation
12  *****************************************************************************/
13 #ifndef _BIOSEMU_DEBUG_H_
14 #define _BIOSEMU_DEBUG_H_
15
16 #include <types.h>
17
18 extern u32 debug_flags;
19 // from x86emu...needed for debugging
20 extern void x86emu_dump_xregs(void);
21
22 /* printf is not available in coreboot... use printk */
23 #include <console/console.h>
24 /* uurgs... yuck... x86emu/x86emu.h is redefining printk... we include it here
25  * and use its redefinition of printk
26  * TODO: FIX!!!! */
27 #include "x86emu/x86emu.h"
28 #define printf printk
29
30 /* PH: empty versions of set/clr_ci
31  * TODO: remove! */
32 static inline void clr_ci(void) {};
33 static inline void set_ci(void) {};
34
35 /* Set CONFIG_YABEL_DEBUG_FLAGS is a binary switch that allows you
36  * to select the following items to debug. 1=on 0=off. After you
37  * decide what you want to debug create the binary value, convert to hex
38  * and set the Option (Ex. CONFIG_YABEL_DEBUG_FLAGS = 0x31FF //Debug All).
39  *
40  * |-DEBUG_JMP - print info about JMP and RETF opcodes from x86emu
41  * ||-DEBUG_TRACE_X86EMU - print _all_ opcodes that are executed by x86emu (WARNING: this will produce a LOT of output)
42  * |||-Currently unused
43  * ||||-Currently unused
44  * |||||-Currently unused
45  * ||||||-DEBUG_PNP - Print Plug And Play access made by option rom 
46  * |||||||-DEBUG_DISK - Print Disk I/O related messages, currently unused
47  * ||||||||-DEBUG_PMM - Print messages related to POST Memory Manager (PMM)
48  * |||||||||-DEBUG_VBE - Print messages related to VESA BIOS Extension (VBE) functions
49  * ||||||||||-DEBUG_PRINT_INT10 - let INT10 (i.e. character output) calls print messages to Debug output
50  * |||||||||||-DEBUG_INTR - Print messages related to interrupt handling
51  * ||||||||||||-DEBUG_CHECK_VMEM_ACCESS - Print messages related to accesse to certain areas of the virtual Memory (e.g. BDA (BIOS Data Area) or Interrupt Vectors)
52  * |||||||||||||-DEBUG_MEM - Print memory access made by option rom (NOTE: this also includes accesses to fetch instructions)
53  * ||||||||||||||-DEBUG_IO - Print I/O access made by option rom 
54  * 11000111111111 - Max Binary Value, Debug All (WARNING: - This could run for hours)
55  */
56
57 #define DEBUG_IO 0x1
58 #define DEBUG_MEM 0x2
59 // set this to print messages for certain virtual memory accesses (Interrupt Vectors, ...)
60 #define DEBUG_CHECK_VMEM_ACCESS 0x4
61 #define DEBUG_INTR 0x8
62 #define DEBUG_PRINT_INT10 0x10  // set to have the INT10 routine print characters
63 #define DEBUG_VBE 0x20
64 #define DEBUG_PMM 0x40
65 #define DEBUG_DISK 0x80
66 #define DEBUG_PNP 0x100
67
68 #define DEBUG_TRACE_X86EMU 0x1000
69 // set to enable tracing of JMPs in x86emu
70 #define DEBUG_JMP 0x2000
71
72 //#define DEBUG
73 //#undef DEBUG
74 #ifdef DEBUG
75
76 #define CHECK_DBG(_flag) if (debug_flags & _flag)
77
78 #define DEBUG_PRINTF(_x...) printf(_x);
79 // prints the CS:IP before the printout, NOTE: actually its CS:IP of the _next_ instruction
80 // to be executed, since the x86emu advances CS:IP _before_ actually executing an instruction
81 #define DEBUG_PRINTF_CS_IP(_x...) DEBUG_PRINTF("%x:%x ", M.x86.R_CS, M.x86.R_IP); DEBUG_PRINTF(_x);
82
83 #define DEBUG_PRINTF_IO(_x...) CHECK_DBG(DEBUG_IO) { DEBUG_PRINTF_CS_IP(_x) }
84 #define DEBUG_PRINTF_MEM(_x...) CHECK_DBG(DEBUG_MEM) { DEBUG_PRINTF_CS_IP(_x) }
85 #define DEBUG_PRINTF_INTR(_x...) CHECK_DBG(DEBUG_INTR) { DEBUG_PRINTF_CS_IP(_x) }
86 #define DEBUG_PRINTF_VBE(_x...) CHECK_DBG(DEBUG_VBE) { DEBUG_PRINTF_CS_IP(_x) }
87 #define DEBUG_PRINTF_PMM(_x...) CHECK_DBG(DEBUG_PMM) { DEBUG_PRINTF_CS_IP(_x) }
88 #define DEBUG_PRINTF_DISK(_x...) CHECK_DBG(DEBUG_DISK) { DEBUG_PRINTF_CS_IP(_x) }
89 #define DEBUG_PRINTF_PNP(_x...) CHECK_DBG(DEBUG_PNP) { DEBUG_PRINTF_CS_IP(_x) }
90
91 #else
92
93 #define CHECK_DBG(_flag) if (0)
94
95 #define DEBUG_PRINTF(_x...)
96 #define DEBUG_PRINTF_CS_IP(_x...)
97
98 #define DEBUG_PRINTF_IO(_x...)
99 #define DEBUG_PRINTF_MEM(_x...)
100 #define DEBUG_PRINTF_INTR(_x...)
101 #define DEBUG_PRINTF_VBE(_x...)
102 #define DEBUG_PRINTF_PMM(_x...)
103 #define DEBUG_PRINTF_DISK(_x...)
104 #define DEBUG_PRINTF_PNP(_x...)
105
106 #endif                          //DEBUG
107
108 void dump(u8 * addr, u32 len);
109
110 #endif