1/*
2 * Copyright 2004-2007, Axel D��rfler, axeld@pinc-software.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include "console.h"
8#include "video.h"
9//#include "mmu.h"
10//#include "images.h"
11#include "graphics.h"
12#include "virtio.h"
13#include "FwCfg.h"
14
15#include <arch/cpu.h>
16#include <boot/stage2.h>
17#include <boot/platform.h>
18#include <boot/menu.h>
19#include <boot/kernel_args.h>
20#include <boot/platform/generic/video.h>
21#include <util/list.h>
22#include <drivers/driver_settings.h>
23#include <GraphicsDefs.h>
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29
30//#define TRACE_VIDEO
31#ifdef TRACE_VIDEO
32# define TRACE(x...) dprintf(x)
33#else
34# define TRACE(x...) ;
35#endif
36
37
38//	#pragma mark -
39
40bool
41video_mode_hook(Menu* menu, MenuItem* item)
42{
43	// nothing yet
44	return true;
45}
46
47
48Menu*
49video_mode_menu()
50{
51	Menu* menu = new(nothrow) Menu(CHOICE_MENU, "Select Video Mode");
52	MenuItem* item;
53
54	menu->AddItem(item = new(nothrow) MenuItem("Default"));
55	item->SetMarked(true);
56	item->Select(true);
57	item->SetHelpText("The Default video mode is the one currently configured "
58		"in the system. If there is no mode configured yet, a viable mode will "
59		"be chosen automatically.");
60
61	menu->AddSeparatorItem();
62	menu->AddItem(item = new(nothrow) MenuItem("Return to main menu"));
63	item->SetType(MENU_ITEM_NO_CHOICE);
64
65	return menu;
66}
67
68
69//	#pragma mark - blit
70
71
72extern "C" void
73platform_blit4(addr_t frameBuffer, const uint8* data,
74	uint16 width, uint16 height, uint16 imageWidth, uint16 left, uint16 top)
75{
76}
77
78
79extern "C" void
80platform_set_palette(const uint8* palette)
81{
82}
83
84
85//	#pragma mark -
86
87
88extern "C" void
89platform_switch_to_logo(void)
90{
91	gKernelArgs.frame_buffer.physical_buffer.start = (addr_t)gFramebuf.colors;
92	gKernelArgs.frame_buffer.physical_buffer.size
93		= 4 * gFramebuf.stride * gFramebuf.height;
94	gKernelArgs.frame_buffer.width = gFramebuf.width;
95	gKernelArgs.frame_buffer.height = gFramebuf.height;
96	gKernelArgs.frame_buffer.depth = 32;
97	gKernelArgs.frame_buffer.bytes_per_row = 4 * gFramebuf.stride;
98	gKernelArgs.frame_buffer.enabled = gFramebuf.width > 0 && gFramebuf.height > 0;
99
100	video_display_splash(gKernelArgs.frame_buffer.physical_buffer.start);
101}
102
103
104extern "C" void
105platform_switch_to_text_mode(void)
106{
107	gKernelArgs.frame_buffer.enabled = false;
108}
109
110
111extern "C" status_t
112platform_init_video(void)
113{
114	FwCfg::Init();
115	virtio_init(); // we want heap initalized
116	Clear(gFramebuf, 0xff000000);
117	console_init();
118	return B_OK;
119}
120