]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/fb-drv/server/src/lcddrv.cc
Inital import
[l4.git] / l4 / pkg / fb-drv / server / src / lcddrv.cc
1 /*
2  * (c) 2009 Technische Universität Dresden
3  * This file is part of TUD:OS and distributed under the terms of the
4  * GNU General Public License 2.
5  * Please see the COPYING-GPL-2 file for details.
6  */
7
8 #include <l4/arm_drivers/lcd.h>
9 #include <l4/sys/cache.h>
10 #include <cstdio>
11
12 #include "fb.h"
13 #include "splash.h"
14
15 bool
16 Lcd_drv_fb::setup_drv(Prog_args *pa)
17 {
18   struct arm_lcd_ops *lcd;
19
20   if (!(lcd = arm_lcd_probe(pa->config_str)))
21     {
22       printf("Could not find LCD.\n");
23       return false;
24     }
25
26   printf("Using LCD driver: %s\n", lcd->get_info());
27
28   _vidmem_start = (l4_addr_t)lcd->get_fb();
29
30   if (!_vidmem_start)
31     {
32       printf("Driver init failed\n");
33       return false;
34     }
35
36   _vidmem_size  = lcd->get_video_mem_size();
37   _vidmem_end   = _vidmem_start + _vidmem_size;
38
39   if (lcd->get_fbinfo((l4re_video_view_info_t *)&_view_info))
40     {
41       printf("Failed to get driver framebuffer info\n");
42       return false;
43     }
44
45   _screen_info.width = _view_info.width;
46   _screen_info.height = _view_info.height;
47   _screen_info.flags = L4Re::Video::Goos::F_auto_refresh;
48   _screen_info.pixel_info = _view_info.pixel_info;
49   _view_info.buffer_offset = 0;
50
51   init_infos();
52
53   lcd->enable();
54
55   splash_display(&_screen_info, _vidmem_start);
56
57   // slow
58   //l4_cache_dma_coherent(_vidmem_start, _vidmem_start + _vidmem_size);
59   l4_cache_dma_coherent_full();
60   return true;
61 }