diff options
author | Yuji Mano <yuji.mano@am.sony.com> | 2009-03-13 18:18:25 -0700 |
---|---|---|
committer | Yuji Mano <yuji.mano@am.sony.com> | 2009-03-17 11:08:23 -0700 |
commit | 1fb157e165cfb08898722a8f2c14871b507f7010 (patch) | |
tree | 7465b6fc8ab9bca6f6dcfdec24de0ed305efbdaa | |
parent | 97dc905a135cff3ed3e009ada9d5bdb356988116 (diff) | |
download | mars-src-1fb157e165cfb08898722a8f2c14871b507f7010.tar.gz |
base: Kernel cleanup
This just removes some unecessary casting in the kernel and minor cosmetic
cleanups in prepartion for following patches.
Signed-off-by: Yuji Mano <yuji.mano@am.sony.com>
Acked-by: Kazunori Asayama <asayama@sm.sony.co.jp>
-rw-r--r-- | base/src/mpu/kernel/kernel.c | 135 |
1 files changed, 65 insertions, 70 deletions
diff --git a/base/src/mpu/kernel/kernel.c b/base/src/mpu/kernel/kernel.c index fe1138c..a755255 100644 --- a/base/src/mpu/kernel/kernel.c +++ b/base/src/mpu/kernel/kernel.c @@ -76,16 +76,13 @@ typedef void (*module_entry)( static int kernel_memcmp(const void *s1, const void *s2, int size) { - unsigned char *ptr_1 = (unsigned char *)s1; - unsigned char *ptr_2 = (unsigned char *)s2; - unsigned char *ptr_e = (unsigned char *)ptr_1 + size; + const unsigned char *ptr_1 = (const unsigned char *)s1; + const unsigned char *ptr_2 = (const unsigned char *)s2; + const unsigned char *ptr_e = ptr_1 + size; - while (ptr_1 < ptr_e) { - if (*ptr_1 != *ptr_2) + while (ptr_1 < ptr_e) + if (*ptr_1++ != *ptr_2++) return 1; - ptr_1++; - ptr_2++; - } return 0; } @@ -93,14 +90,11 @@ static int kernel_memcmp(const void *s1, const void *s2, int size) static void kernel_memcpy(void *dst, const void *src, int size) { unsigned char *ptr_1 = (unsigned char *)dst; - unsigned char *ptr_2 = (unsigned char *)src; - unsigned char *ptr_e = (unsigned char *)ptr_1 + size; + const unsigned char *ptr_2 = (const unsigned char *)src; + const unsigned char *ptr_e = ptr_1 + size; - while (ptr_1 < ptr_e) { - *ptr_1 = *ptr_2; - ptr_1++; - ptr_2++; - } + while (ptr_1 < ptr_e) + *ptr_1++ = *ptr_2++; } static uint32_t get_ticks(void) @@ -143,28 +137,13 @@ static struct mars_workload_context *get_workload_by_id(uint16_t id) return &workload; /* get the workload context from workload queue */ - dma_get((void *)&ret_workload, get_workload_ea(id), + dma_get(&ret_workload, get_workload_ea(id), sizeof(struct mars_workload_context), MARS_KERNEL_DMA_TAG); dma_wait(MARS_KERNEL_DMA_TAG); return &ret_workload; } -static void __attribute__((noinline)) save_workload_state(uint8_t state) -{ - workload_state = state; -} - -static void workload_exit(uint8_t state) -{ - register void *sp asm("$sp"); - - save_workload_state(state); - - /* restore kernel stack pointer */ - sp = __kernel_stack; -} - static uint64_t get_block_ea(int block) { return queue_header.queue_ea + @@ -272,36 +251,6 @@ static void update_header_bits_counter(int block, int reset) (struct mars_mutex *)&queue_header); } -static int workload_query(uint16_t id, int query) -{ - uint64_t bits = get_block_bits(id); - - switch (query) { - case MARS_QUERY_IS_CACHED: - return (id == workload_id && workload_cached); - case MARS_QUERY_IS_INITIALIZED: - return (MARS_BITS_GET(&bits, WORKLOAD_STATE) != - MARS_WORKLOAD_STATE_NONE); - case MARS_QUERY_IS_READY: - return (MARS_BITS_GET(&bits, WORKLOAD_STATE) == - MARS_WORKLOAD_STATE_READY); - case MARS_QUERY_IS_WAITING: - return (MARS_BITS_GET(&bits, WORKLOAD_STATE) == - MARS_WORKLOAD_STATE_WAITING); - case MARS_QUERY_IS_RUNNING: - return (MARS_BITS_GET(&bits, WORKLOAD_STATE) == - MARS_WORKLOAD_STATE_RUNNING); - case MARS_QUERY_IS_FINISHED: - return (MARS_BITS_GET(&bits, WORKLOAD_STATE) == - MARS_WORKLOAD_STATE_FINISHED); - case MARS_QUERY_IS_SIGNAL_SET: - return (MARS_BITS_GET(&bits, WORKLOAD_SIGNAL) == - MARS_WORKLOAD_SIGNAL_ON); - } - - return MARS_ERROR_PARAMS; -} - static int change_bits(uint16_t id, int (*check_bits)(uint64_t bits, uint64_t param), uint64_t check_bits_param, @@ -379,6 +328,52 @@ static int change_state(uint16_t id, callback); } + +static void __attribute__((noinline)) save_workload_state(uint8_t state) +{ + workload_state = state; +} + +static void workload_exit(uint8_t state) +{ + register void *sp asm("$sp"); + + save_workload_state(state); + + /* restore kernel stack pointer */ + sp = __kernel_stack; +} + +static int workload_query(uint16_t id, int query) +{ + uint64_t bits = get_block_bits(id); + + switch (query) { + case MARS_QUERY_IS_CACHED: + return (id == workload_id && workload_cached); + case MARS_QUERY_IS_INITIALIZED: + return (MARS_BITS_GET(&bits, WORKLOAD_STATE) != + MARS_WORKLOAD_STATE_NONE); + case MARS_QUERY_IS_READY: + return (MARS_BITS_GET(&bits, WORKLOAD_STATE) == + MARS_WORKLOAD_STATE_READY); + case MARS_QUERY_IS_WAITING: + return (MARS_BITS_GET(&bits, WORKLOAD_STATE) == + MARS_WORKLOAD_STATE_WAITING); + case MARS_QUERY_IS_RUNNING: + return (MARS_BITS_GET(&bits, WORKLOAD_STATE) == + MARS_WORKLOAD_STATE_RUNNING); + case MARS_QUERY_IS_FINISHED: + return (MARS_BITS_GET(&bits, WORKLOAD_STATE) == + MARS_WORKLOAD_STATE_FINISHED); + case MARS_QUERY_IS_SIGNAL_SET: + return (MARS_BITS_GET(&bits, WORKLOAD_SIGNAL) == + MARS_WORKLOAD_SIGNAL_ON); + } + + return MARS_ERROR_PARAMS; +} + static uint64_t set_wait_id_bits(uint64_t bits, uint64_t id) { MARS_BITS_SET(&bits, WORKLOAD_WAIT_ID, id); @@ -449,7 +444,7 @@ static void schedule_begin_callback(uint16_t id) schedule_workload_id = id; /* get the workload context from workload queue */ - dma_get((void *)&schedule_workload, get_workload_ea(id), + dma_get(&schedule_workload, get_workload_ea(id), sizeof(struct mars_workload_context), MARS_KERNEL_DMA_TAG); dma_wait(MARS_KERNEL_DMA_TAG); } @@ -682,7 +677,7 @@ static void notify_host_bits(uint64_t block_ea, int index) host_signal_send(bits_ea); } -static int reserve_workload(void) +static int workload_reserve(void) { int i; int block = -1; @@ -748,7 +743,7 @@ static int reserve_workload(void) return MARS_KERNEL_STATUS_BUSY; } -static void release_workload(void) +static void workload_release(void) { int block = workload_id / MARS_WORKLOAD_PER_BLOCK; int index = workload_id % MARS_WORKLOAD_PER_BLOCK; @@ -776,7 +771,7 @@ static void release_workload(void) notify_host_bits(block_ea, index); } -static void __attribute__((noinline)) run_workload(void) +static void __attribute__((noinline)) workload_run(void) { register void *sp asm("$sp"); @@ -787,7 +782,7 @@ static void __attribute__((noinline)) run_workload(void) ((module_entry)workload.module.entry)(&kernel_syscalls); } -static void load_workload_module(void) +static void workload_module_load(void) { __vector unsigned char *bss_ptr, *bss_end; @@ -820,18 +815,18 @@ static void load_workload_module(void) static int scheduler(void) { - int status = reserve_workload(); + int status = workload_reserve(); /* workload reserved */ if (status == MARS_KERNEL_STATUS_BUSY) { /* load the workload module */ - load_workload_module(); + workload_module_load(); /* run workload */ - run_workload(); + workload_run(); /* release reservation of current workload */ - release_workload(); + workload_release(); } return status; |