patch-2.4.0-test2 linux/drivers/video/sisfb.c

Next file: linux/drivers/video/skeletonfb.c
Previous file: linux/drivers/video/sgivwfb.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test1/linux/drivers/video/sisfb.c linux/drivers/video/sisfb.c
@@ -43,9 +43,10 @@
 #define FALSE   0
 #define TRUE    1
 
-/* Draw Function */
+/* Draw Function 
 #define FBIOGET_GLYPH        0x4620
 #define FBIOGET_HWCINFO      0x4621
+*/
 #define BR(x)   (0x8200 | (x) << 2)
 
 #define BITBLT               0x00000000
@@ -115,7 +116,8 @@
 #define MMIO_SIZE                 0x20000	/* 128K MMIO capability */
 #define MAX_ROM_SCAN              0x10000
 
-#define RESERVED_MEM_SIZE         0x400000	/* 4M */
+#define RESERVED_MEM_SIZE_4M      0x400000	/* 4M */
+#define RESERVED_MEM_SIZE_8M      0x800000	/* 8M */
 
 /* Mode set stuff */
 #define DEFAULT_MODE      0
@@ -173,9 +175,9 @@
 	const char *name;
 } dev_list[] = {
 	{
-	PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_300, "SIS 300"}, {
-	PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_540, "SIS 540"}, {
-	PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_630, "SIS 630"}, {
+	PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_300, "SIS 300"}, {
+	PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_540, "SIS 540"}, {
+	PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_630, "SIS 630"}, {
 	0, 0, NULL}
 };
 
@@ -422,8 +424,6 @@
 
 /* Interface used by the world */
 int sisfb_setup(char *options);
-static int sisfb_open(struct fb_info *info, int user);
-static int sisfb_release(struct fb_info *info, int user);
 static int sisfb_get_fix(struct fb_fix_screeninfo *fix, int con,
 			 struct fb_info *info);
 static int sisfb_get_var(struct fb_var_screeninfo *var, int con,
@@ -1022,8 +1022,11 @@
 	struct OH *poh;
 	u8 jTemp, tq_state;
 
-	heap_start = (unsigned long) ivideo.video_vbase + RESERVED_MEM_SIZE;
-	//heap_start = (unsigned long)ivideo.video_vbase + (video_size - RESERVED_MEM_SIZE);
+	if(ivideo.video_size > 0x800000)   /* video ram is large than 8M */
+		heap_start = (unsigned long) ivideo.video_vbase + RESERVED_MEM_SIZE_8M;
+	else
+		heap_start = (unsigned long) ivideo.video_vbase + RESERVED_MEM_SIZE_4M;
+
 	heap_end = (unsigned long) ivideo.video_vbase + ivideo.video_size;
 	heap_size = heap_end - heap_start;
 
@@ -1400,6 +1403,7 @@
 
 static u16 get_modeID_length(unsigned long ROMAddr, u16 ModeNo)
 {
+#if 0
 	unsigned char ModeID;
 	u16 modeidlength;
 	u16 usModeIDOffset;
@@ -1413,6 +1417,8 @@
 		ModeID = *((unsigned char *) (ROMAddr + usModeIDOffset));
 	}
 	return (modeidlength);
+#endif
+	return(10);
 }
 
 static int search_modeID(unsigned long ROMAddr, u16 ModeNo)
@@ -2457,22 +2463,6 @@
 /* ------------------ Public Routines ------------------------------- */
 
 /*
- * Open/Release the frame buffer device
- */
-
-static int sisfb_open(struct fb_info *info, int user)
-{
-	MOD_INC_USE_COUNT;
-	return (0);
-}
-
-static int sisfb_release(struct fb_info *info, int user)
-{
-	MOD_DEC_USE_COUNT;
-	return (0);
-}
-
-/*
  *    Get the Fixed Part of the Display
  */
 
@@ -2485,7 +2475,11 @@
 	strcpy(fix->id, fb_info.modename);
 
 	fix->smem_start = ivideo.video_base;
-	fix->smem_len = RESERVED_MEM_SIZE;	/* reserved for Xserver */
+	if(ivideo.video_size > 0x800000)
+		fix->smem_len = RESERVED_MEM_SIZE_8M;	/* reserved for Xserver */
+	else
+		fix->smem_len = RESERVED_MEM_SIZE_4M;	/* reserved for Xserver */
+
 	fix->type = video_type;
 	fix->type_aux = 0;
 	if (ivideo.video_bpp == 8)
@@ -2694,16 +2688,15 @@
 }
 
 static struct fb_ops sisfb_ops = {
-	sisfb_open,
-	sisfb_release,
-	sisfb_get_fix,
-	sisfb_get_var,
-	sisfb_set_var,
-	sisfb_get_cmap,
-	sisfb_set_cmap,
-	sisfb_pan_display,
-	sisfb_ioctl,
-	sisfb_mmap
+	owner:		THIS_MODULE,
+	fb_get_fix:	sisfb_get_fix,
+	fb_get_var:	sisfb_get_var,
+	fb_set_var:	sisfb_set_var,
+	fb_get_cmap:	sisfb_get_cmap,
+	fb_set_cmap:	sisfb_set_cmap,
+	fb_pan_display:	sisfb_pan_display,
+	fb_ioctl:	sisfb_ioctl,
+	fb_mmap:	sisfb_mmap,
 };
 
 int sisfb_setup(char *options)

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)