Modules/VESA - Disabled cursor blink to aid timer debugging
[tpg/acess2.git] / KernelLand / Modules / Display / VESA / main.c
index c9e3c84..8cb3728 100644 (file)
@@ -19,7 +19,7 @@
 #define FLAG_POPULATED 0x2\r
 #define FLAG_VALID     0x4\r
 #define VESA_DEFAULT_FRAMEBUFFER       (KERNEL_BASE|0xA0000)\r
-#define BLINKING_CURSOR        1\r
+#define BLINKING_CURSOR        0\r
 #if BLINKING_CURSOR\r
 # define VESA_CURSOR_PERIOD    1000\r
 #endif\r
@@ -27,7 +27,7 @@
 // === PROTOTYPES ===\r
  int   Vesa_Install(char **Arguments);\r
  int   VBE_int_GetModeList(void);\r
-size_t Vesa_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer);\r
+size_t Vesa_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags);\r
  int   Vesa_IOCtl(tVFS_Node *Node, int ID, void *Data);\r
  int   Vesa_Int_SetMode(int Mode);\r
  int   Vesa_Int_FindMode(tVideo_IOCtl_Mode *data);\r
@@ -67,11 +67,19 @@ tTimer      *gpVesaCursorTimer;
  int   gbVesa_CursorVisible = 0;\r
 // --- 2D Video Stream Handlers ---\r
 tDrvUtil_Video_BufInfo gVesa_BufInfo;\r
+// --- Settings ---\r
+// int gbVesa_DisableFBCache;  // Disables the main-memory framebuffer cache\r
 \r
 // === CODE ===\r
 int Vesa_Install(char **Arguments)\r
 {\r
         int    rv;\r
+\r
+//     for( int i = 0; Arguments[i]; i ++ )\r
+//     {\r
+//             if( strcmp(Aguments[i], "nocache") == 0 )\r
+//                     gbVesa_DisableFBCache = 1;\r
+//     }\r
        \r
        gpVesa_BiosState = VM8086_Init();\r
        \r
@@ -112,6 +120,8 @@ int VBE_int_GetModeList(void)
        }\r
        \r
        modes = (Uint16 *) VM8086_GetPointer(gpVesa_BiosState, info->VideoModes.seg, info->VideoModes.ofs);\r
+       LOG("Virtual addres of mode list from %04x:%04x is %p",\r
+               info->VideoModes.seg, info->VideoModes.ofs, modes);\r
 //     VM8086_Deallocate( gpVesa_BiosState, info );\r
        \r
        // Count Modes\r
@@ -155,6 +165,7 @@ void VBE_int_FillMode_Int(int Index, tVesa_CallModeInfo *vbeinfo, tFarPtr *BufPt
                return ;\r
        }\r
 \r
+       #if 0\r
        #define S_LOG(s, fld, fmt)      LOG(" ."#fld" = "fmt, (s).fld)\r
        LOG("vbeinfo[0x%x] = {", mode->code);\r
        S_LOG(*vbeinfo, attributes, "0x%02x");\r
@@ -166,6 +177,7 @@ void VBE_int_FillMode_Int(int Index, tVesa_CallModeInfo *vbeinfo, tFarPtr *BufPt
        S_LOG(*vbeinfo, segmentB, "0x%04x");\r
        LOG(" .realFctPtr = %04x:%04x", vbeinfo->realFctPtr.seg, vbeinfo->realFctPtr.ofs);\r
        S_LOG(*vbeinfo, pitch, "0x%04x");\r
+\r
        // -- Extended\r
        S_LOG(*vbeinfo, Xres, "%i");\r
        S_LOG(*vbeinfo, Yres, "%i");\r
@@ -194,6 +206,7 @@ void VBE_int_FillMode_Int(int Index, tVesa_CallModeInfo *vbeinfo, tFarPtr *BufPt
        S_LOG(*vbeinfo, image_count_banked, "%i");\r
        S_LOG(*vbeinfo, image_count_lfb, "%i");\r
        LOG("}");\r
+       #endif\r
 \r
        mode->flags = FLAG_POPULATED;\r
        if( !(vbeinfo->attributes & 1) ) {\r
@@ -252,7 +265,7 @@ void Vesa_int_FillModeList(void)
 /**\r
  * \brief Write to the framebuffer\r
  */\r
-size_t Vesa_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer)\r
+size_t Vesa_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags)\r
 {\r
        if( gVesa_Modes[giVesaCurrentMode].framebuffer == 0 ) {\r
                Log_Warning("VESA", "Vesa_Write - Non-LFB Modes not yet supported.");\r
@@ -283,15 +296,11 @@ int Vesa_IOCtl(tVFS_Node *Node, int ID, void *Data)
                return Vesa_Int_ModeInfo((tVideo_IOCtl_Mode*)Data);\r
        \r
        case VIDEO_IOCTL_SETBUFFORMAT:\r
-               LOG("Hide cursor");\r
                Vesa_int_HideCursor();\r
-               LOG("Update internals");\r
                ret = gVesa_BufInfo.BufferFormat;\r
                if(Data)        gVesa_BufInfo.BufferFormat = *(int*)Data;\r
-               LOG("Swap back to text mode cursor");\r
                if(gVesa_BufInfo.BufferFormat == VIDEO_BUFFMT_TEXT)\r
                        DrvUtil_Video_SetCursor( &gVesa_BufInfo, &gDrvUtil_TextModeCursor );\r
-               LOG("Show again");\r
                Vesa_int_ShowCursor();\r
                return ret;\r
        \r
@@ -322,7 +331,9 @@ int Vesa_Int_SetMode(int mode)
        \r
        Vesa_int_FillModeList();\r
 \r
+       #if BLINKING_CURSOR\r
        Time_RemoveTimer(gpVesaCursorTimer);\r
+       #endif\r
        \r
        Mutex_Acquire( &glVesa_Lock );\r
        \r
@@ -358,6 +369,8 @@ int Vesa_Int_SetMode(int mode)
        \r
        Mutex_Release( &glVesa_Lock );\r
 \r
+       gVesa_BufInfo.BackBuffer  = realloc(gVesa_BufInfo.BackBuffer,\r
+               gVesa_Modes[mode].height * gVesa_Modes[mode].pitch);\r
        gVesa_BufInfo.Framebuffer = gpVesa_Framebuffer;\r
        gVesa_BufInfo.Pitch = gVesa_Modes[mode].pitch;\r
        gVesa_BufInfo.Width = gVesa_Modes[mode].width;\r
@@ -370,14 +383,14 @@ int Vesa_Int_SetMode(int mode)
 int Vesa_Int_FindMode(tVideo_IOCtl_Mode *data)\r
 {\r
         int    i;\r
-        int    best = -1, bestFactor = 1000;\r
-        int    factor, tmp;\r
+        int    best = -1, tmp;\r
+       unsigned int factor, bestFactor = -1;\r
        \r
        ENTER("idata->width idata->height idata->bpp", data->width, data->height, data->bpp);\r
 \r
        Vesa_int_FillModeList();\r
        \r
-       for(i=0;i<giVesaModeCount;i++)\r
+       for(i = 0; i < giVesaModeCount; i ++)\r
        {\r
                LOG("Mode %i (%ix%ix%i)", i, gVesa_Modes[i].width, gVesa_Modes[i].height, gVesa_Modes[i].bpp);\r
        \r
@@ -396,7 +409,7 @@ int Vesa_Int_FindMode(tVideo_IOCtl_Mode *data)
                tmp = gVesa_Modes[i].width * gVesa_Modes[i].height;\r
                tmp -= data->width * data->height;\r
                tmp = tmp < 0 ? -tmp : tmp;\r
-               factor = tmp * 1000 / (data->width * data->height);\r
+               factor = (Uint64)tmp * 1000 / (data->width * data->height);\r
                \r
                if( data->bpp == 8 && gVesa_Modes[i].bpp != 8 ) continue;\r
                if( data->bpp == 16 && gVesa_Modes[i].bpp != 16 )       continue;\r

UCC git Repository :: git.ucc.asn.au