This patch is from 2009-10-20
Convert all DEBUG_SMBUS, DEBUG_SMI, and DEBUG_RAM_SETUP custom and local #defines into globally configurable kconfig options (and Options.lb options for as long as newconfig still exists) which can be enabled by the user in the "Debugging" menu. The respective menu items only appear if a board is selected where the chipset code actually provides such additional DEBUG output. All three variables default to 0 / off for now. Also, drop a small chunk of dead/useless code in the src/northbridge/via/cn700/raminit.c file, which would otherwise break compilation. Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de> Reworked to still apply to trunk, added X86EMU_DEBUG (and make the x86emu/yabel code only work printf instead of a redefined version of printk and Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5185 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
5fa76e2864
commit
01ce601bdb
184
src/Kconfig
184
src/Kconfig
|
@ -609,6 +609,190 @@ config GDB_STUB
|
||||||
If enabled, you will be able to set breakpoints for gdb debugging.
|
If enabled, you will be able to set breakpoints for gdb debugging.
|
||||||
See src/arch/i386/lib/c_start.S for details.
|
See src/arch/i386/lib/c_start.S for details.
|
||||||
|
|
||||||
|
config DEBUG_RAM_SETUP
|
||||||
|
bool "Output verbose RAM init debug messages"
|
||||||
|
default n
|
||||||
|
depends on (NORTHBRIDGE_AMD_AMDFAM10 \
|
||||||
|
|| NORTHBRIDGE_AMD_AMDK8 \
|
||||||
|
|| NORTHBRIDGE_VIA_CN700 \
|
||||||
|
|| NORTHBRIDGE_VIA_CX700 \
|
||||||
|
|| NORTHBRIDGE_VIA_VX800 \
|
||||||
|
|| NORTHBRIDGE_INTEL_E7501 \
|
||||||
|
|| NORTHBRIDGE_INTEL_I440BX \
|
||||||
|
|| NORTHBRIDGE_INTEL_I82810 \
|
||||||
|
|| NORTHBRIDGE_INTEL_I82830 \
|
||||||
|
|| NORTHBRIDGE_INTEL_I945)
|
||||||
|
help
|
||||||
|
This option enables additional RAM init related debug messages.
|
||||||
|
It is recommended to enable this when debugging issues on your
|
||||||
|
board which might be RAM init related.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config DEBUG_SMBUS
|
||||||
|
bool "Output verbose SMBus debug messages"
|
||||||
|
default n
|
||||||
|
depends on (SOUTHBRIDGE_VIA_VT8237R \
|
||||||
|
|| NORTHBRIDGE_VIA_VX800 \
|
||||||
|
|| NORTHBRIDGE_VIA_CX700 \
|
||||||
|
|| NORTHBRIDGE_AMD_AMDK8)
|
||||||
|
help
|
||||||
|
This option enables additional SMBus (and SPD) debug messages.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config DEBUG_SMI
|
||||||
|
bool "Output verbose SMI debug messages"
|
||||||
|
default n
|
||||||
|
depends on HAVE_SMI_HANDLER
|
||||||
|
help
|
||||||
|
This option enables additional SMI related debug messages.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config X86EMU_DEBUG
|
||||||
|
bool "Output verbose x86emu debug messages"
|
||||||
|
default n
|
||||||
|
depends on PCI_OPTION_ROM_RUN_YABEL
|
||||||
|
help
|
||||||
|
This option enables additional x86emu related debug messages.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config X86EMU_DEBUG_JMP
|
||||||
|
bool "Trace JMP/RETF"
|
||||||
|
default n
|
||||||
|
depends on X86EMU_DEBUG
|
||||||
|
help
|
||||||
|
Print information about JMP and RETF opcodes from x86emu.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config X86EMU_DEBUG_TRACE
|
||||||
|
bool "Trace all opcodes"
|
||||||
|
default n
|
||||||
|
depends on X86EMU_DEBUG
|
||||||
|
help
|
||||||
|
Print _all_ opcodes that are executed by x86emu.
|
||||||
|
|
||||||
|
WARNING: This will produce a LOT of output and take a long time.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config X86EMU_DEBUG_PNP
|
||||||
|
bool "Log Plug&Play accesses"
|
||||||
|
default n
|
||||||
|
depends on X86EMU_DEBUG
|
||||||
|
help
|
||||||
|
Print Plug And Play accesses made by option ROMs.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config X86EMU_DEBUG_DISK
|
||||||
|
bool "Log Disk I/O"
|
||||||
|
default n
|
||||||
|
depends on X86EMU_DEBUG
|
||||||
|
help
|
||||||
|
Print Disk I/O related messages.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config X86EMU_DEBUG_PMM
|
||||||
|
bool "Log PMM"
|
||||||
|
default n
|
||||||
|
depends on X86EMU_DEBUG
|
||||||
|
help
|
||||||
|
Print messages related to POST Memory Manager (PMM).
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
|
||||||
|
config X86EMU_DEBUG_VBE
|
||||||
|
bool "Debug VESA BIOS Extensions"
|
||||||
|
default n
|
||||||
|
depends on X86EMU_DEBUG
|
||||||
|
help
|
||||||
|
Print messages related to VESA BIOS Extension (VBE) functions.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config X86EMU_DEBUG_INT10
|
||||||
|
bool "Redirect INT10 output to console"
|
||||||
|
default n
|
||||||
|
depends on X86EMU_DEBUG
|
||||||
|
help
|
||||||
|
Let INT10 (i.e. character output) calls print messages to debug output.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config X86EMU_DEBUG_INTERRUPTS
|
||||||
|
bool "Log intXX calls"
|
||||||
|
default n
|
||||||
|
depends on X86EMU_DEBUG
|
||||||
|
help
|
||||||
|
Print messages related to interrupt handling.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config X86EMU_DEBUG_CHECK_VMEM_ACCESS
|
||||||
|
bool "Log special memory accesses"
|
||||||
|
default n
|
||||||
|
depends on X86EMU_DEBUG
|
||||||
|
help
|
||||||
|
Print messages related to accesses to certain areas of the virtual
|
||||||
|
memory (e.g. BDA (BIOS Data Area) or interrupt vectors)
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config X86EMU_DEBUG_MEM
|
||||||
|
bool "Log all memory accesses"
|
||||||
|
default n
|
||||||
|
depends on X86EMU_DEBUG
|
||||||
|
help
|
||||||
|
Print memory accesses made by option ROM.
|
||||||
|
Note: This also includes accesses to fetch instructions.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
|
config X86EMU_DEBUG_IO
|
||||||
|
bool "Log IO accesses"
|
||||||
|
default n
|
||||||
|
depends on X86EMU_DEBUG
|
||||||
|
help
|
||||||
|
Print I/O accesses made by option ROM.
|
||||||
|
|
||||||
|
Note: This option will increase the size of the coreboot image.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
config LIFT_BSP_APIC_ID
|
config LIFT_BSP_APIC_ID
|
||||||
|
|
|
@ -19,8 +19,6 @@
|
||||||
/* Keep together for sysctl support */
|
/* Keep together for sysctl support */
|
||||||
|
|
||||||
int console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
|
int console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
|
||||||
int default_message_loglevel = DEFAULT_MESSAGE_LOGLEVEL;
|
|
||||||
int minimum_console_loglevel = MINIMUM_CONSOLE_LOGLEVEL;
|
|
||||||
int default_console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
|
int default_console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
|
||||||
|
|
||||||
DECLARE_SPIN_LOCK(console_lock)
|
DECLARE_SPIN_LOCK(console_lock)
|
||||||
|
|
|
@ -27,8 +27,6 @@
|
||||||
|
|
||||||
void southbridge_smi_set_eos(void);
|
void southbridge_smi_set_eos(void);
|
||||||
|
|
||||||
/* To enable SMI define DEBUG_SMI in smiutil.c */
|
|
||||||
|
|
||||||
typedef enum { SMI_LOCKED, SMI_UNLOCKED } smi_semaphore;
|
typedef enum { SMI_LOCKED, SMI_UNLOCKED } smi_semaphore;
|
||||||
|
|
||||||
/* SMI multiprocessing semaphore */
|
/* SMI multiprocessing semaphore */
|
||||||
|
|
|
@ -25,8 +25,6 @@
|
||||||
#include <cpu/x86/cache.h>
|
#include <cpu/x86/cache.h>
|
||||||
#include <cpu/x86/smm.h>
|
#include <cpu/x86/smm.h>
|
||||||
|
|
||||||
// #define DEBUG_SMI
|
|
||||||
|
|
||||||
/* ********************* smi_util ************************* */
|
/* ********************* smi_util ************************* */
|
||||||
|
|
||||||
/* Data */
|
/* Data */
|
||||||
|
@ -119,7 +117,7 @@ void uart_init(void)
|
||||||
|
|
||||||
void console_init(void)
|
void console_init(void)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_SMI
|
#if CONFIG_DEBUG_SMI
|
||||||
console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
|
console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
|
||||||
uart_init();
|
uart_init();
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -74,63 +74,6 @@ config PCI_OPTION_ROM_RUN_YABEL
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
# TODO: Describe better, and/or make a "choice" selection for this.
|
|
||||||
config YABEL_DEBUG_FLAGS
|
|
||||||
prompt "Hex value for YABEL debug flags"
|
|
||||||
hex
|
|
||||||
default 0x0
|
|
||||||
depends on PCI_OPTION_ROM_RUN_YABEL
|
|
||||||
help
|
|
||||||
CONFIG_YABEL_DEBUG_FLAGS is a binary switch that allows you
|
|
||||||
to select the following items to debug. 1=on 0=off. After you
|
|
||||||
decide what you want to debug create the binary value, convert to
|
|
||||||
hex and set the option.
|
|
||||||
|
|
||||||
Example for "debug all":
|
|
||||||
CONFIG_YABEL_DEBUG_FLAGS = 0x31FF
|
|
||||||
|
|
||||||
|-DEBUG_JMP - Print info about JMP and RETF opcodes from x86emu
|
|
||||||
||-DEBUG_TRACE_X86EMU - Print _all_ opcodes that are executed by
|
|
||||||
|| x86emu (WARNING: this will produce a LOT
|
|
||||||
|| of output)
|
|
||||||
|||-Currently unused
|
|
||||||
||||-Currently unused
|
|
||||||
|||||-Currently unused
|
|
||||||
||||||-DEBUG_PNP - Print Plug And Play accesses made by option ROM
|
|
||||||
|||||||-DEBUG_DISK - Print Disk I/O related messages, currently unused
|
|
||||||
||||||||-DEBUG_PMM - Print messages related to POST Memory
|
|
||||||
|||||||| Manager (PMM)
|
|
||||||
|||||||||-DEBUG_VBE - Print messages related to VESA BIOS Extension
|
|
||||||
||||||||| (VBE) functions
|
|
||||||
||||||||||-DEBUG_PRINT_INT10 - Let INT10 (i.e. character output)
|
|
||||||
|||||||||| calls print messages to debug output
|
|
||||||
|||||||||||-DEBUG_INTR - Print messages related to interrupt handling
|
|
||||||
||||||||||||-DEBUG_CHECK_VMEM_ACCESS - Print messages related to
|
|
||||||
|||||||||||| accesses to certain areas of
|
|
||||||
|||||||||||| the virtual memory (e.g. BDA
|
|
||||||
|||||||||||| (BIOS Data Area) or interrupt
|
|
||||||
|||||||||||| vectors)
|
|
||||||
|||||||||||||-DEBUG_MEM - Print memory accesses made by option ROM
|
|
||||||
||||||||||||| (NOTE: this also includes accesses to
|
|
||||||
||||||||||||| fetch instructions)
|
|
||||||
||||||||||||||-DEBUG_IO - Print I/O accesses made by option ROM
|
|
||||||
11000111111111 - Maximum binary value, i.e. "debug all"
|
|
||||||
(WARNING: This could run for hours)
|
|
||||||
|
|
||||||
DEBUG_IO 0x0001
|
|
||||||
DEBUG_MEM 0x0002
|
|
||||||
DEBUG_CHECK_VMEM_ACCESS 0x0004
|
|
||||||
DEBUG_INTR 0x0008
|
|
||||||
DEBUG_PRINT_INT10 0x0010
|
|
||||||
DEBUG_VBE 0x0020
|
|
||||||
DEBUG_PMM 0x0040
|
|
||||||
DEBUG_DISK 0x0080
|
|
||||||
DEBUG_PNP 0x0100
|
|
||||||
DEBUG_TRACE_X86EMU 0x1000
|
|
||||||
DEBUG_JMP 0x2000
|
|
||||||
|
|
||||||
See debug.h for values. 0 is no debug output, 0x31ff is _verbose_.
|
|
||||||
|
|
||||||
config YABEL_PCI_ACCESS_OTHER_DEVICES
|
config YABEL_PCI_ACCESS_OTHER_DEVICES
|
||||||
prompt "Allow option ROMs to access other devices"
|
prompt "Allow option ROMs to access other devices"
|
||||||
bool
|
bool
|
||||||
|
@ -150,6 +93,11 @@ config YABEL_VIRTMEM_LOCATION
|
||||||
YABEL requires 1MB memory for its CPU emulation. This memory is
|
YABEL requires 1MB memory for its CPU emulation. This memory is
|
||||||
normally located at 16MB.
|
normally located at 16MB.
|
||||||
|
|
||||||
|
config YABEL_VIRTMEM_LOCATION
|
||||||
|
hex
|
||||||
|
depends on PCI_OPTION_ROM_RUN_YABEL && !EXPERT
|
||||||
|
default 0x1000000
|
||||||
|
|
||||||
config YABEL_DIRECTHW
|
config YABEL_DIRECTHW
|
||||||
prompt "Direct hardware access"
|
prompt "Direct hardware access"
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -57,7 +57,6 @@
|
||||||
|
|
||||||
#include "cpu/x86/lapic/boot_cpu.c"
|
#include "cpu/x86/lapic/boot_cpu.c"
|
||||||
#include "northbridge/amd/amdk8/reset_test.c"
|
#include "northbridge/amd/amdk8/reset_test.c"
|
||||||
#include "northbridge/amd/amdk8/debug.c"
|
|
||||||
#include "superio/ite/it8712f/it8712f_early_serial.c"
|
#include "superio/ite/it8712f/it8712f_early_serial.c"
|
||||||
|
|
||||||
#include "cpu/amd/mtrr/amd_earlymtrr.c"
|
#include "cpu/amd/mtrr/amd_earlymtrr.c"
|
||||||
|
@ -67,6 +66,7 @@
|
||||||
|
|
||||||
#include "southbridge/amd/rs690/rs690_early_setup.c"
|
#include "southbridge/amd/rs690/rs690_early_setup.c"
|
||||||
#include "southbridge/amd/sb600/sb600_early_setup.c"
|
#include "southbridge/amd/sb600/sb600_early_setup.c"
|
||||||
|
#include "northbridge/amd/amdk8/debug.c" /* After sb600_early_setup.c! */
|
||||||
|
|
||||||
/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
|
/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
|
||||||
static void memreset(int controllers, const struct mem_controller *ctrl)
|
static void memreset(int controllers, const struct mem_controller *ctrl)
|
||||||
|
|
|
@ -51,7 +51,6 @@
|
||||||
|
|
||||||
#include "cpu/x86/lapic/boot_cpu.c"
|
#include "cpu/x86/lapic/boot_cpu.c"
|
||||||
#include "northbridge/amd/amdk8/reset_test.c"
|
#include "northbridge/amd/amdk8/reset_test.c"
|
||||||
#include "northbridge/amd/amdk8/debug.c"
|
|
||||||
#include "superio/ite/it8712f/it8712f_early_serial.c"
|
#include "superio/ite/it8712f/it8712f_early_serial.c"
|
||||||
|
|
||||||
#include "cpu/amd/mtrr/amd_earlymtrr.c"
|
#include "cpu/amd/mtrr/amd_earlymtrr.c"
|
||||||
|
@ -61,6 +60,7 @@
|
||||||
|
|
||||||
#include "southbridge/amd/rs690/rs690_early_setup.c"
|
#include "southbridge/amd/rs690/rs690_early_setup.c"
|
||||||
#include "southbridge/amd/sb600/sb600_early_setup.c"
|
#include "southbridge/amd/sb600/sb600_early_setup.c"
|
||||||
|
#include "northbridge/amd/amdk8/debug.c" /* After sb600_early_setup.c! */
|
||||||
|
|
||||||
/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
|
/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
|
||||||
static void memreset(int controllers, const struct mem_controller *ctrl)
|
static void memreset(int controllers, const struct mem_controller *ctrl)
|
||||||
|
|
|
@ -29,8 +29,6 @@
|
||||||
#define RAMINIT_SYSINFO 1
|
#define RAMINIT_SYSINFO 1
|
||||||
#define CACHE_AS_RAM_ADDRESS_DEBUG 1
|
#define CACHE_AS_RAM_ADDRESS_DEBUG 1
|
||||||
|
|
||||||
#define DEBUG_SMBUS 1
|
|
||||||
|
|
||||||
#define SET_NB_CFG_54 1
|
#define SET_NB_CFG_54 1
|
||||||
|
|
||||||
//used by raminit
|
//used by raminit
|
||||||
|
|
|
@ -30,9 +30,6 @@
|
||||||
/* Used by raminit. */
|
/* Used by raminit. */
|
||||||
#define QRANK_DIMM_SUPPORT 1
|
#define QRANK_DIMM_SUPPORT 1
|
||||||
|
|
||||||
/* Turn this on for SMBus debugging output. */
|
|
||||||
#define DEBUG_SMBUS 0
|
|
||||||
|
|
||||||
#if CONFIG_LOGICAL_CPUS == 1
|
#if CONFIG_LOGICAL_CPUS == 1
|
||||||
#define SET_NB_CFG_54 1
|
#define SET_NB_CFG_54 1
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -40,8 +40,6 @@ unsigned int get_sbdn(unsigned bus);
|
||||||
/* If we want to wait for core1 done before DQS training, set it to 0. */
|
/* If we want to wait for core1 done before DQS training, set it to 0. */
|
||||||
#define K8_SET_FIDVID_CORE0_ONLY 1
|
#define K8_SET_FIDVID_CORE0_ONLY 1
|
||||||
|
|
||||||
/* #define DEBUG_SMBUS 1 */
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <device/pci_def.h>
|
#include <device/pci_def.h>
|
||||||
|
@ -59,10 +57,10 @@ unsigned int get_sbdn(unsigned bus);
|
||||||
#include "lib/delay.c"
|
#include "lib/delay.c"
|
||||||
#include "cpu/x86/lapic/boot_cpu.c"
|
#include "cpu/x86/lapic/boot_cpu.c"
|
||||||
#include "northbridge/amd/amdk8/reset_test.c"
|
#include "northbridge/amd/amdk8/reset_test.c"
|
||||||
#include "northbridge/amd/amdk8/debug.c"
|
|
||||||
#include "northbridge/amd/amdk8/early_ht.c"
|
#include "northbridge/amd/amdk8/early_ht.c"
|
||||||
#include "superio/winbond/w83627ehg/w83627ehg_early_serial.c"
|
#include "superio/winbond/w83627ehg/w83627ehg_early_serial.c"
|
||||||
#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
|
#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
|
||||||
|
#include "northbridge/amd/amdk8/debug.c" /* After vt8237r_early_smbus.c! */
|
||||||
#include "cpu/amd/mtrr/amd_earlymtrr.c"
|
#include "cpu/amd/mtrr/amd_earlymtrr.c"
|
||||||
#include "cpu/x86/bist.h"
|
#include "cpu/x86/bist.h"
|
||||||
#include "northbridge/amd/amdk8/setup_resource_map.c"
|
#include "northbridge/amd/amdk8/setup_resource_map.c"
|
||||||
|
|
|
@ -44,8 +44,6 @@ unsigned int get_sbdn(unsigned bus);
|
||||||
#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
|
#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* #define DEBUG_SMBUS 1 */
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <device/pci_def.h>
|
#include <device/pci_def.h>
|
||||||
|
|
|
@ -445,7 +445,7 @@ void real_main(unsigned long bist)
|
||||||
|
|
||||||
#if !CONFIG_HAVE_ACPI_RESUME
|
#if !CONFIG_HAVE_ACPI_RESUME
|
||||||
#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
|
#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
|
||||||
#if defined(DEBUG_RAM_SETUP)
|
#if CONFIG_DEBUG_RAM_SETUP
|
||||||
sdram_dump_mchbar_registers();
|
sdram_dump_mchbar_registers();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -30,9 +30,6 @@
|
||||||
/* Used by raminit. */
|
/* Used by raminit. */
|
||||||
#define QRANK_DIMM_SUPPORT 1
|
#define QRANK_DIMM_SUPPORT 1
|
||||||
|
|
||||||
/* Turn this on for SMBus debugging output. */
|
|
||||||
#define DEBUG_SMBUS 0
|
|
||||||
|
|
||||||
#if CONFIG_LOGICAL_CPUS == 1
|
#if CONFIG_LOGICAL_CPUS == 1
|
||||||
#define SET_NB_CFG_54 1
|
#define SET_NB_CFG_54 1
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
#define __PRE_RAM__
|
#define __PRE_RAM__
|
||||||
|
|
||||||
// #define CACHE_AS_RAM_ADDRESS_DEBUG 1
|
// #define CACHE_AS_RAM_ADDRESS_DEBUG 1
|
||||||
// #define DEBUG_SMBUS 1
|
|
||||||
// #define RAM_TIMING_DEBUG 1
|
// #define RAM_TIMING_DEBUG 1
|
||||||
// #define DQS_TRAIN_DEBUG 1
|
// #define DQS_TRAIN_DEBUG 1
|
||||||
// #define RES_DEBUG 1
|
// #define RES_DEBUG 1
|
||||||
|
|
|
@ -42,8 +42,6 @@
|
||||||
//if we want to wait for core1 done before DQS training, set it to 0
|
//if we want to wait for core1 done before DQS training, set it to 0
|
||||||
#define K8_SET_FIDVID_CORE0_ONLY 1
|
#define K8_SET_FIDVID_CORE0_ONLY 1
|
||||||
|
|
||||||
#define DEBUG_SMBUS 1
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <device/pci_def.h>
|
#include <device/pci_def.h>
|
||||||
|
|
|
@ -38,8 +38,6 @@
|
||||||
//if we want to wait for core1 done before DQS training, set it to 0
|
//if we want to wait for core1 done before DQS training, set it to 0
|
||||||
#define K8_SET_FIDVID_CORE0_ONLY 1
|
#define K8_SET_FIDVID_CORE0_ONLY 1
|
||||||
|
|
||||||
#define DEBUG_SMBUS 1
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <device/pci_def.h>
|
#include <device/pci_def.h>
|
||||||
|
|
|
@ -220,11 +220,7 @@ static void dump_pci_devices_on_bus(u32 busn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef DEBUG_SMBUS
|
#if CONFIG_DEBUG_SMBUS
|
||||||
#define DEBUG_SMBUS 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if DEBUG_SMBUS == 1
|
|
||||||
|
|
||||||
static void dump_spd_registers(const struct mem_controller *ctrl)
|
static void dump_spd_registers(const struct mem_controller *ctrl)
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,21 +23,16 @@ static void print_raminit(const char *strval, u32 val)
|
||||||
printk_debug("%s%08x\n", strval, val);
|
printk_debug("%s%08x\n", strval, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define RAMINIT_DEBUG 1
|
|
||||||
|
|
||||||
|
|
||||||
static void print_tx(const char *strval, u32 val)
|
static void print_tx(const char *strval, u32 val)
|
||||||
{
|
{
|
||||||
#if RAMINIT_DEBUG == 1
|
#if CONFIG_DEBUG_RAM_SETUP
|
||||||
print_raminit(strval, val);
|
print_raminit(strval, val);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void print_t(const char *strval)
|
static void print_t(const char *strval)
|
||||||
{
|
{
|
||||||
#if RAMINIT_DEBUG == 1
|
#if CONFIG_DEBUG_RAM_SETUP
|
||||||
print_debug(strval);
|
print_debug(strval);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,11 +134,8 @@ static void dump_pci_devices_on_bus(unsigned busn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef DEBUG_SMBUS
|
#if CONFIG_DEBUG_SMBUS
|
||||||
#define DEBUG_SMBUS 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if DEBUG_SMBUS == 1
|
|
||||||
static void dump_spd_registers(const struct mem_controller *ctrl)
|
static void dump_spd_registers(const struct mem_controller *ctrl)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -34,9 +34,7 @@
|
||||||
#define QRANK_DIMM_SUPPORT 0
|
#define QRANK_DIMM_SUPPORT 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define RAM_TIMING_DEBUG 0
|
#if DEBUG_RAM_SETUP
|
||||||
|
|
||||||
#if RAM_TIMING_DEBUG == 1
|
|
||||||
#define printk_raminit printk_debug
|
#define printk_raminit printk_debug
|
||||||
#else
|
#else
|
||||||
#define printk_raminit(fmt, arg...)
|
#define printk_raminit(fmt, arg...)
|
||||||
|
|
|
@ -22,10 +22,7 @@
|
||||||
// Unfortunately the code seems to chew up several K of space.
|
// Unfortunately the code seems to chew up several K of space.
|
||||||
//#define VALIDATE_DIMM_COMPATIBILITY
|
//#define VALIDATE_DIMM_COMPATIBILITY
|
||||||
|
|
||||||
// Uncomment this to enable local debugging messages
|
#if CONFIG_DEBUG_RAM_SETUP
|
||||||
//#define DEBUG_RAM_CONFIG
|
|
||||||
|
|
||||||
#if defined(DEBUG_RAM_CONFIG)
|
|
||||||
#define RAM_DEBUG_MESSAGE(x) print_debug(x)
|
#define RAM_DEBUG_MESSAGE(x) print_debug(x)
|
||||||
#define RAM_DEBUG_HEX32(x) print_debug_hex32(x)
|
#define RAM_DEBUG_HEX32(x) print_debug_hex32(x)
|
||||||
#define RAM_DEBUG_HEX8(x) print_debug_hex8(x)
|
#define RAM_DEBUG_HEX8(x) print_debug_hex8(x)
|
||||||
|
|
|
@ -28,11 +28,8 @@
|
||||||
Macros and definitions.
|
Macros and definitions.
|
||||||
-----------------------------------------------------------------------------*/
|
-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/* Uncomment this to enable debugging output. */
|
|
||||||
#define DEBUG_RAM_SETUP 1
|
|
||||||
|
|
||||||
/* Debugging macros. */
|
/* Debugging macros. */
|
||||||
#if defined(DEBUG_RAM_SETUP)
|
#if CONFIG_DEBUG_RAM_SETUP
|
||||||
#define PRINT_DEBUG(x) print_debug(x)
|
#define PRINT_DEBUG(x) print_debug(x)
|
||||||
#define PRINT_DEBUG_HEX8(x) print_debug_hex8(x)
|
#define PRINT_DEBUG_HEX8(x) print_debug_hex8(x)
|
||||||
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
||||||
|
|
|
@ -29,11 +29,8 @@
|
||||||
Macros and definitions.
|
Macros and definitions.
|
||||||
-----------------------------------------------------------------------------*/
|
-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/* Uncomment this to enable debugging output. */
|
|
||||||
// #define DEBUG_RAM_SETUP 1
|
|
||||||
|
|
||||||
/* Debugging macros. */
|
/* Debugging macros. */
|
||||||
#if defined(DEBUG_RAM_SETUP)
|
#if CONFIG_DEBUG_RAM_SETUP
|
||||||
#define PRINT_DEBUG(x) print_debug(x)
|
#define PRINT_DEBUG(x) print_debug(x)
|
||||||
#define PRINT_DEBUG_HEX8(x) print_debug_hex8(x)
|
#define PRINT_DEBUG_HEX8(x) print_debug_hex8(x)
|
||||||
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
||||||
|
|
|
@ -29,11 +29,8 @@
|
||||||
Macros and definitions.
|
Macros and definitions.
|
||||||
-----------------------------------------------------------------------------*/
|
-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/* Uncomment this to enable debugging output. */
|
|
||||||
/* #define DEBUG_RAM_SETUP 1 */
|
|
||||||
|
|
||||||
/* Debugging macros. */
|
/* Debugging macros. */
|
||||||
#if defined(DEBUG_RAM_SETUP)
|
#if CONFIG_DEBUG_RAM_SETUP
|
||||||
#define PRINT_DEBUG(x) print_debug(x)
|
#define PRINT_DEBUG(x) print_debug(x)
|
||||||
#define PRINT_DEBUG_HEX8(x) print_debug_hex8(x)
|
#define PRINT_DEBUG_HEX8(x) print_debug_hex8(x)
|
||||||
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
||||||
|
|
|
@ -24,10 +24,8 @@
|
||||||
#include "raminit.h"
|
#include "raminit.h"
|
||||||
#include "i945.h"
|
#include "i945.h"
|
||||||
|
|
||||||
#define DEBUG_RAM_SETUP
|
|
||||||
|
|
||||||
/* Debugging macros. */
|
/* Debugging macros. */
|
||||||
#if defined(DEBUG_RAM_SETUP)
|
#if CONFIG_DEBUG_RAM_SETUP
|
||||||
#define PRINTK_DEBUG(x...) printk_debug(x)
|
#define PRINTK_DEBUG(x...) printk_debug(x)
|
||||||
#else
|
#else
|
||||||
#define PRINTK_DEBUG(x...)
|
#define PRINTK_DEBUG(x...)
|
||||||
|
@ -73,7 +71,7 @@ static void ram_read32(u32 offset)
|
||||||
read32(offset);
|
read32(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_RAM_SETUP
|
#if CONFIG_DEBUG_RAM_SETUP
|
||||||
static void sdram_dump_mchbar_registers(void)
|
static void sdram_dump_mchbar_registers(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -25,9 +25,7 @@
|
||||||
#include <delay.h>
|
#include <delay.h>
|
||||||
#include "cn700.h"
|
#include "cn700.h"
|
||||||
|
|
||||||
// #define DEBUG_RAM_SETUP 1
|
#ifdef CONFIG_DEBUG_RAM_SETUP
|
||||||
|
|
||||||
#ifdef DEBUG_RAM_SETUP
|
|
||||||
#define PRINT_DEBUG_MEM(x) print_debug(x)
|
#define PRINT_DEBUG_MEM(x) print_debug(x)
|
||||||
#define PRINT_DEBUG_MEM_HEX8(x) print_debug_hex8(x)
|
#define PRINT_DEBUG_MEM_HEX8(x) print_debug_hex8(x)
|
||||||
#define PRINT_DEBUG_MEM_HEX16(x) print_debug_hex16(x)
|
#define PRINT_DEBUG_MEM_HEX16(x) print_debug_hex16(x)
|
||||||
|
@ -51,12 +49,6 @@ static void do_ram_command(device_t dev, u8 command)
|
||||||
reg &= 0xf8; /* Clear bits 2-0. */
|
reg &= 0xf8; /* Clear bits 2-0. */
|
||||||
reg |= command;
|
reg |= command;
|
||||||
pci_write_config8(dev, DRAM_MISC_CTL, reg);
|
pci_write_config8(dev, DRAM_MISC_CTL, reg);
|
||||||
|
|
||||||
PRINT_DEBUG_MEM(" Sending RAM command 0x");
|
|
||||||
PRINT_DEBUG_MEM_HEX8(reg);
|
|
||||||
PRINT_DEBUG_MEM(" to 0x");
|
|
||||||
PRINT_DEBUG_MEM_HEX32(0 + addr_offset);
|
|
||||||
PRINT_DEBUG_MEM("\r\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -48,10 +48,7 @@
|
||||||
#define SMBUS_DELAY() outb(0x80, 0x80)
|
#define SMBUS_DELAY() outb(0x80, 0x80)
|
||||||
|
|
||||||
/* Debugging macros. */
|
/* Debugging macros. */
|
||||||
|
#if CONFIG_DEBUG_SMBUS
|
||||||
// #define DEBUG_SMBUS 1
|
|
||||||
|
|
||||||
#ifdef DEBUG_SMBUS
|
|
||||||
#define PRINT_DEBUG(x) print_debug(x)
|
#define PRINT_DEBUG(x) print_debug(x)
|
||||||
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
||||||
#else
|
#else
|
||||||
|
@ -102,7 +99,7 @@ static void smbus_wait_until_ready(void)
|
||||||
SMBUS_DELAY();
|
SMBUS_DELAY();
|
||||||
++loops;
|
++loops;
|
||||||
}
|
}
|
||||||
#ifdef DEBUG_SMBUS
|
#if CONFIG_DEBUG_SMBUS
|
||||||
/* Some systems seem to have a flakey SMBus. No need to spew a lot of
|
/* Some systems seem to have a flakey SMBus. No need to spew a lot of
|
||||||
* errors on those, once we know that SMBus access is principally
|
* errors on those, once we know that SMBus access is principally
|
||||||
* working.
|
* working.
|
||||||
|
@ -234,7 +231,7 @@ static void enable_smbus(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Debugging Function */
|
/* Debugging Function */
|
||||||
#ifdef DEBUG_SMBUS
|
#ifdef CONFIG_DEBUG_SMBUS
|
||||||
static void dump_spd_data(const struct mem_controller *ctrl)
|
static void dump_spd_data(const struct mem_controller *ctrl)
|
||||||
{
|
{
|
||||||
int dimm, offset, regs;
|
int dimm, offset, regs;
|
||||||
|
|
|
@ -24,10 +24,8 @@
|
||||||
#include <delay.h>
|
#include <delay.h>
|
||||||
#include "cx700_registers.h"
|
#include "cx700_registers.h"
|
||||||
|
|
||||||
// #define DEBUG_RAM_SETUP 1
|
|
||||||
|
|
||||||
/* Debugging macros. */
|
/* Debugging macros. */
|
||||||
#if defined(DEBUG_RAM_SETUP)
|
#if CONFIG_DEBUG_RAM_SETUP
|
||||||
#define PRINTK_DEBUG(x...) printk_debug(x)
|
#define PRINTK_DEBUG(x...) printk_debug(x)
|
||||||
#else
|
#else
|
||||||
#define PRINTK_DEBUG(x...)
|
#define PRINTK_DEBUG(x...)
|
||||||
|
|
|
@ -21,9 +21,7 @@
|
||||||
#include <sdram_mode.h>
|
#include <sdram_mode.h>
|
||||||
#include <delay.h>
|
#include <delay.h>
|
||||||
|
|
||||||
#define DEBUG_RAM_SETUP 1
|
#if CONFIG_DEBUG_RAM_SETUP
|
||||||
|
|
||||||
#ifdef DEBUG_RAM_SETUP
|
|
||||||
#define PRINT_DEBUG_MEM(x) print_debug(x)
|
#define PRINT_DEBUG_MEM(x) print_debug(x)
|
||||||
#define PRINT_DEBUG_MEM_HEX8(x) print_debug_hex8(x)
|
#define PRINT_DEBUG_MEM_HEX8(x) print_debug_hex8(x)
|
||||||
#define PRINT_DEBUG_MEM_HEX16(x) print_debug_hex16(x)
|
#define PRINT_DEBUG_MEM_HEX16(x) print_debug_hex16(x)
|
||||||
|
|
|
@ -49,11 +49,7 @@
|
||||||
|
|
||||||
#define SMBUS_DELAY() outb(0x80, 0x80)
|
#define SMBUS_DELAY() outb(0x80, 0x80)
|
||||||
|
|
||||||
/* Debugging macros. Only necessary if something isn't working right */
|
#ifdef CONFIG_DEBUG_SMBUS
|
||||||
|
|
||||||
#define DEBUG_SMBUS 1
|
|
||||||
|
|
||||||
#ifdef DEBUG_SMBUS
|
|
||||||
#define PRINT_DEBUG(x) print_debug(x)
|
#define PRINT_DEBUG(x) print_debug(x)
|
||||||
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
||||||
#else
|
#else
|
||||||
|
@ -289,7 +285,7 @@ void smbus_fixup(const struct mem_controller *ctrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Debugging Function */
|
/* Debugging Function */
|
||||||
#ifdef DEBUG_SMBUS
|
#if CONFIG_DEBUG_SMBUS
|
||||||
static void dump_spd_data(void)
|
static void dump_spd_data(void)
|
||||||
{
|
{
|
||||||
int dimm, offset, regs;
|
int dimm, offset, regs;
|
||||||
|
|
|
@ -28,8 +28,6 @@
|
||||||
#include <device/pci_def.h>
|
#include <device/pci_def.h>
|
||||||
#include "i82801gx.h"
|
#include "i82801gx.h"
|
||||||
|
|
||||||
#define DEBUG_SMI
|
|
||||||
|
|
||||||
#define APM_CNT 0xb2
|
#define APM_CNT 0xb2
|
||||||
#define CST_CONTROL 0x85
|
#define CST_CONTROL 0x85
|
||||||
#define PST_CONTROL 0x80
|
#define PST_CONTROL 0x80
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
#define I2C_TRANS_CMD 0x40
|
#define I2C_TRANS_CMD 0x40
|
||||||
#define CLOCK_SLAVE_ADDRESS 0x69
|
#define CLOCK_SLAVE_ADDRESS 0x69
|
||||||
|
|
||||||
#if DEBUG_SMBUS == 1
|
#if CONFIG_DEBUG_SMBUS
|
||||||
#define PRINT_DEBUG(x) print_debug(x)
|
#define PRINT_DEBUG(x) print_debug(x)
|
||||||
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
#define PRINT_DEBUG_HEX16(x) print_debug_hex16(x)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -102,7 +102,7 @@ struct x86_fpu_registers {
|
||||||
|
|
||||||
#endif /* X86_FPU_SUPPORT */
|
#endif /* X86_FPU_SUPPORT */
|
||||||
|
|
||||||
#ifdef DEBUG
|
#if CONFIG_X86EMU_DEBUG
|
||||||
# define DECODE_PRINTINSTR32(t,mod,rh,rl) \
|
# define DECODE_PRINTINSTR32(t,mod,rh,rl) \
|
||||||
DECODE_PRINTF(t[(mod<<3)+(rh)]);
|
DECODE_PRINTF(t[(mod<<3)+(rh)]);
|
||||||
# define DECODE_PRINTINSTR256(t,mod,rh,rl) \
|
# define DECODE_PRINTINSTR256(t,mod,rh,rl) \
|
||||||
|
|
|
@ -279,7 +279,7 @@ typedef struct {
|
||||||
u32 mode;
|
u32 mode;
|
||||||
volatile int intr; /* mask of pending interrupts */
|
volatile int intr; /* mask of pending interrupts */
|
||||||
volatile int debug;
|
volatile int debug;
|
||||||
#ifdef DEBUG
|
#if CONFIG_X86EMU_DEBUG
|
||||||
int check;
|
int check;
|
||||||
u16 saved_ip;
|
u16 saved_ip;
|
||||||
u16 saved_cs;
|
u16 saved_cs;
|
||||||
|
@ -365,13 +365,6 @@ extern X86EMU_sysEnv _X86EMU_env;
|
||||||
#define X86_CH M.x86.R_CH
|
#define X86_CH M.x86.R_CH
|
||||||
#define X86_DH M.x86.R_DH
|
#define X86_DH M.x86.R_DH
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------- Function Prototypes --------------------------*/
|
|
||||||
|
|
||||||
/* Function to log information at runtime */
|
|
||||||
|
|
||||||
//void printk(const char *fmt, ...);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* End of "C" linkage for C++ */
|
} /* End of "C" linkage for C++ */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -42,27 +42,15 @@
|
||||||
#ifndef __X86EMU_X86EMU_H
|
#ifndef __X86EMU_X86EMU_H
|
||||||
#define __X86EMU_X86EMU_H
|
#define __X86EMU_X86EMU_H
|
||||||
|
|
||||||
/* FIXME: redefine printk for the moment */
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#undef printk
|
#if CONFIG_X86EMU_DEBUG
|
||||||
#define printk(x...) do_printk(BIOS_DEBUG, x)
|
|
||||||
#if defined(CONFIG_YABEL_DEBUG_FLAGS) && (CONFIG_YABEL_DEBUG_FLAGS != 0)
|
|
||||||
#define DEBUG
|
#define DEBUG
|
||||||
#else
|
|
||||||
#undef DEBUG
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SCITECH
|
|
||||||
#include "scitech.h"
|
|
||||||
#define X86API _ASMAPI
|
|
||||||
#define X86APIP _ASMAPIP
|
|
||||||
typedef int X86EMU_pioAddr;
|
|
||||||
#else
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#define X86API
|
#define X86API
|
||||||
#define X86APIP *
|
#define X86APIP *
|
||||||
#endif
|
|
||||||
#include "regs.h"
|
#include "regs.h"
|
||||||
|
|
||||||
/*---------------------- Macros and type definitions ----------------------*/
|
/*---------------------- Macros and type definitions ----------------------*/
|
||||||
|
@ -166,9 +154,9 @@ void X86EMU_setMemBase(void *base, size_t size);
|
||||||
void X86EMU_exec(void);
|
void X86EMU_exec(void);
|
||||||
void X86EMU_halt_sys(void);
|
void X86EMU_halt_sys(void);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#if CONFIG_X86EMU_DEBUG
|
||||||
#define HALT_SYS() \
|
#define HALT_SYS() \
|
||||||
printk("halt_sys: in %s\n", __func__); \
|
printf("halt_sys: in %s\n", __func__); \
|
||||||
X86EMU_halt_sys();
|
X86EMU_halt_sys();
|
||||||
#else
|
#else
|
||||||
#define HALT_SYS() X86EMU_halt_sys()
|
#define HALT_SYS() X86EMU_halt_sys()
|
||||||
|
|
|
@ -23,8 +23,6 @@
|
||||||
#include <arch/io.h>
|
#include <arch/io.h>
|
||||||
#include <arch/registers.h>
|
#include <arch/registers.h>
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#define printk(x...) do_printk(x)
|
|
||||||
|
|
||||||
#include <arch/interrupt.h>
|
#include <arch/interrupt.h>
|
||||||
|
|
||||||
#define REALMODE_BASE ((void *)0x600)
|
#define REALMODE_BASE ((void *)0x600)
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#include <arch/io.h>
|
#include <arch/io.h>
|
||||||
#include <arch/registers.h>
|
#include <arch/registers.h>
|
||||||
#define printk(x...) do_printk(x)
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PCIBIOS_CHECK = 0xb101,
|
PCIBIOS_CHECK = 0xb101,
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "x86emui.h"
|
#include "x86emui.h"
|
||||||
// #include <stdarg.h>
|
|
||||||
|
|
||||||
/*----------------------------- Implementation ----------------------------*/
|
/*----------------------------- Implementation ----------------------------*/
|
||||||
|
|
||||||
|
@ -59,7 +58,7 @@ void X86EMU_trace_regs (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (DEBUG_DECODE() && ! DEBUG_DECODE_NOPRINT()) {
|
if (DEBUG_DECODE() && ! DEBUG_DECODE_NOPRINT()) {
|
||||||
printk("%04x:%04x ",M.x86.saved_cs, M.x86.saved_ip);
|
printf("%04x:%04x ",M.x86.saved_cs, M.x86.saved_ip);
|
||||||
print_encoded_bytes( M.x86.saved_cs, M.x86.saved_ip);
|
print_encoded_bytes( M.x86.saved_cs, M.x86.saved_ip);
|
||||||
print_decoded_instruction();
|
print_decoded_instruction();
|
||||||
}
|
}
|
||||||
|
@ -78,7 +77,7 @@ void x86emu_just_disassemble (void)
|
||||||
* This routine called if the flag DEBUG_DISASSEMBLE is set kind
|
* This routine called if the flag DEBUG_DISASSEMBLE is set kind
|
||||||
* of a hack!
|
* of a hack!
|
||||||
*/
|
*/
|
||||||
printk("%04x:%04x ",M.x86.saved_cs, M.x86.saved_ip);
|
printf("%04x:%04x ",M.x86.saved_cs, M.x86.saved_ip);
|
||||||
print_encoded_bytes( M.x86.saved_cs, M.x86.saved_ip);
|
print_encoded_bytes( M.x86.saved_cs, M.x86.saved_ip);
|
||||||
print_decoded_instruction();
|
print_decoded_instruction();
|
||||||
}
|
}
|
||||||
|
@ -162,13 +161,13 @@ void x86emu_inc_decoded_inst_len (int x)
|
||||||
M.x86.enc_pos += x;
|
M.x86.enc_pos += x;
|
||||||
}
|
}
|
||||||
|
|
||||||
void x86emu_decode_printf (char *x)
|
void x86emu_decode_printf (const char *x)
|
||||||
{
|
{
|
||||||
sprintf(M.x86.decoded_buf+M.x86.enc_str_pos,"%s",x);
|
sprintf(M.x86.decoded_buf+M.x86.enc_str_pos,"%s",x);
|
||||||
M.x86.enc_str_pos += strlen(x);
|
M.x86.enc_str_pos += strlen(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
void x86emu_decode_printf2 (char *x, int y)
|
void x86emu_decode_printf2 (const char *x, int y)
|
||||||
{
|
{
|
||||||
char temp[100];
|
char temp[100];
|
||||||
sprintf(temp,x,y);
|
sprintf(temp,x,y);
|
||||||
|
@ -189,12 +188,12 @@ static void print_encoded_bytes (u16 s, u16 o)
|
||||||
for (i=0; i< M.x86.enc_pos; i++) {
|
for (i=0; i< M.x86.enc_pos; i++) {
|
||||||
sprintf(buf1+2*i,"%02x", fetch_data_byte_abs(s,o+i));
|
sprintf(buf1+2*i,"%02x", fetch_data_byte_abs(s,o+i));
|
||||||
}
|
}
|
||||||
printk("%-20s ",buf1);
|
printf("%-20s ",buf1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_decoded_instruction (void)
|
static void print_decoded_instruction (void)
|
||||||
{
|
{
|
||||||
printk("%s", M.x86.decoded_buf);
|
printf("%s", M.x86.decoded_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void x86emu_print_int_vect (u16 iv)
|
void x86emu_print_int_vect (u16 iv)
|
||||||
|
@ -204,7 +203,7 @@ void x86emu_print_int_vect (u16 iv)
|
||||||
if (iv > 256) return;
|
if (iv > 256) return;
|
||||||
seg = fetch_data_word_abs(0,iv*4);
|
seg = fetch_data_word_abs(0,iv*4);
|
||||||
off = fetch_data_word_abs(0,iv*4+2);
|
off = fetch_data_word_abs(0,iv*4+2);
|
||||||
printk("%04x:%04x ", seg, off);
|
printf("%04x:%04x ", seg, off);
|
||||||
}
|
}
|
||||||
|
|
||||||
void X86EMU_dump_memory (u16 seg, u16 off, u32 amt)
|
void X86EMU_dump_memory (u16 seg, u16 off, u32 amt)
|
||||||
|
@ -216,12 +215,12 @@ void X86EMU_dump_memory (u16 seg, u16 off, u32 amt)
|
||||||
|
|
||||||
current = start;
|
current = start;
|
||||||
while (end <= off + amt) {
|
while (end <= off + amt) {
|
||||||
printk("%04x:%04x ", seg, start);
|
printf("%04x:%04x ", seg, start);
|
||||||
for (i=start; i< off; i++)
|
for (i=start; i< off; i++)
|
||||||
printk(" ");
|
printf(" ");
|
||||||
for ( ; i< end; i++)
|
for ( ; i< end; i++)
|
||||||
printk("%02x ", fetch_data_byte_abs(seg,i));
|
printf("%02x ", fetch_data_byte_abs(seg,i));
|
||||||
printk("\n");
|
printf("\n");
|
||||||
start = end;
|
start = end;
|
||||||
end = start + 16;
|
end = start + 16;
|
||||||
}
|
}
|
||||||
|
@ -256,7 +255,7 @@ void x86emu_single_step (void)
|
||||||
done=0;
|
done=0;
|
||||||
offset = M.x86.saved_ip;
|
offset = M.x86.saved_ip;
|
||||||
while (!done) {
|
while (!done) {
|
||||||
printk("-");
|
printf("-");
|
||||||
p = fgets(s, 1023, stdin);
|
p = fgets(s, 1023, stdin);
|
||||||
cmd = parse_line(s, ps, &ntok);
|
cmd = parse_line(s, ps, &ntok);
|
||||||
switch(cmd) {
|
switch(cmd) {
|
||||||
|
@ -310,7 +309,7 @@ void x86emu_single_step (void)
|
||||||
return;
|
return;
|
||||||
case 'P':
|
case 'P':
|
||||||
noDecode = (noDecode)?0:1;
|
noDecode = (noDecode)?0:1;
|
||||||
printk("Toggled decoding to %s\n",(noDecode)?"FALSE":"TRUE");
|
printf("Toggled decoding to %s\n",(noDecode)?"FALSE":"TRUE");
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -368,68 +367,68 @@ int parse_line (char *s, int *ps, int *n)
|
||||||
|
|
||||||
void x86emu_dump_regs (void)
|
void x86emu_dump_regs (void)
|
||||||
{
|
{
|
||||||
printk("\tAX=%04x ", M.x86.R_AX );
|
printf("\tAX=%04x ", M.x86.R_AX );
|
||||||
printk("BX=%04x ", M.x86.R_BX );
|
printf("BX=%04x ", M.x86.R_BX );
|
||||||
printk("CX=%04x ", M.x86.R_CX );
|
printf("CX=%04x ", M.x86.R_CX );
|
||||||
printk("DX=%04x ", M.x86.R_DX );
|
printf("DX=%04x ", M.x86.R_DX );
|
||||||
printk("SP=%04x ", M.x86.R_SP );
|
printf("SP=%04x ", M.x86.R_SP );
|
||||||
printk("BP=%04x ", M.x86.R_BP );
|
printf("BP=%04x ", M.x86.R_BP );
|
||||||
printk("SI=%04x ", M.x86.R_SI );
|
printf("SI=%04x ", M.x86.R_SI );
|
||||||
printk("DI=%04x\n", M.x86.R_DI );
|
printf("DI=%04x\n", M.x86.R_DI );
|
||||||
printk("\tDS=%04x ", M.x86.R_DS );
|
printf("\tDS=%04x ", M.x86.R_DS );
|
||||||
printk("ES=%04x ", M.x86.R_ES );
|
printf("ES=%04x ", M.x86.R_ES );
|
||||||
printk("SS=%04x ", M.x86.R_SS );
|
printf("SS=%04x ", M.x86.R_SS );
|
||||||
printk("CS=%04x ", M.x86.R_CS );
|
printf("CS=%04x ", M.x86.R_CS );
|
||||||
printk("IP=%04x ", M.x86.R_IP );
|
printf("IP=%04x ", M.x86.R_IP );
|
||||||
if (ACCESS_FLAG(F_OF)) printk("OV "); /* CHECKED... */
|
if (ACCESS_FLAG(F_OF)) printf("OV "); /* CHECKED... */
|
||||||
else printk("NV ");
|
else printf("NV ");
|
||||||
if (ACCESS_FLAG(F_DF)) printk("DN ");
|
if (ACCESS_FLAG(F_DF)) printf("DN ");
|
||||||
else printk("UP ");
|
else printf("UP ");
|
||||||
if (ACCESS_FLAG(F_IF)) printk("EI ");
|
if (ACCESS_FLAG(F_IF)) printf("EI ");
|
||||||
else printk("DI ");
|
else printf("DI ");
|
||||||
if (ACCESS_FLAG(F_SF)) printk("NG ");
|
if (ACCESS_FLAG(F_SF)) printf("NG ");
|
||||||
else printk("PL ");
|
else printf("PL ");
|
||||||
if (ACCESS_FLAG(F_ZF)) printk("ZR ");
|
if (ACCESS_FLAG(F_ZF)) printf("ZR ");
|
||||||
else printk("NZ ");
|
else printf("NZ ");
|
||||||
if (ACCESS_FLAG(F_AF)) printk("AC ");
|
if (ACCESS_FLAG(F_AF)) printf("AC ");
|
||||||
else printk("NA ");
|
else printf("NA ");
|
||||||
if (ACCESS_FLAG(F_PF)) printk("PE ");
|
if (ACCESS_FLAG(F_PF)) printf("PE ");
|
||||||
else printk("PO ");
|
else printf("PO ");
|
||||||
if (ACCESS_FLAG(F_CF)) printk("CY ");
|
if (ACCESS_FLAG(F_CF)) printf("CY ");
|
||||||
else printk("NC ");
|
else printf("NC ");
|
||||||
printk("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void x86emu_dump_xregs (void)
|
void x86emu_dump_xregs (void)
|
||||||
{
|
{
|
||||||
printk("\tEAX=%08x ", M.x86.R_EAX );
|
printf("\tEAX=%08x ", M.x86.R_EAX );
|
||||||
printk("EBX=%08x ", M.x86.R_EBX );
|
printf("EBX=%08x ", M.x86.R_EBX );
|
||||||
printk("ECX=%08x ", M.x86.R_ECX );
|
printf("ECX=%08x ", M.x86.R_ECX );
|
||||||
printk("EDX=%08x \n", M.x86.R_EDX );
|
printf("EDX=%08x \n", M.x86.R_EDX );
|
||||||
printk("\tESP=%08x ", M.x86.R_ESP );
|
printf("\tESP=%08x ", M.x86.R_ESP );
|
||||||
printk("EBP=%08x ", M.x86.R_EBP );
|
printf("EBP=%08x ", M.x86.R_EBP );
|
||||||
printk("ESI=%08x ", M.x86.R_ESI );
|
printf("ESI=%08x ", M.x86.R_ESI );
|
||||||
printk("EDI=%08x\n", M.x86.R_EDI );
|
printf("EDI=%08x\n", M.x86.R_EDI );
|
||||||
printk("\tDS=%04x ", M.x86.R_DS );
|
printf("\tDS=%04x ", M.x86.R_DS );
|
||||||
printk("ES=%04x ", M.x86.R_ES );
|
printf("ES=%04x ", M.x86.R_ES );
|
||||||
printk("SS=%04x ", M.x86.R_SS );
|
printf("SS=%04x ", M.x86.R_SS );
|
||||||
printk("CS=%04x ", M.x86.R_CS );
|
printf("CS=%04x ", M.x86.R_CS );
|
||||||
printk("EIP=%08x\n\t", M.x86.R_EIP );
|
printf("EIP=%08x\n\t", M.x86.R_EIP );
|
||||||
if (ACCESS_FLAG(F_OF)) printk("OV "); /* CHECKED... */
|
if (ACCESS_FLAG(F_OF)) printf("OV "); /* CHECKED... */
|
||||||
else printk("NV ");
|
else printf("NV ");
|
||||||
if (ACCESS_FLAG(F_DF)) printk("DN ");
|
if (ACCESS_FLAG(F_DF)) printf("DN ");
|
||||||
else printk("UP ");
|
else printf("UP ");
|
||||||
if (ACCESS_FLAG(F_IF)) printk("EI ");
|
if (ACCESS_FLAG(F_IF)) printf("EI ");
|
||||||
else printk("DI ");
|
else printf("DI ");
|
||||||
if (ACCESS_FLAG(F_SF)) printk("NG ");
|
if (ACCESS_FLAG(F_SF)) printf("NG ");
|
||||||
else printk("PL ");
|
else printf("PL ");
|
||||||
if (ACCESS_FLAG(F_ZF)) printk("ZR ");
|
if (ACCESS_FLAG(F_ZF)) printf("ZR ");
|
||||||
else printk("NZ ");
|
else printf("NZ ");
|
||||||
if (ACCESS_FLAG(F_AF)) printk("AC ");
|
if (ACCESS_FLAG(F_AF)) printf("AC ");
|
||||||
else printk("NA ");
|
else printf("NA ");
|
||||||
if (ACCESS_FLAG(F_PF)) printk("PE ");
|
if (ACCESS_FLAG(F_PF)) printf("PE ");
|
||||||
else printk("PO ");
|
else printf("PO ");
|
||||||
if (ACCESS_FLAG(F_CF)) printk("CY ");
|
if (ACCESS_FLAG(F_CF)) printf("CY ");
|
||||||
else printk("NC ");
|
else printf("NC ");
|
||||||
printk("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,10 +40,11 @@
|
||||||
#ifndef __X86EMU_DEBUG_H
|
#ifndef __X86EMU_DEBUG_H
|
||||||
#define __X86EMU_DEBUG_H
|
#define __X86EMU_DEBUG_H
|
||||||
|
|
||||||
//#define DEBUG 0
|
|
||||||
//#undef DEBUG
|
|
||||||
/*---------------------- Macros and type definitions ----------------------*/
|
/*---------------------- Macros and type definitions ----------------------*/
|
||||||
|
|
||||||
|
/* printf is not available in coreboot... use printk */
|
||||||
|
#define printf(x...) printk(BIOS_DEBUG, x)
|
||||||
|
|
||||||
/* checks to be enabled for "runtime" */
|
/* checks to be enabled for "runtime" */
|
||||||
|
|
||||||
#define CHECK_IP_FETCH_F 0x1
|
#define CHECK_IP_FETCH_F 0x1
|
||||||
|
@ -172,17 +173,17 @@
|
||||||
if (DEBUG_TRACECALLREGS()) \
|
if (DEBUG_TRACECALLREGS()) \
|
||||||
x86emu_dump_regs(); \
|
x86emu_dump_regs(); \
|
||||||
if (DEBUG_TRACECALL()) \
|
if (DEBUG_TRACECALL()) \
|
||||||
printk("%04x:%04x: CALL %s%04x:%04x\n", u , v, s, w, x);
|
printf("%04x:%04x: CALL %s%04x:%04x\n", u , v, s, w, x);
|
||||||
# define RETURN_TRACE(u,v,w,x,s) \
|
# define RETURN_TRACE(u,v,w,x,s) \
|
||||||
if (DEBUG_TRACECALLREGS()) \
|
if (DEBUG_TRACECALLREGS()) \
|
||||||
x86emu_dump_regs(); \
|
x86emu_dump_regs(); \
|
||||||
if (DEBUG_TRACECALL()) \
|
if (DEBUG_TRACECALL()) \
|
||||||
printk("%04x:%04x: RET %s %04x:%04x\n",u,v,s,w,x);
|
printf("%04x:%04x: RET %s %04x:%04x\n",u,v,s,w,x);
|
||||||
# define JMP_TRACE(u,v,w,x,s) \
|
# define JMP_TRACE(u,v,w,x,s) \
|
||||||
if (DEBUG_TRACEJMPREGS()) \
|
if (DEBUG_TRACEJMPREGS()) \
|
||||||
x86emu_dump_regs(); \
|
x86emu_dump_regs(); \
|
||||||
if (DEBUG_TRACEJMP()) \
|
if (DEBUG_TRACEJMP()) \
|
||||||
printk("%04x:%04x: JMP %s%04x:%04x\n", u , v, s, w, x);
|
printf("%04x:%04x: JMP %s%04x:%04x\n", u , v, s, w, x);
|
||||||
#else
|
#else
|
||||||
# define CALL_TRACE(u,v,w,x,s)
|
# define CALL_TRACE(u,v,w,x,s)
|
||||||
# define RETURN_TRACE(u,v,w,x,s)
|
# define RETURN_TRACE(u,v,w,x,s)
|
||||||
|
@ -201,20 +202,22 @@
|
||||||
extern "C" { /* Use "C" linkage when in C++ mode */
|
extern "C" { /* Use "C" linkage when in C++ mode */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void x86emu_inc_decoded_inst_len (int x);
|
void x86emu_inc_decoded_inst_len (int x);
|
||||||
extern void x86emu_decode_printf (char *x);
|
void x86emu_decode_printf (const char *x);
|
||||||
extern void x86emu_decode_printf2 (char *x, int y);
|
void x86emu_decode_printf2 (const char *x, int y);
|
||||||
extern void x86emu_just_disassemble (void);
|
void x86emu_just_disassemble (void);
|
||||||
extern void x86emu_single_step (void);
|
void x86emu_single_step (void);
|
||||||
extern void x86emu_end_instr (void);
|
void x86emu_end_instr (void);
|
||||||
extern void x86emu_dump_regs (void);
|
void x86emu_dump_regs (void);
|
||||||
extern void x86emu_dump_xregs (void);
|
void x86emu_dump_xregs (void);
|
||||||
extern void x86emu_print_int_vect (u16 iv);
|
void x86emu_print_int_vect (u16 iv);
|
||||||
extern void x86emu_instrument_instruction (void);
|
void x86emu_instrument_instruction (void);
|
||||||
extern void x86emu_check_ip_access (void);
|
void x86emu_check_ip_access (void);
|
||||||
extern void x86emu_check_sp_access (void);
|
void x86emu_check_sp_access (void);
|
||||||
extern void x86emu_check_mem_access (u32 p);
|
void x86emu_check_mem_access (u32 p);
|
||||||
extern void x86emu_check_data_access (uint s, uint o);
|
void x86emu_check_data_access (uint s, uint o);
|
||||||
|
|
||||||
|
void disassemble_forward (u16 seg, u16 off, int n);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* End of "C" linkage for C++ */
|
} /* End of "C" linkage for C++ */
|
||||||
|
|
|
@ -77,7 +77,7 @@ next instruction.
|
||||||
void x86emu_intr_raise(
|
void x86emu_intr_raise(
|
||||||
u8 intrnum)
|
u8 intrnum)
|
||||||
{
|
{
|
||||||
printk("%s, rasing execption %x\n", __func__, intrnum);
|
printf("%s, raising exeception %x\n", __func__, intrnum);
|
||||||
x86emu_dump_regs();
|
x86emu_dump_regs();
|
||||||
M.x86.intno = intrnum;
|
M.x86.intno = intrnum;
|
||||||
M.x86.intr |= INTR_SYNCH;
|
M.x86.intr |= INTR_SYNCH;
|
||||||
|
@ -105,12 +105,12 @@ DB( if (CHECK_IP_FETCH())
|
||||||
if (M.x86.intr) {
|
if (M.x86.intr) {
|
||||||
if (M.x86.intr & INTR_HALTED) {
|
if (M.x86.intr & INTR_HALTED) {
|
||||||
DB( if (M.x86.R_SP != 0) {
|
DB( if (M.x86.R_SP != 0) {
|
||||||
printk("halted\n");
|
printf("halted\n");
|
||||||
X86EMU_trace_regs();
|
X86EMU_trace_regs();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (M.x86.debug)
|
if (M.x86.debug)
|
||||||
printk("Service completed successfully\n");
|
printf("Service completed successfully\n");
|
||||||
})
|
})
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -286,7 +286,7 @@ _INLINE u32 get_data_segment(void)
|
||||||
return M.x86.R_SS;
|
return M.x86.R_SS;
|
||||||
default:
|
default:
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printk("error: should not happen: multiple overrides.\n");
|
printf("error: should not happen: multiple overrides.\n");
|
||||||
#endif
|
#endif
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -52,7 +52,7 @@ void x86emuOp_esc_coprocess_d8(u8 X86EMU_UNUSED(op1))
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
static char *x86emu_fpu_op_d9_tab[] = {
|
static const char *x86emu_fpu_op_d9_tab[] = {
|
||||||
"FLD\tDWORD PTR ", "ESC_D9\t", "FST\tDWORD PTR ", "FSTP\tDWORD PTR ",
|
"FLD\tDWORD PTR ", "ESC_D9\t", "FST\tDWORD PTR ", "FSTP\tDWORD PTR ",
|
||||||
"FLDENV\t", "FLDCW\t", "FSTENV\t", "FSTCW\t",
|
"FLDENV\t", "FLDCW\t", "FSTENV\t", "FSTCW\t",
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ static char *x86emu_fpu_op_d9_tab[] = {
|
||||||
"FLDENV\t", "FLDCW\t", "FSTENV\t", "FSTCW\t",
|
"FLDENV\t", "FLDCW\t", "FSTENV\t", "FSTCW\t",
|
||||||
};
|
};
|
||||||
|
|
||||||
static char *x86emu_fpu_op_d9_tab1[] = {
|
static const char *x86emu_fpu_op_d9_tab1[] = {
|
||||||
"FLD\t", "FLD\t", "FLD\t", "FLD\t",
|
"FLD\t", "FLD\t", "FLD\t", "FLD\t",
|
||||||
"FLD\t", "FLD\t", "FLD\t", "FLD\t",
|
"FLD\t", "FLD\t", "FLD\t", "FLD\t",
|
||||||
|
|
||||||
|
@ -296,7 +296,7 @@ void x86emuOp_esc_coprocess_d9(u8 X86EMU_UNUSED(op1))
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
char *x86emu_fpu_op_da_tab[] = {
|
static const char *x86emu_fpu_op_da_tab[] = {
|
||||||
"FIADD\tDWORD PTR ", "FIMUL\tDWORD PTR ", "FICOM\tDWORD PTR ",
|
"FIADD\tDWORD PTR ", "FIMUL\tDWORD PTR ", "FICOM\tDWORD PTR ",
|
||||||
"FICOMP\tDWORD PTR ",
|
"FICOMP\tDWORD PTR ",
|
||||||
"FISUB\tDWORD PTR ", "FISUBR\tDWORD PTR ", "FIDIV\tDWORD PTR ",
|
"FISUB\tDWORD PTR ", "FISUBR\tDWORD PTR ", "FIDIV\tDWORD PTR ",
|
||||||
|
@ -386,7 +386,7 @@ void x86emuOp_esc_coprocess_da(u8 X86EMU_UNUSED(op1))
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
char *x86emu_fpu_op_db_tab[] = {
|
static const char *x86emu_fpu_op_db_tab[] = {
|
||||||
"FILD\tDWORD PTR ", "ESC_DB\t19", "FIST\tDWORD PTR ", "FISTP\tDWORD PTR ",
|
"FILD\tDWORD PTR ", "ESC_DB\t19", "FIST\tDWORD PTR ", "FISTP\tDWORD PTR ",
|
||||||
"ESC_DB\t1C", "FLD\tTBYTE PTR ", "ESC_DB\t1E", "FSTP\tTBYTE PTR ",
|
"ESC_DB\t1C", "FLD\tTBYTE PTR ", "ESC_DB\t1E", "FSTP\tTBYTE PTR ",
|
||||||
|
|
||||||
|
@ -505,7 +505,7 @@ void x86emuOp_esc_coprocess_db(u8 X86EMU_UNUSED(op1))
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
char *x86emu_fpu_op_dc_tab[] = {
|
static const char *x86emu_fpu_op_dc_tab[] = {
|
||||||
"FADD\tQWORD PTR ", "FMUL\tQWORD PTR ", "FCOM\tQWORD PTR ",
|
"FADD\tQWORD PTR ", "FMUL\tQWORD PTR ", "FCOM\tQWORD PTR ",
|
||||||
"FCOMP\tQWORD PTR ",
|
"FCOMP\tQWORD PTR ",
|
||||||
"FSUB\tQWORD PTR ", "FSUBR\tQWORD PTR ", "FDIV\tQWORD PTR ",
|
"FSUB\tQWORD PTR ", "FSUBR\tQWORD PTR ", "FDIV\tQWORD PTR ",
|
||||||
|
@ -620,7 +620,7 @@ void x86emuOp_esc_coprocess_dc(u8 X86EMU_UNUSED(op1))
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
static char *x86emu_fpu_op_dd_tab[] = {
|
static const char *x86emu_fpu_op_dd_tab[] = {
|
||||||
"FLD\tQWORD PTR ", "ESC_DD\t29,", "FST\tQWORD PTR ", "FSTP\tQWORD PTR ",
|
"FLD\tQWORD PTR ", "ESC_DD\t29,", "FST\tQWORD PTR ", "FSTP\tQWORD PTR ",
|
||||||
"FRSTOR\t", "ESC_DD\t2D,", "FSAVE\t", "FSTSW\t",
|
"FRSTOR\t", "ESC_DD\t2D,", "FSAVE\t", "FSTSW\t",
|
||||||
|
|
||||||
|
@ -720,7 +720,7 @@ void x86emuOp_esc_coprocess_dd(u8 X86EMU_UNUSED(op1))
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
static char *x86emu_fpu_op_de_tab[] =
|
static const char *x86emu_fpu_op_de_tab[] =
|
||||||
{
|
{
|
||||||
"FIADD\tWORD PTR ", "FIMUL\tWORD PTR ", "FICOM\tWORD PTR ",
|
"FIADD\tWORD PTR ", "FIMUL\tWORD PTR ", "FICOM\tWORD PTR ",
|
||||||
"FICOMP\tWORD PTR ",
|
"FICOMP\tWORD PTR ",
|
||||||
|
@ -839,7 +839,7 @@ void x86emuOp_esc_coprocess_de(u8 X86EMU_UNUSED(op1))
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
static char *x86emu_fpu_op_df_tab[] = {
|
static const char *x86emu_fpu_op_df_tab[] = {
|
||||||
/* mod == 00 */
|
/* mod == 00 */
|
||||||
"FILD\tWORD PTR ", "ESC_DF\t39\n", "FIST\tWORD PTR ", "FISTP\tWORD PTR ",
|
"FILD\tWORD PTR ", "ESC_DF\t39\n", "FIST\tWORD PTR ", "FISTP\tWORD PTR ",
|
||||||
"FBLD\tTBYTE PTR ", "FILD\tQWORD PTR ", "FBSTP\tTBYTE PTR ",
|
"FBLD\tTBYTE PTR ", "FILD\tQWORD PTR ", "FBSTP\tTBYTE PTR ",
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
/* constant arrays to do several instructions in just one function */
|
/* constant arrays to do several instructions in just one function */
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
static char *x86emu_GenOpName[8] = {
|
static const char *x86emu_GenOpName[8] = {
|
||||||
"ADD", "OR", "ADC", "SBB", "AND", "SUB", "XOR", "CMP"};
|
"ADD", "OR", "ADC", "SBB", "AND", "SUB", "XOR", "CMP"};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ static u32 (*opcD1_long_operation[])(u32 s, u8 d) =
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
static char *opF6_names[8] =
|
static const char *opF6_names[8] =
|
||||||
{ "TEST\t", "", "NOT\t", "NEG\t", "MUL\t", "IMUL\t", "DIV\t", "IDIV\t" };
|
{ "TEST\t", "", "NOT\t", "NEG\t", "MUL\t", "IMUL\t", "DIV\t", "IDIV\t" };
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -178,7 +178,7 @@ static void x86emuOp_illegal_op(
|
||||||
if (M.x86.R_SP != 0) {
|
if (M.x86.R_SP != 0) {
|
||||||
DECODE_PRINTF("ILLEGAL X86 OPCODE\n");
|
DECODE_PRINTF("ILLEGAL X86 OPCODE\n");
|
||||||
TRACE_REGS();
|
TRACE_REGS();
|
||||||
DB( printk("%04x:%04x: %02X ILLEGAL X86 OPCODE!\n",
|
DB( printf("%04x:%04x: %02X ILLEGAL X86 OPCODE!\n",
|
||||||
M.x86.R_CS, M.x86.R_IP-1,op1));
|
M.x86.R_CS, M.x86.R_IP-1,op1));
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,7 @@ static void x86emuOp2_illegal_op(u8 op2)
|
||||||
START_OF_INSTR();
|
START_OF_INSTR();
|
||||||
DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");
|
DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");
|
||||||
TRACE_REGS();
|
TRACE_REGS();
|
||||||
printk("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",
|
printf("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",
|
||||||
M.x86.R_CS, M.x86.R_IP-2, op2);
|
M.x86.R_CS, M.x86.R_IP-2, op2);
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
END_OF_INSTR();
|
END_OF_INSTR();
|
||||||
|
@ -105,7 +105,7 @@ static void x86emuOp2_opc_01(u8 op2)
|
||||||
default:
|
default:
|
||||||
DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE IN 0F 01\n");
|
DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE IN 0F 01\n");
|
||||||
TRACE_REGS();
|
TRACE_REGS();
|
||||||
printk("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",
|
printf("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",
|
||||||
M.x86.R_CS, M.x86.R_IP-2, op2);
|
M.x86.R_CS, M.x86.R_IP-2, op2);
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
break;
|
break;
|
||||||
|
@ -1272,7 +1272,7 @@ static void x86emuOp2_btX_I(u8 X86EMU_UNUSED(op2))
|
||||||
default:
|
default:
|
||||||
DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");
|
DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");
|
||||||
TRACE_REGS();
|
TRACE_REGS();
|
||||||
printk("%04x:%04x: %02X%02X ILLEGAL EXTENDED X86 OPCODE EXTENSION!\n",
|
printf("%04x:%04x: %02X%02X ILLEGAL EXTENDED X86 OPCODE EXTENSION!\n",
|
||||||
M.x86.R_CS, M.x86.R_IP-3,op2, (mod<<6)|(rh<<3)|rl);
|
M.x86.R_CS, M.x86.R_IP-3,op2, (mod<<6)|(rh<<3)|rl);
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,15 +41,11 @@
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
/* $XFree86: xc/extras/x86emu/src/x86emu/sys.c,v 1.5 2000/08/23 22:10:01 tsi Exp $ */
|
/* $XFree86: xc/extras/x86emu/src/x86emu/sys.c,v 1.5 2000/08/23 22:10:01 tsi Exp $ */
|
||||||
|
|
||||||
|
#include <arch/io.h>
|
||||||
#include <x86emu/x86emu.h>
|
#include <x86emu/x86emu.h>
|
||||||
#include <x86emu/regs.h>
|
#include <x86emu/regs.h>
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "prim_ops.h"
|
#include "prim_ops.h"
|
||||||
#if 1 /* Coreboot needs to map prinkf to printk. */
|
|
||||||
#include "arch/io.h"
|
|
||||||
#else
|
|
||||||
#include <sys/io.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef IN_MODULE
|
#ifdef IN_MODULE
|
||||||
#include "xf86_ansic.h"
|
#include "xf86_ansic.h"
|
||||||
|
@ -69,11 +65,11 @@ static u8 *mem_ptr(u32 addr, int size)
|
||||||
u8 *retaddr = 0;
|
u8 *retaddr = 0;
|
||||||
|
|
||||||
if (addr > M.mem_size - size) {
|
if (addr > M.mem_size - size) {
|
||||||
DB(printk("mem_ptr: address %#x out of range!\n", addr);)
|
DB(printf("mem_ptr: address %#x out of range!\n", addr);)
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
}
|
}
|
||||||
if (addr < 0x200) {
|
if (addr < 0x200) {
|
||||||
//printk("%x:%x updating int vector 0x%x\n",
|
//printf("%x:%x updating int vector 0x%x\n",
|
||||||
// M.x86.R_CS, M.x86.R_IP, addr >> 2);
|
// M.x86.R_CS, M.x86.R_IP, addr >> 2);
|
||||||
}
|
}
|
||||||
retaddr = (u8 *) (M.mem_base + addr);
|
retaddr = (u8 *) (M.mem_base + addr);
|
||||||
|
@ -100,7 +96,7 @@ u8 X86API rdb(u32 addr)
|
||||||
|
|
||||||
val = *ptr;
|
val = *ptr;
|
||||||
DB(if (DEBUG_MEM_TRACE())
|
DB(if (DEBUG_MEM_TRACE())
|
||||||
printk("%#08x 1 -> %#x\n", addr, val);)
|
printf("%#08x 1 -> %#x\n", addr, val);)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,7 +119,7 @@ u16 X86API rdw(u32 addr)
|
||||||
val = *(u16 *) (ptr);
|
val = *(u16 *) (ptr);
|
||||||
|
|
||||||
DB(if (DEBUG_MEM_TRACE())
|
DB(if (DEBUG_MEM_TRACE())
|
||||||
printk("%#08x 2 -> %#x\n", addr, val);)
|
printf("%#08x 2 -> %#x\n", addr, val);)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +141,7 @@ u32 X86API rdl(u32 addr)
|
||||||
val = *(u32 *) (ptr);
|
val = *(u32 *) (ptr);
|
||||||
|
|
||||||
DB(if (DEBUG_MEM_TRACE())
|
DB(if (DEBUG_MEM_TRACE())
|
||||||
printk("%#08x 4 -> %#x\n", addr, val);)
|
printf("%#08x 4 -> %#x\n", addr, val);)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +161,7 @@ void X86API wrb(u32 addr, u8 val)
|
||||||
*(u8 *) (ptr) = val;
|
*(u8 *) (ptr) = val;
|
||||||
|
|
||||||
DB(if (DEBUG_MEM_TRACE())
|
DB(if (DEBUG_MEM_TRACE())
|
||||||
printk("%#08x 1 <- %#x\n", addr, val);)
|
printf("%#08x 1 <- %#x\n", addr, val);)
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -184,7 +180,7 @@ void X86API wrw(u32 addr, u16 val)
|
||||||
*(u16 *) (ptr) = val;
|
*(u16 *) (ptr) = val;
|
||||||
|
|
||||||
DB(if (DEBUG_MEM_TRACE())
|
DB(if (DEBUG_MEM_TRACE())
|
||||||
printk("%#08x 2 <- %#x\n", addr, val);)
|
printf("%#08x 2 <- %#x\n", addr, val);)
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -203,7 +199,7 @@ void X86API wrl(u32 addr, u32 val)
|
||||||
*(u32 *) (ptr) = val;
|
*(u32 *) (ptr) = val;
|
||||||
|
|
||||||
DB(if (DEBUG_MEM_TRACE())
|
DB(if (DEBUG_MEM_TRACE())
|
||||||
printk("%#08x 4 <- %#x\n", addr, val);)
|
printf("%#08x 4 <- %#x\n", addr, val);)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -219,7 +215,7 @@ Default PIO byte read function. Doesn't perform real inb.
|
||||||
static u8 X86API p_inb(X86EMU_pioAddr addr)
|
static u8 X86API p_inb(X86EMU_pioAddr addr)
|
||||||
{
|
{
|
||||||
DB(if (DEBUG_IO_TRACE())
|
DB(if (DEBUG_IO_TRACE())
|
||||||
printk("inb %#04x \n", addr);)
|
printf("inb %#04x \n", addr);)
|
||||||
return inb(addr);
|
return inb(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,7 +230,7 @@ Default PIO word read function. Doesn't perform real inw.
|
||||||
static u16 X86API p_inw(X86EMU_pioAddr addr)
|
static u16 X86API p_inw(X86EMU_pioAddr addr)
|
||||||
{
|
{
|
||||||
DB(if (DEBUG_IO_TRACE())
|
DB(if (DEBUG_IO_TRACE())
|
||||||
printk("inw %#04x \n", addr);)
|
printf("inw %#04x \n", addr);)
|
||||||
return inw(addr);
|
return inw(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,7 +245,7 @@ Default PIO long read function. Doesn't perform real inl.
|
||||||
static u32 X86API p_inl(X86EMU_pioAddr addr)
|
static u32 X86API p_inl(X86EMU_pioAddr addr)
|
||||||
{
|
{
|
||||||
DB(if (DEBUG_IO_TRACE())
|
DB(if (DEBUG_IO_TRACE())
|
||||||
printk("inl %#04x \n", addr);)
|
printf("inl %#04x \n", addr);)
|
||||||
return inl(addr);
|
return inl(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,7 +259,7 @@ Default PIO byte write function. Doesn't perform real outb.
|
||||||
static void X86API p_outb(X86EMU_pioAddr addr, u8 val)
|
static void X86API p_outb(X86EMU_pioAddr addr, u8 val)
|
||||||
{
|
{
|
||||||
DB(if (DEBUG_IO_TRACE())
|
DB(if (DEBUG_IO_TRACE())
|
||||||
printk("outb %#02x -> %#04x \n", val, addr);)
|
printf("outb %#02x -> %#04x \n", val, addr);)
|
||||||
outb(val, addr);
|
outb(val, addr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -278,7 +274,7 @@ Default PIO word write function. Doesn't perform real outw.
|
||||||
static void X86API p_outw(X86EMU_pioAddr addr, u16 val)
|
static void X86API p_outw(X86EMU_pioAddr addr, u16 val)
|
||||||
{
|
{
|
||||||
DB(if (DEBUG_IO_TRACE())
|
DB(if (DEBUG_IO_TRACE())
|
||||||
printk("outw %#04x -> %#04x \n", val, addr);)
|
printf("outw %#04x -> %#04x \n", val, addr);)
|
||||||
outw(val, addr);
|
outw(val, addr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -293,7 +289,7 @@ Default PIO ;ong write function. Doesn't perform real outl.
|
||||||
static void X86API p_outl(X86EMU_pioAddr addr, u32 val)
|
static void X86API p_outl(X86EMU_pioAddr addr, u32 val)
|
||||||
{
|
{
|
||||||
DB(if (DEBUG_IO_TRACE())
|
DB(if (DEBUG_IO_TRACE())
|
||||||
printk("outl %#08x -> %#04x \n", val, addr);)
|
printf("outl %#08x -> %#04x \n", val, addr);)
|
||||||
|
|
||||||
outl(val, addr);
|
outl(val, addr);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -74,8 +74,6 @@
|
||||||
#ifdef IN_MODULE
|
#ifdef IN_MODULE
|
||||||
#include <xf86_ansic.h>
|
#include <xf86_ansic.h>
|
||||||
#else
|
#else
|
||||||
//#include <stdio.h>
|
|
||||||
//#include <stdlib.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#endif
|
#endif
|
||||||
/*--------------------------- Inline Functions ----------------------------*/
|
/*--------------------------- Inline Functions ----------------------------*/
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Copyright (c) 2004, 2008 IBM Corporation
|
* Copyright (c) 2004, 2008 IBM Corporation
|
||||||
* Copyright (c) 2008, 2009 Pattrick Hueper <phueper@hueper.net>
|
* Copyright (c) 2008, 2009 Pattrick Hueper <phueper@hueper.net>
|
||||||
|
* Copyright (c) 2010 coresystems GmbH
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* This program and the accompanying materials
|
* This program and the accompanying materials
|
||||||
* are made available under the terms of the BSD License
|
* are made available under the terms of the BSD License
|
||||||
|
@ -12,7 +13,6 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <types.h>
|
#include <types.h>
|
||||||
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
@ -28,9 +28,8 @@
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
#include "pmm.h"
|
#include "pmm.h"
|
||||||
|
|
||||||
#include "compat/rtas.h"
|
|
||||||
|
|
||||||
#include <device/device.h>
|
#include <device/device.h>
|
||||||
|
#include "compat/rtas.h"
|
||||||
|
|
||||||
static X86EMU_memFuncs my_mem_funcs = {
|
static X86EMU_memFuncs my_mem_funcs = {
|
||||||
my_rdb, my_rdw, my_rdl,
|
my_rdb, my_rdw, my_rdl,
|
||||||
|
@ -57,13 +56,42 @@ biosemu(u8 *biosmem, u32 biosmem_size, struct device * dev, unsigned long rom_ad
|
||||||
{
|
{
|
||||||
u8 *rom_image;
|
u8 *rom_image;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
#ifdef DEBUG
|
#if CONFIG_X86EMU_DEBUG
|
||||||
debug_flags = 0;//DEBUG_PRINT_INT10 | DEBUG_PNP | DEBUG_INTR | DEBUG_CHECK_VMEM_ACCESS | DEBUG_MEM | DEBUG_IO;
|
debug_flags = 0;
|
||||||
// | DEBUG_CHECK_VMEM_ACCESS | DEBUG_MEM | DEBUG_IO;
|
#if defined(CONFIG_X86EMU_DEBUG_JMP) && CONFIG_X86EMU_DEBUG_JMP
|
||||||
// | DEBUG_TRACE_X86EMU | DEBUG_JMP;
|
debug_flags |= DEBUG_JMP;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_X86EMU_DEBUG_TRACE) && CONFIG_X86EMU_DEBUG_TRACE
|
||||||
|
debug_flags |= DEBUG_TRACE_X86EMU;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_X86EMU_DEBUG_PNP) && CONFIG_X86EMU_DEBUG_PNP
|
||||||
|
debug_flags |= DEBUG_PNP;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_X86EMU_DEBUG_DISK) && CONFIG_X86EMU_DEBUG_DISK
|
||||||
|
debug_flags |= DEBUG_DISK;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_X86EMU_DEBUG_PMM) && CONFIG_X86EMU_DEBUG_PMM
|
||||||
|
debug_flags |= DEBUG_PMM;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_X86EMU_DEBUG_VBE) && CONFIG_X86EMU_DEBUG_VBE
|
||||||
|
debug_flags |= DEBUG_VBE;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_X86EMU_DEBUG_INT10) && CONFIG_X86EMU_DEBUG_INT10
|
||||||
|
debug_flags |= DEBUG_PRINT_INT10;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_X86EMU_DEBUG_INTERRUPTS) && CONFIG_X86EMU_DEBUG_INTERRUPTS
|
||||||
|
debug_flags |= DEBUG_INTR;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_X86EMU_DEBUG_CHECK_VMEM_ACCESS) && CONFIG_X86EMU_DEBUG_CHECK_VMEM_ACCESS
|
||||||
|
debug_flags |= DEBUG_CHECK_VMEM_ACCESS;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_X86EMU_DEBUG_MEM) && CONFIG_X86EMU_DEBUG_MEM
|
||||||
|
debug_flags |= DEBUG_MEM;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_X86EMU_DEBUG_IO) && CONFIG_X86EMU_DEBUG_IO
|
||||||
|
debug_flags |= DEBUG_IO;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* use CONFIG_YABEL_DEBUG_FLAGS, too... */
|
|
||||||
debug_flags |= CONFIG_YABEL_DEBUG_FLAGS;
|
|
||||||
#endif
|
#endif
|
||||||
if (biosmem_size < MIN_REQUIRED_VMEM_SIZE) {
|
if (biosmem_size < MIN_REQUIRED_VMEM_SIZE) {
|
||||||
printf("Error: Not enough virtual memory: %x, required: %x!\n",
|
printf("Error: Not enough virtual memory: %x, required: %x!\n",
|
||||||
|
@ -200,11 +228,11 @@ biosemu(u8 *biosmem, u32 biosmem_size, struct device * dev, unsigned long rom_ad
|
||||||
//TODO: check for further needed EBDA data...
|
//TODO: check for further needed EBDA data...
|
||||||
|
|
||||||
// setup original ROM BIOS Area (F000:xxxx)
|
// setup original ROM BIOS Area (F000:xxxx)
|
||||||
char *date = "06/11/99";
|
const char *date = "06/11/99";
|
||||||
for (i = 0; date[i]; i++)
|
for (i = 0; date[i]; i++)
|
||||||
my_wrb(0xffff5 + i, date[i]);
|
my_wrb(0xffff5 + i, date[i]);
|
||||||
// set up eisa ident string
|
// set up eisa ident string
|
||||||
char *ident = "PCI_ISA";
|
const char *ident = "PCI_ISA";
|
||||||
for (i = 0; ident[i]; i++)
|
for (i = 0; ident[i]; i++)
|
||||||
my_wrb(0xfffd9 + i, ident[i]);
|
my_wrb(0xfffd9 + i, ident[i]);
|
||||||
|
|
||||||
|
@ -250,14 +278,14 @@ biosemu(u8 *biosmem, u32 biosmem_size, struct device * dev, unsigned long rom_ad
|
||||||
// push a HLT instruction and a pointer to it onto the stack
|
// push a HLT instruction and a pointer to it onto the stack
|
||||||
// any return will pop the pointer and jump to the HLT, thus
|
// any return will pop the pointer and jump to the HLT, thus
|
||||||
// exiting (more or less) cleanly
|
// exiting (more or less) cleanly
|
||||||
push_word(0xf4f4); //F4=HLT
|
push_word(0xf4f4); // F4=HLT
|
||||||
push_word(M.x86.R_SS);
|
push_word(M.x86.R_SS);
|
||||||
push_word(M.x86.R_SP + 2);
|
push_word(M.x86.R_SP + 2);
|
||||||
|
|
||||||
CHECK_DBG(DEBUG_TRACE_X86EMU) {
|
CHECK_DBG(DEBUG_TRACE_X86EMU) {
|
||||||
X86EMU_trace_on();
|
X86EMU_trace_on();
|
||||||
|
#if 0
|
||||||
} else {
|
} else {
|
||||||
#ifdef DEBUG
|
|
||||||
M.x86.debug |= DEBUG_SAVE_IP_CS_F;
|
M.x86.debug |= DEBUG_SAVE_IP_CS_F;
|
||||||
M.x86.debug |= DEBUG_DECODE_F;
|
M.x86.debug |= DEBUG_DECODE_F;
|
||||||
M.x86.debug |= DEBUG_DECODE_NOPRINT_F;
|
M.x86.debug |= DEBUG_DECODE_NOPRINT_F;
|
||||||
|
@ -268,7 +296,7 @@ biosemu(u8 *biosmem, u32 biosmem_size, struct device * dev, unsigned long rom_ad
|
||||||
M.x86.debug |= DEBUG_TRACEJMP_REGS_F;
|
M.x86.debug |= DEBUG_TRACEJMP_REGS_F;
|
||||||
M.x86.debug |= DEBUG_TRACECALL_F;
|
M.x86.debug |= DEBUG_TRACECALL_F;
|
||||||
M.x86.debug |= DEBUG_TRACECALL_REGS_F;
|
M.x86.debug |= DEBUG_TRACECALL_REGS_F;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG_PRINTF("Executing Initialization Vector...\n");
|
DEBUG_PRINTF("Executing Initialization Vector...\n");
|
||||||
X86EMU_exec();
|
X86EMU_exec();
|
||||||
|
@ -278,7 +306,7 @@ biosemu(u8 *biosmem, u32 biosmem_size, struct device * dev, unsigned long rom_ad
|
||||||
* some boot device status in AX (see PNP BIOS Spec Section 3.3
|
* some boot device status in AX (see PNP BIOS Spec Section 3.3
|
||||||
*/
|
*/
|
||||||
DEBUG_PRINTF_CS_IP("Option ROM Exit Status: %04x\n", M.x86.R_AX);
|
DEBUG_PRINTF_CS_IP("Option ROM Exit Status: %04x\n", M.x86.R_AX);
|
||||||
#ifdef DEBUG
|
#if defined(CONFIG_X86EMU_DEBUG) && CONFIG_X86EMU_DEBUG
|
||||||
DEBUG_PRINTF("Exit Status Decode:\n");
|
DEBUG_PRINTF("Exit Status Decode:\n");
|
||||||
if (M.x86.R_AX & 0x100) { // bit 8
|
if (M.x86.R_AX & 0x100) { // bit 8
|
||||||
DEBUG_PRINTF
|
DEBUG_PRINTF
|
||||||
|
@ -344,14 +372,12 @@ biosemu(u8 *biosmem, u32 biosmem_size, struct device * dev, unsigned long rom_ad
|
||||||
&& (M.x86.R_SP == STACK_START_OFFSET)) {
|
&& (M.x86.R_SP == STACK_START_OFFSET)) {
|
||||||
DEBUG_PRINTF("Stack is clean, initialization successfull!\n");
|
DEBUG_PRINTF("Stack is clean, initialization successfull!\n");
|
||||||
} else {
|
} else {
|
||||||
DEBUG_PRINTF
|
printf("Stack unclean, initialization probably NOT COMPLETE!\n");
|
||||||
("Stack unclean, initialization probably NOT COMPLETE!!\n");
|
|
||||||
DEBUG_PRINTF("SS:SP = %04x:%04x, expected: %04x:%04x\n",
|
DEBUG_PRINTF("SS:SP = %04x:%04x, expected: %04x:%04x\n",
|
||||||
M.x86.R_SS, M.x86.R_SP, STACK_SEGMENT,
|
M.x86.R_SS, M.x86.R_SP, STACK_SEGMENT,
|
||||||
STACK_START_OFFSET);
|
STACK_START_OFFSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO: according to the BIOS Boot Spec initializations may be ended using INT18h and setting
|
// TODO: according to the BIOS Boot Spec initializations may be ended using INT18h and setting
|
||||||
// the status.
|
// the status.
|
||||||
// We need to implement INT18 accordingly, pseudo code is in specsbbs101.pdf page 30
|
// We need to implement INT18 accordingly, pseudo code is in specsbbs101.pdf page 30
|
||||||
|
|
|
@ -46,4 +46,7 @@
|
||||||
typedef int (* yabel_handleIntFunc)(void);
|
typedef int (* yabel_handleIntFunc)(void);
|
||||||
extern yabel_handleIntFunc yabel_intFuncArray[256];
|
extern yabel_handleIntFunc yabel_intFuncArray[256];
|
||||||
|
|
||||||
|
struct device;
|
||||||
|
|
||||||
|
u32 biosemu(u8 *biosmem, u32 biosmem_size, struct device *dev, unsigned long rom_addr);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <device/device.h>
|
#include <device/device.h>
|
||||||
#include "../debug.h"
|
#include "../debug.h"
|
||||||
|
#include "../biosemu.h"
|
||||||
|
|
||||||
#define VMEM_SIZE (1024 * 1024) /* 1 MB */
|
#define VMEM_SIZE (1024 * 1024) /* 1 MB */
|
||||||
|
|
||||||
|
@ -30,8 +31,6 @@ u8* vmem = (u8 *) (16*1024*1024); /* default to 16MB */
|
||||||
u8* vmem = NULL;
|
u8* vmem = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
u32 biosemu(u8 *biosmem, u32 biosmem_size, struct device *dev,
|
|
||||||
unsigned long rom_addr);
|
|
||||||
#if CONFIG_BOOTSPLASH
|
#if CONFIG_BOOTSPLASH
|
||||||
void vbe_set_graphics(void);
|
void vbe_set_graphics(void);
|
||||||
#endif
|
#endif
|
||||||
|
@ -46,10 +45,10 @@ void run_bios(struct device * dev, unsigned long addr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (vmem != NULL) {
|
if (vmem != NULL) {
|
||||||
printf("Copying legacy memory from 0x%08x to the lower 1MB\n", vmem);
|
printf("Copying legacy memory from %p to the lower 1MB\n", vmem);
|
||||||
memcpy(0x00000, vmem + 0x00000, 0x400); // IVT
|
memcpy((void *)0x00000, vmem + 0x00000, 0x400); // IVT
|
||||||
memcpy(0x00400, vmem + 0x00400, 0x100); // BDA
|
memcpy((void *)0x00400, vmem + 0x00400, 0x100); // BDA
|
||||||
memcpy(0xc0000, vmem + 0xc0000, 0x10000); // VGA OPROM
|
memcpy((void *)0xc0000, vmem + 0xc0000, 0x10000); // VGA OPROM
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,21 +21,18 @@ extern void x86emu_dump_xregs(void);
|
||||||
|
|
||||||
/* printf is not available in coreboot... use printk */
|
/* printf is not available in coreboot... use printk */
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
/* uurgs... yuck... x86emu/x86emu.h is redefining printk... we include it here
|
|
||||||
* and use its redefinition of printk
|
|
||||||
* TODO: FIX!!!! */
|
|
||||||
#include "x86emu/x86emu.h"
|
#include "x86emu/x86emu.h"
|
||||||
#define printf printk
|
#define printf(x...) printk(BIOS_DEBUG, x)
|
||||||
|
|
||||||
/* PH: empty versions of set/clr_ci
|
/* PH: empty versions of set/clr_ci
|
||||||
* TODO: remove! */
|
* TODO: remove! */
|
||||||
static inline void clr_ci(void) {};
|
static inline void clr_ci(void) {};
|
||||||
static inline void set_ci(void) {};
|
static inline void set_ci(void) {};
|
||||||
|
|
||||||
/* Set CONFIG_YABEL_DEBUG_FLAGS is a binary switch that allows you
|
/* debug_flags is a binary switch that allows you to select the following items
|
||||||
* to select the following items to debug. 1=on 0=off. After you
|
* to debug. 1=on 0=off. After you decide what you want to debug create the
|
||||||
* decide what you want to debug create the binary value, convert to hex
|
* binary value, convert to hex and set the option. These options can be
|
||||||
* and set the Option (Ex. CONFIG_YABEL_DEBUG_FLAGS = 0x31FF //Debug All).
|
* selected in Kconfig.
|
||||||
*
|
*
|
||||||
* |-DEBUG_JMP - print info about JMP and RETF opcodes from x86emu
|
* |-DEBUG_JMP - print info about JMP and RETF opcodes from x86emu
|
||||||
* ||-DEBUG_TRACE_X86EMU - print _all_ opcodes that are executed by x86emu (WARNING: this will produce a LOT of output)
|
* ||-DEBUG_TRACE_X86EMU - print _all_ opcodes that are executed by x86emu (WARNING: this will produce a LOT of output)
|
||||||
|
@ -69,9 +66,7 @@ static inline void set_ci(void) {};
|
||||||
// set to enable tracing of JMPs in x86emu
|
// set to enable tracing of JMPs in x86emu
|
||||||
#define DEBUG_JMP 0x2000
|
#define DEBUG_JMP 0x2000
|
||||||
|
|
||||||
//#define DEBUG
|
#if defined(CONFIG_X86EMU_DEBUG) && CONFIG_X86EMU_DEBUG
|
||||||
//#undef DEBUG
|
|
||||||
#ifdef DEBUG
|
|
||||||
|
|
||||||
#define CHECK_DBG(_flag) if (debug_flags & _flag)
|
#define CHECK_DBG(_flag) if (debug_flags & _flag)
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ typedef struct {
|
||||||
#ifdef CONFIG_PCI_OPTION_ROM_RUN_YABEL
|
#ifdef CONFIG_PCI_OPTION_ROM_RUN_YABEL
|
||||||
/* coreboot version */
|
/* coreboot version */
|
||||||
|
|
||||||
void
|
static void
|
||||||
biosemu_dev_get_addr_info(void)
|
biosemu_dev_get_addr_info(void)
|
||||||
{
|
{
|
||||||
int taa_index = 0;
|
int taa_index = 0;
|
||||||
|
@ -112,7 +112,7 @@ biosemu_dev_get_addr_info(void)
|
||||||
}
|
}
|
||||||
// store last entry index of translate_address_array
|
// store last entry index of translate_address_array
|
||||||
taa_last_entry = taa_index - 1;
|
taa_last_entry = taa_index - 1;
|
||||||
#ifdef DEBUG
|
#if defined(CONFIG_X86EMU_DEBUG) && CONFIG_X86EMU_DEBUG
|
||||||
//dump translate_address_array
|
//dump translate_address_array
|
||||||
printf("translate_address_array: \n");
|
printf("translate_address_array: \n");
|
||||||
translate_address_t ta;
|
translate_address_t ta;
|
||||||
|
@ -195,7 +195,7 @@ biosemu_dev_get_addr_info(void)
|
||||||
}
|
}
|
||||||
// store last entry index of translate_address_array
|
// store last entry index of translate_address_array
|
||||||
taa_last_entry = taa_index - 1;
|
taa_last_entry = taa_index - 1;
|
||||||
#ifdef DEBUG
|
#if defined(CONFIG_X86EMU_DEBUG) && CONFIG_X86EMU_DEBUG
|
||||||
//dump translate_address_array
|
//dump translate_address_array
|
||||||
printf("translate_address_array: \n");
|
printf("translate_address_array: \n");
|
||||||
translate_address_t ta;
|
translate_address_t ta;
|
||||||
|
@ -210,11 +210,12 @@ biosemu_dev_get_addr_info(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_PCI_OPTION_ROM_RUN_YABEL
|
||||||
// to simulate accesses to legacy VGA Memory (0xA0000-0xBFFFF)
|
// to simulate accesses to legacy VGA Memory (0xA0000-0xBFFFF)
|
||||||
// we look for the first prefetchable memory BAR, if no prefetchable BAR found,
|
// we look for the first prefetchable memory BAR, if no prefetchable BAR found,
|
||||||
// we use the first memory BAR
|
// we use the first memory BAR
|
||||||
// dev_translate_addr will translate accesses to the legacy VGA Memory into the found vmem BAR
|
// dev_translate_addr will translate accesses to the legacy VGA Memory into the found vmem BAR
|
||||||
void
|
static void
|
||||||
biosemu_dev_find_vmem_addr(void)
|
biosemu_dev_find_vmem_addr(void)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
@ -257,7 +258,6 @@ biosemu_dev_find_vmem_addr(void)
|
||||||
//bios_device.vmem_size = 0;
|
//bios_device.vmem_size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_PCI_OPTION_ROM_RUN_YABEL
|
|
||||||
void
|
void
|
||||||
biosemu_dev_get_puid(void)
|
biosemu_dev_get_puid(void)
|
||||||
{
|
{
|
||||||
|
@ -267,7 +267,7 @@ biosemu_dev_get_puid(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
static void
|
||||||
biosemu_dev_get_device_vendor_id(void)
|
biosemu_dev_get_device_vendor_id(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -334,7 +334,7 @@ biosemu_dev_check_exprom(unsigned long rom_base_addr)
|
||||||
memcpy(&pci_ds, (void *) (rom_base_addr + pci_ds_offset),
|
memcpy(&pci_ds, (void *) (rom_base_addr + pci_ds_offset),
|
||||||
sizeof(pci_ds));
|
sizeof(pci_ds));
|
||||||
clr_ci();
|
clr_ci();
|
||||||
#ifdef DEBUG
|
#if defined(CONFIG_X86EMU_DEBUG) && CONFIG_X86EMU_DEBUG
|
||||||
DEBUG_PRINTF("PCI Data Structure @%lx:\n",
|
DEBUG_PRINTF("PCI Data Structure @%lx:\n",
|
||||||
rom_base_addr + pci_ds_offset);
|
rom_base_addr + pci_ds_offset);
|
||||||
dump((void *) &pci_ds, sizeof(pci_ds));
|
dump((void *) &pci_ds, sizeof(pci_ds));
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
* IBM Corporation - initial implementation
|
* IBM Corporation - initial implementation
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include <types.h>
|
||||||
#include "compat/rtas.h"
|
#include "compat/rtas.h"
|
||||||
|
|
||||||
#include "biosemu.h"
|
#include "biosemu.h"
|
||||||
|
@ -18,6 +19,7 @@
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "pmm.h"
|
#include "pmm.h"
|
||||||
|
#include "interrupt.h"
|
||||||
|
|
||||||
#include <x86emu/x86emu.h>
|
#include <x86emu/x86emu.h>
|
||||||
#include "../x86emu/prim_ops.h"
|
#include "../x86emu/prim_ops.h"
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include <x86emu/x86emu.h>
|
#include <x86emu/x86emu.h>
|
||||||
|
#include "io.h"
|
||||||
|
|
||||||
#ifdef CONFIG_PCI_OPTION_ROM_RUN_YABEL
|
#ifdef CONFIG_PCI_OPTION_ROM_RUN_YABEL
|
||||||
#include <device/pci.h>
|
#include <device/pci.h>
|
||||||
|
@ -87,10 +88,7 @@ u8 my_inb(X86EMU_pioAddr addr)
|
||||||
u8 val;
|
u8 val;
|
||||||
|
|
||||||
val = inb(addr);
|
val = inb(addr);
|
||||||
#ifdef CONFIG_DEBUG
|
DEBUG_PRINTF_IO("inb(0x%04x) = 0x%02x\n", addr, val);
|
||||||
if ((debug_flags & DEBUG_IO) && (addr != 0x40))
|
|
||||||
printk("inb(0x%04x) = 0x%02x\n", addr, val);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
@ -100,11 +98,8 @@ u16 my_inw(X86EMU_pioAddr addr)
|
||||||
u16 val;
|
u16 val;
|
||||||
|
|
||||||
val = inw(addr);
|
val = inw(addr);
|
||||||
|
DEBUG_PRINTF_IO("inw(0x%04x) = 0x%04x\n", addr, val);
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG
|
|
||||||
if (debug_flags & DEBUG_IO)
|
|
||||||
printk("inw(0x%04x) = 0x%04x\n", addr, val);
|
|
||||||
#endif
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,38 +108,26 @@ u32 my_inl(X86EMU_pioAddr addr)
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
val = inl(addr);
|
val = inl(addr);
|
||||||
|
DEBUG_PRINTF_IO("inl(0x%04x) = 0x%08x\n", addr, val);
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG
|
|
||||||
if (debug_flags & DEBUG_IO)
|
|
||||||
printk("inl(0x%04x) = 0x%08x\n", addr, val);
|
|
||||||
#endif
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void my_outb(X86EMU_pioAddr addr, u8 val)
|
void my_outb(X86EMU_pioAddr addr, u8 val)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_DEBUG
|
DEBUG_PRINTF_IO("outb(0x%02x, 0x%04x)\n", val, addr);
|
||||||
if ((debug_flags & DEBUG_IO) && (addr != 0x43))
|
|
||||||
printk("outb(0x%02x, 0x%04x)\n", val, addr);
|
|
||||||
#endif
|
|
||||||
outb(val, addr);
|
outb(val, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void my_outw(X86EMU_pioAddr addr, u16 val)
|
void my_outw(X86EMU_pioAddr addr, u16 val)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_DEBUG
|
DEBUG_PRINTF_IO("outw(0x%04x, 0x%04x)\n", val, addr);
|
||||||
if (debug_flags & DEBUG_IO)
|
|
||||||
printk("outw(0x%04x, 0x%04x)\n", val, addr);
|
|
||||||
#endif
|
|
||||||
outw(val, addr);
|
outw(val, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void my_outl(X86EMU_pioAddr addr, u32 val)
|
void my_outl(X86EMU_pioAddr addr, u32 val)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_DEBUG
|
DEBUG_PRINTF_IO("outl(0x%08x, 0x%04x)\n", val, addr);
|
||||||
if (debug_flags & DEBUG_IO)
|
|
||||||
printk("outl(0x%08x, 0x%04x)\n", val, addr);
|
|
||||||
#endif
|
|
||||||
outl(val, addr);
|
outl(val, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,10 +16,11 @@
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
#include "x86emu/x86emu.h"
|
#include "x86emu/x86emu.h"
|
||||||
#include "biosemu.h"
|
#include "biosemu.h"
|
||||||
|
#include "mem.h"
|
||||||
#include "compat/time.h"
|
#include "compat/time.h"
|
||||||
|
|
||||||
// define a check for access to certain (virtual) memory regions (interrupt handlers, BIOS Data Area, ...)
|
// define a check for access to certain (virtual) memory regions (interrupt handlers, BIOS Data Area, ...)
|
||||||
#ifdef DEBUG
|
#if CONFIG_X86EMU_DEBUG
|
||||||
static u8 in_check = 0; // to avoid recursion...
|
static u8 in_check = 0; // to avoid recursion...
|
||||||
u16 ebda_segment;
|
u16 ebda_segment;
|
||||||
u32 ebda_size;
|
u32 ebda_size;
|
||||||
|
@ -27,11 +28,6 @@ u32 ebda_size;
|
||||||
//TODO: these macros have grown so large, that they should be changed to an inline function,
|
//TODO: these macros have grown so large, that they should be changed to an inline function,
|
||||||
//just for the sake of readability...
|
//just for the sake of readability...
|
||||||
|
|
||||||
//declare prototypes of the functions to follow, for use in DEBUG_CHECK_VMEM_ACCESS
|
|
||||||
u8 my_rdb(u32);
|
|
||||||
u16 my_rdw(u32);
|
|
||||||
u32 my_rdl(u32);
|
|
||||||
|
|
||||||
#define DEBUG_CHECK_VMEM_READ(_addr, _rval) \
|
#define DEBUG_CHECK_VMEM_READ(_addr, _rval) \
|
||||||
if ((debug_flags & DEBUG_CHECK_VMEM_ACCESS) && (in_check == 0)) { \
|
if ((debug_flags & DEBUG_CHECK_VMEM_ACCESS) && (in_check == 0)) { \
|
||||||
in_check = 1; \
|
in_check = 1; \
|
||||||
|
|
|
@ -154,7 +154,7 @@ vbe_prepare(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// VBE Function 00h
|
// VBE Function 00h
|
||||||
u8
|
static u8
|
||||||
vbe_info(vbe_info_t * info)
|
vbe_info(vbe_info_t * info)
|
||||||
{
|
{
|
||||||
vbe_prepare();
|
vbe_prepare();
|
||||||
|
@ -223,7 +223,7 @@ vbe_info(vbe_info_t * info)
|
||||||
}
|
}
|
||||||
|
|
||||||
// VBE Function 01h
|
// VBE Function 01h
|
||||||
u8
|
static u8
|
||||||
vbe_get_mode_info(vbe_mode_info_t * mode_info)
|
vbe_get_mode_info(vbe_mode_info_t * mode_info)
|
||||||
{
|
{
|
||||||
vbe_prepare();
|
vbe_prepare();
|
||||||
|
@ -264,7 +264,7 @@ vbe_get_mode_info(vbe_mode_info_t * mode_info)
|
||||||
}
|
}
|
||||||
|
|
||||||
// VBE Function 02h
|
// VBE Function 02h
|
||||||
u8
|
static u8
|
||||||
vbe_set_mode(vbe_mode_info_t * mode_info)
|
vbe_set_mode(vbe_mode_info_t * mode_info)
|
||||||
{
|
{
|
||||||
vbe_prepare();
|
vbe_prepare();
|
||||||
|
@ -301,7 +301,7 @@ vbe_set_mode(vbe_mode_info_t * mode_info)
|
||||||
}
|
}
|
||||||
|
|
||||||
//VBE Function 08h
|
//VBE Function 08h
|
||||||
u8
|
static u8
|
||||||
vbe_set_palette_format(u8 format)
|
vbe_set_palette_format(u8 format)
|
||||||
{
|
{
|
||||||
vbe_prepare();
|
vbe_prepare();
|
||||||
|
@ -337,7 +337,7 @@ vbe_set_palette_format(u8 format)
|
||||||
}
|
}
|
||||||
|
|
||||||
// VBE Function 09h
|
// VBE Function 09h
|
||||||
u8
|
static u8
|
||||||
vbe_set_color(u16 color_number, u32 color_value)
|
vbe_set_color(u16 color_number, u32 color_value)
|
||||||
{
|
{
|
||||||
vbe_prepare();
|
vbe_prepare();
|
||||||
|
@ -379,7 +379,7 @@ vbe_set_color(u16 color_number, u32 color_value)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8
|
static u8
|
||||||
vbe_get_color(u16 color_number, u32 * color_value)
|
vbe_get_color(u16 color_number, u32 * color_value)
|
||||||
{
|
{
|
||||||
vbe_prepare();
|
vbe_prepare();
|
||||||
|
@ -422,7 +422,7 @@ vbe_get_color(u16 color_number, u32 * color_value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// VBE Function 15h
|
// VBE Function 15h
|
||||||
u8
|
static u8
|
||||||
vbe_get_ddc_info(vbe_ddc_info_t * ddc_info)
|
vbe_get_ddc_info(vbe_ddc_info_t * ddc_info)
|
||||||
{
|
{
|
||||||
vbe_prepare();
|
vbe_prepare();
|
||||||
|
@ -496,7 +496,7 @@ vbe_get_ddc_info(vbe_ddc_info_t * ddc_info)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32
|
static u32
|
||||||
vbe_get_info(void)
|
vbe_get_info(void)
|
||||||
{
|
{
|
||||||
u8 rval;
|
u8 rval;
|
||||||
|
@ -571,7 +571,7 @@ vbe_get_info(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (*((u64 *) ddc_info.edid_block_zero) !=
|
if (*((u64 *) ddc_info.edid_block_zero) !=
|
||||||
(u64) 0x00FFFFFFFFFFFF00) {
|
(u64) 0x00FFFFFFFFFFFF00ULL) {
|
||||||
// invalid EDID signature... probably no monitor
|
// invalid EDID signature... probably no monitor
|
||||||
|
|
||||||
output->display_type = 0x0;
|
output->display_type = 0x0;
|
||||||
|
@ -599,36 +599,36 @@ vbe_get_info(void)
|
||||||
|
|
||||||
DEBUG_PRINTF_VBE("Video Mode 0x%04x available, %s\n",
|
DEBUG_PRINTF_VBE("Video Mode 0x%04x available, %s\n",
|
||||||
mode_info.video_mode,
|
mode_info.video_mode,
|
||||||
(mode_info.attributes & 0x1) ==
|
(le16_to_cpu(mode_info.vesa.mode_attributes) & 0x1) ==
|
||||||
0 ? "not supported" : "supported");
|
0 ? "not supported" : "supported");
|
||||||
DEBUG_PRINTF_VBE("\tTTY: %s\n",
|
DEBUG_PRINTF_VBE("\tTTY: %s\n",
|
||||||
(mode_info.attributes & 0x4) ==
|
(le16_to_cpu(mode_info.vesa.mode_attributes) & 0x4) ==
|
||||||
0 ? "no" : "yes");
|
0 ? "no" : "yes");
|
||||||
DEBUG_PRINTF_VBE("\tMode: %s %s\n",
|
DEBUG_PRINTF_VBE("\tMode: %s %s\n",
|
||||||
(mode_info.attributes & 0x8) ==
|
(le16_to_cpu(mode_info.vesa.mode_attributes) & 0x8) ==
|
||||||
0 ? "monochrome" : "color",
|
0 ? "monochrome" : "color",
|
||||||
(mode_info.attributes & 0x10) ==
|
(le16_to_cpu(mode_info.vesa.mode_attributes) & 0x10) ==
|
||||||
0 ? "text" : "graphics");
|
0 ? "text" : "graphics");
|
||||||
DEBUG_PRINTF_VBE("\tVGA: %s\n",
|
DEBUG_PRINTF_VBE("\tVGA: %s\n",
|
||||||
(mode_info.attributes & 0x20) ==
|
(le16_to_cpu(mode_info.vesa.mode_attributes) & 0x20) ==
|
||||||
0 ? "compatible" : "not compatible");
|
0 ? "compatible" : "not compatible");
|
||||||
DEBUG_PRINTF_VBE("\tWindowed Mode: %s\n",
|
DEBUG_PRINTF_VBE("\tWindowed Mode: %s\n",
|
||||||
(mode_info.attributes & 0x40) ==
|
(le16_to_cpu(mode_info.vesa.mode_attributes) & 0x40) ==
|
||||||
0 ? "yes" : "no");
|
0 ? "yes" : "no");
|
||||||
DEBUG_PRINTF_VBE("\tFramebuffer: %s\n",
|
DEBUG_PRINTF_VBE("\tFramebuffer: %s\n",
|
||||||
(mode_info.attributes & 0x80) ==
|
(le16_to_cpu(mode_info.vesa.mode_attributes) & 0x80) ==
|
||||||
0 ? "no" : "yes");
|
0 ? "no" : "yes");
|
||||||
DEBUG_PRINTF_VBE("\tResolution: %dx%d\n",
|
DEBUG_PRINTF_VBE("\tResolution: %dx%d\n",
|
||||||
mode_info.x_resolution,
|
le16_to_cpu(mode_info.vesa.x_resolution),
|
||||||
mode_info.y_resolution);
|
le16_to_cpu(mode_info.vesa.y_resolution));
|
||||||
DEBUG_PRINTF_VBE("\tChar Size: %dx%d\n",
|
DEBUG_PRINTF_VBE("\tChar Size: %dx%d\n",
|
||||||
mode_info.x_charsize, mode_info.y_charsize);
|
mode_info.vesa.x_charsize, mode_info.vesa.y_charsize);
|
||||||
DEBUG_PRINTF_VBE("\tColor Depth: %dbpp\n",
|
DEBUG_PRINTF_VBE("\tColor Depth: %dbpp\n",
|
||||||
mode_info.bits_per_pixel);
|
mode_info.vesa.bits_per_pixel);
|
||||||
DEBUG_PRINTF_VBE("\tMemory Model: 0x%x\n",
|
DEBUG_PRINTF_VBE("\tMemory Model: 0x%x\n",
|
||||||
mode_info.memory_model);
|
mode_info.vesa.memory_model);
|
||||||
DEBUG_PRINTF_VBE("\tFramebuffer Offset: %08x\n",
|
DEBUG_PRINTF_VBE("\tFramebuffer Offset: %08x\n",
|
||||||
mode_info.framebuffer_address);
|
le32_to_cpu(mode_info.vesa.phys_base_ptr));
|
||||||
|
|
||||||
if ((mode_info.vesa.bits_per_pixel == input.color_depth)
|
if ((mode_info.vesa.bits_per_pixel == input.color_depth)
|
||||||
&& (le16_to_cpu(mode_info.vesa.x_resolution) <= input.max_screen_width)
|
&& (le16_to_cpu(mode_info.vesa.x_resolution) <= input.max_screen_width)
|
||||||
|
@ -647,10 +647,10 @@ vbe_get_info(void)
|
||||||
DEBUG_PRINTF_VBE
|
DEBUG_PRINTF_VBE
|
||||||
("Best Video Mode found: 0x%x, %dx%d, %dbpp, framebuffer_address: 0x%x\n",
|
("Best Video Mode found: 0x%x, %dx%d, %dbpp, framebuffer_address: 0x%x\n",
|
||||||
best_mode_info.video_mode,
|
best_mode_info.video_mode,
|
||||||
best_mode_info.x_resolution,
|
best_mode_info.vesa.x_resolution,
|
||||||
best_mode_info.y_resolution,
|
best_mode_info.vesa.y_resolution,
|
||||||
best_mode_info.bits_per_pixel,
|
best_mode_info.vesa.bits_per_pixel,
|
||||||
best_mode_info.framebuffer_address);
|
le32_to_cpu(best_mode_info.vesa.phys_base_ptr));
|
||||||
|
|
||||||
//printf("Mode Info Dump:");
|
//printf("Mode Info Dump:");
|
||||||
//dump(best_mode_info.mode_info_block, 64);
|
//dump(best_mode_info.mode_info_block, 64);
|
||||||
|
|
Loading…
Reference in New Issue