X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FDisplay%2FBochsGA%2Fbochsvbe.c;h=7674ed9559dd4026d1eb83f437ffaa3a93a16f4c;hb=3c283c4831c40c14d308a54cefb997832a860bca;hp=70f0c915c7abb401431dae2d60a551b3a405d20f;hpb=45c91b880402af13c4b8f934c53780d7cba24aac;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/Display/BochsGA/bochsvbe.c b/KernelLand/Modules/Display/BochsGA/bochsvbe.c index 70f0c915..7674ed95 100644 --- a/KernelLand/Modules/Display/BochsGA/bochsvbe.c +++ b/KernelLand/Modules/Display/BochsGA/bochsvbe.c @@ -47,8 +47,6 @@ enum { VBE_DISPI_INDEX_Y_OFFSET }; -extern void MM_DumpTables(tVAddr Start, tVAddr End); - // === PROTOTYPES === // Driver int BGA_Install(char **Arguments); @@ -63,8 +61,8 @@ void BGA_int_SetMode(Uint16 width, Uint16 height); int BGA_int_ModeInfo(tVideo_IOCtl_Mode *info); int BGA_int_MapFB(void *Dest); // Filesystem -size_t BGA_Read(tVFS_Node *Node, off_t off, size_t len, void *buffer); -size_t BGA_Write(tVFS_Node *Node, off_t off, size_t len, const void *buffer); +size_t BGA_Read(tVFS_Node *Node, off_t off, size_t len, void *buffer, Uint Flags); +size_t BGA_Write(tVFS_Node *Node, off_t off, size_t len, const void *buffer, Uint Flags); int BGA_IOCtl(tVFS_Node *Node, int ID, void *Data); // === GLOBALS === @@ -84,6 +82,7 @@ Uint *gBGA_Framebuffer; const tBGA_Mode *gpBGA_CurrentMode; const tBGA_Mode gBGA_Modes[] = { {640,480,32, 640*480*4}, + {800,480,32, 800*480*4}, // Nice mode for VM testing {800,600,32, 800*600*4}, {1024,768,32, 1024*768*4} }; @@ -119,8 +118,15 @@ int BGA_Install(char **Arguments) dev = PCI_GetDevice(0x1234, 0x1111, 0); if(dev == -1) base = VBE_DISPI_LFB_PHYSICAL_ADDRESS; - else - base = PCI_GetBAR(dev, 0); + else { + Log_Debug("BGA", "BARs %x,%x,%x,%x,%x,%x", + PCI_GetBAR(dev, 0), PCI_GetBAR(dev, 1), PCI_GetBAR(dev, 2), + PCI_GetBAR(dev, 3), PCI_GetBAR(dev, 4), PCI_GetBAR(dev, 5)); + base = PCI_GetValidBAR(dev, 0, PCI_BARTYPE_MEM); + // TODO: Qemu/bochs have MMIO versions of the registers in BAR2 + // - This range is non-indexed + //mmio_base = PCI_GetValidBAR(dev, 2, PCI_BARTYPE_MEM); + } // Map Framebuffer to hardware address gBGA_Framebuffer = (void *) MM_MapHWPages(base, 768); // 768 pages (3Mb) @@ -141,13 +147,13 @@ int BGA_Install(char **Arguments) void BGA_Uninstall(void) { DevFS_DelDevice( &gBGA_DriverStruct ); - MM_UnmapHWPages( (tVAddr)gBGA_Framebuffer, 768 ); + MM_UnmapHWPages( gBGA_Framebuffer, 768 ); } /** * \brief Read from the framebuffer */ -size_t BGA_Read(tVFS_Node *node, off_t off, size_t len, void *buffer) +size_t BGA_Read(tVFS_Node *node, off_t off, size_t len, void *buffer, Uint Flags) { // Check Mode if(giBGA_CurrentMode == -1) return -1; @@ -164,7 +170,7 @@ size_t BGA_Read(tVFS_Node *node, off_t off, size_t len, void *buffer) /** * \brief Write to the framebuffer */ -size_t BGA_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer) +size_t BGA_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags) { if( giBGA_CurrentMode == -1 ) BGA_int_UpdateMode(0); return DrvUtil_Video_WriteLFB(&gBGA_DrvUtil_BufInfo, Offset, Length, Buffer); @@ -221,6 +227,10 @@ int BGA_IOCtl(tVFS_Node *Node, int ID, void *Data) gBGA_CursorPos.x, gBGA_CursorPos.y ); break; + + case VIDEO_IOCTL_SETCURSORBITMAP: + DrvUtil_Video_SetCursor( &gBGA_DrvUtil_BufInfo, Data ); + return 0; default: LEAVE('i', -2);