Changeset 5f70118 in mainline for kernel/generic/include
- Timestamp:
- 2010-01-10T12:16:59Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c77a64f
- Parents:
- 309ede1 (diff), 1ac3a52 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- kernel/generic/include
- Files:
-
- 1 added
- 16 edited
-
arch.h (modified) (1 diff)
-
context.h (modified) (2 diffs)
-
debug.h (modified) (2 diffs)
-
interrupt.h (modified) (2 diffs)
-
ipc/ipc.h (modified) (3 diffs)
-
main/main.h (modified) (1 diff)
-
panic.h (modified) (1 diff)
-
print.h (modified) (1 diff)
-
printf/printf_core.h (modified) (1 diff)
-
proc/task.h (modified) (3 diffs)
-
proc/thread.h (modified) (2 diffs)
-
stacktrace.h (added)
-
stdarg.h (modified) (3 diffs)
-
string.h (modified) (1 diff)
-
symtab.h (modified) (1 diff)
-
synch/futex.h (modified) (2 diffs)
-
syscall/syscall.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/arch.h
r309ede1 r5f70118 39 39 #include <proc/thread.h> 40 40 #include <proc/task.h> 41 #include <mm/as.h> 41 42 42 43 #define DEFAULT_CONTEXT 0 -
kernel/generic/include/context.h
r309ede1 r5f70118 51 51 /** Save register context. 52 52 * 53 * Save current register context (including stack pointers) 54 * to context structure. 55 * 56 * Note that call to context_restore() will return at the same 53 * Save the current register context (including stack pointer) to a context 54 * structure. A subsequent call to context_restore() will return to the same 57 55 * address as the corresponding call to context_save(). 58 56 * 59 * This MUST be a macro, gcc -O0 does not inline functions even 60 * if they are marked inline and context_save_arch must be called 61 * from level <= that when context_restore is called. 57 * Note that context_save_arch() must reuse the stack frame of the function 58 * which called context_save(). We guarantee this by: 62 59 * 63 * @param c Context structure. 60 * a) implementing context_save_arch() in assembly so that it does not create 61 * its own stack frame, and by 62 * b) defining context_save() as a macro because the inline keyword is just a 63 * hint for the compiler, not a real constraint; the application of a macro 64 * will definitely not create a stack frame either. 64 65 * 65 * @return context_save() returns 1, context_restore() returns 0. 66 * To imagine what could happen if there were some extra stack frames created 67 * either by context_save() or context_save_arch(), we need to realize that the 68 * sp saved in the contex_t structure points to the current stack frame as it 69 * existed when context_save_arch() was executing. After the return from 70 * context_save_arch() and context_save(), any extra stack frames created by 71 * these functions will be destroyed and their contents sooner or later 72 * overwritten by functions called next. Any attempt to restore to a context 73 * saved like that would therefore lead to a disaster. 74 * 75 * @param c Context structure. 76 * 77 * @return context_save() returns 1, context_restore() returns 0. 66 78 */ 67 79 #define context_save(c) context_save_arch(c) … … 69 81 /** Restore register context. 70 82 * 71 * Restore previously saved register context (including stack pointers)72 * fromcontext structure.83 * Restore a previously saved register context (including stack pointer) from 84 * a context structure. 73 85 * 74 * Note that this function does not normally return. 75 * Instead, it returns at the same address as the 76 * corresponding call to context_save(), the only 77 * difference being return value. 86 * Note that this function does not normally return. Instead, it returns to the 87 * same address as the corresponding call to context_save(), the only difference 88 * being return value. 78 89 * 79 * @param c Context structure.90 * @param c Context structure. 80 91 */ 81 92 static inline void context_restore(context_t *c) -
kernel/generic/include/debug.h
r309ede1 r5f70118 75 75 # define LOG(format, ...) \ 76 76 printf("%s() at %s:%u: " format "\n", __func__, __FILE__, \ 77 __LINE__, ##__VA_ARGS__);77 __LINE__, ##__VA_ARGS__); 78 78 #else 79 79 # define LOG(format, ...) … … 92 92 { \ 93 93 printf("%s() at %s:%u: " #fnc "\n", __func__, __FILE__, \ 94 __LINE__); \94 __LINE__); \ 95 95 fnc; \ 96 96 } -
kernel/generic/include/interrupt.h
r309ede1 r5f70118 42 42 #include <arch.h> 43 43 #include <ddi/irq.h> 44 #include <stacktrace.h> 44 45 45 46 typedef void (* iroutine)(int n, istate_t *istate); … … 49 50 if (istate_from_uspace(istate)) { \ 50 51 task_t *task = TASK; \ 51 printf("Task %s (%" PRIu64 ") killed due to an exception at %p: ", task->name, task->taskid, istate_get_pc(istate)); \ 52 printf(fmt "\n", ##__VA_ARGS__); \ 52 printf("Task %s (%" PRIu64 ") killed due to an exception at " \ 53 "program counter %p.\n", task->name, task->taskid, istate_get_pc(istate)); \ 54 stack_trace_istate(istate); \ 55 printf("Kill message: " fmt "\n", ##__VA_ARGS__); \ 53 56 task_kill(task->taskid); \ 54 57 thread_exit(); \ -
kernel/generic/include/ipc/ipc.h
r309ede1 r5f70118 51 51 /** This is answer to a call */ 52 52 #define IPC_CALL_ANSWERED (1 << 0) 53 /** This call will not be freed on error */54 #define IPC_CALL_STATIC_ALLOC (1 << 1)55 53 /** Answer will not be passed to userspace, will be discarded */ 56 #define IPC_CALL_DISCARD_ANSWER (1 << 2)54 #define IPC_CALL_DISCARD_ANSWER (1 << 1) 57 55 /** Call was forwarded */ 58 #define IPC_CALL_FORWARDED (1 << 3)56 #define IPC_CALL_FORWARDED (1 << 2) 59 57 /** Identify connect_me_to answer */ 60 #define IPC_CALL_CONN_ME_TO (1 << 4)58 #define IPC_CALL_CONN_ME_TO (1 << 3) 61 59 /** Interrupt notification */ 62 #define IPC_CALL_NOTIF (1 << 5)60 #define IPC_CALL_NOTIF (1 << 4) 63 61 64 62 /* … … 267 265 waitq_t wq; 268 266 267 /** Linkage for the list of task's synchronous answerboxes. */ 268 link_t sync_box_link; 269 269 270 /** Phones connected to this answerbox. */ 270 271 link_t connected_phones; … … 316 317 } call_t; 317 318 319 320 extern answerbox_t *ipc_phone_0; 321 322 318 323 extern void ipc_init(void); 319 extern call_t * ipc_wait_for_call(answerbox_t *, uint32_t, int); 320 extern void ipc_answer(answerbox_t *, call_t *); 324 325 extern call_t * ipc_call_alloc(int); 326 extern void ipc_call_free(call_t *); 327 321 328 extern int ipc_call(phone_t *, call_t *); 322 329 extern int ipc_call_sync(phone_t *, call_t *); 330 extern call_t * ipc_wait_for_call(answerbox_t *, uint32_t, int); 331 extern int ipc_forward(call_t *, phone_t *, answerbox_t *, int); 332 extern void ipc_answer(answerbox_t *, call_t *); 333 323 334 extern void ipc_phone_init(phone_t *); 324 335 extern void ipc_phone_connect(phone_t *, answerbox_t *); 325 extern void ipc_call_free(call_t *);326 extern call_t * ipc_call_alloc(int); 336 extern int ipc_phone_hangup(phone_t *); 337 327 338 extern void ipc_answerbox_init(answerbox_t *, struct task *); 328 extern void ipc_call_static_init(call_t *); 329 extern void task_print_list(void); 330 extern int ipc_forward(call_t *, phone_t *, answerbox_t *, int); 339 331 340 extern void ipc_cleanup(void); 332 extern int ipc_phone_hangup(phone_t *);333 341 extern void ipc_backsend_err(phone_t *, call_t *, unative_t); 334 extern void ipc_print_task(task_id_t);335 342 extern void ipc_answerbox_slam_phones(answerbox_t *, bool); 336 343 extern void ipc_cleanup_call_list(link_t *); 337 344 338 extern answerbox_t *ipc_phone_0;345 extern void ipc_print_task(task_id_t); 339 346 340 347 #endif -
kernel/generic/include/main/main.h
r309ede1 r5f70118 38 38 #include <arch/types.h> 39 39 40 extern size_t hardcoded_kdata_size; 41 extern size_t hardcoded_ktext_size; 42 extern uintptr_t hardcoded_load_address; 40 43 extern uintptr_t stack_safe; 41 44 -
kernel/generic/include/panic.h
r309ede1 r5f70118 36 36 #define KERN_PANIC_H_ 37 37 38 #include <stacktrace.h> 39 #include <print.h> 40 38 41 #ifdef CONFIG_DEBUG 39 42 # define panic(format, ...) \ 40 panic_printf("Kernel panic in %s() at %s:%u: " format "\n", \ 41 __func__, __FILE__, __LINE__, ##__VA_ARGS__); 43 do { \ 44 printf("Kernel panic in %s() at %s:%u.\n", \ 45 __func__, __FILE__, __LINE__); \ 46 stack_trace(); \ 47 panic_printf("Panic message: " format "\n", \ 48 ##__VA_ARGS__);\ 49 } while (0) 42 50 #else 43 51 # define panic(format, ...) \ -
kernel/generic/include/print.h
r309ede1 r5f70118 37 37 38 38 #include <arch/types.h> 39 #include < arch/arg.h>39 #include <stdarg.h> 40 40 41 41 #define EOF (-1) -
kernel/generic/include/printf/printf_core.h
r309ede1 r5f70118 37 37 38 38 #include <typedefs.h> 39 #include < arch/arg.h>39 #include <stdarg.h> 40 40 41 41 /** Structure for specifying output methods for different printf clones. */ -
kernel/generic/include/proc/task.h
r309ede1 r5f70118 55 55 #include <udebug/udebug.h> 56 56 #include <ipc/kbox.h> 57 #include <mm/as.h> 57 58 58 59 #define TASK_NAME_BUFLEN 20 … … 98 99 */ 99 100 atomic_t active_calls; 101 /** List of synchronous answerboxes. */ 102 link_t sync_box_head; 100 103 101 104 #ifdef CONFIG_UDEBUG … … 132 135 extern int task_kill(task_id_t id); 133 136 extern uint64_t task_get_accounting(task_t *t); 137 extern void task_print_list(void); 134 138 135 139 extern void cap_set(task_t *t, cap_t caps); -
kernel/generic/include/proc/thread.h
r309ede1 r5f70118 225 225 226 226 extern void thread_init(void); 227 extern thread_t *thread_create(void (* func)(void *), void *arg, task_t *task,228 int flags, char *name, bool uncounted);229 extern void thread_attach(thread_t * t, task_t *task);230 extern void thread_ready(thread_t * t);227 extern thread_t *thread_create(void (*)(void *), void *, task_t *, int, char *, 228 bool); 229 extern void thread_attach(thread_t *, task_t *); 230 extern void thread_ready(thread_t *); 231 231 extern void thread_exit(void) __attribute__((noreturn)); 232 232 233 233 #ifndef thread_create_arch 234 extern void thread_create_arch(thread_t * t);234 extern void thread_create_arch(thread_t *); 235 235 #endif 236 236 #ifndef thr_constructor_arch 237 extern void thr_constructor_arch(thread_t * t);237 extern void thr_constructor_arch(thread_t *); 238 238 #endif 239 239 #ifndef thr_destructor_arch 240 extern void thr_destructor_arch(thread_t * t);241 #endif 242 243 extern void thread_sleep(uint32_t sec);244 extern void thread_usleep(uint32_t usec);240 extern void thr_destructor_arch(thread_t *); 241 #endif 242 243 extern void thread_sleep(uint32_t); 244 extern void thread_usleep(uint32_t); 245 245 246 246 #define thread_join(t) \ 247 247 thread_join_timeout((t), SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE) 248 extern int thread_join_timeout(thread_t *t, uint32_t usec, int flags); 249 extern void thread_detach(thread_t *t); 250 251 extern void thread_register_call_me(void (* call_me)(void *), 252 void *call_me_with); 248 extern int thread_join_timeout(thread_t *, uint32_t, int); 249 extern void thread_detach(thread_t *); 250 251 extern void thread_register_call_me(void (*)(void *), void *); 253 252 extern void thread_print_list(void); 254 extern void thread_destroy(thread_t * t);253 extern void thread_destroy(thread_t *); 255 254 extern void thread_update_accounting(void); 256 extern bool thread_exists(thread_t * t);255 extern bool thread_exists(thread_t *); 257 256 258 257 /** Fpu context slab cache. */ … … 260 259 261 260 /* Thread syscall prototypes. */ 262 extern unative_t sys_thread_create(uspace_arg_t *uspace_uarg, 263 char *uspace_name, size_t name_len, thread_id_t *uspace_thread_id); 264 extern unative_t sys_thread_exit(int uspace_status); 265 extern unative_t sys_thread_get_id(thread_id_t *uspace_thread_id); 261 extern unative_t sys_thread_create(uspace_arg_t *, char *, size_t, 262 thread_id_t *); 263 extern unative_t sys_thread_exit(int); 264 extern unative_t sys_thread_get_id(thread_id_t *); 265 extern unative_t sys_thread_usleep(uint32_t); 266 266 267 267 #endif -
kernel/generic/include/stdarg.h
r309ede1 r5f70118 27 27 */ 28 28 29 /** @addtogroup generic 29 /** @addtogroup generic 30 30 * @{ 31 31 */ … … 37 37 * for all architectures with compiler support for __builtin_va_*. 38 38 */ 39 39 40 40 #ifndef KERN_STDARG_H_ 41 41 #define KERN_STDARG_H_ … … 43 43 typedef __builtin_va_list va_list; 44 44 45 #define va_start(ap, last) __builtin_va_start(ap, last)46 #define va_arg(ap, type) __builtin_va_arg(ap, type)47 #define va_end(ap) __builtin_va_end(ap)48 #define va_copy(dst, src) __builtin_va_copy(dst, src)45 #define va_start(ap, last) __builtin_va_start(ap, last) 46 #define va_arg(ap, type) __builtin_va_arg(ap, type) 47 #define va_end(ap) __builtin_va_end(ap) 48 #define va_copy(dst, src) __builtin_va_copy(dst, src) 49 49 50 50 #endif -
kernel/generic/include/string.h
r309ede1 r5f70118 87 87 extern void str_cpy(char *dest, size_t size, const char *src); 88 88 extern void str_ncpy(char *dest, size_t size, const char *src, size_t n); 89 extern void wstr_ nstr(char *dst, const wchar_t *src, size_t size);89 extern void wstr_to_str(char *dest, size_t size, const wchar_t *src); 90 90 91 91 extern char *str_chr(const char *str, wchar_t ch); -
kernel/generic/include/symtab.h
r309ede1 r5f70118 45 45 }; 46 46 47 extern int symtab_name_lookup(u native_t addr, char **name);48 extern char *symtab_fmt_name_lookup(u native_t addr);49 extern int symtab_addr_lookup(const char * name, uintptr_t *addr);50 extern void symtab_print_search(const char * name);51 extern int symtab_compl(char * input, size_t size);47 extern int symtab_name_lookup(uintptr_t, char **, uintptr_t *); 48 extern char *symtab_fmt_name_lookup(uintptr_t); 49 extern int symtab_addr_lookup(const char *, uintptr_t *); 50 extern void symtab_print_search(const char *); 51 extern int symtab_compl(char *, size_t); 52 52 53 53 #ifdef CONFIG_SYMTAB -
kernel/generic/include/synch/futex.h
r309ede1 r5f70118 38 38 #include <arch/types.h> 39 39 #include <synch/waitq.h> 40 #include <genarch/mm/page_ht.h>41 #include <genarch/mm/page_pt.h>42 40 43 41 /** Kernel-side futex structure. */ … … 54 52 55 53 extern void futex_init(void); 56 extern unative_t sys_futex_sleep_timeout(uintptr_t uaddr, uint32_t usec, 57 int flags); 58 extern unative_t sys_futex_wakeup(uintptr_t uaddr); 54 extern unative_t sys_futex_sleep(uintptr_t); 55 extern unative_t sys_futex_wakeup(uintptr_t); 59 56 60 57 extern void futex_cleanup(void); -
kernel/generic/include/syscall/syscall.h
r309ede1 r5f70118 43 43 SYS_THREAD_EXIT, 44 44 SYS_THREAD_GET_ID, 45 SYS_THREAD_USLEEP, 45 46 46 47 SYS_TASK_GET_ID,
Note:
See TracChangeset
for help on using the changeset viewer.
