2 * (c) 2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
3 * Alexander Warg <warg@os.inf.tu-dresden.de>,
4 * Torsten Frenzel <frenzel@os.inf.tu-dresden.de>
5 * economic rights: Technische Universität Dresden (Germany)
7 * This file is part of TUD:OS and distributed under the terms of the
8 * GNU General Public License 2.
9 * Please see the COPYING-GPL-2 file for details.
12 #include <l4/sys/capability>
13 #include <l4/sys/typeinfo_svr>
14 #include <l4/cxx/ipc_server>
22 L4Re::Util::Object_registry registry;
23 static L4::Server<> server(l4_utcb());
26 Phys_fb::setup_ds(char const *name)
28 registry.register_obj(this, name);
29 _fb_ds = L4::Cap<L4Re::Dataspace>(obj_cap().cap());
30 _ds_start = _vidmem_start;
31 _ds_size = _vidmem_size;
33 _cache_flags = L4::Ipc::Gen_fpage<L4::Ipc::Snd_item>::Uncached;
37 Phys_fb::map_hook(l4_addr_t offs, unsigned long flags,
38 l4_addr_t min, l4_addr_t max)
40 // map everything at once, a framebuffer will usually used fully
41 (void)offs; (void)flags; (void)min; (void)max;
46 L4::Cap<L4Re::Dataspace> ds;
50 l4_addr_t a = _vidmem_start;
52 if ((err = L4Re::Env::env()->rm()->find(&a, &sz, &off, &fl, &ds)) < 0)
54 printf("Failed to query video memory: %d\n", err);
58 if ((err = ds->map_region(off, L4Re::Dataspace::Map_rw,
59 _vidmem_start, _vidmem_end)) < 0)
61 printf("Failed to map video memory: %d\n", err);
70 Phys_fb::dispatch(l4_umword_t obj, L4::Ipc_iostream &ios)
76 case L4::Meta::Protocol:
77 return L4::Util::handle_meta_request<L4Re::Video::Goos>(ios);
78 case L4Re::Protocol::Goos:
79 return L4Re::Util::Video::Goos_svr::dispatch(obj, ios);
80 case L4Re::Protocol::Dataspace:
81 return L4Re::Util::Dataspace_svr::dispatch(obj, ios);
88 Prog_args::Prog_args(int argc, char *argv[])
89 : vbemode(~0), do_dummy(false), config_str(0)
93 struct option opts[] = {
94 { "vbemode", required_argument, 0, 'm' },
95 { "config", required_argument, 0, 'c' },
96 { "dummy", no_argument, 0, 'D' },
100 int c = getopt_long(argc, argv, "c:m:D", opts, NULL);
110 vbemode = strtol(optarg, 0, 0);
116 printf("Unknown option '%c'\n", c);
123 int main(int argc, char *argv[])
127 #elif defined(ARCH_x86) || defined(ARCH_amd64)
133 Phys_fb *fb = &dummy_fb;
135 Prog_args args(argc, argv);
137 if (!fb->setup_drv(&args))
140 if (!fb->setup_drv(&args))
142 printf("Failed to setup Framebuffer\n");
150 printf("Failed to initialize frame buffer; Aborting.\n");
154 if (!fb->obj_cap().is_valid())
156 printf("Failed to connect.\n");
160 printf("Starting server loop\n");
161 server.loop(registry);