]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/ned/doc/Aw.lua
update
[l4.git] / l4 / pkg / ned / doc / Aw.lua
1
2 module("Aw", package.seeall);
3
4 require("L4");
5
6 -- The defaults for loading the services
7 loader = L4.default_loader;
8
9 local rom = L4.Env.rom;
10
11 local bus_rtc;
12 local bus_usbhid;
13 local bus_gfx;
14 local bus_ps2;
15 local rtc_if;
16 local hid_ev;
17
18
19 -- start the IO server, with the given arguments.
20 -- @return A capability table, containing all the
21 --         capabilities to the buses specified in the config files
22 --         of IO.
23 function io(busses, ...)
24   bus_rtc    = loader:new_channel();
25   bus_usbhid = loader:new_channel();
26   bus_gfx    = loader:new_channel();
27   bus_ps2    = loader:new_channel();
28
29   local io_caps = {
30     rom = rom;
31     icu = L4.Env.icu;
32     sigma0 = L4.cast(L4.Proto.Factory, L4.Env.sigma0):create(L4.Proto.Sigma0);
33
34     rtc_bus    = bus_rtc:svr();
35     bus_usbhid = bus_usbhid:svr();
36     bus        = bus_ps2:svr();
37     fb_bus     = bus_gfx:svr();
38   };
39
40   for k, v in pairs(busses) do
41     io_caps[k] = v:svr();
42   end
43
44   loader:startv({
45     caps = io_caps,
46     log = {"io", "red"}, l4re_dbg = L4.Dbg.Warn + L4.Dbg.Loader,
47     scheduler = L4.Env.user_factory:create(L4.Proto.Scheduler, 0x90, 0x80)
48   }, "rom/io", ...);
49   return io_caps;
50 end
51
52 -- Start the RTC server, used on x86 for l4linux
53 -- @return The namespace capability of RTC, containing 'rtc'
54 --         as service cap. 
55 function rtc(...)
56
57   rtc_if = loader:new_channel();
58
59   local rtc_caps = {
60     rom  = rom;
61     vbus = bus_rtc;
62     rtc  = rtc_if:svr();
63   };
64
65   -- drop bus_rtc reference it is no longer needed in ned
66   bus_rtc = nil;
67
68   loader:startv({caps = rtc_caps, log = {"rtc", "green"}}, "rom/rtc", ...);
69   return rtc_if;
70 end
71
72
73 -- Start the HID server.
74 -- @return A capability to the hid name space.
75 --
76 -- Also saves the name-space capability for later use e.g. by gui
77 function hid(...)
78   -- do not start the HID Linux on AMD64
79   if L4.Info.arch() == "amd64" then
80     return;
81   end
82   hid_ev = loader:create_namespace({ ev_irq = "ph", ev_buf="ph" });
83
84   local hid_caps = {
85     rom  = rom;
86     vbus = bus_usbhid;
87     rtc  = rtc_if;
88     ev   = hid_ev:m("rws");
89   };
90
91   bus_usbhid = nil;
92   rtc_if = nil;
93
94   loader:startv({
95     caps = hid_caps,
96     log = {"hid", "m"},
97     scheduler = L4.Env.user_factory:create(L4.Proto.Scheduler, 0x80, 0x70)
98   }, "rom/vmlinuzusbv", "init=none", "showpfexc=0", "mem=12M",
99      "l4x_cpus=4", "l4ser.vkey_enable=1", "console=ttyLv0", ...);
100
101   return hid_caps;
102 end
103
104
105 -- Start the GUI server
106 -- @return The capability to the GUI-server name space.
107 function gui(svc_caps, fb, ...)
108
109   local gui_caps = {
110     rom  = rom;
111     vbus = bus_ps2;
112     fb   = fb;
113   };
114
115   bus_ps2 = nil;
116
117   for k, v in pairs(svc_caps) do
118     gui_caps[k] = v:svr();
119   end
120
121   local input_drv = "";
122   if not hid_ev then -- run mag with libinput
123     input_drv = "input-libinput";
124   else
125     gui_caps.ev = hid_ev;
126     hid_ev = nil;
127     input_drv = "input-lxdd";
128   end
129
130   loader:start({
131     caps = gui_caps,
132     log = { "gui", "yellow" },
133     scheduler =  L4.Env.user_factory:create(L4.Proto.Scheduler, 0x78, 0x70)
134   },
135   "rom/mag " .. input_drv .." client_fb mag_client", ...);
136
137   return gui_caps;
138 end
139
140
141 -- Get the Hw frame-buffer capability.
142 -- This function either uses the 'vesa' capability provided by moe
143 -- or starts fb-drv if 'vesa' is not available.
144 -- @return The capability to the Hw Goos object.
145 function fb(...)
146   local fb = L4.Env.vesa;
147   if fb then
148     return fb;
149   end
150
151   local fb_caps = {
152     rom  = rom;
153     vbus = bus_gfx;
154     fb   = loader:new_channel():svr(); -- gfx
155   };
156
157   bus_gfx = nil;
158
159   loader:startv({caps = fb_caps, log = {"fb-drv","blue"}}, "rom/fb-drv", "-m", ...);
160
161   return fb_caps.fb:m("rw"); --client
162 end
163
164 function cleanup()
165   collectgarbage();
166 end
167