01ce601bdb
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
113 lines
2.8 KiB
C
113 lines
2.8 KiB
C
/****************************************************************************
|
|
* YABEL BIOS Emulator
|
|
*
|
|
* This program and the accompanying materials
|
|
* are made available under the terms of the BSD License
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.opensource.org/licenses/bsd-license.php
|
|
*
|
|
* Copyright (c) 2008 Pattrick Hueper <phueper@hueper.net>
|
|
****************************************************************************/
|
|
|
|
/* this file contains functions provided by SLOF, that the current biosemu implementation needs
|
|
* they should go away inthe future...
|
|
*/
|
|
|
|
#include <types.h>
|
|
#include <string.h>
|
|
#include <device/device.h>
|
|
#include "../debug.h"
|
|
#include "../biosemu.h"
|
|
|
|
#define VMEM_SIZE (1024 * 1024) /* 1 MB */
|
|
|
|
#if !defined(CONFIG_YABEL_DIRECTHW) || (!CONFIG_YABEL_DIRECTHW)
|
|
#ifdef CONFIG_YABEL_VIRTMEM_LOCATION
|
|
u8* vmem = (u8 *) CONFIG_YABEL_VIRTMEM_LOCATION;
|
|
#else
|
|
u8* vmem = (u8 *) (16*1024*1024); /* default to 16MB */
|
|
#endif
|
|
#else
|
|
u8* vmem = NULL;
|
|
#endif
|
|
|
|
#if CONFIG_BOOTSPLASH
|
|
void vbe_set_graphics(void);
|
|
#endif
|
|
|
|
void run_bios(struct device * dev, unsigned long addr)
|
|
{
|
|
|
|
biosemu(vmem, VMEM_SIZE, dev, addr);
|
|
|
|
#if CONFIG_BOOTSPLASH
|
|
vbe_set_graphics();
|
|
#endif
|
|
|
|
if (vmem != NULL) {
|
|
printf("Copying legacy memory from %p to the lower 1MB\n", vmem);
|
|
memcpy((void *)0x00000, vmem + 0x00000, 0x400); // IVT
|
|
memcpy((void *)0x00400, vmem + 0x00400, 0x100); // BDA
|
|
memcpy((void *)0xc0000, vmem + 0xc0000, 0x10000); // VGA OPROM
|
|
}
|
|
}
|
|
|
|
u64 get_time(void)
|
|
{
|
|
u64 act;
|
|
u32 eax, edx;
|
|
|
|
__asm__ __volatile__(
|
|
"rdtsc"
|
|
: "=a"(eax), "=d"(edx)
|
|
: /* no inputs, no clobber */);
|
|
act = ((u64) edx << 32) | eax;
|
|
return act;
|
|
}
|
|
|
|
unsigned int
|
|
read_io(void *addr, size_t sz)
|
|
{
|
|
unsigned int ret;
|
|
/* since we are using inb instructions, we need the port number as 16bit value */
|
|
u16 port = (u16)(u32) addr;
|
|
|
|
switch (sz) {
|
|
case 1:
|
|
asm volatile ("inb %1, %b0" : "=a"(ret) : "d" (port));
|
|
break;
|
|
case 2:
|
|
asm volatile ("inw %1, %w0" : "=a"(ret) : "d" (port));
|
|
break;
|
|
case 4:
|
|
asm volatile ("inl %1, %0" : "=a"(ret) : "d" (port));
|
|
break;
|
|
default:
|
|
ret = 0;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
write_io(void *addr, unsigned int value, size_t sz)
|
|
{
|
|
u16 port = (u16)(u32) addr;
|
|
switch (sz) {
|
|
/* since we are using inb instructions, we need the port number as 16bit value */
|
|
case 1:
|
|
asm volatile ("outb %b0, %1" : : "a"(value), "d" (port));
|
|
break;
|
|
case 2:
|
|
asm volatile ("outw %w0, %1" : : "a"(value), "d" (port));
|
|
break;
|
|
case 4:
|
|
asm volatile ("outl %0, %1" : : "a"(value), "d" (port));
|
|
break;
|
|
default:
|
|
return -1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|