* If the VESA driver remaps the frame buffer on init, it will now also make
sure that the kernel's frame buffer console points to the right data. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34835 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
1e84402302
commit
e30dd2c076
@ -31,6 +31,8 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
bool frame_buffer_console_available(void);
|
||||
status_t frame_buffer_update(addr_t baseAddress, int32 width, int32 height,
|
||||
int32 depth, int32 bytesPerRow);
|
||||
status_t frame_buffer_console_init(struct kernel_args* args);
|
||||
status_t frame_buffer_console_init_post_modules(struct kernel_args* args);
|
||||
|
||||
|
@ -238,8 +238,8 @@ vbe_set_bits_per_gun(vesa_info& info, uint8 bits)
|
||||
frame buffer, there is no need to map it again.
|
||||
*/
|
||||
static status_t
|
||||
remap_frame_buffer(vesa_info& info, addr_t physicalBase,
|
||||
uint32 bytesPerRow, uint32 height, bool initializing)
|
||||
remap_frame_buffer(vesa_info& info, addr_t physicalBase, uint32 width,
|
||||
uint32 height, int8 depth, uint32 bytesPerRow, bool initializing)
|
||||
{
|
||||
vesa_shared_info& sharedInfo = *info.shared_info;
|
||||
addr_t frameBuffer;
|
||||
@ -263,6 +263,14 @@ remap_frame_buffer(vesa_info& info, addr_t physicalBase,
|
||||
if (area < 0)
|
||||
return area;
|
||||
|
||||
if (initializing) {
|
||||
// We need to manually update the kernel's frame buffer address,
|
||||
// since this frame buffer remapping has not been issued by the
|
||||
// app_server (which would otherwise take care of this)
|
||||
frame_buffer_update(frameBuffer, width, height, depth,
|
||||
bytesPerRow);
|
||||
}
|
||||
|
||||
delete_area(info.shared_info->frame_buffer_area);
|
||||
|
||||
info.frame_buffer = frameBuffer;
|
||||
@ -336,7 +344,8 @@ vesa_init(vesa_info& info)
|
||||
sharedInfo.frame_buffer_area = bufferInfo->area;
|
||||
|
||||
remap_frame_buffer(info, bufferInfo->physical_frame_buffer,
|
||||
bufferInfo->bytes_per_row, bufferInfo->height, true);
|
||||
bufferInfo->width, bufferInfo->height, bufferInfo->bytes_per_row,
|
||||
bufferInfo->depth, true);
|
||||
// Does not matter if this fails - the frame buffer was already mapped
|
||||
// before.
|
||||
|
||||
@ -406,8 +415,9 @@ vesa_set_display_mode(vesa_info& info, uint32 mode)
|
||||
|
||||
// Map new frame buffer if necessary
|
||||
|
||||
status = remap_frame_buffer(info, modeInfo.physical_base,
|
||||
modeInfo.bytes_per_row, modeInfo.height, false);
|
||||
status = remap_frame_buffer(info, modeInfo.width, modeInfo.height,
|
||||
modeInfo.physical_base, modeInfo.bytes_per_row, modeInfo.bits_per_pixel,
|
||||
false);
|
||||
if (status == B_OK) {
|
||||
// Update shared frame buffer information
|
||||
info.shared_info->current_mode.virtual_width = modeInfo.width;
|
||||
|
@ -363,7 +363,17 @@ console_module_info gFrameBufferConsoleModule = {
|
||||
};
|
||||
|
||||
|
||||
static status_t
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
bool
|
||||
frame_buffer_console_available(void)
|
||||
{
|
||||
return sConsole.frame_buffer != 0;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
frame_buffer_update(addr_t baseAddress, int32 width, int32 height, int32 depth,
|
||||
int32 bytesPerRow)
|
||||
{
|
||||
@ -394,16 +404,6 @@ frame_buffer_update(addr_t baseAddress, int32 width, int32 height, int32 depth,
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
bool
|
||||
frame_buffer_console_available(void)
|
||||
{
|
||||
return sConsole.frame_buffer != 0;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
frame_buffer_console_init(kernel_args* args)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user