Changeset 6d9c49a in mainline
- Timestamp:
- 2006-03-13T19:39:30Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 45d6add
- Parents:
- 78a95d6f
- Files:
-
- 3 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile
r78a95d6f r6d9c49a 45 45 # 46 46 47 DEFS = -D$(ARCH) -DARCH=\"$(ARCH)\" -DRELEASE=\"$(RELEASE)\" "-DNAME=\"$(NAME)\"" 47 DEFS = -D$(ARCH) -DARCH=\"$(ARCH)\" -DRELEASE=\"$(RELEASE)\" "-DNAME=\"$(NAME)\"" -DKERNEL 48 48 CFLAGS = -fno-builtin -fomit-frame-pointer -Wall -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -nostdlib -nostdinc -Igeneric/include/ 49 49 LFLAGS = -M … … 134 134 generic/src/synch/semaphore.c \ 135 135 generic/src/synch/waitq.c \ 136 generic/src/smp/ipi.c 136 generic/src/smp/ipi.c \ 137 generic/src/ipc/ipc.c 137 138 138 139 ## Test sources -
arch/amd64/include/types.h
r78a95d6f r6d9c49a 49 49 50 50 typedef __u64 __native; 51 typedef __s64 __snative; 51 52 52 53 typedef struct page_specifier pte_t; -
arch/amd64/src/asm_utils.S
r78a95d6f r6d9c49a 208 208 swapgs 209 209 210 sti 210 211 movq %r9, %rcx # Exchange last parameter as a third 211 212 call syscall_handler 212 213 cli # We will be touching stack pointer 214 213 215 popq %r11 214 216 popq %rcx -
arch/amd64/src/syscall.c
r78a95d6f r6d9c49a 63 63 64 64 /** Dispatch system call */ 65 __native syscall_handler(__native id, __native a1, __native a2, __native a3) 65 __native syscall_handler(__native a1, __native a2, __native a3, 66 __native id) 66 67 { 67 interrupts_enable();68 68 if (id < SYSCALL_END) 69 69 return syscall_table[id](a1,a2,a3); 70 70 else 71 71 panic("Undefined syscall %d", id); 72 interrupts_disable();73 72 } -
arch/ia32/include/types.h
r78a95d6f r6d9c49a 48 48 49 49 typedef __u32 __native; 50 typedef __s32 __native; 50 51 51 52 typedef struct page_specifier pte_t; -
arch/ia32/src/interrupt.c
r78a95d6f r6d9c49a 115 115 { 116 116 __native *stack = (__native *) st; 117 117 118 interrupts_enable(); 118 119 if (stack[-2] < SYSCALL_END) 119 120 stack[-2] = syscall_table[stack[-2]](stack[-5], stack[-3], stack[-4]); 120 121 else 121 122 panic("Undefined syscall %d", stack[-2]); 123 interrupts_disable(); 122 124 } 123 125 -
arch/ia64/include/types.h
r78a95d6f r6d9c49a 1 /* 1 2 2 * Copyright (C) 2005 Jakub Jermar 3 3 * All rights reserved. … … 48 48 49 49 typedef __u64 __native; 50 typedef __s64 __native; 50 51 51 52 typedef struct pte pte_t; -
arch/mips32/include/types.h
r78a95d6f r6d9c49a 49 49 50 50 typedef __u32 __native; 51 typedef __s32 __snative; 51 52 52 53 typedef struct pte pte_t; -
arch/mips32/src/exception.c
r78a95d6f r6d9c49a 134 134 static void syscall_exception(int n, struct exception_regdump *pstate) 135 135 { 136 interrupts_enable(); 136 137 if (pstate->a3 < SYSCALL_END) 137 138 pstate->v0 = syscall_table[pstate->a3](pstate->a0, … … 140 141 else 141 142 panic("Undefined syscall %d", pstate->a3); 143 interrupts_disable(); 142 144 pstate->epc += 4; 143 145 } -
arch/sparc64/include/types.h
r78a95d6f r6d9c49a 48 48 49 49 typedef __u64 __native; 50 typedef __s64 __native; 50 51 51 52 typedef struct pte pte_t; -
generic/include/mm/page.h
r78a95d6f r6d9c49a 33 33 #include <arch/types.h> 34 34 #include <typedefs.h> 35 #include <memstr.h> 35 36 36 37 #define PAGE_CACHEABLE_SHIFT 0 … … 60 61 #define PAGE_GLOBAL (1<<PAGE_GLOBAL_SHIFT) 61 62 63 64 /* TODO - check that userspace is OK, platform specific functions etc */ 65 static inline void copy_to_uspace(void *dst, void *src, count_t cnt) 66 { 67 memcpy(dst, src, cnt); 68 } 69 70 static inline void copy_to_kernel(void *dst, void *src, count_t cnt) 71 { 72 memcpy(dst, src, cnt); 73 } 74 62 75 /** Operations to manipulate page mappings. */ 63 76 struct page_mapping_operations { -
generic/include/proc/task.h
r78a95d6f r6d9c49a 33 33 #include <synch/spinlock.h> 34 34 #include <adt/list.h> 35 #include <ipc/ipc.h> 35 36 36 37 /** Task structure. */ … … 40 41 link_t tasks_link; /**< Link to other tasks within the system. */ 41 42 as_t *as; /**< Address space. */ 43 answerbox_t answerbox; /**< Communication endpoint */ 44 phone_t phones[IPC_MAX_PHONES]; 42 45 }; 43 46 -
generic/include/syscall/syscall.h
r78a95d6f r6d9c49a 30 30 #define __SYSCALL_H__ 31 31 32 #include <typedefs.h>33 34 32 typedef enum { 35 33 SYS_CTL = 0, 36 34 SYS_IO = 1, 35 SYS_IPC_CALL = 2, 36 SYS_IPC_ANSWER = 3, 37 SYS_IPC_WAIT = 4, 37 38 SYSCALL_END 38 39 } syscall_t; 39 40 40 typedef int (*syshandler_t)(); 41 #ifdef KERNEL 41 42 42 extern int sys_ctl(void); 43 extern int sys_io(int fd, const void *buf, size_t count); 43 #include <arch/types.h> 44 #include <typedefs.h> 45 46 typedef __native (*syshandler_t)(); 44 47 45 48 extern syshandler_t syscall_table[SYSCALL_END]; 46 49 47 50 #endif 51 52 #endif -
generic/src/main/kinit.c
r78a95d6f r6d9c49a 139 139 interrupts_enable(); 140 140 141 ipc_create_phonecompany(); 142 141 143 if (config.init_size > 0) { 142 144 /* -
generic/src/main/main.c
r78a95d6f r6d9c49a 55 55 #include <arch/faddr.h> 56 56 #include <typedefs.h> 57 #include <ipc/ipc.h> 57 58 58 59 #ifdef CONFIG_SMP … … 191 192 if (config.init_size > 0) 192 193 printf("config.init_addr=%P, config.init_size=%d\n", config.init_addr, config.init_size); 193 194 195 ipc_init(); 194 196 /* 195 197 * Create kernel task. -
generic/src/proc/task.c
r78a95d6f r6d9c49a 36 36 #include <panic.h> 37 37 #include <adt/list.h> 38 #include <ipc/ipc.h> 39 #include <memstr.h> 38 40 39 41 SPINLOCK_INITIALIZE(tasks_lock); … … 71 73 list_initialize(&ta->tasks_link); 72 74 ta->as = as; 75 76 ipc_answerbox_init(&ta->answerbox); 77 memsetb((__address)&ta->phones, sizeof(ta->phones[0])*IPC_MAX_PHONES, 0); 78 if (ipc_central_box) 79 ipc_phone_init(&ta->phones[0], ipc_central_box); 73 80 74 81 ipl = interrupts_disable(); -
generic/src/syscall/syscall.c
r78a95d6f r6d9c49a 31 31 #include <print.h> 32 32 #include <putchar.h> 33 #include <ipc/ipc.h> 34 #include <errno.h> 35 #include <proc/task.h> 36 #include <arch.h> 37 #include <debug.h> 33 38 34 intsys_ctl(void) {39 static __native sys_ctl(void) { 35 40 printf("Thread finished\n"); 36 41 thread_exit(); … … 39 44 } 40 45 41 intsys_io(int fd, const void * buf, size_t count) {46 static __native sys_io(int fd, const void * buf, size_t count) { 42 47 43 48 // TODO: buf sanity checks and a lot of other stuff ... … … 51 56 } 52 57 58 /** Send a call over syscall 59 * 60 * @return Call identification, returns -1 on fatal error, 61 -2 on 'Too many async request, handle answers first 62 */ 63 static __native sys_ipc_call(__native phoneid, __native arg1, __native arg2) 64 { 65 call_t *call; 66 phone_t *phone; 67 68 if (phoneid >= IPC_MAX_PHONES) 69 return -ENOENT; 70 71 phone = &TASK->phones[phoneid]; 72 if (!phone->callee) 73 return -ENOENT; 74 75 76 /* TODO: Check that we did not exceed system imposed maximum 77 * of asynchrnously sent messages 78 * - the userspace should be able to handle it correctly 79 */ 80 call = ipc_call_alloc(); 81 call->data[0] = arg1; 82 call->data[1] = arg2; 83 ipc_call(phone, call); 84 85 return (__native) call; 86 } 87 88 /** Send IPC answer */ 89 static __native sys_ipc_answer(__native callid, __native arg1, __native arg2) 90 { 91 call_t *call; 92 93 /* Check that the user is not sending us answer callid */ 94 ASSERT(! (callid & 1)); 95 /* TODO: Check that the callid is in the dispatch table */ 96 call = (call_t *) callid; 97 98 call->data[0] = arg1; 99 call->data[1] = arg2; 100 101 ipc_answer(&TASK->answerbox, call); 102 return 0; 103 } 104 105 /** Wait for incoming ipc call or answer 106 * 107 * @param result 108 * @param flags 109 * @return Callid, if callid & 1, then the call is answer 110 */ 111 static __native sys_ipc_wait_for_call(__native *calldata, __native flags) 112 { 113 call_t *call; 114 115 call = ipc_wait_for_call(&TASK->answerbox, flags); 116 copy_to_uspace(calldata, &call->data, sizeof(__native) * IPC_CALL_LEN); 117 118 if (call->flags & IPC_CALL_ANSWERED) 119 return ((__native)call) | 1; 120 return (__native)call; 121 } 122 123 53 124 syshandler_t syscall_table[SYSCALL_END] = { 54 125 sys_ctl, 55 sys_io 126 sys_io, 127 sys_ipc_call, 128 sys_ipc_answer, 129 sys_ipc_wait_for_call 56 130 };
Note:
See TracChangeset
for help on using the changeset viewer.