# HG changeset patch # User nick # Date 1003742924 0 # Node ID ee6ef0b1065522612c2a080a994b21505ca35885 # Parent 8b971caf9e03c0cb00cd09f6232bfb482e27fe21 More iopl'ed ports and test for brken BIOS diff -r 8b971caf9e03 -r ee6ef0b10655 linux/vbelib.c --- a/linux/vbelib.c Mon Oct 22 07:43:32 2001 +0000 +++ b/linux/vbelib.c Mon Oct 22 09:28:44 2001 +0000 @@ -56,14 +56,22 @@ int vbeInit( void ) { + unsigned short iopl_port,int_10_seg; + size_t i; if(!LRMI_init()) return VBE_VM86_FAIL; /* Allow read/write to ALL io ports */ + int_10_seg = *(unsigned short *)PhysToVirtSO(0x0000,0x0042); + /* Video BIOS should be at C000:0000 and above */ + if((int_10_seg >> 12) < 0xC) return VBE_BROKEN_BIOS; ioperm(0, 1024, 1); iopl(3); memset(&vbe_pm_info,0,sizeof(struct VesaProtModeInterface)); vbeGetProtModeInfo(&vbe_pm_info); + i = 0; + while((iopl_port=vbe_pm_info.iopl_ports[i++]) != 0xFFFF) ioperm(iopl_port,1,1); + iopl(3); return VBE_OK; } diff -r 8b971caf9e03 -r ee6ef0b10655 linux/vbelib.h --- a/linux/vbelib.h Mon Oct 22 07:43:32 2001 +0000 +++ b/linux/vbelib.h Mon Oct 22 09:28:44 2001 +0000 @@ -189,6 +189,7 @@ #define VBE_VM86_FAIL -1 #define VBE_OUT_OF_DOS_MEM -2 #define VBE_OUT_OF_MEM -3 +#define VBE_BROKEN_BIOS -4 #define VBE_VESA_ERROR_MASK 0x004f #define VBE_VESA_ERRCODE_MASK 0xff00