#include "config.h" // CONFIG_
#include "biosvar.h" // SET_BDA
-struct mode
+static struct mode
{
u16 mode;
u16 width;
u16 height;
u8 depth;
-} vbe_modes[] VAR16 = {
+} bochsvga_modes[] VAR16 = {
/* standard modes */
{ 0x100, 640, 400, 8 },
{ 0x101, 640, 480, 8 },
/* Called only during POST */
int
-vbe_init(u8 bus, u8 devfn)
+bochsvga_init(u8 bus, u8 devfn)
{
u32 lfb_addr;
}
int
-vbe_enabled(void)
+bochsvga_enabled(void)
{
return GET_BDA(vbe_flag);
}
u16
-vbe_total_mem(void)
+bochsvga_total_mem(void)
{
return dispi_read(VBE_DISPI_INDEX_VIDEO_MEMORY_64K);
}
{
struct mode *m;
- for (m = vbe_modes; GET_GLOBAL(m->mode); m++) {
+ for (m = bochsvga_modes; GET_GLOBAL(m->mode); m++) {
if (GET_GLOBAL(m->mode) == mode)
return m;
}
{
u16 max_xres = dispi_get_max_xres();
u16 max_bpp = dispi_get_max_bpp();
- u32 max_mem = vbe_total_mem() * 64 * 1024;
+ u32 max_mem = bochsvga_total_mem() * 64 * 1024;
u32 mem = GET_GLOBAL(m->width) * GET_GLOBAL(m->height) *
BYTES_PER_PIXEL(m);
}
int
-vbe_list_modes(u16 seg, u16 ptr)
+bochsvga_list_modes(u16 seg, u16 ptr)
{
int count = 0;
u16 *dest = (u16 *)(u32)ptr;
struct mode *m;
- for (m = vbe_modes; GET_GLOBAL(m->mode); m++) {
+ for (m = bochsvga_modes; GET_GLOBAL(m->mode); m++) {
if (!mode_valid(m))
continue;
}
int
-vbe_mode_info(u16 mode, struct vbe_modeinfo *info)
+bochsvga_mode_info(u16 mode, struct vbe_modeinfo *info)
{
struct mode *m;
info->linesize = info->width * ((info->depth + 7) / 8);
info->phys_base = GET_GLOBAL(pci_lfb_addr);
- info->vram_size = vbe_total_mem() * 64 * 1024;
+ info->vram_size = bochsvga_total_mem() * 64 * 1024;
return 0;
}
void
-vbe_hires_enable(int enable)
+bochsvga_hires_enable(int enable)
{
u16 flags = enable ?
VBE_DISPI_ENABLED |
}
void
-vbe_set_mode(u16 mode, struct vbe_modeinfo *info)
+bochsvga_set_mode(u16 mode, struct vbe_modeinfo *info)
{
if (info->depth == 4)
vga_set_mode(0x6a, 0);
}
void
-vbe_clear_scr(void)
+bochsvga_clear_scr(void)
{
u16 en;
}
int
-vbe_hires_enabled(void)
+bochsvga_hires_enabled(void)
{
return dispi_read(VBE_DISPI_INDEX_ENABLE) & VBE_DISPI_ENABLED;
}
u16
-vbe_curr_mode(void)
+bochsvga_curr_mode(void)
{
return GET_BDA(vbe_mode);
}
-
outw(val, VBE_DISPI_IOPORT_DATA);
}
+int bochsvga_init(u8 bus, u8 devfn);
+int bochsvga_enabled(void);
+u16 bochsvga_total_mem(void);
+int bochsvga_list_modes(u16 seg, u16 ptr);
+struct vbe_modeinfo;
+int bochsvga_mode_info(u16 mode, struct vbe_modeinfo *info);
+void bochsvga_hires_enable(int enable);
+void bochsvga_set_mode(u16 mode, struct vbe_modeinfo *info);
+void bochsvga_clear_scr(void);
+int bochsvga_hires_enabled(void);
+u16 bochsvga_curr_mode(void);
+
#endif
#include "vgatables.h" // find_vga_entry
#include "optionroms.h" // struct pci_data
#include "config.h" // CONFIG_*
-#include "vbe.h" // vbe_*
+#include "vbe.h" // struct vbe_info
#include "geodelx.h" // geodelx_init
+#include "bochsvga.h" // bochsvga_init
// XXX
#define DEBUG_VGA_POST 1
return;
}
- if (vbe_enabled())
- vbe_hires_enable(0);
+ if (bochsvga_enabled())
+ bochsvga_hires_enable(0);
vga_set_mode(mode, noclearmem);
}
SET_FARVAR(seg, info->video_mode, SEGOFF(seg, regs->di + 34));
/* Total memory (in 64 blocks) */
- SET_FARVAR(seg, info->total_memory, vbe_total_mem());
+ SET_FARVAR(seg, info->total_memory, bochsvga_total_mem());
SET_FARVAR(seg, info->oem_vendor_string,
SEGOFF(get_global_seg(), (u32)VBE_VENDOR_STRING));
SEGOFF(get_global_seg(), (u32)VBE_REVISION_STRING));
/* Fill list of modes */
- vbe_list_modes(seg, regs->di + 32);
+ bochsvga_list_modes(seg, regs->di + 32);
regs->al = regs->ah; /* 0x4F, Function supported */
regs->ah = 0x0; /* 0x0, Function call successful */
dprintf(1, "VBE mode info request: %x\n", mode);
- rc = vbe_mode_info(mode, &modeinfo);
+ rc = bochsvga_mode_info(mode, &modeinfo);
if (rc) {
dprintf(1, "VBE mode %x not found\n", mode);
regs->ax = 0x100;
if (mode < 0x100) { /* VGA */
dprintf(1, "set VGA mode %x\n", mode);
- vbe_hires_enable(0);
+ bochsvga_hires_enable(0);
vga_set_mode(mode, 0);
} else { /* VBE */
- rc = vbe_mode_info(mode & 0x1ff, &modeinfo);
+ rc = bochsvga_mode_info(mode & 0x1ff, &modeinfo);
if (rc) {
dprintf(1, "VBE mode %x not found\n", mode & 0x1ff);
regs->ax = 0x100;
return;
}
- vbe_hires_enable(1);
- vbe_set_mode(mode & 0x1ff, &modeinfo);
+ bochsvga_hires_enable(1);
+ bochsvga_set_mode(mode & 0x1ff, &modeinfo);
if (mode & 0x4000) {
/* Linear frame buffer */
/* XXX: ??? */
}
if (!(mode & 0x8000)) {
- vbe_clear_scr();
+ bochsvga_clear_scr();
}
}
static void
handle_104f03(struct bregs *regs)
{
- if (!vbe_hires_enabled()) {
+ if (!bochsvga_hires_enabled()) {
regs->bx = GET_BDA(video_mode);
} else {
- regs->bx = vbe_curr_mode();
+ regs->bx = bochsvga_curr_mode();
}
dprintf(1, "VBE current mode=%x\n", regs->bx);
static void
handle_104f(struct bregs *regs)
{
- if (!vbe_enabled()) {
+ if (!bochsvga_enabled()) {
handle_104fXX(regs);
return;
}
init_bios_area();
- vbe_init(regs->ah, regs->al);
+ bochsvga_init(regs->ah, regs->al);
extern void entry_10(void);
SET_IVT(0x10, SEGOFF(get_global_seg(), (u32)entry_10));