e0ce63e4e32e08de73d1235c69d2a94f623942ad
[akaros.git] / lib / libmain.c
1 // Called from entry.S to get us going.
2 // entry.S already took care of defining envs, pages, vpd, and vpt.
3
4 #include <inc/lib.h>
5 #include <inc/syscall.h>
6
7 extern void umain(int argc, char **argv);
8
9 volatile env_t *env;
10 char *binaryname = "(PROGRAM NAME UNKNOWN)";
11 syscall_front_ring_t sysfrontring;
12 syscall_desc_pool_t syscall_desc_pool;
13 async_desc_pool_t async_desc_pool;
14 timer_pool_t timer_pool;
15
16 // This is meant to be PER USER THREAD!!! (TODO (benh))
17 async_desc_t* current_async_desc;
18
19 void
20 libmain(int argc, char **argv)
21 {
22         // set env to point at our env structure in envs[].
23         // TODO: for now, the kernel just copies our env struct to the beginning of
24         // procinfo.  When we figure out what we want there, change this.
25         env = (env_t*)procinfo; 
26
27         // Set up the front ring for the general syscall ring
28         // TODO: Reorganize these global variables
29         FRONT_RING_INIT(&sysfrontring, (syscall_sring_t*)procdata, PGSIZE);
30         POOL_INIT(&syscall_desc_pool, MAX_SYSCALLS);
31         POOL_INIT(&async_desc_pool, MAX_ASYNCCALLS);
32
33         // Setup the timer pool 
34         POOL_INIT(&timer_pool, MAX_TIMERS);
35
36         // save the name of the program so that panic() can use it
37         if (argc > 0)
38                 binaryname = argv[0];
39
40         // call user main routine
41         umain(argc, argv);
42
43         // exit gracefully
44         exit();
45 }