* On some systems, switching the resolution in VESA mode during

runtime did not work and gave a "General System Error".
  Jan Kloetzke provided a temporary work around, the area
  which the BIOS can access is enlarged, although according to
  specs, this should not be needed.
* After switching modes in the VESA driver, turn on write
  combining for the frame buffer area. This gives a huge speed
  boost for all graphics drawing. Only people for which mode
  changes did not work were using the full speed since the
  VESA mode switching support was added.
* Cleanup in the Jamfile, some header directories were included
  multiple times.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26395 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus 2008-07-12 19:33:03 +00:00
parent 44e302192f
commit fc53a63149
2 changed files with 8 additions and 3 deletions

View File

@ -1,7 +1,8 @@
SubDir HAIKU_TOP src add-ons kernel drivers graphics vesa ;
UsePrivateHeaders kernel graphics [ FDirName graphics common ] ;
UsePrivateHeaders kernel graphics [ FDirName graphics vesa ] ;
UsePrivateHeaders [ FDirName graphics common ] ;
UsePrivateHeaders [ FDirName graphics vesa ] ;
UsePrivateKernelHeaders ;
KernelAddon vesa :
device.cpp

View File

@ -13,6 +13,7 @@
#include <frame_buffer_console.h>
#include <util/kernel_cpp.h>
#include <arch/x86/vm86.h>
#include <vm.h>
#include "driver.h"
#include "utility.h"
@ -174,7 +175,7 @@ vesa_set_display_mode(vesa_info &info, unsigned int mode)
// Prepare vm86 mode environment
struct vm86_state vmState;
status_t status = vm86_prepare(&vmState, 0x2000);
status_t status = vm86_prepare(&vmState, 0x20000);
if (status != B_OK) {
dprintf(DEVICE_NAME": vesa_set_display_mode(): vm86_prepare failed\n");
return status;
@ -210,6 +211,9 @@ vesa_set_display_mode(vesa_info &info, unsigned int mode)
}
delete_area(info.shared_info->frame_buffer_area);
// Turn on write combining for the area
vm_set_area_memory_type(newFBArea, modeInfo.physical_base, B_MTR_WC);
// Update shared frame buffer information
info.shared_info->frame_buffer_area = newFBArea;
info.shared_info->frame_buffer = (uint8 *)frameBuffer;