arm framebuffer: Convert arm arch_video code into classes
* Proper framebuffer code is chosen based on hardware * This change could extend into other arch code as well * François gave permission to update his copyrights * Minimal functional change
This commit is contained in:
parent
58f219d49f
commit
8eeafbce5f
@ -27,10 +27,9 @@ KernelMergeObject boot_arch_$(TARGET_ARCH).o :
|
||||
arch_uart_8250.cpp
|
||||
arch_uart_pl011.cpp
|
||||
arch_elf.cpp
|
||||
arch_video.cpp
|
||||
arch_video_920.cpp
|
||||
arch_video_pxa.cpp
|
||||
arch_video_omap3.cpp
|
||||
arch_framebuffer_920.cpp
|
||||
arch_framebuffer_pxa.cpp
|
||||
arch_framebuffer_omap3.cpp
|
||||
$(librootArchObjects)
|
||||
: -fno-pic
|
||||
:
|
||||
|
51
src/system/boot/arch/arm/arch_framebuffer.h
Normal file
51
src/system/boot/arch/arm/arch_framebuffer.h
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright 2011-2012 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Alexander von Gluck IV, kallisti5@unixzen.com
|
||||
*/
|
||||
#ifndef _ARCH_FRAMEBUFFER_H
|
||||
#define _ARCH_FRAMEBUFFER_H
|
||||
|
||||
|
||||
#include <boot/platform.h>
|
||||
#include <SupportDefs.h>
|
||||
|
||||
|
||||
#define TRACE_VIDEO
|
||||
#ifdef TRACE_VIDEO
|
||||
# define TRACE(x...) dprintf(x)
|
||||
# define CALLED() dprintf("%s()\n", __func__);
|
||||
#else
|
||||
# define TRACE(x...) ;
|
||||
# define CALLED() ;
|
||||
#endif
|
||||
#define ERROR(x...) dprintf(x)
|
||||
|
||||
|
||||
class ArchFramebuffer {
|
||||
public:
|
||||
ArchFramebuffer(addr_t base)
|
||||
:
|
||||
fBase(base) {};
|
||||
~ArchFramebuffer() {};
|
||||
|
||||
virtual status_t Init() { return B_OK; };
|
||||
virtual status_t Probe() { return B_OK; };
|
||||
virtual status_t SetDefaultMode() { return B_OK; };
|
||||
virtual status_t SetVideoMode(int width, int height, int depth)
|
||||
{ return B_OK; };
|
||||
|
||||
virtual addr_t Base() { return fBase; };
|
||||
|
||||
protected:
|
||||
addr_t fBase;
|
||||
private:
|
||||
int fCurrentWidth;
|
||||
int fCurrentHeight;
|
||||
int fCurrentDepth;
|
||||
};
|
||||
|
||||
|
||||
#endif /* _ARCH_FRAMEBUFFER_H */
|
@ -1,10 +1,14 @@
|
||||
/*
|
||||
* Copyright 2009, François Revol, revol@free.fr.
|
||||
* Copyright 2009-2012 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* François Revol, revol@free.fr
|
||||
* Alexander von Gluck IV, kallisti5@unixzen.com
|
||||
*/
|
||||
|
||||
|
||||
#include "arch_video.h"
|
||||
#include "arch_framebuffer.h"
|
||||
|
||||
#include <arch/cpu.h>
|
||||
#include <boot/stage2.h>
|
||||
@ -12,44 +16,50 @@
|
||||
#include <boot/menu.h>
|
||||
#include <boot/kernel_args.h>
|
||||
#include <boot/platform/generic/video.h>
|
||||
#include <board_config.h>
|
||||
#include <util/list.h>
|
||||
#include <drivers/driver_settings.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
class ArchFBArm920 : public ArchFramebuffer {
|
||||
public:
|
||||
ArchFBArm920(addr_t base);
|
||||
~ArchFBArm920();
|
||||
status_t Init();
|
||||
status_t Probe();
|
||||
status_t SetDefaultMode();
|
||||
status_t SetVideoMode(int width, int height, int depth);
|
||||
};
|
||||
|
||||
//XXX
|
||||
extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size,
|
||||
uint32 flags);
|
||||
ArchFBArm920 *arch_get_fb_arm_920(addr_t base);
|
||||
|
||||
|
||||
#define TRACE_VIDEO
|
||||
#ifdef TRACE_VIDEO
|
||||
# define TRACE(x) dprintf x
|
||||
#else
|
||||
# define TRACE(x) ;
|
||||
#endif
|
||||
|
||||
#define write_io_32(a, v) ((*(vuint32 *)a) = v)
|
||||
#define read_io_32(a) (*(vuint32 *)a)
|
||||
|
||||
#define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a))
|
||||
|
||||
|
||||
#if BOARD_CPU_ARM920T
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
extern void *gFrameBufferBase;
|
||||
|
||||
status_t
|
||||
arch_probe_video_mode(void)
|
||||
ArchFBArm920::Init()
|
||||
{
|
||||
gKernelArgs.frame_buffer.enabled = true;
|
||||
|
||||
#warning TODO: ARM920 init
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
ArchFBArm920::Probe()
|
||||
{
|
||||
#if 0
|
||||
// TODO: More dynamic framebuffer base?
|
||||
if (!fBase) {
|
||||
int err = platform_allocate_region(&gFrameBufferBase,
|
||||
gKernelArgs.frame_buffer.physical_buffer.size, 0, false);
|
||||
if (err < B_OK)
|
||||
return err;
|
||||
gKernelArgs.frame_buffer.physical_buffer.start
|
||||
= (addr_t)gFrameBufferBase;
|
||||
dprintf("video framebuffer: %p\n", gFrameBufferBase);
|
||||
}
|
||||
#else
|
||||
gKernelArgs.frame_buffer.physical_buffer.start = fBase;
|
||||
#endif
|
||||
|
||||
gKernelArgs.frame_buffer.depth = 16;
|
||||
gKernelArgs.frame_buffer.width = 1024;
|
||||
gKernelArgs.frame_buffer.height = 768;
|
||||
@ -59,42 +69,25 @@ arch_probe_video_mode(void)
|
||||
* gKernelArgs.frame_buffer.height
|
||||
* gKernelArgs.frame_buffer.depth / 8;
|
||||
|
||||
#if 0
|
||||
if (!gFrameBufferBase) {
|
||||
int err = platform_allocate_region(&gFrameBufferBase,
|
||||
gKernelArgs.frame_buffer.physical_buffer.size, 0, false);
|
||||
if (err < B_OK) return err;
|
||||
gKernelArgs.frame_buffer.physical_buffer.start
|
||||
= (addr_t)gFrameBufferBase;
|
||||
dprintf("video framebuffer: %p\n", gFrameBufferBase);
|
||||
}
|
||||
#else
|
||||
gFrameBufferBase = (void *)0x88000000;
|
||||
gKernelArgs.frame_buffer.physical_buffer.start = (addr_t)gFrameBufferBase;
|
||||
#endif
|
||||
|
||||
dprintf("video mode: %ux%ux%u\n", gKernelArgs.frame_buffer.width,
|
||||
gKernelArgs.frame_buffer.height, gKernelArgs.frame_buffer.depth);
|
||||
|
||||
gKernelArgs.frame_buffer.enabled = true;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
arch_set_video_mode(int width, int height, int depth)
|
||||
ArchFBArm920::SetDefaultMode()
|
||||
{
|
||||
return B_OK;
|
||||
return SetVideoMode(gKernelArgs.frame_buffer.width,
|
||||
gKernelArgs.frame_buffer.height,
|
||||
gKernelArgs.frame_buffer.depth);
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
arch_set_default_video_mode()
|
||||
ArchFBArm920::SetVideoMode(int width, int height, int depth)
|
||||
{
|
||||
return arch_set_video_mode(800, 600, 32);
|
||||
#warning TODO: ArchFBArm920 SetVideoMode
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -1,11 +1,16 @@
|
||||
/*
|
||||
* Copyright 2009, François Revol, revol@free.fr.
|
||||
* Copyright 2009-2012 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* François Revol, revol@free.fr
|
||||
* Alexander von Gluck IV, kallisti5@unixzen.com
|
||||
*/
|
||||
|
||||
|
||||
#include "arch_video.h"
|
||||
#include "arch_framebuffer.h"
|
||||
|
||||
#include <arch/arm/omap3.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <boot/stage2.h>
|
||||
#include <boot/platform.h>
|
||||
@ -20,31 +25,35 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "graphics/omap/omap3_regs.h"
|
||||
|
||||
|
||||
//XXX
|
||||
extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size,
|
||||
uint32 flags);
|
||||
|
||||
|
||||
#define TRACE_VIDEO
|
||||
#ifdef TRACE_VIDEO
|
||||
# define TRACE(x) dprintf x
|
||||
#else
|
||||
# define TRACE(x) ;
|
||||
#endif
|
||||
|
||||
#define write_io_32(a, v) ((*(vuint32 *)a) = v)
|
||||
#define read_io_32(a) (*(vuint32 *)a)
|
||||
|
||||
#define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a))
|
||||
|
||||
|
||||
#if BOARD_CPU_OMAP3
|
||||
class ArchFBArmOmap3 : public ArchFramebuffer {
|
||||
public:
|
||||
ArchFBArmOmap3(addr_t base);
|
||||
~ArchFBArmOmap3();
|
||||
status_t Init();
|
||||
status_t Probe();
|
||||
status_t SetDefaultMode();
|
||||
status_t SetVideoMode(int width, int height, int depth);
|
||||
};
|
||||
|
||||
ArchFBArmOmap3 *arch_get_fb_arm_omap3(addr_t base);
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
#include "graphics/omap/omap3_regs.h"
|
||||
|
||||
extern void *gFrameBufferBase;
|
||||
|
||||
struct video_mode {
|
||||
short width, height;
|
||||
@ -224,7 +233,9 @@ omap_dispc_init(void)
|
||||
}
|
||||
|
||||
|
||||
static void omap_set_lcd_mode(int w, int h) {
|
||||
static void
|
||||
omap_set_lcd_mode(int w, int h)
|
||||
{
|
||||
uint32 DISPC = DISPC_BASE;
|
||||
unsigned int i;
|
||||
struct video_mode *m;
|
||||
@ -260,12 +271,12 @@ found:
|
||||
|
||||
|
||||
static void
|
||||
omap_attach_framebuffer(void *data, int width, int height, int depth)
|
||||
omap_attach_framebuffer(addr_t data, int width, int height, int depth)
|
||||
{
|
||||
uint32 DISPC = DISPC_BASE;
|
||||
uint32 gsize = ((height - 1) << 16) | (width - 1);
|
||||
|
||||
dprintf("omap3: attach bitmap (%d,%d) %p to screen\n", width, height, data);
|
||||
dprintf("omap3: attach bitmap (%d,%d) to screen\n", width, height);
|
||||
|
||||
setreg(DISPC, DISPC_GFX_BA0, (uint32)data);
|
||||
setreg(DISPC, DISPC_GFX_BA1, (uint32)data);
|
||||
@ -286,10 +297,10 @@ omap_attach_framebuffer(void *data, int width, int height, int depth)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
omap_init(void)
|
||||
status_t
|
||||
ArchFBArmOmap3::Init()
|
||||
{
|
||||
dprintf("omap3: video_init()\n");
|
||||
gKernelArgs.frame_buffer.enabled = true;
|
||||
|
||||
setreg(DISPC_BASE, DISPC_IRQENABLE, 0x00000);
|
||||
setreg(DISPC_BASE, DISPC_IRQSTATUS, 0x1ffff);
|
||||
@ -298,12 +309,29 @@ omap_init(void)
|
||||
omap_clock_init();
|
||||
omap_dss_init();
|
||||
omap_dispc_init();
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
arch_probe_video_mode(void)
|
||||
ArchFBArmOmap3::Probe()
|
||||
{
|
||||
|
||||
#if 0
|
||||
// TODO: More dynamic framebuffer base?
|
||||
if (!fBase) {
|
||||
int err = platform_allocate_region(&gFrameBufferBase,
|
||||
gKernelArgs.frame_buffer.physical_buffer.size, 0, false);
|
||||
if (err < B_OK) return err;
|
||||
gKernelArgs.frame_buffer.physical_buffer.start
|
||||
= (addr_t)gFrameBufferBase;
|
||||
dprintf("video framebuffer: %p\n", gFrameBufferBase);
|
||||
}
|
||||
#else
|
||||
gKernelArgs.frame_buffer.physical_buffer.start = fBase;
|
||||
#endif
|
||||
|
||||
gKernelArgs.frame_buffer.depth = 16;
|
||||
gKernelArgs.frame_buffer.width = 1024;
|
||||
gKernelArgs.frame_buffer.height = 768;
|
||||
@ -313,50 +341,31 @@ arch_probe_video_mode(void)
|
||||
* gKernelArgs.frame_buffer.height
|
||||
* gKernelArgs.frame_buffer.depth / 8;
|
||||
|
||||
#if 0
|
||||
if (!gFrameBufferBase) {
|
||||
int err = platform_allocate_region(&gFrameBufferBase,
|
||||
gKernelArgs.frame_buffer.physical_buffer.size, 0, false);
|
||||
if (err < B_OK) return err;
|
||||
gKernelArgs.frame_buffer.physical_buffer.start
|
||||
= (addr_t)gFrameBufferBase;
|
||||
dprintf("video framebuffer: %p\n", gFrameBufferBase);
|
||||
}
|
||||
#else
|
||||
gFrameBufferBase = (void *)0x88000000;
|
||||
gKernelArgs.frame_buffer.physical_buffer.start = (addr_t)gFrameBufferBase;
|
||||
#endif
|
||||
|
||||
dprintf("video mode: %ux%ux%u\n", gKernelArgs.frame_buffer.width,
|
||||
TRACE("video mode: %ux%ux%u\n", gKernelArgs.frame_buffer.width,
|
||||
gKernelArgs.frame_buffer.height, gKernelArgs.frame_buffer.depth);
|
||||
|
||||
gKernelArgs.frame_buffer.enabled = true;
|
||||
|
||||
omap_init();
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
arch_set_video_mode(int width, int height, int depth)
|
||||
ArchFBArmOmap3::SetVideoMode(int width, int height, int depth)
|
||||
{
|
||||
dprintf("arch_set_video_mode %d,%d @ %d\n", width, height, depth);
|
||||
TRACE("%s: %dx%d@%d\n", __func__, width, height, depth);
|
||||
|
||||
omap_set_lcd_mode(width, height);
|
||||
omap_attach_framebuffer(gFrameBufferBase, width, height, depth);
|
||||
omap_attach_framebuffer(fBase, width, height, depth);
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
arch_set_default_video_mode()
|
||||
ArchFBArmOmap3::SetDefaultMode()
|
||||
{
|
||||
dprintf("arch_set_default_video_mode()\n");
|
||||
CALLED();
|
||||
|
||||
return arch_set_video_mode(1024, 768, 16);
|
||||
return SetVideoMode(gKernelArgs.frame_buffer.width,
|
||||
gKernelArgs.frame_buffer.height,
|
||||
gKernelArgs.frame_buffer.depth);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
@ -1,10 +1,14 @@
|
||||
/*
|
||||
* Copyright 2009, François Revol, revol@free.fr.
|
||||
* Copyright 2009-2012 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* François Revol, revol@free.fr
|
||||
* Alexander von Gluck IV, kallisti5@unixzen.com
|
||||
*/
|
||||
|
||||
|
||||
#include "arch_video.h"
|
||||
#include "arch_framebuffer.h"
|
||||
|
||||
#include <arch/cpu.h>
|
||||
#include <boot/stage2.h>
|
||||
@ -26,12 +30,21 @@ extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size,
|
||||
uint32 flags);
|
||||
|
||||
|
||||
#define TRACE_VIDEO
|
||||
#ifdef TRACE_VIDEO
|
||||
# define TRACE(x) dprintf x
|
||||
#else
|
||||
# define TRACE(x) ;
|
||||
#endif
|
||||
class ArchFBArmPxa270 : public ArchFramebuffer {
|
||||
public:
|
||||
ArchFBArmPxa270(addr_t base);
|
||||
~ArchFBArmPxa270();
|
||||
status_t Init();
|
||||
status_t Probe();
|
||||
status_t SetDefaultMode();
|
||||
status_t SetVideoMode(int width, int height, int depth);
|
||||
};
|
||||
|
||||
ArchFBArmPxa270 *arch_get_fb_arm_pxa270(addr_t base);
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
#define write_io_32(a, v) ((*(vuint32 *)a) = v)
|
||||
#define read_io_32(a) (*(vuint32 *)a)
|
||||
@ -39,22 +52,48 @@ extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size,
|
||||
#define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a))
|
||||
|
||||
|
||||
#if BOARD_CPU_PXA270
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
extern void *gFrameBufferBase;
|
||||
static struct pxa27x_lcd_dma_descriptor sVideoDMADesc;
|
||||
static uint32 scratch[128] __attribute__((aligned(16)));
|
||||
|
||||
|
||||
status_t
|
||||
arch_probe_video_mode(void)
|
||||
ArchFBArmPxa270::Init()
|
||||
{
|
||||
dprintf("%s()\n", __FUNCTION__);
|
||||
uint32 bppCode, pixelFormat;
|
||||
gKernelArgs.frame_buffer.enabled = true;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
ArchFBArmPxa270::Probe()
|
||||
{
|
||||
CALLED();
|
||||
|
||||
#if 0
|
||||
// TODO: More dynamic framebuffer base?
|
||||
if (!fBase) {
|
||||
// XXX: realloc if larger !!!
|
||||
err = platform_allocate_region(&gFrameBufferBase, fbSize, 0, false);
|
||||
dprintf("error %08x\n", err);
|
||||
if (err < B_OK)
|
||||
return err;
|
||||
gKernelArgs.frame_buffer.physical_buffer.start
|
||||
= (addr_t)gFrameBufferBase;
|
||||
/*
|
||||
gFrameBufferBase = (void *)mmu_map_physical_memory(
|
||||
0xa8000000, fbSize, 0);
|
||||
if (gFrameBufferBase == NULL)
|
||||
return B_NO_MEMORY;
|
||||
gKernelArgs.frame_buffer.physical_buffer.start
|
||||
= (addr_t)gFrameBufferBase; // 0xa8000000;
|
||||
*/
|
||||
}
|
||||
#else
|
||||
gKernelArgs.frame_buffer.physical_buffer.start = fBase;
|
||||
#endif
|
||||
|
||||
uint32 bppCode;
|
||||
uint32 pixelFormat;
|
||||
struct pxa27x_lcd_dma_descriptor *dma;
|
||||
|
||||
// check if LCD controller is enabled
|
||||
@ -83,7 +122,7 @@ arch_probe_video_mode(void)
|
||||
case 10:
|
||||
gKernelArgs.frame_buffer.depth = 32; // RGB888
|
||||
break;
|
||||
defaut:
|
||||
default:
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
@ -100,15 +139,12 @@ arch_probe_video_mode(void)
|
||||
dprintf("video mode: %ux%ux%u\n", gKernelArgs.frame_buffer.width,
|
||||
gKernelArgs.frame_buffer.height, gKernelArgs.frame_buffer.depth);
|
||||
|
||||
gKernelArgs.frame_buffer.enabled = true;
|
||||
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
arch_set_video_mode(int width, int height, int depth)
|
||||
ArchFBArmPxa270::SetVideoMode(int width, int height, int depth)
|
||||
{
|
||||
dprintf("%s(%d, %d, %d)\n", __FUNCTION__, width, height, depth);
|
||||
status_t err;
|
||||
@ -119,32 +155,9 @@ arch_set_video_mode(int width, int height, int depth)
|
||||
//fb = scratch - 800;
|
||||
//fb = (void *)0xa0000000;
|
||||
|
||||
// gFrameBufferBase = scratch - 800;
|
||||
// fBase = scratch - 800;
|
||||
|
||||
#if 1
|
||||
gFrameBufferBase = (void *)0xa4000000;
|
||||
gKernelArgs.frame_buffer.physical_buffer.start = (addr_t)gFrameBufferBase;
|
||||
#endif
|
||||
#if 0
|
||||
if (!gFrameBufferBase) {
|
||||
// XXX: realloc if larger !!!
|
||||
err = platform_allocate_region(&gFrameBufferBase, fbSize, 0, false);
|
||||
dprintf("error %08x\n", err);
|
||||
if (err < B_OK)
|
||||
return err;
|
||||
gKernelArgs.frame_buffer.physical_buffer.start
|
||||
= (addr_t)gFrameBufferBase;
|
||||
/*
|
||||
gFrameBufferBase = (void *)mmu_map_physical_memory(
|
||||
0xa8000000, fbSize, 0);
|
||||
if (gFrameBufferBase == NULL)
|
||||
return B_NO_MEMORY;
|
||||
gKernelArgs.frame_buffer.physical_buffer.start
|
||||
= (addr_t)gFrameBufferBase; // 0xa8000000;
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
fb = gFrameBufferBase;
|
||||
fb = (void*)fBase;
|
||||
|
||||
dprintf("fb @ %p\n", fb);
|
||||
|
||||
@ -200,16 +213,15 @@ dprintf("error %08x\n", err);
|
||||
}
|
||||
|
||||
// update framebuffer descriptor
|
||||
return arch_probe_video_mode();
|
||||
return Probe();
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
arch_set_default_video_mode()
|
||||
ArchFBArmPxa270::SetDefaultMode()
|
||||
{
|
||||
dprintf("%s()\n", __FUNCTION__);
|
||||
return arch_set_video_mode(800, 600, 32);
|
||||
CALLED();
|
||||
return SetVideoMode(gKernelArgs.frame_buffer.width,
|
||||
gKernelArgs.frame_buffer.height,
|
||||
gKernelArgs.frame_buffer.depth);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
@ -1,67 +0,0 @@
|
||||
/*
|
||||
* Copyright 2009, François Revol, revol@free.fr.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
|
||||
#include "arch_video.h"
|
||||
|
||||
#include <arch/cpu.h>
|
||||
#include <boot/stage2.h>
|
||||
#include <boot/platform.h>
|
||||
#include <boot/menu.h>
|
||||
#include <boot/kernel_args.h>
|
||||
#include <boot/platform/generic/video.h>
|
||||
#include <board_config.h>
|
||||
#include <util/list.h>
|
||||
#include <drivers/driver_settings.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
//XXX
|
||||
extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size,
|
||||
uint32 flags);
|
||||
|
||||
|
||||
#define TRACE_VIDEO
|
||||
#ifdef TRACE_VIDEO
|
||||
# define TRACE(x) dprintf x
|
||||
#else
|
||||
# define TRACE(x) ;
|
||||
#endif
|
||||
|
||||
#define write_io_32(a, v) ((*(vuint32 *)a) = v)
|
||||
#define read_io_32(a) (*(vuint32 *)a)
|
||||
|
||||
#define dumpr(a) dprintf("LCC:%s:0x%lx\n", #a, read_io_32(a))
|
||||
|
||||
|
||||
#if !BOARD_CPU_PXA270 && !BOARD_CPU_OMAP3 && !BOARD_CPU_ARM920T
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
status_t
|
||||
arch_probe_video_mode(void)
|
||||
{
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
arch_set_video_mode(int width, int height, int depth)
|
||||
{
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
arch_set_default_video_mode()
|
||||
{
|
||||
return arch_set_video_mode(800, 600, 32);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
@ -1,17 +0,0 @@
|
||||
/*
|
||||
* Copyright 2009, Haiku Inc.
|
||||
* All rights reserved. Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _ARCH_VIDEO_H
|
||||
#define _ARCH_VIDEO_H
|
||||
|
||||
#include <SupportDefs.h>
|
||||
|
||||
/* try to detect current video mode and set gFrameBuffer accordingly */
|
||||
extern status_t arch_probe_video_mode();
|
||||
/* try to set a video mode */
|
||||
extern status_t arch_set_video_mode(int width, int height, int depth);
|
||||
extern status_t arch_set_default_video_mode();
|
||||
|
||||
|
||||
#endif /* _ARCH_VIDEO_H */
|
@ -5,10 +5,6 @@
|
||||
|
||||
|
||||
#include "video.h"
|
||||
//XXX
|
||||
#ifdef __ARM__
|
||||
#include "arch_video.h"
|
||||
#endif
|
||||
|
||||
#include <arch/cpu.h>
|
||||
#include <boot/stage2.h>
|
||||
@ -23,15 +19,10 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "arch_framebuffer.h"
|
||||
|
||||
#define TRACE_VIDEO
|
||||
#ifdef TRACE_VIDEO
|
||||
# define TRACE(x) dprintf x
|
||||
#else
|
||||
# define TRACE(x) ;
|
||||
#endif
|
||||
|
||||
void *gFrameBufferBase = NULL;
|
||||
ArchFramebuffer *gFramebuffer = NULL;
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
@ -66,7 +57,6 @@ video_mode_menu()
|
||||
}
|
||||
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
@ -77,15 +67,16 @@ platform_set_palette(const uint8 *palette)
|
||||
|
||||
|
||||
extern "C" void
|
||||
platform_blit4(addr_t frameBuffer, const uint8 *data, uint16 width, uint16 height,
|
||||
uint16 imageWidth, uint16 left, uint16 top)
|
||||
platform_blit4(addr_t frameBuffer, const uint8 *data, uint16 width,
|
||||
uint16 height, uint16 imageWidth, uint16 left, uint16 top)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
extern "C" void
|
||||
platform_switch_to_logo(void)
|
||||
{
|
||||
TRACE(("%s()\n", __FUNCTION__));
|
||||
CALLED();
|
||||
// in debug mode, we'll never show the logo
|
||||
if ((platform_boot_options() & BOOT_OPTION_DEBUG_OUTPUT) != 0)
|
||||
return;
|
||||
@ -95,15 +86,15 @@ platform_switch_to_logo(void)
|
||||
|
||||
status_t err;
|
||||
|
||||
#ifdef __ARM__
|
||||
err = arch_set_default_video_mode();
|
||||
dprintf("set video mode: 0x%08x\n", err);
|
||||
if (err < B_OK)
|
||||
return;
|
||||
#endif
|
||||
if (gFramebuffer != NULL) {
|
||||
err = gFramebuffer->SetDefaultMode();
|
||||
if (err < B_OK) {
|
||||
ERROR("Framebuffer SetDefaultMode failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
err = video_display_splash((addr_t)gFrameBufferBase);
|
||||
dprintf("video_display_splash: 0x%08x\n", err);
|
||||
err = video_display_splash(gFramebuffer->Base());
|
||||
}
|
||||
#warning U-Boot:TODO
|
||||
}
|
||||
|
||||
@ -111,7 +102,7 @@ platform_switch_to_logo(void)
|
||||
extern "C" void
|
||||
platform_switch_to_text_mode(void)
|
||||
{
|
||||
TRACE(("%s()\n", __FUNCTION__));
|
||||
CALLED();
|
||||
#warning U-Boot:TODO
|
||||
}
|
||||
|
||||
@ -119,14 +110,26 @@ platform_switch_to_text_mode(void)
|
||||
extern "C" status_t
|
||||
platform_init_video(void)
|
||||
{
|
||||
TRACE(("%s()\n", __FUNCTION__));
|
||||
#warning U-Boot:TODO
|
||||
CALLED();
|
||||
|
||||
#ifdef __ARM__
|
||||
arch_probe_video_mode();
|
||||
#if defined(BOARD_CPU_ARM920T)
|
||||
gFramebuffer = arch_get_fb_arm_920(0x88000000);
|
||||
#elif defined(BOARD_CPU_OMAP3)
|
||||
gFramebuffer = arch_get_fb_arm_omap3(0x88000000);
|
||||
#elif defined(BOARD_CPU_PXA270)
|
||||
gFramebuffer = arch_get_fb_arm_pxa270(0xA4000000);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (gFramebuffer != NULL) {
|
||||
gFramebuffer->Probe();
|
||||
gFramebuffer->Init();
|
||||
}
|
||||
|
||||
//XXX for testing
|
||||
//platform_switch_to_logo();
|
||||
//return arch_probe_video_mode();
|
||||
//return B_OK;
|
||||
}
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user