mirror of
https://github.com/drasko/codezero.git
synced 2026-01-12 10:53:16 +01:00
Ongoing work for adding per-thread UTCB structures.
Added setting of utcb address to l4_thread_control. This is going to be moved to exchange_registers() since we need to pass both the utcb physical and virtual address and exregs fits such context modification better than thread_control.
This commit is contained in:
@@ -11,9 +11,8 @@
|
||||
#include INC_GLUE(context.h)
|
||||
#include <l4/types.h>
|
||||
|
||||
enum exregs_flags {
|
||||
EXREGS_SET_PAGER = 1,
|
||||
};
|
||||
#define EXREGS_SET_PAGER 1
|
||||
#define EXREGS_SET_UTCB 2
|
||||
|
||||
/* Structure passed by userspace pagers for exchanging registers */
|
||||
struct exregs_data {
|
||||
@@ -21,6 +20,8 @@ struct exregs_data {
|
||||
u32 valid_vect;
|
||||
u32 flags;
|
||||
l4id_t pagerid;
|
||||
unsigned long utcb_phys;
|
||||
unsigned long utcb_virt;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -68,6 +68,8 @@ struct kip {
|
||||
u32 arch_syscall2;
|
||||
u32 arch_syscall3;
|
||||
|
||||
u32 utcb;
|
||||
|
||||
struct kernel_desc kdesc;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef __THREAD_H__
|
||||
#define __THREAD_H__
|
||||
|
||||
#define THREAD_CREATE_MASK 0x00F0
|
||||
#define THREAD_CREATE_MASK 0x0030
|
||||
|
||||
/* Create new thread and new space */
|
||||
#define THREAD_NEW_SPACE 0x0010
|
||||
@@ -12,7 +12,11 @@
|
||||
/* Create new thread, use given space */
|
||||
#define THREAD_SAME_SPACE 0x0030
|
||||
|
||||
|
||||
/* Shared UTCB, New UTCB, No UTCB */
|
||||
#define THREAD_UTCB_MASK 0x00C0
|
||||
#define THREAD_UTCB_NEW 0x0040
|
||||
#define THREAD_UTCB_SAME 0x0080
|
||||
#define THREAD_UTCB_NONE 0x00C0
|
||||
|
||||
|
||||
#define THREAD_ACTION_MASK 0x000F
|
||||
|
||||
@@ -70,7 +70,10 @@ struct ktcb {
|
||||
u32 ts_need_resched; /* Scheduling flag */
|
||||
enum task_state state;
|
||||
struct list_head task_list; /* Global task list. */
|
||||
struct utcb *utcb; /* Reference to task's utcb area */
|
||||
|
||||
/* UTCB related, see utcb.txt in docs */
|
||||
unsigned long utcb_virt; /* Virtual ref to task's utcb area */
|
||||
unsigned long utcb_phys; /* Physical ref to task's utcb area */
|
||||
|
||||
/* Thread times */
|
||||
u32 kernel_time; /* Ticks spent in kernel */
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
#define USER_KIP_PAGE 0xFF000000
|
||||
|
||||
/* ARM-specific offset in KIP that tells the address of UTCB page */
|
||||
#define UTCB_KIP_OFFSET 0xFF0
|
||||
#define UTCB_KIP_OFFSET 0x50
|
||||
|
||||
#define IO_AREA0_VADDR (IO_AREA_START + (ARM_SECTION_SIZE*0))
|
||||
#define IO_AREA1_VADDR (IO_AREA_START + (ARM_SECTION_SIZE*1))
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#ifndef __GLUE_ARM_MESSAGE_H__
|
||||
#define __GLUE_ARM_MESSAGE_H__
|
||||
|
||||
#define MR_REST 56
|
||||
#define MR_TOTAL 6
|
||||
#define MR_TAG 0 /* Contains the purpose of message */
|
||||
#define MR_SENDER 1 /* For anythread receivers to discover sender */
|
||||
|
||||
Reference in New Issue
Block a user