mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-21 02:01:38 +00:00
parent
e717ad656f
commit
b3eecfcced
@ -11,15 +11,46 @@ namespace Fiasco {
|
||||
#include <l4/sys/task.h>
|
||||
|
||||
enum Cap_selectors {
|
||||
TASK_CAP = L4_BASE_TASK_CAP,
|
||||
PARENT_CAP = 0x8UL << L4_CAP_SHIFT,
|
||||
THREADS_BASE_CAP = 0x9UL << L4_CAP_SHIFT,
|
||||
|
||||
/**********************************************
|
||||
** Capability seclectors controlled by core **
|
||||
**********************************************/
|
||||
|
||||
TASK_CAP = L4_BASE_TASK_CAP, /* use the same task cap selector
|
||||
like L4Re for compatibility in
|
||||
L4Linux */
|
||||
|
||||
/*
|
||||
* To not clash with other L4Re cap selector constants (e.g.: L4Linux)
|
||||
* leave the following selectors (2-7) empty
|
||||
*/
|
||||
|
||||
PARENT_CAP = 0x8UL << L4_CAP_SHIFT, /* cap to parent session */
|
||||
|
||||
/*
|
||||
* Each thread has a designated slot in the core controlled cap
|
||||
* selector area, where its ipc gate capability (for server threads),
|
||||
* its irq capability (for locks), and the capability to its pager
|
||||
* gate are stored
|
||||
*/
|
||||
THREAD_AREA_BASE = 0x9UL << L4_CAP_SHIFT, /* offset to thread area */
|
||||
THREAD_AREA_SLOT = 0x3UL << L4_CAP_SHIFT, /* size of one thread slot */
|
||||
THREAD_GATE_CAP = 0, /* offset to the ipc gate
|
||||
cap selector in the slot */
|
||||
THREAD_PAGER_CAP = 0x1UL << L4_CAP_SHIFT, /* offset to the pager
|
||||
cap selector in the slot */
|
||||
THREAD_IRQ_CAP = 0x2UL << L4_CAP_SHIFT, /* offset to the irq cap
|
||||
selector in the slot */
|
||||
MAIN_THREAD_CAP = THREAD_AREA_BASE + THREAD_GATE_CAP, /* shortcut to the
|
||||
main thread's
|
||||
gate cap */
|
||||
|
||||
|
||||
/*********************************************************
|
||||
** Capability seclectors controlled by the task itself **
|
||||
*********************************************************/
|
||||
|
||||
USER_BASE_CAP = 0x200UL << L4_CAP_SHIFT,
|
||||
THREAD_GATE_CAP = 0,
|
||||
THREAD_PAGER_CAP = 0x1UL << L4_CAP_SHIFT,
|
||||
THREAD_IRQ_CAP = 0x2UL << L4_CAP_SHIFT,
|
||||
THREAD_CAP_SLOT = THREAD_IRQ_CAP + L4_CAP_SIZE,
|
||||
MAIN_THREAD_CAP = THREADS_BASE_CAP + THREAD_GATE_CAP
|
||||
};
|
||||
|
||||
enum Utcb_regs {
|
||||
|
@ -53,7 +53,7 @@ int Platform_pd::bind_thread(Platform_thread *thread)
|
||||
else
|
||||
thread->_utcb =
|
||||
reinterpret_cast<l4_utcb_t*>(utcb_area_start() + i * L4_UTCB_OFFSET);
|
||||
Native_thread cap_offset = THREADS_BASE_CAP + i * THREAD_CAP_SLOT;
|
||||
Native_thread cap_offset = THREAD_AREA_BASE + i * THREAD_AREA_SLOT;
|
||||
thread->_gate.remote = cap_offset + THREAD_GATE_CAP;
|
||||
thread->_pager.remote = cap_offset + THREAD_PAGER_CAP;
|
||||
thread->_irq.remote = cap_offset + THREAD_IRQ_CAP;
|
||||
|
@ -118,7 +118,7 @@ static void prepare_l4re_env()
|
||||
env->mem_alloc = L4_INVALID_CAP;
|
||||
env->log = L4_INVALID_CAP;
|
||||
env->main_thread = main_thread_cap.dst();
|
||||
env->rm = Fiasco::THREADS_BASE_CAP + Fiasco::THREAD_PAGER_CAP;
|
||||
env->rm = Fiasco::THREAD_AREA_BASE + Fiasco::THREAD_PAGER_CAP;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user