X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FDisplay%2FBochsGA%2Fbochsvbe.c;h=7674ed9559dd4026d1eb83f437ffaa3a93a16f4c;hb=3c283c4831c40c14d308a54cefb997832a860bca;hp=84473df771859f7c771bf290e1c5389f2414f57c;hpb=c1b768104a3458d08e7c7240aaac82fc7e70e3df;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/Display/BochsGA/bochsvbe.c b/KernelLand/Modules/Display/BochsGA/bochsvbe.c index 84473df7..7674ed95 100644 --- a/KernelLand/Modules/Display/BochsGA/bochsvbe.c +++ b/KernelLand/Modules/Display/BochsGA/bochsvbe.c @@ -61,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 === @@ -82,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} }; @@ -117,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) @@ -139,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; @@ -162,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); @@ -219,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);