X-Git-Url: https://rtime.felk.cvut.cz/gitweb/l4.git/blobdiff_plain/67d10e76e1e5d38d6624679c59e192ee897de76f..615241fa4695499799cebfd8a6dc8d90f3a93f13:/kernel/fiasco/src/kern/globals.cpp diff --git a/kernel/fiasco/src/kern/globals.cpp b/kernel/fiasco/src/kern/globals.cpp index 83f2e3ca8..86a1d7471 100644 --- a/kernel/fiasco/src/kern/globals.cpp +++ b/kernel/fiasco/src/kern/globals.cpp @@ -42,6 +42,45 @@ extern unsigned boot_stack; extern Thread *nil_thread; static Thread *&kernel_thread = nil_thread; +class Kobject_iface; + +class Initial_kobjects +{ +public: + enum + { + Max = 5, + First_cap = 5, + + End_cap = First_cap + Max, + }; + + void register_obj(Kobject_iface *o, unsigned cap) + { + assert (cap >= First_cap); + assert (cap < End_cap); + + cap -= First_cap; + + assert (!_v[cap]); + + _v[cap] = o; + } + + Kobject_iface *obj(unsigned cap) const + { + assert (cap >= First_cap); + assert (cap < End_cap); + + cap -= First_cap; + + return _v[cap]; + } + +private: + Kobject_iface *_v[Max]; +}; + class Global_context_data { @@ -52,6 +91,8 @@ protected: Mword _state; }; +extern Initial_kobjects initial_kobjects; + //--------------------------------------------------------------------------- INTERFACE [mp]: @@ -75,6 +116,7 @@ Mem_space *sigma0_space; Thread *nil_thread; bool running = true; unsigned boot_stack; +Initial_kobjects initial_kobjects; inline NEEDS ["config.h"] Context *context_of(const void *ptr)