aboutsummaryrefslogtreecommitdiffstats
path: root/vgasrc/clext.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2012-01-14 16:59:21 -0500
committerKevin O'Connor <kevin@koconnor.net>2012-01-14 17:20:07 -0500
commit97cc354a0223ad4241e657f69dc13ffed2694ee8 (patch)
treee0f5be587fd9e0613e94e9dc6baf90456ffafb40 /vgasrc/clext.c
parente91ec7c7735eda163efc6ece9ac95e12e8adf497 (diff)
downloadseabios-97cc354a0223ad4241e657f69dc13ffed2694ee8.tar.gz
vgabios: Add cirrus linear framebuffer detection; enable VBE in cirrus.
Extract Cirrus framebuffer address from PCI config space. Enable VBE code for Cirrus cards. Also, rework bochsvga code to use direct PCI accesses instead of calling into the BIOS. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'vgasrc/clext.c')
-rw-r--r--vgasrc/clext.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/vgasrc/clext.c b/vgasrc/clext.c
index 9bd424ef..413add53 100644
--- a/vgasrc/clext.c
+++ b/vgasrc/clext.c
@@ -12,6 +12,8 @@
#include "bregs.h" // struct bregs
#include "vbe.h" // struct vbe_info
#include "stdvga.h" // VGAREG_SEQU_ADDRESS
+#include "pci.h" // pci_config_readl
+#include "pci_regs.h" // PCI_BASE_ADDRESS_0
/****************************************************************
@@ -421,7 +423,7 @@ cirrus_clear_vram(u16 param)
int
clext_set_mode(int mode, int flags)
{
- dprintf(1, "cirrus mode %d\n", mode);
+ dprintf(1, "cirrus mode %x\n", mode);
SET_BDA(vbe_mode, 0);
struct cirrus_mode_s *table_g = cirrus_get_modeentry(mode);
if (table_g) {
@@ -771,6 +773,12 @@ clext_init(void)
return -1;
dprintf(1, "cirrus init 2\n");
+ SET_VGA(VBE_enabled, 1);
+ u32 lfb_addr = 0;
+ if (CONFIG_VGA_PCI)
+ lfb_addr = (pci_config_readl(GET_GLOBAL(VgaBDF), PCI_BASE_ADDRESS_0)
+ & PCI_BASE_ADDRESS_MEM_MASK);
+ SET_VGA(VBE_framebuffer, lfb_addr);
u16 totalmem = cirrus_get_memsize();
SET_VGA(VBE_total_memory, totalmem * 64 * 1024);
SET_VGA(VBE_win_granularity, 16);