41 #define PTR_TO_REAL_MODE(sym)\
42 (void *)(REALMODE_BASE + ((char *)&(sym) - (char *)&__realmode_code))
67 const char date[] =
"06/11/99";
68 memcpy((
void *)0xffff5, &date, 8);
70 const char ident[] =
"PCI_ISA";
71 memcpy((
void *)0xfffd9, &ident, 7);
74 write8((
void *)0xffffe, 0xfc);
132 for (i = 0; i < 0x10; i++)
136 for (i = 0x10; i < 0x100; i++)
170 unsigned char *codeptr;
171 codeptr = (
unsigned char *) target;
184 for (i = 0; i < 256; i++) {
214 #if CONFIG(FRAMEBUFFER_SET_VESA_MODE)
216 static int mode_info_valid;
220 if (!mode_info_valid || !mode_info.
vesa.phys_base_ptr)
225 static int vbe_check_for_failure(
int ah);
227 static u8 vbe_get_ctrl_info(vbe_info_block *
info)
230 u16 buffer_seg = (((
unsigned long)
buffer) >> 4) & 0xff00;
231 u16 buffer_adr = ((
unsigned long)
buffer) & 0xffff;
233 0x0000, buffer_seg, buffer_adr);
243 static void vbe_oprom_list_supported_mode(
uint16_t *video_mode_ptr)
248 mode = *video_mode_ptr++;
251 }
while (mode != 0xffff);
254 static u8 vbe_oprom_supported_mode_list(
void)
259 if (vbe_get_ctrl_info(&
info))
263 segment =
info.video_mode_ptr >> 16;
265 vbe_oprom_list_supported_mode((
uint16_t *)((segment << 4) +
offset));
282 static int vbe_check_for_failure(
int ah)
301 CONFIG_FRAMEBUFFER_VESA_MODE);
302 if (vbe_oprom_supported_mode_list())
315 u16 buffer_seg = (((
unsigned long)
buffer) >> 4) & 0xff00;
316 u16 buffer_adr = ((
unsigned long)
buffer) & 0xffff;
318 mi->
video_mode, 0x0000, buffer_seg, buffer_adr);
319 if (vbe_check_for_failure(
X86_AH)) {
336 0x0000, 0x0000, 0x0000, 0x0000);
337 if (vbe_check_for_failure(
X86_AH)) {
349 mode_info.
video_mode = (1 << 14) | CONFIG_FRAMEBUFFER_VESA_MODE;
350 if (vbe_get_mode_info(&mode_info)) {
354 unsigned char *framebuffer =
355 (
unsigned char *)mode_info.
vesa.phys_base_ptr;
357 le16_to_cpu(mode_info.
vesa.x_resolution),
358 le16_to_cpu(mode_info.
vesa.y_resolution),
359 mode_info.
vesa.bits_per_pixel);
368 if (vbe_set_mode(&mode_info)) {
374 .x_resolution = le16_to_cpu(mode_info.
vesa.x_resolution),
375 .y_resolution = le16_to_cpu(mode_info.
vesa.y_resolution),
376 .bytes_per_line = le16_to_cpu(mode_info.
vesa.bytes_per_scanline),
377 .bits_per_pixel = mode_info.
vesa.bits_per_pixel,
378 .red_mask_pos = mode_info.
vesa.red_mask_pos,
379 .red_mask_size = mode_info.
vesa.red_mask_size,
380 .green_mask_pos = mode_info.
vesa.green_mask_pos,
381 .green_mask_size = mode_info.
vesa.green_mask_size,
382 .blue_mask_pos = mode_info.
vesa.blue_mask_pos,
383 .blue_mask_size = mode_info.
vesa.blue_mask_size,
384 .reserved_mask_pos = mode_info.
vesa.reserved_mask_pos,
385 .reserved_mask_size = mode_info.
vesa.reserved_mask_size,
395 if (mode_info.
vesa.phys_base_ptr) {
398 0x0000, 0x0000, 0x0000);
399 if (!vbe_check_for_failure(
X86_AH))
438 #if CONFIG(FRAMEBUFFER_SET_VESA_MODE)
453 u32 cs_ip,
u16 stackflags);
461 u32 cs_ip,
u16 stackflags)
472 #if CONFIG(REALMODE_DEBUG)
492 M.x86.intno = intnumber;
522 *(
volatile u16 *)&stackflags = flags;
static void write8(void *addr, uint8_t val)
void * memcpy(void *dest, const void *src, size_t n)
@ LB_FB_ORIENTATION_NORMAL
#define printk(level,...)
void delay(unsigned int secs)
static struct smmstore_params_info info
struct fb_info * fb_add_framebuffer_info_ex(const struct lb_framebuffer *fb)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_SPEW
BIOS_SPEW - Excessively verbose output.
#define BIOS_WARNING
BIOS_WARNING - Bad configuration.
#define PCI_CLASS_DISPLAY_VGA
u8 buffer[C2P_BUFFER_MAXSIZE]
DEVTREE_CONST struct bus * bus
lb_uint64_t physical_address
void vbe_textmode_console(void)
const vbe_mode_info_t * vbe_mode_info(void)
Returns the mode_info struct from the vbe context, if initialized.
void vbe_set_graphics(void)
#define VESA_GET_MODE_INFO
void x86_exception(struct eregs *info)
void run_bios(struct device *dev, unsigned long addr)
void mainboard_interrupt_handlers(int intXX, int(*intXX_func)(void))
static int intXX_exception_handler(void)
unsigned int(* realmode_call)(u32 addr, u32 eax, u32 ebx, u32 ecx, u32 edx, u32 esi, u32 edi) asmlinkage
static void setup_realmode_code(void)
#define PTR_TO_REAL_MODE(sym)
unsigned int(* realmode_interrupt)(u32 intno, u32 eax, u32 ebx, u32 ecx, u32 edx, u32 esi, u32 edi) asmlinkage
unsigned char __realmode_interrupt
int asmlinkage interrupt_handler(u32 intnumber, u32 gsfs, u32 dses, u32 edi, u32 esi, u32 ebp, u32 esp, u32 ebx, u32 edx, u32 ecx, u32 eax, u32 cs_ip, u16 stackflags)
static void write_idt_stub(void *target, u8 intnum)
static int intXX_unknown_handler(void)
static int(* intXX_handler[256])(void)
unsigned char __realmode_call
static void setup_rombios(void)
static void setup_realmode_idt(void)
X86EMU_sysEnv _X86EMU_env
static void setup_interrupt_handlers(void)
unsigned char __realmode_buffer
unsigned int __realmode_code_size
unsigned char __realmode_code
unsigned char __idt_handler
unsigned int __idt_handler_size
typedef void(X86APIP X86EMU_intrFuncs)(int num)