SOURCES: kernel-desktop-vesafb-tng.patch - Updated patch for vesaf...

lmasko lmasko at pld-linux.org
Sat Nov 18 13:55:12 CET 2006


Author: lmasko                       Date: Sat Nov 18 12:55:12 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- Updated patch for vesafb_tng - adjusted the 1.0-rc2-2.6.19-rc2 version, seems to work.

---- Files affected:
SOURCES:
   kernel-desktop-vesafb-tng.patch (1.1 -> 1.2) 

---- Diffs:

================================================================
Index: SOURCES/kernel-desktop-vesafb-tng.patch
diff -u SOURCES/kernel-desktop-vesafb-tng.patch:1.1 SOURCES/kernel-desktop-vesafb-tng.patch:1.2
--- SOURCES/kernel-desktop-vesafb-tng.patch:1.1	Mon Jun 19 13:36:11 2006
+++ SOURCES/kernel-desktop-vesafb-tng.patch	Sat Nov 18 13:55:07 2006
@@ -1,5 +1,5 @@
 diff --git a/Documentation/fb/vesafb.txt b/Documentation/fb/vesafb.txt
-index ee277dd..f768129 100644
+index ee277dd..93d6e6e 100644
 --- a/Documentation/fb/vesafb.txt
 +++ b/Documentation/fb/vesafb.txt
 @@ -2,16 +2,18 @@
@@ -12,19 +12,18 @@
 -The idea is simple:  Turn on graphics mode at boot time with the help
 -of the BIOS, and use this as framebuffer device /dev/fb0, like the m68k
 -(and other) ports do.
--
++VESA BIOS Extensions Version 2.0 are required, because we need access to
++a linear frame buffer. VBE 3.0 is required if you want to use modes with a
++higher (than the standard 60 Hz) refresh rate.
+ 
 -This means we decide at boot time whenever we want to run in text or
 -graphics mode.  Switching mode later on (in protected mode) is
 -impossible; BIOS calls work in real mode only.  VESA BIOS Extensions
 -Version 2.0 are required, because we need a linear frame buffer.
-+VESA BIOS Extensions Version 2.0 are required, because we need access to
-+a linear frame buffer. VBE 3.0 is required if you want to use modes with a
-+higher (than the standard 60Hz) refresh rate.
-+
 +The VESA framebuffer driver comes in two flavors - the standard 'vesafb'
 +and 'vesafb-tng'. Vesafb-tng is available only on 32-bit x86 due to the
 +technology it uses (vm86). Vesafb-tng has more features than vesafb
-+(adjusting the refresh rate on VBE3.0-compliant boards, switching the
++(adjusting the refresh rate on VBE 3.0 compliant boards, switching the
 +video mode without rebooting, selecting a mode by providing its
 +modedb name, and more).
  
@@ -36,19 +35,14 @@
  
 -Switching modes is done using the vga=... boot parameter.  Read
 -Documentation/svga.txt for details.
--
--You should compile in both vgacon (for text mode) and vesafb (for
--graphics mode). Which of them takes over the console depends on
--whenever the specified mode is text or graphics.
--
--The graphic modes are NOT in the list which you get if you boot with
--vga=ask and hit return. The mode you wish to use is derived from the
--VESA mode number. Here are those VESA mode numbers:
 +If you are running a 32-bit x86 system and you decide to use vesafb-tng,
 +you can either compile the driver into the kernel or use it as a module.
 +The graphics mode you want to use is in both cases specified using the
 +standard modedb format.
-+
+ 
+-You should compile in both vgacon (for text mode) and vesafb (for
+-graphics mode). Which of them takes over the console depends on
+-whenever the specified mode is text or graphics.
 +If your system doesn't support vm86 calls, things get a little more tricky.
 +Since on such systems you can't do BIOS calls from protected mode in which
 +kernel runs, you have to decide at boot time whenever you want to run in text
@@ -56,7 +50,10 @@
 +is done using the vga=... boot parameter.  Read Documentation/svga.txt for
 +details. Below is a more detailed description of what to do on systems using
 +the standard vesafb driver.
-+
+ 
+-The graphic modes are NOT in the list which you get if you boot with
+-vga=ask and hit return. The mode you wish to use is derived from the
+-VESA mode number. Here are those VESA mode numbers:
 +You should compile in both vgacon (for text mode) and vesafb (for graphics
 +mode). Which of them takes over the console depends on whenever the
 +specified mode is text or graphics.
@@ -90,16 +87,15 @@
 -32k |  0x310    0x313    0x316    0x319   
 -64k |  0x311    0x314    0x317    0x31A   
 -16M |  0x312    0x315    0x318    0x31B   
--
--To enable one of those modes you have to specify "vga=ask" in the
--lilo.conf file and rerun LILO. Then you can type in the desired
--mode at the "vga=ask" prompt. For example if you like to use 
--1024x768x256 colors you have to say "305" at this prompt.
 +256 |  0x301    0x303    0x305    0x307
 +32k |  0x310    0x313    0x316    0x319
 +64k |  0x311    0x314    0x317    0x31A
 +16M |  0x312    0x315    0x318    0x31B
-+
+ 
+-To enable one of those modes you have to specify "vga=ask" in the
+-lilo.conf file and rerun LILO. Then you can type in the desired
+-mode at the "vga=ask" prompt. For example if you like to use 
+-1024x768x256 colors you have to say "305" at this prompt.
 +To enable one of those modes you have to specify "vga=ask" in the lilo.conf
 +file and rerun LILO. Then you can type in the desired mode at the "vga=ask"
 +prompt. For example if you like to use 1024x768x256 colors you have to say
@@ -138,35 +134,36 @@
 -There is no way to change the vesafb video mode and/or timings after
 -booting linux.  If you are not happy with the 60 Hz refresh rate, you
 -have these options:
-+With VBE3.0 compatible BIOSes and vesafb-tng it is possible to change
++With VBE 3.0 compatible BIOSes and vesafb-tng it is possible to change
 +the refresh rate either at boot time (by specifying the @<rr> part of
 +the mode name) or later, using the fbset utility.
 +
 +If you want to use the default BIOS refresh rate while switching modes
 +on a running system, set pixclock to 0.
-+
-+With VBE2.0 there is no way to change the mode timings after booting
-+Linux. If you are not happy with the 60 Hz refresh rate, you have
-+these options:
  
 - * configure and load the DOS-Tools for your the graphics board (if
 -   available) and boot linux with loadlin.
-+ * configure and load the DOS tools for your the graphics board (if
+- * use a native driver (matroxfb/atyfb) instead if vesafb.  If none
++With VBE 2.0 there is no way to change the mode timings after booting
++Linux. If you are not happy with the 60 Hz refresh rate, you have
++the following options:
++
++ * Configure and load the DOS tools for your the graphics board (if
 +   available) and boot Linux with loadlin.
-  * use a native driver (matroxfb/atyfb) instead if vesafb.  If none
++ * Use a native driver (matroxfb/atyfb) instead of vesafb.  If none
     is available, write a new one!
 - * VBE 3.0 might work too.  I have neither a gfx board with VBE 3.0
 -   support nor the specs, so I have not checked this yet.
-+ * use a BIOS editor to change the default refresh rate (such an
++ * Use a BIOS editor to change the default refresh rate (such an
 +   editor does exist at least for ATI Radeon BIOSes).
-+ * if you're running a non-vm86 and VBE3.0-compatible system, you can
++ * If you're running a non-vm86 and VBE 3.0 compatible system, you can
 +   use a kernel patch (vesafb-rrc) to hard-code some mode timings in
-+   the kernel and use these while setting the graphic mode at boot time.
++   the kernel and use these while setting the video mode at boot time.
 +
 +Note that there are some boards (nVidia 59**, 57** and newer models)
-+claiming that their Video BIOS is VBE3.0 compliant, while ignoring the
++claiming that their Video BIOS is VBE 3.0 compliant, while ignoring the
 +CRTC values provided by software such as vesafb-tng. You'll not be able
-+to change the refresh rate if you're using one of these boards.
++to adjust the refresh rate if you're using one of these boards.
  
  
  Configuration
@@ -217,13 +214,16 @@
 -	      2 - write-back
 -	      3 - write-combining
 -	      4 - write-through
+-
+-	If you see the following in dmesg, choose the type that matches the
+-	old one. In this example, use "mtrr:2".
 +The VESA BIOS provides protected mode interface for changing some parameters.
 +vesafb can use it for palette changes and to pan the display. It is turned
 +off by default because it seems not to work with some BIOS versions, but
 +there are options to turn it on.
 +
 +You can pass options to vesafb using "video=vesafb:option" on the kernel
-+command line. Multiple options should be separated by comma, like this:
++command line. Multiple options should be separated by a comma, like this:
 +"video=vesafb:ypan,1024x768-32 at 85"
 +
 +Note that vesafb-tng still uses the "video=vesafb:option" format of the
@@ -250,9 +250,9 @@
 +        safe (and slow) default.
 +
 +vgapal  Use the standard VGA registers for palette changes.
-+        This is the default.
 +
 +pmipal  Use the protected mode interface for palette changes.
++        This is the default is the protected mode interface is available.
 +
 +mtrr:n  Setup memory type range registers for the vesafb framebuffer
 +        where n:
@@ -261,10 +261,8 @@
 +              2 - write-back
 +              3 - write-combining
 +              4 - write-through
- 
--	If you see the following in dmesg, choose the type that matches the
--	old one. In this example, use "mtrr:2".
-+	If you see the following in dmesg, choose the type that matches
++
++        If you see the following in dmesg, choose the type that matches
 +        the old one. In this example, use "mtrr:2".
  ...
  mtrr: type mismatch for e0000000,8000000 old: write-back new: write-combining
@@ -288,44 +286,43 @@
  
 -Have fun!
 +Options accepted only by vesafb-tng:
- 
--  Gerd
++
 +<mode>  The mode you want to set, in the standard modedb format. Refer to
-+        modedb.txt for detailed description. If you specify a mode that is
-+        not supported by your board's BIOS, vesafb will attempt to set a
++        modedb.txt for a detailed description. If you specify a mode that is
++        not supported by your board's BIOS, vesafb-tng will attempt to set a
 +        similar mode. The list of supported modes can be found in
 +        /proc/fbx/modes, where x is the framebuffer number (usually 0).
-+        When vesafb is compiled as a module, the mode string should be
++        When vesafb-tng is compiled as a module, the mode string should be
 +        provided as a value of the parameter 'mode'.
 +
 +vbemode:x
 +        Force the use of VBE mode x. The mode will only be set if it's
-+        found in VBE-provided list of supported modes.
++        found in the VBE-provided list of supported modes.
 +        NOTE: The mode number 'x' should be specified in VESA mode number
-+        notation, not the Linux kernel one (ie. 257 instead of 769).
++        notation, not the Linux kernel one (eg. 257 instead of 769).
 +        HINT: If you use this option because normal <mode> parameter does
 +        not work for you and you use a X server, you'll probably want to
 +        set the 'nocrtc' option to ensure that the video mode is properly
 +        restored after console <-> X switches.
 +
-+nocrtc  Do not use CRTC timings while setting the graphic mode. This option
-+        makes sence only with VBE3.0 compliant systems. Use it if you have
-+        problems with the modes set in the standard way. Note that specifying
-+        this option means the refresh rate will be ignored and will stay at
-+        your BIOS default (60 Hz).
++nocrtc  Do not use CRTC timings while setting the video mode. This option
++        makes sence only with VBE 3.0 compliant systems. Use it if you have
++        problems with modes set in the standard way. Note that using this
++		option means that any refresh rate adjustments will be ignored
++		and the refresh rate will stay at your BIOS default (60 Hz).
 +
 +noedid  Do not try to fetch and use EDID-provided modes.
 +
 +noblank Disable hardware blanking.
 +
 +gtf     Force the use of VESA's GTF (Generalized Timing Formula). Specifying
-+        this will cause vesafb to skip it's internal modedb and EDID-modedb
++        this will cause vesafb to skip its internal modedb and EDID-modedb
 +        and jump straight to the GTF part of the code (normally used only if
 +        everything else failed). This can be useful if you want to get as
-+        much as possible from you graphics board but your BIOS doesn't
-+        support modes with refresh rates you require. Note that you may need
-+        to specify the maxhf, maxvf and maxclk parameters if they are not
-+        provided by EDID.
++        much as possible from your graphics board but your BIOS doesn't
++        support modes with the refresh rates you require. Note that you may 
++		need to specify the maxhf, maxvf and maxclk parameters if they are not
++        provided by the EDID block.
 +
 +Additionally, the following parameters may be provided. They all override the
 +EDID-provided values and BIOS defaults. Refer to your monitor's specs to get
@@ -334,7 +331,8 @@
 +maxhf:n     Maximum horizontal frequency (in kHz).
 +maxvf:n     Maximum vertical frequency (in Hz).
 +maxclk:n    Maximum pixel clock (in MHz).
-+
+ 
+-  Gerd
 +Have fun!
  
  --
@@ -346,14 +344,14 @@
 +Minor (mostly typo) changes by
 +Nico Schmoigl <schmoigl at rumms.uni-mannheim.de>
 +
-+Extended documentation for vm86, VBE3.0 and vesafb-tng by
++Extended documentation for vm86, VBE 3.0 and vesafb-tng by
 +Michal Januszewski <spock at gentoo.org>
 +
 diff --git a/arch/i386/boot/video.S b/arch/i386/boot/video.S
-index 2ac40c8..335d401 100644
+index 2c5b5cc..2c2d4b5 100644
 --- a/arch/i386/boot/video.S
 +++ b/arch/i386/boot/video.S
-@@ -164,10 +164,12 @@ basret:	ret
+@@ -163,10 +163,12 @@ # This is done by asking the BIOS except
  # parameters in the default 80x25 mode -- these are set directly,
  # because some very obscure BIOSes supply insane values.
  mode_params:
@@ -366,7 +364,7 @@
  	movb	$0x03, %ah			# Read cursor position
  	xorb	%bh, %bh
  	int	$0x10
-@@ -200,6 +202,7 @@ mopar2: movb	%al, %fs:(PARAM_VIDEO_LINES
+@@ -199,6 +201,7 @@ mopar2: movb	%al, %fs:(PARAM_VIDEO_LINES
  	ret
  
  #ifdef CONFIG_VIDEO_SELECT
@@ -374,7 +372,7 @@
  # Fetching of VESA frame buffer parameters
  mopar_gr:
  	leaw	modelist+1024, %di
-@@ -278,6 +281,7 @@ dac_done:
+@@ -281,6 +284,7 @@ # get protected mode interface informati
  	movw	%es, %fs:(PARAM_VESAPM_SEG)
  	movw	%di, %fs:(PARAM_VESAPM_OFF)
  no_pm:	ret
@@ -382,7 +380,7 @@
  
  # The video mode menu
  mode_menu:
-@@ -492,10 +496,12 @@ mode_set:
+@@ -495,10 +499,12 @@ mode_set:
  	
  	cmpb	$VIDEO_FIRST_V7>>8, %ah
  	jz	setv7
@@ -397,7 +395,7 @@
  	orb	%ah, %ah
  	jz	setmenu
  	
-@@ -567,6 +573,7 @@ setr1:	lodsw
+@@ -570,6 +576,7 @@ setr1:	lodsw
  	movw	-4(%si), %ax			# Fetch mode ID
  	jmp	_m_s
  
@@ -405,7 +403,7 @@
  check_vesa:
  	leaw	modelist+1024, %di
  	subb	$VIDEO_FIRST_VESA>>8, %bh
-@@ -600,6 +607,7 @@ check_vesa:
+@@ -603,6 +610,7 @@ check_vesa:
  	ret
  
  _setbad:	jmp	setbad          	# Ugly...
@@ -413,11 +411,24 @@
  
  # Recalculate vertical display end registers -- this fixes various
  # inconsistencies of extended modes on many adapters. Called when
+diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c
+index 5f49280..df69fe5 100644
+--- a/drivers/char/sysrq.c
++++ b/drivers/char/sysrq.c
+@@ -201,7 +201,7 @@ static void send_sig_all(int sig)
+ 	struct task_struct *p;
+ 
+ 	for_each_process(p) {
+-		if (p->mm && p->pid != 1)
++		if (p->mm && p->pid != 1 && !(p->flags & PF_BORROWED_MM))
+ 			/* Not swapper, init nor kernel thread */
+ 			force_sig(sig, p);
+ 	}
 diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
-index fdebd60..a1d6253 100644
+index 7a43020..72a803b 100644
 --- a/drivers/video/Kconfig
 +++ b/drivers/video/Kconfig
-@@ -454,8 +454,8 @@ config FB_TGA
+@@ -546,8 +546,22 @@ config FB_TGA
  	  cards. Say Y if you have one of those.
  
  config FB_VESA
@@ -425,13 +436,12 @@
 -	depends on (FB = y) && X86
 +	tristate "VESA VGA graphics support"
 +	depends on (FB = y) && (X86 || X86_64)
- 	select FB_CFB_FILLRECT
- 	select FB_CFB_COPYAREA
- 	select FB_CFB_IMAGEBLIT
-@@ -465,6 +465,48 @@ config FB_VESA
- 	  You will get a boot time penguin logo at no additional cost. Please
- 	  read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
- 
++	help
++	  This is the frame buffer device driver for generic VESA 2.0
++	  compliant graphic cards. The older VESA 1.2 cards are not supported.
++	  You will get a boot time penguin logo at no additional cost. Please
++	  read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
++
 +choice 
 +	prompt "VESA driver type"
 +	depends on FB_VESA
@@ -440,10 +450,14 @@
 +
 +config FB_VESA_STD
 +	bool "vesafb"
-+	help
-+	  This is the frame buffer device driver for generic VESA 2.0
-+	  compliant graphic cards. The older VESA 1.2 cards are not supported.
-+	  You will get a boot time penguin logo at no additional cost. Please
+ 	select FB_CFB_FILLRECT
+ 	select FB_CFB_COPYAREA
+ 	select FB_CFB_IMAGEBLIT
+@@ -555,7 +569,43 @@ config FB_VESA
+ 	  This is the frame buffer device driver for generic VESA 2.0
+ 	  compliant graphic cards. The older VESA 1.2 cards are not supported.
+ 	  You will get a boot time penguin logo at no additional cost. Please
+-	  read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
 +	  read <file:Documentation/fb/vesafb.txt>. Choose this driver if you
 +	  are experiencing problems with vesafb-tng or if you own a 64-bit system.
 +
@@ -453,15 +467,18 @@
 +	bool "vesafb-tng"
 +	depends on !X86_64
 +	select FB_MODE_HELPERS
++	select FB_CFB_FILLRECT
++	select FB_CFB_COPYAREA
++	select FB_CFB_IMAGEBLIT
 +	help
-+	  This is the frame buffer device driver for generic VESA 2.0 
-+	  compliant graphic cards. It is capable of taking advantage of 
-+	  VBE 3.0 features. With this driver you will be able to adjust
-+	  the refresh rate (VBE 3.0 compliant boards only) and change
-+	  the graphic mode on-the-fly.
-+	  
-+	  You will also get a boot time penguin logo at no additional cost. Please
-+	  read <file:Documentation/fb/vesafb.txt>.
++	  This is an enhanced generic frame buffer device driver for
++	  VBE 2.0 compliant graphic cards. It can take advantage of VBE 3.0
++	  features (refresh rate adjustment) when these are available.
++	  The driver also makes it possible to change the video mode
++	  on the fly and to switch back to text mode when it's unloaded.
++
++	  If the driver is compiled as a module, the module will be called
++	  vesafb-tng.
 +
 +endchoice
 +
@@ -474,15 +491,19 @@
 +	  supposed to switch to in case no mode is provided as a kernel
 +	  command line parameter.
 +
- config VIDEO_SELECT
- 	bool
- 	depends on FB_VESA
++config VIDEO_SELECT
++	bool
++	depends on FB_VESA
++	default y
+ 
+ config FB_IMAC
+ 	bool "Intel-based Macintosh Framebuffer Support"
 diff --git a/drivers/video/Makefile b/drivers/video/Makefile
-index aa434e7..247cfb3 100644
+index a6980e9..3a3f3b3 100644
 --- a/drivers/video/Makefile
 +++ b/drivers/video/Makefile
-@@ -96,7 +96,11 @@ obj-$(CONFIG_FB_IMX)              += imx
- obj-$(CONFIG_FB_S3C2410)	  += s3c2410fb.o
+@@ -101,7 +101,11 @@ obj-$(CONFIG_FB_PNX4008_DUM)	  += pnx400
+ obj-$(CONFIG_FB_PNX4008_DUM_RGB)  += pnx4008/
  
  # Platform or fallback drivers go here
 -obj-$(CONFIG_FB_VESA)             += vesafb.o
@@ -491,14 +512,14 @@
 +else
 +  obj-$(CONFIG_FB_VESA)		  += vesafb-thread.o vesafb-tng.o
 +endif
+ obj-$(CONFIG_FB_IMAC)             += imacfb.o
  obj-$(CONFIG_FB_VGA16)            += vga16fb.o vgastate.o
  obj-$(CONFIG_FB_OF)               += offb.o
- 
 diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
-index 996c7b5..f48eee0 100644
+index 93ffcdd..a74f535 100644
 --- a/drivers/video/fbmem.c
 +++ b/drivers/video/fbmem.c
-@@ -1430,6 +1430,7 @@ fbmem_init(void)
+@@ -1408,6 +1408,7 @@ fbmem_init(void)
  		printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
  		fb_class = NULL;
  	}
@@ -507,10 +528,10 @@
  }
  
 diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c
-index 1da2f84..6755cb2 100644
+index d126790..702c3fc 100644
 --- a/drivers/video/modedb.c
 +++ b/drivers/video/modedb.c
-@@ -667,6 +667,7 @@ void fb_var_to_videomode(struct fb_video
+@@ -674,6 +674,7 @@ void fb_var_to_videomode(struct fb_video
  {
  	u32 pixclock, hfreq, htotal, vtotal;
  
@@ -518,21 +539,25 @@
  	mode->name = NULL;
  	mode->xres = var->xres;
  	mode->yres = var->yres;
+@@ -1025,3 +1026,4 @@ EXPORT_SYMBOL(fb_find_best_mode);
+ EXPORT_SYMBOL(fb_find_nearest_mode);
+ EXPORT_SYMBOL(fb_videomode_to_modelist);
+ EXPORT_SYMBOL(fb_find_mode);
++EXPORT_SYMBOL(fb_destroy_modelist);
 diff --git a/drivers/video/vesafb-thread.c b/drivers/video/vesafb-thread.c
 new file mode 100644
-index 0000000..249d794
+index 0000000..ddc3d1c
 --- /dev/null
 +++ b/drivers/video/vesafb-thread.c
-@@ -0,0 +1,722 @@
+@@ -0,0 +1,724 @@
 +/*
 + * Framebuffer driver for VBE 2.0+ compliant graphic boards.
 + * Kernel thread and vm86 routines.
 + *
-+ * (c) 2004-2005 Michal Januszewski <spock at gentoo.org>
++ * (c) 2004-2006 Michal Januszewski <spock at gentoo.org>
 + *
 + */
 +
-+#include <linux/config.h>
 +#include <linux/slab.h>
 +#include <linux/workqueue.h>
 +#include <linux/completion.h>
@@ -554,9 +579,7 @@
 +#include <asm/mmu_context.h>
 +#include "edid.h"
 +
-+#ifdef MODULE
-+int errno;
-+#endif
++static int errno;
 +
 +static DECLARE_COMPLETION(vesafb_th_completion);
 +static DECLARE_MUTEX(vesafb_task_list_sem);
@@ -581,7 +604,6 @@
 + *
 + * [ STACK | RET_CODE | BUFFER ]
 + *
-+ * We only need a buffer that is ca. 0x2000 bytes in size.
 + * Some video BIOSes (sis6326) try to store data somewhere
 + * in 0x7000-0x7fff, so we zeromap more memory to be safe.
 + */
@@ -983,12 +1005,12 @@
 +	}
 +
 +	if (type) {
-+		vma->vm_flags |= VM_SHARED;
 +		ret = zeromap_page_range(vma,
 +					 vma->vm_start,
 +					 vma->vm_end - vma->vm_start,
 +					 vma->vm_page_prot);
 +	} else {
++		vma->vm_flags |= VM_SHARED;
 +		ret = remap_pfn_range(vma,
 +				      vma->vm_start,
 +				      vma->vm_pgoff,
@@ -1106,11 +1128,17 @@
 +			vesafb_handle_getvbeib(tsk);
 +			goto task_done;
 +		}
-+		if (tsk->flags & TF_MASK_BUF) {
++		/* Do we need to store a pointer to the buffer in ES:EDI? */
++		if (tsk->flags & TF_BUF_DI) {
 +			tsk->regs.es  = (BUF_ADDR >> 4);
 +			tsk->regs.edi = (BUF_ADDR & 0x000f);
 +		}
-+		if (tsk->flags & TF_USE_BUF)
++		/* Sometimes the pointer has to be in ES:EBX. */
++		if (tsk->flags & TF_BUF_BX) {
++			tsk->regs.es  = (BUF_ADDR >> 4);
++			tsk->regs.ebx = (BUF_ADDR & 0x000f);
++		}
++		if (tsk->flags & (TF_BUF_DI | TF_BUF_BX))
 +			memcpy((void*)BUF_ADDR, tsk->buf, tsk->buf_len);
 +
 +		vesafb_do_vm86(&tsk->regs);
@@ -1248,15 +1276,15 @@
 +
 diff --git a/drivers/video/vesafb-tng.c b/drivers/video/vesafb-tng.c
 new file mode 100644
-index 0000000..e8cf57d
+index 0000000..63573d1
 --- /dev/null
 +++ b/drivers/video/vesafb-tng.c
-@@ -0,0 +1,1484 @@
+@@ -0,0 +1,1598 @@
 +/*
 + * Framebuffer driver for VBE 2.0+ compliant graphic boards
 + *
-+ * (c) 2004-2005 Michal Januszewski <spock at gentoo.org
-+ *     Based upon vesafb code by Gerd Knorr <kraxel at goldbach.in-berlin.de
++ * (c) 2004-2006 Michal Januszewski <spock at gentoo.org>
++ *     Based upon vesafb code by Gerd Knorr <kraxel at goldbach.in-berlin.de>
 + *
 + */
 +
@@ -1310,7 +1338,7 @@
 +static int  mtrr       = 0;	/* disable mtrr by default */
 +static int  blank      = 1;     /* enable blanking by default */
 +static int  ypan       = 0;	/* 0 - nothing, 1 - ypan, 2 - ywrap */
-+static int  pmi_setpal = 0;	/* pmi for palette changes */
++static int  pmi_setpal = 1;	/* pmi for palette changes */
 +static u16  *pmi_base  = NULL;  /* protected mode interface location */
 +static void (*pmi_start)(void) = NULL;
 +static void (*pmi_pal)(void)   = NULL;
@@ -1449,19 +1477,6 @@
 +	if (start + count > 256)
 +		return -EINVAL;
 +
-+	if (pmi_setpal) {
-+		__asm__ __volatile__(
-+		"call *(%%esi)"
-+		: /* no return value */
-+		: "a" (0x4f09),         /* EAX */
-+		  "b" (0),              /* EBX */
-+		  "c" (count),          /* ECX */
-+		  "d" (start),          /* EDX */
-+		  "D" (entries),        /* EDI */
-+		  "S" (&pmi_pal));      /* ESI */
-+		return 0;
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    http://cvs.pld-linux.org/SOURCES/kernel-desktop-vesafb-tng.patch?r1=1.1&r2=1.2&f=u



More information about the pld-cvs-commit mailing list