projects
/
seabios.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vgabios: Don't call int10 during mode switch.
[seabios.git]
/
vgasrc
/
vgabios.c
diff --git
a/vgasrc/vgabios.c
b/vgasrc/vgabios.c
index 3caff5f804ff43dff935f95f6e043fc1b120c468..4724c4b5b9c9685d5f847a3cb27564b42d20af21 100644
(file)
--- a/
vgasrc/vgabios.c
+++ b/
vgasrc/vgabios.c
@@
-17,7
+17,7
@@
#include "vgabios.h" // find_vga_entry
#include "optionroms.h" // struct pci_data
#include "config.h" // CONFIG_*
#include "vgabios.h" // find_vga_entry
#include "optionroms.h" // struct pci_data
#include "config.h" // CONFIG_*
-#include "stdvga.h" //
vgahw
_screen_disable
+#include "stdvga.h" //
stdvga
_screen_disable
#include "geodelx.h" // geodelx_init
#include "bochsvga.h" // bochsvga_init
#include "geodelx.h" // geodelx_init
#include "bochsvga.h" // bochsvga_init
@@
-46,35
+46,23
@@
struct pci_data rom_pci_data VAR16VISIBLE = {
* Helper functions
****************************************************************/
* Helper functions
****************************************************************/
-static inline void
-call16_vgaint(u32 eax, u32 ebx)
-{
- asm volatile(
- "int $0x10\n"
- "cli\n"
- "cld"
- :
- : "a"(eax), "b"(ebx)
- : "cc", "memory");
-}
-
static void
perform_gray_scale_summing(u16 start, u16 count)
{
static void
perform_gray_scale_summing(u16 start, u16 count)
{
-
vgahw
_screen_disable();
+
stdvga
_screen_disable();
int i;
for (i = start; i < start+count; i++) {
u8 rgb[3];
int i;
for (i = start; i < start+count; i++) {
u8 rgb[3];
-
vgahw
_get_dac_regs(GET_SEG(SS), rgb, i, 1);
+
stdvga
_get_dac_regs(GET_SEG(SS), rgb, i, 1);
// intensity = ( 0.3 * Red ) + ( 0.59 * Green ) + ( 0.11 * Blue )
u16 intensity = ((77 * rgb[0] + 151 * rgb[1] + 28 * rgb[2]) + 0x80) >> 8;
if (intensity > 0x3f)
intensity = 0x3f;
// intensity = ( 0.3 * Red ) + ( 0.59 * Green ) + ( 0.11 * Blue )
u16 intensity = ((77 * rgb[0] + 151 * rgb[1] + 28 * rgb[2]) + 0x80) >> 8;
if (intensity > 0x3f)
intensity = 0x3f;
-
vgahw
_set_dac_regs(GET_SEG(SS), rgb, i, 1);
+
stdvga
_set_dac_regs(GET_SEG(SS), rgb, i, 1);
}
}
-
vgahw
_screen_enable();
+
stdvga
_screen_enable();
}
static void
}
static void
@@
-95,7
+83,7
@@
set_cursor_shape(u8 start, u8 end)
start = ((end + 1) * cheight / 8) - 2;
end = ((end + 1) * cheight / 8) - 1;
}
start = ((end + 1) * cheight / 8) - 2;
end = ((end + 1) * cheight / 8) - 1;
}
-
vgahw
_set_cursor_shape(start, end);
+
stdvga
_set_cursor_shape(start, end);
}
static u16
}
static u16
@@
-130,7
+118,7
@@
set_cursor_pos(struct cursorpos cp)
u16 address = (SCREEN_IO_START(nbcols, nbrows, cp.page)
+ cp.x + cp.y * nbcols);
u16 address = (SCREEN_IO_START(nbcols, nbrows, cp.page)
+ cp.x + cp.y * nbcols);
-
vgahw
_set_cursor_pos(address);
+
stdvga
_set_cursor_pos(address);
}
static struct cursorpos
}
static struct cursorpos
@@
-179,7
+167,7
@@
set_active_page(u8 page)
address = page * GET_GLOBAL(vmode_g->slength);
}
address = page * GET_GLOBAL(vmode_g->slength);
}
-
vgahw
_set_active_page(address);
+
stdvga
_set_active_page(address);
// And change the BIOS page
SET_BDA(video_page, page);
// And change the BIOS page
SET_BDA(video_page, page);
@@
-193,13
+181,13
@@
set_active_page(u8 page)
static void
set_scan_lines(u8 lines)
{
static void
set_scan_lines(u8 lines)
{
-
vgahw
_set_scan_lines(lines);
+
stdvga
_set_scan_lines(lines);
if (lines == 8)
set_cursor_shape(0x06, 0x07);
else
set_cursor_shape(lines - 4, lines - 3);
SET_BDA(char_height, lines);
if (lines == 8)
set_cursor_shape(0x06, 0x07);
else
set_cursor_shape(lines - 4, lines - 3);
SET_BDA(char_height, lines);
- u16 vde =
vgahw
_get_vde();
+ u16 vde =
stdvga
_get_vde();
u8 rows = vde / lines;
SET_BDA(video_rows, rows - 1);
u16 cols = GET_BDA(video_cols);
u8 rows = vde / lines;
SET_BDA(video_rows, rows - 1);
u16 cols = GET_BDA(video_cols);
@@
-376,25
+364,25
@@
vga_set_mode(u8 mode, u8 noclearmem)
// if palette loading (bit 3 of modeset ctl = 0)
if ((modeset_ctl & 0x08) == 0) { // Set the PEL mask
// if palette loading (bit 3 of modeset ctl = 0)
if ((modeset_ctl & 0x08) == 0) { // Set the PEL mask
-
vgahw
_set_pel_mask(GET_GLOBAL(vmode_g->pelmask));
+
stdvga
_set_pel_mask(GET_GLOBAL(vmode_g->pelmask));
// From which palette
u8 *palette_g = GET_GLOBAL(vmode_g->dac);
u16 palsize = GET_GLOBAL(vmode_g->dacsize) / 3;
// Always 256*3 values
// From which palette
u8 *palette_g = GET_GLOBAL(vmode_g->dac);
u16 palsize = GET_GLOBAL(vmode_g->dacsize) / 3;
// Always 256*3 values
-
vgahw
_set_dac_regs(get_global_seg(), palette_g, 0, palsize);
+
stdvga
_set_dac_regs(get_global_seg(), palette_g, 0, palsize);
u16 i;
for (i = palsize; i < 0x0100; i++) {
static u8 rgb[3] VAR16;
u16 i;
for (i = palsize; i < 0x0100; i++) {
static u8 rgb[3] VAR16;
-
vgahw
_set_dac_regs(get_global_seg(), rgb, i, 1);
+
stdvga
_set_dac_regs(get_global_seg(), rgb, i, 1);
}
if ((modeset_ctl & 0x02) == 0x02)
perform_gray_scale_summing(0x00, 0x100);
}
}
if ((modeset_ctl & 0x02) == 0x02)
perform_gray_scale_summing(0x00, 0x100);
}
-
vgahw
_set_mode(vmode_g);
+
stdvga
_set_mode(vmode_g);
if (noclearmem == 0x00)
clear_screen(vmode_g);
if (noclearmem == 0x00)
clear_screen(vmode_g);
@@
-440,8
+428,8
@@
vga_set_mode(u8 mode, u8 noclearmem)
// Write the fonts in memory
if (GET_GLOBAL(vmode_g->memmodel) & TEXT) {
// Write the fonts in memory
if (GET_GLOBAL(vmode_g->memmodel) & TEXT) {
-
call16_vgaint(0x1104, 0
);
-
call16_vgaint(0x1103,
0);
+
stdvga_load_font(get_global_seg(), vgafont16, 0x100, 0, 0, 16
);
+
stdvga_set_text_block_specifier(
0);
}
// Set the ints 0x1F and 0x43
SET_IVT(0x1f, SEGOFF(get_global_seg(), (u32)&vgafont8[128 * 8]));
}
// Set the ints 0x1F and 0x43
SET_IVT(0x1f, SEGOFF(get_global_seg(), (u32)&vgafont8[128 * 8]));
@@
-593,13
+581,13
@@
handle_100a(struct bregs *regs)
static void
handle_100b00(struct bregs *regs)
{
static void
handle_100b00(struct bregs *regs)
{
-
vgahw
_set_border_color(regs->bl);
+
stdvga
_set_border_color(regs->bl);
}
static void
handle_100b01(struct bregs *regs)
{
}
static void
handle_100b01(struct bregs *regs)
{
-
vgahw
_set_palette(regs->bl);
+
stdvga
_set_palette(regs->bl);
}
static void
}
static void
@@
-658,25
+646,25
@@
handle_101000(struct bregs *regs)
{
if (regs->bl > 0x14)
return;
{
if (regs->bl > 0x14)
return;
-
vgahw
_set_single_palette_reg(regs->bl, regs->bh);
+
stdvga
_set_single_palette_reg(regs->bl, regs->bh);
}
static void
handle_101001(struct bregs *regs)
{
}
static void
handle_101001(struct bregs *regs)
{
-
vgahw
_set_overscan_border_color(regs->bh);
+
stdvga
_set_overscan_border_color(regs->bh);
}
static void
handle_101002(struct bregs *regs)
{
}
static void
handle_101002(struct bregs *regs)
{
-
vgahw
_set_all_palette_reg(regs->es, (u8*)(regs->dx + 0));
+
stdvga
_set_all_palette_reg(regs->es, (u8*)(regs->dx + 0));
}
static void
handle_101003(struct bregs *regs)
{
}
static void
handle_101003(struct bregs *regs)
{
-
vgahw
_toggle_intensity(regs->bl);
+
stdvga
_toggle_intensity(regs->bl);
}
static void
}
static void
@@
-684,45
+672,45
@@
handle_101007(struct bregs *regs)
{
if (regs->bl > 0x14)
return;
{
if (regs->bl > 0x14)
return;
- regs->bh =
vgahw
_get_single_palette_reg(regs->bl);
+ regs->bh =
stdvga
_get_single_palette_reg(regs->bl);
}
static void
handle_101008(struct bregs *regs)
{
}
static void
handle_101008(struct bregs *regs)
{
- regs->bh =
vgahw
_get_overscan_border_color();
+ regs->bh =
stdvga
_get_overscan_border_color();
}
static void
handle_101009(struct bregs *regs)
{
}
static void
handle_101009(struct bregs *regs)
{
-
vgahw
_get_all_palette_reg(regs->es, (u8*)(regs->dx + 0));
+
stdvga
_get_all_palette_reg(regs->es, (u8*)(regs->dx + 0));
}
static void noinline
handle_101010(struct bregs *regs)
{
u8 rgb[3] = {regs->dh, regs->ch, regs->cl};
}
static void noinline
handle_101010(struct bregs *regs)
{
u8 rgb[3] = {regs->dh, regs->ch, regs->cl};
-
vgahw
_set_dac_regs(GET_SEG(SS), rgb, regs->bx, 1);
+
stdvga
_set_dac_regs(GET_SEG(SS), rgb, regs->bx, 1);
}
static void
handle_101012(struct bregs *regs)
{
}
static void
handle_101012(struct bregs *regs)
{
-
vgahw
_set_dac_regs(regs->es, (u8*)(regs->dx + 0), regs->bx, regs->cx);
+
stdvga
_set_dac_regs(regs->es, (u8*)(regs->dx + 0), regs->bx, regs->cx);
}
static void
handle_101013(struct bregs *regs)
{
}
static void
handle_101013(struct bregs *regs)
{
-
vgahw
_select_video_dac_color_page(regs->bl, regs->bh);
+
stdvga
_select_video_dac_color_page(regs->bl, regs->bh);
}
static void noinline
handle_101015(struct bregs *regs)
{
u8 rgb[3];
}
static void noinline
handle_101015(struct bregs *regs)
{
u8 rgb[3];
-
vgahw
_get_dac_regs(GET_SEG(SS), rgb, regs->bx, 1);
+
stdvga
_get_dac_regs(GET_SEG(SS), rgb, regs->bx, 1);
regs->dh = rgb[0];
regs->ch = rgb[1];
regs->cl = rgb[2];
regs->dh = rgb[0];
regs->ch = rgb[1];
regs->cl = rgb[2];
@@
-731,25
+719,25
@@
handle_101015(struct bregs *regs)
static void
handle_101017(struct bregs *regs)
{
static void
handle_101017(struct bregs *regs)
{
-
vgahw
_get_dac_regs(regs->es, (u8*)(regs->dx + 0), regs->bx, regs->cx);
+
stdvga
_get_dac_regs(regs->es, (u8*)(regs->dx + 0), regs->bx, regs->cx);
}
static void
handle_101018(struct bregs *regs)
{
}
static void
handle_101018(struct bregs *regs)
{
-
vgahw
_set_pel_mask(regs->bl);
+
stdvga
_set_pel_mask(regs->bl);
}
static void
handle_101019(struct bregs *regs)
{
}
static void
handle_101019(struct bregs *regs)
{
- regs->bl =
vgahw
_get_pel_mask();
+ regs->bl =
stdvga
_get_pel_mask();
}
static void
handle_10101a(struct bregs *regs)
{
}
static void
handle_10101a(struct bregs *regs)
{
-
vgahw
_read_video_dac_state(®s->bl, ®s->bh);
+
stdvga
_read_video_dac_state(®s->bl, ®s->bh);
}
static void
}
static void
@@
-792,60
+780,60
@@
handle_1010(struct bregs *regs)
static void
handle_101100(struct bregs *regs)
{
static void
handle_101100(struct bregs *regs)
{
-
vgafb
_load_font(regs->es, (void*)(regs->bp+0), regs->cx
- , regs->dx, regs->bl, regs->bh);
+
stdvga
_load_font(regs->es, (void*)(regs->bp+0), regs->cx
+
, regs->dx, regs->bl, regs->bh);
}
static void
handle_101101(struct bregs *regs)
{
}
static void
handle_101101(struct bregs *regs)
{
-
vgafb
_load_font(get_global_seg(), vgafont14, 0x100, 0, regs->bl, 14);
+
stdvga
_load_font(get_global_seg(), vgafont14, 0x100, 0, regs->bl, 14);
}
static void
handle_101102(struct bregs *regs)
{
}
static void
handle_101102(struct bregs *regs)
{
-
vgafb
_load_font(get_global_seg(), vgafont8, 0x100, 0, regs->bl, 8);
+
stdvga
_load_font(get_global_seg(), vgafont8, 0x100, 0, regs->bl, 8);
}
static void
handle_101103(struct bregs *regs)
{
}
static void
handle_101103(struct bregs *regs)
{
-
vgahw
_set_text_block_specifier(regs->bl);
+
stdvga
_set_text_block_specifier(regs->bl);
}
static void
handle_101104(struct bregs *regs)
{
}
static void
handle_101104(struct bregs *regs)
{
-
vgafb
_load_font(get_global_seg(), vgafont16, 0x100, 0, regs->bl, 16);
+
stdvga
_load_font(get_global_seg(), vgafont16, 0x100, 0, regs->bl, 16);
}
static void
handle_101110(struct bregs *regs)
{
}
static void
handle_101110(struct bregs *regs)
{
-
vgafb
_load_font(regs->es, (void*)(regs->bp+0), regs->cx
- , regs->dx, regs->bl, regs->bh);
+
stdvga
_load_font(regs->es, (void*)(regs->bp+0), regs->cx
+
, regs->dx, regs->bl, regs->bh);
set_scan_lines(regs->bh);
}
static void
handle_101111(struct bregs *regs)
{
set_scan_lines(regs->bh);
}
static void
handle_101111(struct bregs *regs)
{
-
vgafb
_load_font(get_global_seg(), vgafont14, 0x100, 0, regs->bl, 14);
+
stdvga
_load_font(get_global_seg(), vgafont14, 0x100, 0, regs->bl, 14);
set_scan_lines(14);
}
static void
handle_101112(struct bregs *regs)
{
set_scan_lines(14);
}
static void
handle_101112(struct bregs *regs)
{
-
vgafb
_load_font(get_global_seg(), vgafont8, 0x100, 0, regs->bl, 8);
+
stdvga
_load_font(get_global_seg(), vgafont8, 0x100, 0, regs->bl, 8);
set_scan_lines(8);
}
static void
handle_101114(struct bregs *regs)
{
set_scan_lines(8);
}
static void
handle_101114(struct bregs *regs)
{
-
vgafb
_load_font(get_global_seg(), vgafont16, 0x100, 0, regs->bl, 16);
+
stdvga
_load_font(get_global_seg(), vgafont16, 0x100, 0, regs->bl, 16);
set_scan_lines(16);
}
set_scan_lines(16);
}
@@
-978,7
+966,7
@@
handle_101231(struct bregs *regs)
static void
handle_101232(struct bregs *regs)
{
static void
handle_101232(struct bregs *regs)
{
-
vgahw
_enable_video_addressing(regs->al);
+
stdvga
_enable_video_addressing(regs->al);
regs->al = 0x12;
}
regs->al = 0x12;
}
@@
-1157,7
+1145,7
@@
handle_101c01(struct bregs *regs)
u16 seg = regs->es;
void *data = (void*)(regs->bx+0);
if (flags & 1) {
u16 seg = regs->es;
void *data = (void*)(regs->bx+0);
if (flags & 1) {
-
vgahw
_save_state(seg, data);
+
stdvga
_save_state(seg, data);
data += sizeof(struct saveVideoHardware);
}
if (flags & 2) {
data += sizeof(struct saveVideoHardware);
}
if (flags & 2) {
@@
-1165,7
+1153,7
@@
handle_101c01(struct bregs *regs)
data += sizeof(struct saveBDAstate);
}
if (flags & 4)
data += sizeof(struct saveBDAstate);
}
if (flags & 4)
-
vgahw
_save_dac_state(seg, data);
+
stdvga
_save_dac_state(seg, data);
regs->al = 0x1c;
}
regs->al = 0x1c;
}
@@
-1176,7
+1164,7
@@
handle_101c02(struct bregs *regs)
u16 seg = regs->es;
void *data = (void*)(regs->bx+0);
if (flags & 1) {
u16 seg = regs->es;
void *data = (void*)(regs->bx+0);
if (flags & 1) {
-
vgahw
_restore_state(seg, data);
+
stdvga
_restore_state(seg, data);
data += sizeof(struct saveVideoHardware);
}
if (flags & 2) {
data += sizeof(struct saveVideoHardware);
}
if (flags & 2) {
@@
-1184,7
+1172,7
@@
handle_101c02(struct bregs *regs)
data += sizeof(struct saveBDAstate);
}
if (flags & 4)
data += sizeof(struct saveBDAstate);
}
if (flags & 4)
-
vgahw
_restore_dac_state(seg, data);
+
stdvga
_restore_dac_state(seg, data);
regs->al = 0x1c;
}
regs->al = 0x1c;
}
@@
-1281,7
+1269,7
@@
vga_post(struct bregs *regs)
{
debug_enter(regs, DEBUG_VGA_POST);
{
debug_enter(regs, DEBUG_VGA_POST);
-
vgahw
_init();
+
stdvga
_init();
if (CONFIG_VGA_GEODELX)
geodelx_init();
if (CONFIG_VGA_GEODELX)
geodelx_init();