xserver/hw/kdrive/vesa vbe.c, 1.15, 1.16 vbe.h, 1.10, 1.11 vesa.c, 1.32, 1.33 vm86.c, 1.9, 1.10 vm86.h, 1.4, 1.5

Keith Packard xserver-commit at pdx.freedesktop.org
Mon Jul 26 10:14:29 PDT 2004


Committed by: keithp

Update of /cvs/xserver/xserver/hw/kdrive/vesa
In directory pdx:/tmp/cvs-serv2204/hw/kdrive/vesa

Modified Files:
	vbe.c vbe.h vesa.c vm86.c vm86.h 
Log Message:
2004-07-26  Keith Packard  <keithp at keithp.com>

	* hw/kdrive/fbdev/fbdev.c: (fbdevModeSupported),
	(fbdevScreenInitialize):
	Eliminate bogus rate check in fbdevModeSupported.
	Hmm.  Potentially bogus rate selection necessary for Mac fbdev

	* hw/kdrive/src/kaa.c: (kaaPixmapSave):
	Don't know about fb changes to pixmaps, so can't track dirt.

	* hw/kdrive/src/kmode.c: (KdFindMode):
	Add Mac specific 1280x854 mode.
	Warn when requested mode isn't found.
	
	* hw/kdrive/vesa/vbe.c: (VbeBoot), (VbeDoInterruptE6):
	* hw/kdrive/vesa/vbe.h:
	* hw/kdrive/vesa/vesa.c: (vesaInitialize), (vesaUseMsg),
	(vesaProcessArgument):
	* hw/kdrive/vesa/vm86.c: (Vm86DoInterrupt), (Vm86DoPOST):
	* hw/kdrive/vesa/vm86.h:
	Add ability to soft-boot video cards.

	* xfixes/region.c: (ProcXFixesExpandRegion),
	(SProcXFixesExpandRegion):
	* xfixes/xfixes.c: (XFixesNumberRequests):
	* xfixes/xfixesint.h:
	Add region expand request.  FIXME: need test cases


Index: vbe.c
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/vesa/vbe.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- vbe.c	15 Oct 2003 01:00:38 -0000	1.15
+++ vbe.c	26 Jul 2004 17:14:26 -0000	1.16
@@ -638,6 +638,20 @@
     return TRUE;
 }
 
+Bool
+VbeBoot(Vm86InfoPtr vi)
+{
+    int	code;
+    int bus = 1;
+    int device = 0;
+    int function = 0;
+
+    vi->vms.regs.eax = (bus << 8) | (device << 3) | (function & 0x7);
+    code = VbeDoInterruptE6 (vi);
+    ErrorF ("Boot: %d\n", code);
+    return TRUE;
+}
+
 int
 VbeDoInterrupt10(Vm86InfoPtr vi)
 {
@@ -677,3 +691,17 @@
     }
     return code;
 }
+
+int
+VbeDoInterruptE6(Vm86InfoPtr vi)
+{
+    int code;
+    int oldax;
+
+    oldax = vi->vms.regs.eax & 0xffff;
+    
+    code = Vm86DoPOST (vi);
+    ErrorF("POST (0x%04X): 0x%04X\n",
+	   oldax, vi->vms.regs.eax & 0xffff);
+    return code;
+}

Index: vbe.h
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/vesa/vbe.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- vbe.h	15 Oct 2003 01:00:38 -0000	1.10
+++ vbe.h	26 Jul 2004 17:14:27 -0000	1.11
@@ -157,4 +157,10 @@
 int
 VbeDoInterrupt10(Vm86InfoPtr vi);
 
+Bool
+VbeBoot(Vm86InfoPtr vi);
+
+int
+VbeDoInterruptE6(Vm86InfoPtr vi);
+
 #endif

Index: vesa.c
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/vesa/vesa.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- vesa.c	20 May 2004 02:42:20 -0000	1.32
+++ vesa.c	26 Jul 2004 17:14:27 -0000	1.33
@@ -41,6 +41,7 @@
 Bool vesa_force_text = FALSE;
 Bool vesa_restore_font = TRUE;
 Bool vesa_map_holes = TRUE;
+Bool vesa_boot = FALSE;
 
 #define VesaPriv(scr)	((VesaScreenPrivPtr) (scr)->driver)
 
@@ -216,6 +217,9 @@
     if(!priv->vi)
 	goto fail;
 
+    if (vesa_boot)
+	VbeBoot (priv->vi);
+
     priv->modes = vesaGetModes (priv->vi, &priv->nmode);
 	
     if (!priv->modes)
@@ -1756,6 +1760,7 @@
     ErrorF("-map-holes    Use contiguous memory map (For seg fault with rare BIOS)\n");
     ErrorF("-verbose      Emit diagnostic messages during BIOS initialization\n");
     ErrorF("-force-text   Always use standard 25x80 text mode on server exit or VT switch\n");
+    ErrorF("-boot         Soft boot video card\n");
     /* XXX: usage for -vesatest, -no-map-holes (don't need?),
      * XXX: and -trash-font. Also in man page. */
 }
@@ -1802,6 +1807,9 @@
     } else if(!strcmp(argv[i], "-trash-font")) {
 	vesa_restore_font = FALSE;
 	return 1;
+    } else if(!strcmp(argv[i], "-boot")) {
+	vesa_boot = TRUE;
+	return 1;
     }
     
     return 0;

Index: vm86.c
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/vesa/vm86.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- vm86.c	15 Jan 2004 09:15:53 -0000	1.9
+++ vm86.c	26 Jul 2004 17:14:27 -0000	1.10
@@ -219,7 +219,8 @@
     off = MMW(vi,num * 4);
     if(MAKE_POINTER(seg, off) < ROM_BASE ||
        MAKE_POINTER(seg, off) >= ROM_BASE + ROM_SIZE) {
-	ErrorF("Interrupt pointer doesn't point at ROM\n");
+	ErrorF("Interrupt pointer (seg %x off %x) doesn't point at ROM\n",
+	       seg, off);
 	return -1;
     }
     memcpy(&(LM(vi,vi->ret_code)), retcode_data, sizeof(retcode_data));
@@ -244,6 +245,40 @@
 	return 0;
 }
 
+int
+Vm86DoPOST(Vm86InfoPtr vi)
+{
+    U16 seg, off;
+    int code;
+
+    seg = 0xC000;
+    off = 3;
+    if(MAKE_POINTER(seg, off) < ROM_BASE ||
+       MAKE_POINTER(seg, off) >= ROM_BASE + ROM_SIZE) {
+	ErrorF("BIOS pointer (seg %x off %x) doesn't point at ROM\n",
+	       seg, off);
+	return -1;
+    }
+    memcpy(&(LM(vi,vi->ret_code)), retcode_data, sizeof(retcode_data));
+    vi->vms.regs.ss = POINTER_SEGMENT(vi->stack_base);
+    vi->vms.regs.esp = STACK_SIZE;
+    PUSHW(vi, POINTER_SEGMENT(vi->ret_code));
+    PUSHW(vi, POINTER_OFFSET(vi->ret_code));
+    vi->vms.regs.cs = seg;
+    vi->vms.regs.eip = off;
+    OsBlockSignals ();
+    code = vm86_loop(vi);
+    OsReleaseSignals ();
+    if(code < 0) {
+	ErrorF("vm86 failed (errno %d)\n", errno);
+	return -1;
+    } else if(code != 0) {
+	ErrorF("vm86 returned 0x%04X\n", code);
+	return -1;
+    } else
+	return 0;
+}
+
 #define DEBUG_VBE 0
 #if DEBUG_VBE
 #define DBG(x) ErrorF x; usleep(10*1000)

Index: vm86.h
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/vesa/vm86.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- vm86.h	9 Oct 2003 06:36:26 -0000	1.4
+++ vm86.h	26 Jul 2004 17:14:27 -0000	1.5
@@ -137,6 +137,9 @@
 Vm86DoInterrupt(Vm86InfoPtr vi, int num);
 
 int
+Vm86DoPOST(Vm86InfoPtr vi);
+
+int
 Vm86IsMemory(Vm86InfoPtr vi, U32 i);
 
 U8



More information about the xserver-commit mailing list