del old ipc code && sema support timeout
This commit is contained in:
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@@ -71,8 +71,8 @@
|
||||
// "miDebuggerPath": "/home/zhangzheng/gcc-arm-10.3-2021.07-aarch64-aarch64-none-elf/bin/aarch64-none-elf-gdb",
|
||||
// "miDebuggerPath": "/home/mkrtos-smart/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf-gdb",
|
||||
// "miDebuggerPath": "/home/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf-gdb",
|
||||
// "miDebuggerPath": "/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gdb",
|
||||
"miDebuggerPath": "/home/zhangzheng/toolchain/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi/bin/arm-none-eabi-gdb",
|
||||
"miDebuggerPath": "/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gdb",
|
||||
// "miDebuggerPath": "/home/zhangzheng/toolchain/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi/bin/arm-none-eabi-gdb",
|
||||
"miDebuggerServerAddress": "127.0.0.1:33333",
|
||||
"MIMode": "gdb",
|
||||
"setupCommands": [
|
||||
|
||||
@@ -32,7 +32,7 @@ CONFIG_FD_MAP_ROW_NR=16
|
||||
#
|
||||
# Sys util config
|
||||
#
|
||||
CONFIG_USING_SIG=y
|
||||
CONFIG_USING_SIG=n
|
||||
CONFIG_SIG_THREAD_STACK_SIZE=512
|
||||
CONFIG_SIG_THREAD_PRIO=3
|
||||
# end of Sys util config
|
||||
|
||||
@@ -32,7 +32,7 @@ CONFIG_FD_MAP_ROW_NR=16
|
||||
#
|
||||
# Sys util config
|
||||
#
|
||||
CONFIG_USING_SIG=y
|
||||
CONFIG_USING_SIG=n
|
||||
CONFIG_SIG_THREAD_STACK_SIZE=512
|
||||
CONFIG_SIG_THREAD_PRIO=3
|
||||
# end of Sys util config
|
||||
|
||||
@@ -59,14 +59,11 @@ add_dependencies(mkrtos_img_dump
|
||||
bootstrap_dump
|
||||
mkrtos_dump
|
||||
init_dump
|
||||
nes_dump
|
||||
# app_dump
|
||||
shell_dump
|
||||
# fatfs_dump
|
||||
appfs_dump
|
||||
vi_dump
|
||||
tst_dump
|
||||
eth_dump
|
||||
net_dump
|
||||
# tcc_dump
|
||||
# eth_dump
|
||||
# nes_dump
|
||||
# net_dump
|
||||
)
|
||||
@@ -104,7 +104,7 @@ void MemManage_Handler(void)
|
||||
}
|
||||
// printk("instr || data 0x%x access is error.\n", fault_addr);
|
||||
if (task_vma_page_fault(&(thread_get_current_task()->mm_space.mem_vma),
|
||||
fault_addr, NULL) < 0)
|
||||
fault_addr & (~(sizeof(void *) - 1)), NULL) < 0)
|
||||
{
|
||||
printk("[semgement fault] task:0x%x, mem_addr:0x%lx bus_addr:0x%lx .\n",
|
||||
thread_get_current_task(), fault_addr, bus_addr);
|
||||
|
||||
@@ -57,7 +57,7 @@ void MemManage_Handler(void)
|
||||
}
|
||||
// printk("instr || data 0x%x access is error.\n", fault_addr);
|
||||
if (task_vma_page_fault(&(thread_get_current_task()->mm_space.mem_vma),
|
||||
fault_addr, NULL) < 0)
|
||||
fault_addr & (~(sizeof(void *) - 1)), NULL) < 0)
|
||||
{
|
||||
printk("[semgement fault] task:0x%x, mem_addr:0x%lx bus_addr:0x%lx .\n",
|
||||
thread_get_current_task(), fault_addr, bus_addr);
|
||||
|
||||
@@ -99,7 +99,7 @@ void MemManage_Handler(void)
|
||||
}
|
||||
// printk("instr || data 0x%x access is error.\n", fault_addr);
|
||||
if (task_vma_page_fault(&(thread_get_current_task()->mm_space.mem_vma),
|
||||
fault_addr, NULL) < 0)
|
||||
fault_addr & (~(sizeof(void *) - 1)), NULL) < 0)
|
||||
{
|
||||
printk("[semgement fault] task:0x%x, mem_addr:0x%lx bus_addr:0x%lx .\n",
|
||||
thread_get_current_task(), fault_addr, bus_addr);
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "futex.h"
|
||||
#include "irq.h"
|
||||
#include "thread_knl.h"
|
||||
#include "sleep.h"
|
||||
static umword_t sys_tick_cnt;
|
||||
|
||||
umword_t sys_tick_cnt_get(void)
|
||||
@@ -16,7 +17,10 @@ void SysTick_Handler(void)
|
||||
// 进行上下文切换
|
||||
thread_sched(TRUE);
|
||||
sys_tick_cnt++;
|
||||
#if 0
|
||||
thread_timeout_check(1);
|
||||
#endif
|
||||
thread_check_timeout();
|
||||
futex_timeout_times_tick();
|
||||
thread_calc_cpu_usage();
|
||||
#if 0
|
||||
|
||||
@@ -16,15 +16,15 @@ typedef sema_t mutex_t;
|
||||
|
||||
void sema_init(sema_t *obj, int cnt, int max);
|
||||
void sema_up(sema_t *obj);
|
||||
void sema_down(sema_t *obj);
|
||||
umword_t sema_down(sema_t *obj, umword_t ticks);
|
||||
|
||||
static inline void mutex_init(mutex_t *lock)
|
||||
{
|
||||
sema_init(lock, 1, 1);
|
||||
}
|
||||
static inline void mutex_lock(mutex_t *lock)
|
||||
static inline void mutex_lock(mutex_t *lock, umword_t ticks)
|
||||
{
|
||||
sema_down(lock);
|
||||
sema_down(lock, ticks);
|
||||
}
|
||||
static inline void mutex_unlock(mutex_t *lock)
|
||||
{
|
||||
|
||||
13
mkrtos_knl/inc/knl/sleep.h
Normal file
13
mkrtos_knl/inc/knl/sleep.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#pragma
|
||||
|
||||
#include "thread.h"
|
||||
typedef struct thread_wait_entry
|
||||
{
|
||||
slist_head_t node;
|
||||
thread_t *th;
|
||||
umword_t times;
|
||||
} thread_wait_entry_t;
|
||||
void thread_check_timeout(void);
|
||||
thread_wait_entry_t *thread_sleep_del(thread_t *th);
|
||||
void thread_sleep_del_and_wakeup(thread_t *th);
|
||||
umword_t thread_sleep(umword_t tick);
|
||||
@@ -144,14 +144,14 @@ typedef struct thread
|
||||
bool_t is_vcpu; //!< 是否是vcpu
|
||||
|
||||
msg_buf_t msg; //!< 每个线程独有的消息缓存区
|
||||
|
||||
#if 0
|
||||
slist_head_t wait_send_head; //!< 等待头,那些节点等待给当前线程发送数据
|
||||
spinlock_t recv_lock; //!< 当前线程接收消息时锁住
|
||||
spinlock_t send_lock; //!< 当前线程发送消息时锁住
|
||||
bool_t has_wait_send_th; //!< 有线程等待给当前线程发送消息
|
||||
|
||||
thread_t *last_send_th; //!< 当前线程上次接收到谁的数据
|
||||
kobject_t *ipc_kobj; //!< 发送者放到一个ipc对象中
|
||||
#endif
|
||||
umword_t user_id; //!< 接收到的user_id
|
||||
|
||||
enum thread_state status; //!< 线程状态
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "init.h"
|
||||
#include "ref.h"
|
||||
#include "slist.h"
|
||||
#include "sleep.h"
|
||||
#if IS_ENABLED(CONFIG_BUDDY_SLAB)
|
||||
#include <slab.h>
|
||||
static slab_t *sema_slab;
|
||||
@@ -65,8 +66,8 @@ void sema_up(sema_t *obj)
|
||||
slist_del(first_wait_node);
|
||||
if (ref_counter_dec_and_release(&first_wait->thread->ref, &first_wait->thread->kobj) != 1)
|
||||
{
|
||||
|
||||
thread_ready_remote(first_wait->thread, FALSE);
|
||||
// thread_ready_remote(first_wait->thread, FALSE);
|
||||
thread_sleep_del_and_wakeup(first_wait->thread);
|
||||
}
|
||||
if (obj->cnt < obj->max_cnt)
|
||||
{
|
||||
@@ -77,12 +78,14 @@ void sema_up(sema_t *obj)
|
||||
spinlock_set(&obj->lock, status);
|
||||
preemption();
|
||||
}
|
||||
void sema_down(sema_t *obj)
|
||||
umword_t sema_down(sema_t *obj, umword_t ticks)
|
||||
{
|
||||
assert(obj);
|
||||
thread_t *th = thread_get_current();
|
||||
umword_t status;
|
||||
umword_t remain_sleep = 0;
|
||||
sema_wait_item_t wait_item;
|
||||
|
||||
again:
|
||||
status = spinlock_lock(&obj->lock);
|
||||
if (obj->cnt == 0)
|
||||
@@ -90,7 +93,8 @@ again:
|
||||
sema_wait_item_init(&wait_item, th);
|
||||
ref_counter_inc(&th->ref);
|
||||
slist_add_append(&obj->suspend_head, &wait_item.node);
|
||||
thread_suspend_sw(th, FALSE);
|
||||
// thread_suspend_sw(th, FALSE);
|
||||
remain_sleep = thread_sleep(ticks);
|
||||
spinlock_set(&obj->lock, status);
|
||||
preemption();
|
||||
goto again;
|
||||
@@ -102,6 +106,7 @@ again:
|
||||
// printk("down sema cnt:%d max:%d.\n", obj->cnt, obj->max_cnt);
|
||||
}
|
||||
spinlock_set(&obj->lock, status);
|
||||
return remain_sleep;
|
||||
}
|
||||
|
||||
static void sema_syscall(kobject_t *kobj, syscall_prot_t sys_p,
|
||||
@@ -126,7 +131,10 @@ static void sema_syscall(kobject_t *kobj, syscall_prot_t sys_p,
|
||||
break;
|
||||
case SEMA_DOWN:
|
||||
{
|
||||
sema_down(sema);
|
||||
umword_t ret;
|
||||
|
||||
ret = sema_down(sema, f->regs[0]);
|
||||
f->regs[1] = ret;
|
||||
tag = msg_tag_init4(0, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
124
mkrtos_knl/knl/sleep.c
Normal file
124
mkrtos_knl/knl/sleep.c
Normal file
@@ -0,0 +1,124 @@
|
||||
/**
|
||||
* @file sleep.c
|
||||
* @author your name (1358745329@qq.com)
|
||||
* @brief 线程休眠支持
|
||||
* @version 0.1
|
||||
* @date 2025-02-12
|
||||
*
|
||||
* @copyright Copyright (c) 2025
|
||||
*
|
||||
*/
|
||||
#include <thread.h>
|
||||
#include <types.h>
|
||||
#include <spinlock.h>
|
||||
#include <slist.h>
|
||||
#include <init.h>
|
||||
#include "sleep.h"
|
||||
#include "arch.h"
|
||||
|
||||
static slist_head_t wait_list;
|
||||
static spinlock_t lock;
|
||||
|
||||
static inline void thread_wait_entry_init(thread_wait_entry_t *entry,
|
||||
thread_t *th, mword_t times)
|
||||
{
|
||||
slist_init(&entry->node);
|
||||
entry->th = th;
|
||||
entry->times = times;
|
||||
}
|
||||
static void thread_timeout_init(void)
|
||||
{
|
||||
slist_init(&wait_list);
|
||||
spinlock_init(&lock);
|
||||
}
|
||||
INIT_KOBJ(thread_timeout_init);
|
||||
/**
|
||||
* @brief 必须在中断中调用
|
||||
*
|
||||
*/
|
||||
void thread_check_timeout(void)
|
||||
{
|
||||
thread_wait_entry_t *pos;
|
||||
|
||||
slist_foreach_not_next(
|
||||
pos, (slist_head_t *)&wait_list,
|
||||
node)
|
||||
{
|
||||
assert(pos->th->status == THREAD_SUSPEND);
|
||||
thread_wait_entry_t *next = slist_next_entry(
|
||||
pos, (slist_head_t *)wait_list,
|
||||
node);
|
||||
if (pos->times != 0)
|
||||
{
|
||||
pos->times--;
|
||||
if (pos->times == 0)
|
||||
{
|
||||
thread_ready(pos->th, TRUE);
|
||||
slist_del(&pos->node);
|
||||
}
|
||||
} // !< 如果是0,则一直休眠
|
||||
pos = next;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @brief 从休眠队列中删除
|
||||
*
|
||||
* @param th
|
||||
*/
|
||||
thread_wait_entry_t *thread_sleep_del(thread_t *th)
|
||||
{
|
||||
assert(cpulock_get_status());
|
||||
thread_wait_entry_t *pos = NULL;
|
||||
|
||||
slist_foreach_not_next(
|
||||
pos, (slist_head_t *)&wait_list,
|
||||
node)
|
||||
{
|
||||
assert(pos->th->status == THREAD_SUSPEND);
|
||||
thread_wait_entry_t *next = slist_next_entry(
|
||||
pos, (slist_head_t *)wait_list,
|
||||
node);
|
||||
if (pos->th == th)
|
||||
{
|
||||
slist_del(&pos->node);
|
||||
break;
|
||||
}
|
||||
pos = next;
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
void thread_sleep_del_and_wakeup(thread_t *th)
|
||||
{
|
||||
assert(cpulock_get_status());
|
||||
thread_wait_entry_t *wait;
|
||||
|
||||
wait = thread_sleep_del(th);
|
||||
if (wait == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
thread_ready(wait->th, TRUE);
|
||||
}
|
||||
/**
|
||||
* @brief 放到休眠队列中
|
||||
*
|
||||
* @param tick
|
||||
* @return umword_t 返回剩余的休眠时间
|
||||
*/
|
||||
umword_t thread_sleep(umword_t tick)
|
||||
{
|
||||
assert(cpulock_get_status());
|
||||
|
||||
thread_wait_entry_t entry;
|
||||
thread_t *cur_th = thread_get_current();
|
||||
umword_t status;
|
||||
|
||||
thread_wait_entry_init(&entry, cur_th, tick);
|
||||
status = spinlock_lock(&lock);
|
||||
slist_add(&wait_list, &entry.node);
|
||||
thread_suspend(cur_th);
|
||||
spinlock_set(&lock, status);
|
||||
preemption();
|
||||
|
||||
return entry.times;
|
||||
}
|
||||
@@ -447,7 +447,7 @@ static void task_syscall_func(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t i
|
||||
{
|
||||
task_t *cur_task = thread_get_current_task();
|
||||
|
||||
mutex_lock(&cur_task->nofity_lock);
|
||||
mutex_lock(&cur_task->nofity_lock, 0);
|
||||
tag = msg_tag_init4(0, 0, 0, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "thread_task_arch.h"
|
||||
#include "types.h"
|
||||
#include "sema.h"
|
||||
#include "sleep.h"
|
||||
#if IS_ENABLED(CONFIG_SMP)
|
||||
#include <ipi.h>
|
||||
#endif
|
||||
@@ -51,6 +52,7 @@ enum thread_op
|
||||
YIELD,
|
||||
DO_IPC = 6, //!< 与ipc对象中的额IPC_DO一致
|
||||
SET_EXEC, //!< 设置异常处理
|
||||
SLEEP,
|
||||
};
|
||||
enum IPC_TYPE
|
||||
{
|
||||
@@ -67,7 +69,7 @@ static void thread_syscall(kobject_t *kobj, syscall_prot_t sys_p,
|
||||
static bool_t thread_put(kobject_t *kobj);
|
||||
static void thread_release_stage1(kobject_t *kobj);
|
||||
static void thread_release_stage2(kobject_t *kobj);
|
||||
|
||||
#if 0
|
||||
typedef struct thread_wait_entry
|
||||
{
|
||||
slist_head_t node;
|
||||
@@ -84,7 +86,6 @@ static inline void thread_wait_entry_init(thread_wait_entry_t *entry,
|
||||
entry->th = th;
|
||||
entry->times = times;
|
||||
}
|
||||
|
||||
static PER_CPU(slist_head_t, wait_send_queue);
|
||||
static PER_CPU(slist_head_t, wait_recv_queue);
|
||||
|
||||
@@ -96,8 +97,8 @@ static void thread_timeout_init(void)
|
||||
slist_init(pre_cpu_get_var_cpu(i, (&wait_recv_queue)));
|
||||
}
|
||||
}
|
||||
|
||||
INIT_KOBJ(thread_timeout_init);
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_BUDDY_SLAB)
|
||||
#include <buddy.h>
|
||||
@@ -126,9 +127,11 @@ void thread_init(thread_t *th, ram_limit_t *lim, umword_t flags)
|
||||
kobject_init(&th->kobj, THREAD_TYPE);
|
||||
sched_init(&th->sche);
|
||||
slist_init(&th->futex_node);
|
||||
#if 0
|
||||
slist_init(&th->wait_send_head);
|
||||
spinlock_init(&th->recv_lock);
|
||||
spinlock_init(&th->send_lock);
|
||||
#endif
|
||||
ref_counter_init(&th->ref);
|
||||
ref_counter_inc(&th->ref);
|
||||
thread_arch_init(th, flags);
|
||||
@@ -157,8 +160,11 @@ static void thread_release_stage1_impl(thread_t *th)
|
||||
if (th->status == THREAD_READY)
|
||||
{
|
||||
thread_suspend(th);
|
||||
preemption();
|
||||
}
|
||||
th->ipc_status = THREAD_IPC_ABORT;
|
||||
thread_sleep_del(th); //!< 从休眠中删除
|
||||
#if 0
|
||||
thread_wait_entry_t *pos;
|
||||
|
||||
slist_foreach_not_next(
|
||||
@@ -202,6 +208,7 @@ static void thread_release_stage1_impl(thread_t *th)
|
||||
}
|
||||
pos2 = next;
|
||||
}
|
||||
#endif
|
||||
thread_unbind(th);
|
||||
}
|
||||
#if IS_ENABLED(CONFIG_SMP)
|
||||
@@ -499,7 +506,7 @@ thread_t *thread_create(ram_limit_t *ram, umword_t flags)
|
||||
printk("create thread 0x%x\n", th);
|
||||
return th;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/**
|
||||
* @brief 线程超时检查
|
||||
*
|
||||
@@ -668,6 +675,8 @@ void thread_timeout_del_recv_remote(thread_t *th, bool_t is_sche)
|
||||
thread_ready(th, is_sche); //!< 直接唤醒接受者
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
static int ipc_dat_copy_raw(obj_space_t *dst_obj, obj_space_t *src_obj, ram_limit_t *lim,
|
||||
ipc_msg_t *dst_ipc, ipc_msg_t *src_ipc, msg_tag_t tag, int is_reply)
|
||||
{
|
||||
@@ -706,6 +715,7 @@ static int ipc_dat_copy_raw(obj_space_t *dst_obj, obj_space_t *src_obj, ram_limi
|
||||
MIN(tag.msg_buf_len * WORD_BYTES, IPC_MSG_SIZE));
|
||||
return i;
|
||||
}
|
||||
#if 0
|
||||
/**
|
||||
* @brief ipc传输时的数据拷贝
|
||||
*
|
||||
@@ -1170,6 +1180,7 @@ end:
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
msg_tag_t thread_fast_ipc_call(thread_t *to_th, entry_frame_t *f, umword_t user_id)
|
||||
{
|
||||
task_t *cur_task = thread_get_current_task();
|
||||
@@ -1195,7 +1206,7 @@ _to_unlock:
|
||||
preemption();
|
||||
goto _to_unlock;
|
||||
}
|
||||
mutex_lock(&to_task->nofity_lock);
|
||||
mutex_lock(&to_task->nofity_lock, 0);
|
||||
if (GET_LSB(*to_task->nofity_bitmap, to_task->nofity_bitmap_len) == GET_LSB((~0ULL), to_task->nofity_bitmap_len))
|
||||
{
|
||||
mutex_unlock(&to_task->nofity_lock);
|
||||
@@ -1215,7 +1226,7 @@ _to_unlock:
|
||||
dst_ipc, src_ipc, in_tag, FALSE);
|
||||
if (ret >= 0)
|
||||
{
|
||||
dst_ipc->user[2] = task_pid_get(cur_task); // 设置pid
|
||||
dst_ipc->user[2] = task_pid_get(cur_task); // 设置pid
|
||||
slist_add(&to_task->nofity_theads_head, &cur_th->com->fast_ipc_node); // 添加到链表中,用于进程关闭时进行释放
|
||||
pf_s_t *usr_stask_point = (void *)arch_get_user_sp();
|
||||
|
||||
@@ -1374,6 +1385,7 @@ msg_tag_t thread_do_ipc(kobject_t *kobj, entry_frame_t *f, umword_t user_id)
|
||||
return thread_fast_ipc_call(to_th, f, user_id);
|
||||
}
|
||||
break;
|
||||
#if 0
|
||||
case IPC_CALL:
|
||||
{
|
||||
msg_tag_t in_tag = msg_tag_init(f->regs[0]);
|
||||
@@ -1424,6 +1436,7 @@ msg_tag_t thread_do_ipc(kobject_t *kobj, entry_frame_t *f, umword_t user_id)
|
||||
ret = thread_ipc_call(to_th, in_tag, NULL, ipc_tm_out, NULL, FALSE);
|
||||
return msg_tag_init4(0, 0, 0, ret);
|
||||
}
|
||||
#endif
|
||||
default:
|
||||
ret = -ENOSYS;
|
||||
break;
|
||||
@@ -1649,6 +1662,17 @@ static void thread_syscall(kobject_t *kobj, syscall_prot_t sys_p,
|
||||
tag = msg_tag_init4(0, 0, 0, 0);
|
||||
}
|
||||
break;
|
||||
case SLEEP:
|
||||
{
|
||||
int ret;
|
||||
umword_t status;
|
||||
|
||||
status = cpulock_lock();
|
||||
ret = thread_sleep(f->regs[0]);
|
||||
cpulock_set(status);
|
||||
tag = msg_tag_init4(0, 0, 0, ret);
|
||||
}
|
||||
break;
|
||||
}
|
||||
f->regs[0] = tag.raw;
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
export TOOLCHAIN=/home/zhangzheng/toolchain/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi/bin/
|
||||
export TOOLCHAIN_LIB=/home/zhangzheng/toolchain/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp
|
||||
# export TOOLCHAIN=/home/zhangzheng/toolchain/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi/bin/
|
||||
# export TOOLCHAIN_LIB=/home/zhangzheng/toolchain/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp
|
||||
|
||||
# export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/
|
||||
# export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp
|
||||
export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/
|
||||
export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp
|
||||
|
||||
# export TOOLCHAIN=/d/GNUArmEmbeddedToolchain/102021.10/bin/
|
||||
# export TOOLCHAIN_LIB=/d/GNUArmEmbeddedToolchain/102021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp
|
||||
|
||||
@@ -61,7 +61,7 @@ again:
|
||||
rlen = cons_read((uint8_t *)data, len);
|
||||
if (rlen <= 0)
|
||||
{
|
||||
u_sema_down(SEMA_PROT);
|
||||
u_sema_down(SEMA_PROT, 0, NULL);
|
||||
goto again;
|
||||
}
|
||||
return rlen;
|
||||
|
||||
@@ -50,7 +50,7 @@ static void *mm_page_alloc(int page_nr)
|
||||
u_mutex_init(&lock, handler_alloc());
|
||||
lock_is_init = 1;
|
||||
}
|
||||
u_mutex_lock(&lock);
|
||||
u_mutex_lock(&lock, 0, NULL);
|
||||
for (umword_t i = 0; i < ROUND_UP(max_page_nr, WORD_BITS); i++)
|
||||
{
|
||||
if (mm_bitmap[i] != (umword_t)(-1))
|
||||
@@ -106,7 +106,7 @@ static int mm_page_free(int st, int nr)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
u_mutex_lock(&lock);
|
||||
u_mutex_lock(&lock, 0, NULL);
|
||||
for (int i = st; (i < st + nr) && (i < max_page_nr); i++)
|
||||
{
|
||||
MK_CLR_BIT(mm_bitmap[i / WORD_BITS], i % WORD_BITS);
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "u_futex.h"
|
||||
#include <assert.h>
|
||||
#include <limits.h>
|
||||
#include "u_sleep.h"
|
||||
#include <pthread.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
@@ -61,8 +62,10 @@ void be_exit(long exit_code)
|
||||
task_unmap(TASK_THIS, vpage_create_raw3(KOBJ_DELETE_RIGHT, 0, TASK_THIS)); //!< 删除当前task,以及申请得所有对象
|
||||
a_crash(); //!< 强制退出
|
||||
}
|
||||
while (1) {
|
||||
thread_ipc_wait(ipc_timeout_create2(0, 0), NULL, -1);
|
||||
while (1)
|
||||
{
|
||||
// thread_ipc_wait(ipc_timeout_create2(0, 0), NULL, -1);
|
||||
u_sleep_ms((umword_t)-1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,4 +77,3 @@ long sys_exit(va_list ap)
|
||||
be_exit(exit_code);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ static int be_tty_read(char *buf, long size)
|
||||
}
|
||||
else if (len == 0)
|
||||
{
|
||||
u_sema_down(SEMA_PROT);
|
||||
u_sema_down(SEMA_PROT, 0/*TODO:*/, NULL);
|
||||
continue;
|
||||
}
|
||||
r_len += len;
|
||||
@@ -235,7 +235,7 @@ long be_readv(long fd, const struct iovec *iov, long iovcnt)
|
||||
}
|
||||
else if (read_cn == 0)
|
||||
{
|
||||
u_sema_down(SEMA_PROT);
|
||||
u_sema_down(SEMA_PROT, 0, NULL);
|
||||
cons_write_str(".\n");
|
||||
goto again_read;
|
||||
}
|
||||
|
||||
Submodule mkrtos_user/lib/mkrtos-musl updated: 81eb9742fe...67aedfb90c
@@ -8,5 +8,5 @@ typedef struct u_mutex
|
||||
} u_mutex_t;
|
||||
|
||||
int u_mutex_init(u_mutex_t *lock, obj_handler_t sema_hd);
|
||||
void u_mutex_lock(u_mutex_t *lock);
|
||||
void u_mutex_lock(u_mutex_t *lock, umword_t timeout, umword_t *remain_times);
|
||||
void u_mutex_unlock(u_mutex_t *lock);
|
||||
|
||||
@@ -4,4 +4,5 @@
|
||||
#include "u_types.h"
|
||||
|
||||
msg_tag_t u_sema_up(obj_handler_t obj);
|
||||
msg_tag_t u_sema_down(obj_handler_t obj);
|
||||
msg_tag_t u_sema_down(obj_handler_t obj, umword_t timeout, umword_t *remain_times);
|
||||
|
||||
|
||||
@@ -66,11 +66,13 @@ static inline msg_tag_t thread_run(obj_handler_t obj, uint8_t prio)
|
||||
}
|
||||
msg_tag_t thread_bind_task(obj_handler_t obj, obj_handler_t tk_obj);
|
||||
msg_tag_t thread_set_exec(obj_handler_t obj, obj_handler_t exec_th);
|
||||
|
||||
#if 0
|
||||
msg_tag_t thread_ipc_wait(ipc_timeout_t timeout, umword_t *obj, obj_handler_t ipc_obj);
|
||||
msg_tag_t thread_ipc_reply(msg_tag_t in_tag, ipc_timeout_t timeout);
|
||||
msg_tag_t thread_ipc_send(msg_tag_t in_tag, obj_handler_t target_th_obj, ipc_timeout_t timeout);
|
||||
msg_tag_t thread_ipc_call(msg_tag_t in_tag, obj_handler_t target_th_obj, ipc_timeout_t timeout);
|
||||
#endif
|
||||
msg_tag_t thread_sleep(umword_t ticks);
|
||||
msg_tag_t thread_ipc_fast_call(msg_tag_t in_tag, obj_handler_t target_obj, umword_t arg0, umword_t arg1, umword_t arg2);
|
||||
msg_tag_t thread_ipc_fast_replay(msg_tag_t in_tag, obj_handler_t target_obj, int unlock_bitmap);
|
||||
|
||||
|
||||
@@ -26,9 +26,9 @@ int u_mutex_init(u_mutex_t *lock, obj_handler_t sema_hd)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
void u_mutex_lock(u_mutex_t *lock)
|
||||
void u_mutex_lock(u_mutex_t *lock, umword_t timeout, umword_t *remain_times)
|
||||
{
|
||||
u_sema_down(lock->obj);
|
||||
u_sema_down(lock->obj, timeout, remain_times);
|
||||
}
|
||||
void u_mutex_unlock(u_mutex_t *lock)
|
||||
{
|
||||
|
||||
@@ -22,12 +22,13 @@ msg_tag_t u_sema_up(obj_handler_t obj)
|
||||
|
||||
return tag;
|
||||
}
|
||||
msg_tag_t u_sema_down(obj_handler_t obj)
|
||||
msg_tag_t u_sema_down(obj_handler_t obj, umword_t timeout, umword_t *remain_times)
|
||||
{
|
||||
register volatile umword_t r0 asm(ARCH_REG_0);
|
||||
register volatile umword_t r1 asm(ARCH_REG_1);
|
||||
|
||||
mk_syscall(syscall_prot_create(SEMA_DOWN, SEMA_PROT, obj).raw,
|
||||
0,
|
||||
timeout,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
@@ -35,5 +36,9 @@ msg_tag_t u_sema_down(obj_handler_t obj)
|
||||
0);
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
if (remain_times)
|
||||
{
|
||||
*remain_times = r1;
|
||||
}
|
||||
return tag;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ enum thread_op
|
||||
YIELD,
|
||||
DO_IPC,
|
||||
SET_EXEC,
|
||||
SLEEP,
|
||||
};
|
||||
enum IPC_TYPE
|
||||
{
|
||||
@@ -23,6 +24,8 @@ enum IPC_TYPE
|
||||
IPC_FAST_CALL, //!< 快速CALL通信,不切换上下文
|
||||
IPC_FAST_REPLAY,
|
||||
};
|
||||
#if 0
|
||||
|
||||
msg_tag_t thread_ipc_wait(ipc_timeout_t timeout, umword_t *obj, obj_handler_t ipc_obj)
|
||||
{
|
||||
register volatile umword_t r0 asm(ARCH_REG_0);
|
||||
@@ -92,6 +95,22 @@ msg_tag_t thread_ipc_call(msg_tag_t in_tag, obj_handler_t target_th_obj, ipc_tim
|
||||
: ARCH_REG_0);
|
||||
return msg_tag_init(r0);
|
||||
}
|
||||
#endif
|
||||
msg_tag_t thread_sleep(umword_t ticks)
|
||||
{
|
||||
register volatile umword_t r0 asm(ARCH_REG_0);
|
||||
mk_syscall(syscall_prot_create4(SLEEP, THREAD_PROT, -1, TRUE).raw,
|
||||
ticks,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: ARCH_REG_0);
|
||||
}
|
||||
msg_tag_t thread_ipc_fast_call(msg_tag_t in_tag, obj_handler_t target_obj, umword_t arg0, umword_t arg1, umword_t arg2)
|
||||
{
|
||||
register volatile umword_t r0 asm(ARCH_REG_0);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include <stdio.h>
|
||||
#include <u_env.h>
|
||||
|
||||
RPC_GENERATION_CALL3(TRUE, blk_drv_t, BLK_DRV_PROT, BLK_DRV_WRITE, write,
|
||||
RPC_GENERATION_CALL3(blk_drv_t, BLK_DRV_PROT, BLK_DRV_WRITE, write,
|
||||
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, shm_obj,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, inx)
|
||||
@@ -29,7 +29,7 @@ int blk_drv_cli_write(obj_handler_t dm9000_obj, obj_handler_t shm_obj, int len,
|
||||
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL3(TRUE, blk_drv_t, BLK_DRV_PROT, BLK_DRV_READ, read,
|
||||
RPC_GENERATION_CALL3(blk_drv_t, BLK_DRV_PROT, BLK_DRV_READ, read,
|
||||
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, shm_obj,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, inx)
|
||||
@@ -49,7 +49,7 @@ int blk_drv_cli_read(obj_handler_t dm9000_obj, obj_handler_t shm_obj, int len, i
|
||||
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL1(TRUE, blk_drv_t, BLK_DRV_PROT, BLK_DRV_MAP, map,
|
||||
RPC_GENERATION_CALL1(blk_drv_t, BLK_DRV_PROT, BLK_DRV_MAP, map,
|
||||
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_INOUT, RPC_TYPE_BUF, cli_hd)
|
||||
|
||||
int blk_drv_cli_map(obj_handler_t dm9000_obj, obj_handler_t *sem_obj)
|
||||
@@ -77,7 +77,7 @@ int blk_drv_cli_map(obj_handler_t dm9000_obj, obj_handler_t *sem_obj)
|
||||
*sem_obj = newfd;
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL1(TRUE, blk_drv_t, BLK_DRV_PROT, BLK_DRV_INFO, info,
|
||||
RPC_GENERATION_CALL1(blk_drv_t, BLK_DRV_PROT, BLK_DRV_INFO, info,
|
||||
rpc_blk_drv_info_t_t, rpc_blk_drv_info_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, info)
|
||||
int blk_drv_cli_info(obj_handler_t obj, blk_drv_info_t *info)
|
||||
{
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
#include "u_rpc_svr.h"
|
||||
#include <u_env.h>
|
||||
|
||||
RPC_GENERATION_CALL1(TRUE, cons_t, CONS_PROT, CONS_WRITE, write,
|
||||
RPC_GENERATION_CALL1(cons_t, CONS_PROT, CONS_WRITE, write,
|
||||
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data)
|
||||
RPC_GENERATION_CALL2(TRUE, cons_t, CONS_PROT, CONS_READ, read,
|
||||
RPC_GENERATION_CALL2(cons_t, CONS_PROT, CONS_READ, read,
|
||||
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, data,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len)
|
||||
|
||||
RPC_GENERATION_CALL1(TRUE, cons_t, CONS_PROT, CONS_ACTIVE, active,
|
||||
RPC_GENERATION_CALL1(cons_t, CONS_PROT, CONS_ACTIVE, active,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags)
|
||||
|
||||
int cons_write(const uint8_t *data, int len)
|
||||
|
||||
@@ -10,20 +10,20 @@
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
RPC_GENERATION_CALL2(TRUE, drv_t, FS_PROT, DRV_OPEN, open,
|
||||
RPC_GENERATION_CALL2(drv_t, FS_PROT, DRV_OPEN, open,
|
||||
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, name,
|
||||
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, oflags)
|
||||
RPC_GENERATION_CALL1(TRUE, drv_t, FS_PROT, DRV_CLOSE, close,
|
||||
RPC_GENERATION_CALL1(drv_t, FS_PROT, DRV_CLOSE, close,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc)
|
||||
RPC_GENERATION_CALL3(TRUE, drv_t, FS_PROT, DRV_READ, read,
|
||||
RPC_GENERATION_CALL3(drv_t, FS_PROT, DRV_READ, read,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
||||
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, data,
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
RPC_GENERATION_CALL3(TRUE, drv_t, FS_PROT, DRV_WRITE, write,
|
||||
RPC_GENERATION_CALL3(drv_t, FS_PROT, DRV_WRITE, write,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
||||
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
RPC_GENERATION_CALL3(TRUE, drv_t, FS_PROT, DRV_IOCTL, ioctl,
|
||||
RPC_GENERATION_CALL3(drv_t, FS_PROT, DRV_IOCTL, ioctl,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
||||
rpc_mword_t_t, rpc_mword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
typedef struct kstat kstat_t;
|
||||
RPC_TYPE_DEF_ALL(kstat_t)
|
||||
/*open*/
|
||||
RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_OPEN, open,
|
||||
RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_OPEN, open,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, mode)
|
||||
@@ -55,7 +55,7 @@ sd_t fs_open(const char *path, int flags, int mode)
|
||||
return mk_sd_init2(hd, msg_tag_get_val(tag)).raw;
|
||||
}
|
||||
/*close*/
|
||||
RPC_GENERATION_CALL1(TRUE, fs_t, FS_PROT, FS_CLOSE, close,
|
||||
RPC_GENERATION_CALL1(fs_t, FS_PROT, FS_CLOSE, close,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd)
|
||||
int fs_close(sd_t _fd)
|
||||
{
|
||||
@@ -75,7 +75,7 @@ int fs_close(sd_t _fd)
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
/*read*/
|
||||
RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_READ, read,
|
||||
RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_READ, read,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len)
|
||||
@@ -118,7 +118,7 @@ int fs_read(sd_t _fd, void *buf, size_t len)
|
||||
return rlen;
|
||||
}
|
||||
/*write*/
|
||||
RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_WRITE, write,
|
||||
RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_WRITE, write,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, buf,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len)
|
||||
@@ -164,7 +164,7 @@ int fs_write(sd_t _fd, void *buf, size_t len)
|
||||
return wlen;
|
||||
}
|
||||
/*readdir*/
|
||||
RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_READDIR, readdir,
|
||||
RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_READDIR, readdir,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd,
|
||||
rpc_dirent_t_t, rpc_dirent_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, dir)
|
||||
|
||||
@@ -192,7 +192,7 @@ int fs_readdir(sd_t _fd, dirent_t *dirent)
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
/*lseek*/
|
||||
RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_LSEEK, lseek,
|
||||
RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_LSEEK, lseek,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, offs,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, whence)
|
||||
@@ -221,7 +221,7 @@ int fs_lseek(sd_t _fd, int offs, int whence)
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
/*ftruncate*/
|
||||
RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_FTRUNCATE, ftruncate,
|
||||
RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_FTRUNCATE, ftruncate,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd,
|
||||
rpc_int64_t_t, rpc_int64_t_t, RPC_DIR_IN, RPC_TYPE_DATA, offs)
|
||||
int fs_ftruncate(sd_t _fd, off_t off)
|
||||
@@ -246,7 +246,7 @@ int fs_ftruncate(sd_t _fd, off_t off)
|
||||
}
|
||||
/*fstat*/
|
||||
// int fstat(int fd, struct stat *statbuf);
|
||||
RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_FSTAT, fstat,
|
||||
RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_FSTAT, fstat,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd,
|
||||
rpc_kstat_t_t, rpc_kstat_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, statbuf)
|
||||
int fs_fstat(sd_t _fd, kstat_t *stat)
|
||||
@@ -275,7 +275,7 @@ int fs_fstat(sd_t _fd, kstat_t *stat)
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
// int ioctl(int fd, int req, void *arg)
|
||||
RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_IOCTL, ioctl,
|
||||
RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_IOCTL, ioctl,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, req,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, arg)
|
||||
@@ -304,7 +304,7 @@ int fs_ioctl(sd_t _fd, int req, void *arg)
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
// int fcntl(int fd, int cmd, void *arg)
|
||||
RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_FCNTL, fcntl,
|
||||
RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_FCNTL, fcntl,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, cmd,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, arg)
|
||||
@@ -334,7 +334,7 @@ int fs_fcntl(sd_t _fd, int cmd, void *arg)
|
||||
}
|
||||
|
||||
/*fsync*/
|
||||
RPC_GENERATION_CALL1(TRUE, fs_t, FS_PROT, FS_FSYNC, fsync,
|
||||
RPC_GENERATION_CALL1(fs_t, FS_PROT, FS_FSYNC, fsync,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd)
|
||||
int fs_fsync(sd_t _fd)
|
||||
{
|
||||
@@ -350,7 +350,7 @@ int fs_fsync(sd_t _fd)
|
||||
}
|
||||
|
||||
/*int unlink(const char *path)*/
|
||||
RPC_GENERATION_CALL1(TRUE, fs_t, FS_PROT, FS_UNLINK, unlink,
|
||||
RPC_GENERATION_CALL1(fs_t, FS_PROT, FS_UNLINK, unlink,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path)
|
||||
int fs_unlink(const char *path)
|
||||
{
|
||||
@@ -372,7 +372,7 @@ int fs_unlink(const char *path)
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
// int symlink(const char *existing, const char *new)
|
||||
RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_SYMLINK, symlink,
|
||||
RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_SYMLINK, symlink,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, src,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, dst)
|
||||
|
||||
@@ -413,7 +413,7 @@ int fs_symlink(const char *src, const char *dst)
|
||||
}
|
||||
|
||||
/*int mkdir(char *path)*/
|
||||
RPC_GENERATION_CALL1(TRUE, fs_t, FS_PROT, FS_MKDIR, mkdir,
|
||||
RPC_GENERATION_CALL1(fs_t, FS_PROT, FS_MKDIR, mkdir,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, dir)
|
||||
|
||||
int fs_mkdir(char *path)
|
||||
@@ -437,7 +437,7 @@ int fs_mkdir(char *path)
|
||||
}
|
||||
|
||||
/*int rmdir(char *path)*/
|
||||
RPC_GENERATION_CALL1(TRUE, fs_t, FS_PROT, FS_RMDIR, rmdir,
|
||||
RPC_GENERATION_CALL1(fs_t, FS_PROT, FS_RMDIR, rmdir,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, dir)
|
||||
|
||||
int fs_rmdir(char *path)
|
||||
@@ -460,7 +460,7 @@ int fs_rmdir(char *path)
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
/*int rename(char *old, char *new)*/
|
||||
RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_RENAME, rename,
|
||||
RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_RENAME, rename,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, old,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, new)
|
||||
|
||||
@@ -500,7 +500,7 @@ int fs_rename(char *old, char *new)
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
// int stat(const char *restrict path, struct stat *restrict buf)
|
||||
RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_STAT, stat,
|
||||
RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_STAT, stat,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
rpc_kstat_t_t, rpc_kstat_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf)
|
||||
|
||||
@@ -534,7 +534,7 @@ int fs_stat(char *path, void *_buf)
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
// ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize)
|
||||
RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_READLINK, readlink,
|
||||
RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_READLINK, readlink,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, bufsize)
|
||||
@@ -570,7 +570,7 @@ int fs_readlink(const char *path, char *buf, int bufsize)
|
||||
}
|
||||
|
||||
// static int __statfs(const char *path, struct statfs *buf)
|
||||
RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_STATFS, statfs,
|
||||
RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_STATFS, statfs,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
rpc_statfs_t_t, rpc_statfs_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf)
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ RPC_TYPE_DEF_ALL(timeval_t)
|
||||
RPC_TYPE_DEF_ALL(pollfd_t)
|
||||
RPC_TYPE_DEF_ALL(nfds_t)
|
||||
|
||||
RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_ACCEPT, accept,
|
||||
RPC_GENERATION_CALL3(net_t, NET_PROT, NET_ACCEPT, accept,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_socketaddr_t_t, rpc_socketaddr_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, addr,
|
||||
rpc_socklen_t_t, rpc_socklen_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, addrlen)
|
||||
@@ -66,7 +66,7 @@ int net_accept(sd_t s, struct sockaddr *addr, socklen_t *addrlen)
|
||||
*addrlen = rpc_addrlen.data;
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_BIND, bind,
|
||||
RPC_GENERATION_CALL3(net_t, NET_PROT, NET_BIND, bind,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_socketaddr_t_t, rpc_socketaddr_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, addr,
|
||||
rpc_socklen_t_t, rpc_socklen_t_t, RPC_DIR_IN, RPC_TYPE_DATA, namelen)
|
||||
@@ -93,7 +93,7 @@ int net_bind(int s, const struct sockaddr *name, socklen_t namelen)
|
||||
tag = net_t_bind_call(hd, &rpc_s, &rpc_addr, &rpc_addrlen);
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL2(TRUE, net_t, NET_PROT, NET_SHUTDOWN, shutdown,
|
||||
RPC_GENERATION_CALL2(net_t, NET_PROT, NET_SHUTDOWN, shutdown,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, how)
|
||||
int net_shutdown(int s, int how)
|
||||
@@ -111,7 +111,7 @@ int net_shutdown(int s, int how)
|
||||
tag = net_t_shutdown_call(hd, &rpc_s, &rpc_how);
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_GETPEERNAME, getpeername,
|
||||
RPC_GENERATION_CALL3(net_t, NET_PROT, NET_GETPEERNAME, getpeername,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_socketaddr_t_t, rpc_socketaddr_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, addr,
|
||||
rpc_socklen_t_t, rpc_socklen_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, namelen)
|
||||
@@ -147,7 +147,7 @@ int net_getpeername(int s, struct sockaddr *name, socklen_t *namelen)
|
||||
*namelen = rpc_namelen.data;
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_GETSOCKNAME, getsockname,
|
||||
RPC_GENERATION_CALL3(net_t, NET_PROT, NET_GETSOCKNAME, getsockname,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_socketaddr_t_t, rpc_socketaddr_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, name,
|
||||
rpc_socklen_t_t, rpc_socklen_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, namelen)
|
||||
@@ -183,7 +183,7 @@ int net_getsockname(int s, struct sockaddr *name, socklen_t *namelen)
|
||||
*namelen = rpc_namelen.data;
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL5(TRUE, net_t, NET_PROT, NET_GETSOCKOPT, getsockopt,
|
||||
RPC_GENERATION_CALL5(net_t, NET_PROT, NET_GETSOCKOPT, getsockopt,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, level,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, optname,
|
||||
@@ -229,7 +229,7 @@ int net_getsockopt(int s, int level, int optname, void *optval, socklen_t *optle
|
||||
// memcpy(optval, &rpc_buf.data[0], MIN(*optlen, rpc_buf.data));
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL5(TRUE, net_t, NET_PROT, NET_SETSOCKOPT, setsockopt,
|
||||
RPC_GENERATION_CALL5(net_t, NET_PROT, NET_SETSOCKOPT, setsockopt,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, level,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, optname,
|
||||
@@ -269,7 +269,7 @@ int net_setsockopt(int s, int level, int optname, const void *optval, socklen_t
|
||||
}
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_CONNECT, connect,
|
||||
RPC_GENERATION_CALL3(net_t, NET_PROT, NET_CONNECT, connect,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_socketaddr_t_t, rpc_socketaddr_t_t, RPC_DIR_IN, RPC_TYPE_DATA, name,
|
||||
rpc_socklen_t_t, rpc_socklen_t_t, RPC_DIR_IN, RPC_TYPE_DATA, namelen)
|
||||
@@ -295,7 +295,7 @@ int net_connect(int s, const struct sockaddr *name, socklen_t namelen)
|
||||
tag = net_t_connect_call(hd, &rpc_s, &rpc_name, &rpc_namelen);
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL2(TRUE, net_t, NET_PROT, NET_LISTEN, listen,
|
||||
RPC_GENERATION_CALL2(net_t, NET_PROT, NET_LISTEN, listen,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, backlog)
|
||||
int net_listen(int s, int backlog)
|
||||
@@ -313,7 +313,7 @@ int net_listen(int s, int backlog)
|
||||
tag = net_t_listen_call(hd, &rpc_s, &rpc_backlog);
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL4(TRUE, net_t, NET_PROT, NET_RECV, recv,
|
||||
RPC_GENERATION_CALL4(net_t, NET_PROT, NET_RECV, recv,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_ref_array_uint32_t_uint8_t_128_t, rpc_array_uint32_t_uint8_t_128_t, RPC_DIR_IN, RPC_TYPE_DATA, mem,
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, len,
|
||||
@@ -365,7 +365,7 @@ int net_recv(int s, void *mem, size_t len, int flags)
|
||||
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL6(TRUE, net_t, NET_PROT, NET_RECVFROM, recvfrom,
|
||||
RPC_GENERATION_CALL6(net_t, NET_PROT, NET_RECVFROM, recvfrom,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_ref_array_uint32_t_uint8_t_128_t, rpc_array_uint32_t_uint8_t_128_t, RPC_DIR_INOUT, RPC_TYPE_DATA, mem,
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, len,
|
||||
@@ -427,7 +427,7 @@ int net_recvfrom(int s, void *mem, size_t len, int flags,
|
||||
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL4(TRUE, net_t, NET_PROT, NET_SEND, send,
|
||||
RPC_GENERATION_CALL4(net_t, NET_PROT, NET_SEND, send,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_ref_array_uint32_t_uint8_t_128_t, rpc_array_uint32_t_uint8_t_128_t, RPC_DIR_IN, RPC_TYPE_DATA, mem,
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size,
|
||||
@@ -480,7 +480,7 @@ int net_send(int s, const void *dataptr, size_t size, int flags)
|
||||
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL6(TRUE, net_t, NET_PROT, NET_SENDTO, sendto,
|
||||
RPC_GENERATION_CALL6(net_t, NET_PROT, NET_SENDTO, sendto,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_ref_array_uint32_t_uint8_t_128_t, rpc_array_uint32_t_uint8_t_128_t, RPC_DIR_IN, RPC_TYPE_DATA, mem,
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size,
|
||||
@@ -540,7 +540,7 @@ int net_sendto(int s, const void *dataptr, size_t size, int flags,
|
||||
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_SOCKET, socket,
|
||||
RPC_GENERATION_CALL3(net_t, NET_PROT, NET_SOCKET, socket,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, type,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, protocol)
|
||||
|
||||
@@ -68,12 +68,12 @@ static bool_t reg_hd(const char *path, obj_handler_t hd, int split_inx)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
RPC_GENERATION_CALL3(TRUE, ns_t, NS_PROT, NS_REGISTER_OP, register,
|
||||
RPC_GENERATION_CALL3(ns_t, NS_PROT, NS_REGISTER_OP, register,
|
||||
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, svr_hd,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, type)
|
||||
|
||||
RPC_GENERATION_CALL2(TRUE, ns_t, NS_PROT, NS_QUERY_OP, query,
|
||||
RPC_GENERATION_CALL2(ns_t, NS_PROT, NS_QUERY_OP, query,
|
||||
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_INOUT, RPC_TYPE_BUF, cli_hd)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
RPC_GENERATION_CALL4(TRUE, pm_t, PM_PROT, PM_RUN_APP, run_app,
|
||||
RPC_GENERATION_CALL4(pm_t, PM_PROT, PM_RUN_APP, run_app,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, params,
|
||||
@@ -38,7 +38,7 @@ int pm_run_app(const char *path, int flags, uint8_t *params, int params_len)
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
|
||||
RPC_GENERATION_CALL2(TRUE, pm_t, PM_PROT, PM_KILL_TASK, kill_task,
|
||||
RPC_GENERATION_CALL2(pm_t, PM_PROT, PM_KILL_TASK, kill_task,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, pid,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags)
|
||||
|
||||
@@ -54,7 +54,7 @@ int pm_kill_task(int pid, int flags)
|
||||
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL3(TRUE, pm_t, PM_PROT, PM_WATCH_PID, watch_pid,
|
||||
RPC_GENERATION_CALL3(pm_t, PM_PROT, PM_WATCH_PID, watch_pid,
|
||||
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, sig_hd,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, pid,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags)
|
||||
@@ -74,7 +74,7 @@ int pm_watch_pid(obj_handler_t sig_hd, pid_t pid, int flags)
|
||||
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
RPC_GENERATION_CALL5(TRUE, pm_t, PM_PROT, PM_COPY_DATA, copy_data,
|
||||
RPC_GENERATION_CALL5(pm_t, PM_PROT, PM_COPY_DATA, copy_data,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, src_pid,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, dst_pid,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, src_addr,
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* @brief 该宏用于生成一个客户端的调用函数(传递一个参数)
|
||||
*
|
||||
*/
|
||||
#define RPC_GENERATION_CALL1(is_fast, struct_type, prot, op, func_name, cli_type0, svr_type0, dir0, rpc_type0, name0) \
|
||||
#define RPC_GENERATION_CALL1(struct_type, prot, op, func_name, cli_type0, svr_type0, dir0, rpc_type0, name0) \
|
||||
msg_tag_t struct_type##_##func_name##_call(obj_handler_t hd, cli_type0 *var0) \
|
||||
{ \
|
||||
void *buf; \
|
||||
@@ -32,16 +32,8 @@
|
||||
PRC_CLI_FILL_MAP_BUF(rpc_type0, cli_type0, var0, dir0, (uint8_t *)msg_ipc->map_buf, off_buf); \
|
||||
/*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc);*/ \
|
||||
msg_tag_t tag; \
|
||||
if (is_fast) \
|
||||
{ \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \
|
||||
ipc_timeout_create2(0, 0)); \
|
||||
} \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
if (msg_tag_get_val(tag) < 0) \
|
||||
{ \
|
||||
return tag; \
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define RPC_GENERATION_CALL2(is_fast, struct_type, prot, op, func_name, \
|
||||
#define RPC_GENERATION_CALL2(struct_type, prot, op, func_name, \
|
||||
cli_type0, svr_type0, dir0, rpc_type0, name0, \
|
||||
cli_type1, svr_type1, dir1, rpc_type1, name1) \
|
||||
msg_tag_t struct_type##_##func_name##_call(obj_handler_t hd, cli_type0 *var0, cli_type1 *var1) \
|
||||
@@ -33,16 +33,8 @@
|
||||
PRC_CLI_FILL_MAP_BUF(rpc_type1, cli_type1, var1, dir1, (uint8_t *)msg_ipc->map_buf, off_buf); \
|
||||
/*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \
|
||||
msg_tag_t tag; \
|
||||
if (is_fast) \
|
||||
{ \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \
|
||||
ipc_timeout_create2(0, 0)); \
|
||||
} \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
if (msg_tag_get_val(tag) < 0) \
|
||||
{ \
|
||||
return tag; \
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define RPC_GENERATION_CALL3(is_fast, struct_type, prot, op, func_name, \
|
||||
#define RPC_GENERATION_CALL3(struct_type, prot, op, func_name, \
|
||||
cli_type0, svr_type0, dir0, rpc_type0, name0, \
|
||||
cli_type1, svr_type1, dir1, rpc_type1, name1, \
|
||||
cli_type2, svr_type2, dir2, rpc_type2, name2) \
|
||||
@@ -36,16 +36,8 @@
|
||||
PRC_CLI_FILL_MAP_BUF(rpc_type2, cli_type2, var2, dir2, (uint8_t *)msg_ipc->map_buf, off_buf); \
|
||||
/*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \
|
||||
msg_tag_t tag; \
|
||||
if (is_fast) \
|
||||
{ \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \
|
||||
ipc_timeout_create2(0, 0)); \
|
||||
} \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
if (msg_tag_get_val(tag) < 0) \
|
||||
{ \
|
||||
return tag; \
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define RPC_GENERATION_CALL4(is_fast, struct_type, prot, op, func_name, \
|
||||
#define RPC_GENERATION_CALL4(struct_type, prot, op, func_name, \
|
||||
cli_type0, svr_type0, dir0, rpc_type0, name0, \
|
||||
cli_type1, svr_type1, dir1, rpc_type1, name1, \
|
||||
cli_type2, svr_type2, dir2, rpc_type2, name2, \
|
||||
@@ -39,16 +39,8 @@
|
||||
PRC_CLI_FILL_MAP_BUF(rpc_type3, cli_type3, var3, dir3, (uint8_t *)msg_ipc->map_buf, off_buf); \
|
||||
/*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \
|
||||
msg_tag_t tag; \
|
||||
if (is_fast) \
|
||||
{ \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \
|
||||
ipc_timeout_create2(0, 0)); \
|
||||
} \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
if (msg_tag_get_val(tag) < 0) \
|
||||
{ \
|
||||
return tag; \
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define RPC_GENERATION_CALL5(is_fast, struct_type, prot, op, func_name, \
|
||||
#define RPC_GENERATION_CALL5(struct_type, prot, op, func_name, \
|
||||
cli_type0, svr_type0, dir0, rpc_type0, name0, \
|
||||
cli_type1, svr_type1, dir1, rpc_type1, name1, \
|
||||
cli_type2, svr_type2, dir2, rpc_type2, name2, \
|
||||
@@ -42,16 +42,8 @@
|
||||
PRC_CLI_FILL_MAP_BUF(rpc_type4, cli_type4, var4, dir4, (uint8_t *)msg_ipc->map_buf, off_buf); \
|
||||
/*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \
|
||||
msg_tag_t tag; \
|
||||
if (is_fast) \
|
||||
{ \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \
|
||||
ipc_timeout_create2(0, 0)); \
|
||||
} \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
if (msg_tag_get_val(tag) < 0) \
|
||||
{ \
|
||||
return tag; \
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define RPC_GENERATION_CALL6(is_fast, struct_type, prot, op, func_name, \
|
||||
#define RPC_GENERATION_CALL6(struct_type, prot, op, func_name, \
|
||||
cli_type0, svr_type0, dir0, rpc_type0, name0, \
|
||||
cli_type1, svr_type1, dir1, rpc_type1, name1, \
|
||||
cli_type2, svr_type2, dir2, rpc_type2, name2, \
|
||||
@@ -45,16 +45,8 @@
|
||||
PRC_CLI_FILL_MAP_BUF(rpc_type5, cli_type5, var5, dir5, (uint8_t *)msg_ipc->map_buf, off_buf); \
|
||||
/*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \
|
||||
msg_tag_t tag; \
|
||||
if (is_fast) \
|
||||
{ \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \
|
||||
ipc_timeout_create2(0, 0)); \
|
||||
} \
|
||||
tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \
|
||||
hd, 1111, 2222, 3333); \
|
||||
if (msg_tag_get_val(tag) < 0) \
|
||||
{ \
|
||||
return tag; \
|
||||
|
||||
@@ -36,7 +36,7 @@ rpc_svr_obj_t *meta_find_svr_obj(umword_t prot);
|
||||
int meta_reg_svr_obj(rpc_svr_obj_t *svr_obj, umword_t prot);
|
||||
int meta_reg_svr_obj_raw(meta_t *meta, rpc_svr_obj_t *svr_obj, umword_t prot);
|
||||
int rpc_creaite_bind_ipc(obj_handler_t th, void *obj, obj_handler_t *ipc_hd);
|
||||
void rpc_loop(void);
|
||||
#if 0
|
||||
void rpc_loop(void);
|
||||
int rpc_mtd_loop(void);
|
||||
#endif
|
||||
|
||||
@@ -164,6 +164,7 @@ int rpc_meta_init(obj_handler_t th, obj_handler_t *ret_ipc_hd)
|
||||
{
|
||||
return rpc_creaite_bind_ipc(th, &meta_obj.svr, ret_ipc_hd);
|
||||
}
|
||||
#if 0
|
||||
/**
|
||||
* @brief RPC循环处理消息
|
||||
*
|
||||
@@ -201,7 +202,6 @@ void rpc_loop(void)
|
||||
thread_ipc_reply(tag, ipc_timeout_create2(0, 0));
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
#define RPC_MTD_TH_STACK_SIZE (1024 + 256)
|
||||
typedef struct mtd_params
|
||||
{
|
||||
|
||||
@@ -23,5 +23,6 @@ static obj_handler_t hd = HANDLER_INVALID;
|
||||
void u_sleep_ms(size_t ms)
|
||||
{
|
||||
umword_t sleep_tick = ROUND_UP(ms, (1000 / CONFIG_SYS_SCHE_HZ));
|
||||
thread_ipc_wait(ipc_timeout_create2(0, sleep_tick), NULL, -1);
|
||||
// thread_ipc_wait(ipc_timeout_create2(0, sleep_tick), NULL, -1);
|
||||
thread_sleep(sleep_tick);
|
||||
}
|
||||
|
||||
@@ -117,10 +117,12 @@ int fs_svr_statfs(const char *path, struct statfs *buf)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
#if 0
|
||||
void fs_svr_loop(void)
|
||||
{
|
||||
rpc_loop();
|
||||
}
|
||||
#endif
|
||||
static const fs_operations_t ops =
|
||||
{
|
||||
.fs_svr_open = fs_svr_open,
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "appfs.h"
|
||||
#include "hw_block.h"
|
||||
#include "appfs_open.h"
|
||||
#include "u_sleep.h"
|
||||
#define STACK_COM_ITME_SIZE (2 * 1024)
|
||||
ATTR_ALIGN(8)
|
||||
uint8_t stack_coms[STACK_COM_ITME_SIZE];
|
||||
@@ -78,7 +79,12 @@ int main(int argc, char *argv[])
|
||||
fs_svr_init();
|
||||
ns_register(mount_path, hd, MOUNT_NODE);
|
||||
cons_write_str("appfs mount success\n");
|
||||
|
||||
#if 0
|
||||
fs_svr_loop();
|
||||
#endif
|
||||
while (1)
|
||||
{
|
||||
u_sleep_ms((umword_t)(-1));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
#define DEFAULT_INIT_CFG "init.cfg"
|
||||
|
||||
#define STACK_COM_ITME_SIZE (3*1024)
|
||||
#define STACK_COM_ITME_SIZE (3 * 1024)
|
||||
ATTR_ALIGN(8)
|
||||
uint8_t stack_coms[STACK_COM_ITME_SIZE];
|
||||
uint8_t msg_buf_coms[MSG_BUG_LEN];
|
||||
@@ -70,6 +70,10 @@ int main(int argc, char *args[])
|
||||
|
||||
ret = parse_cfg(DEFAULT_INIT_CFG, env);
|
||||
printf("run app num is %d.\n", ret);
|
||||
namespace_loop();
|
||||
// namespace_loop();
|
||||
while (1)
|
||||
{
|
||||
u_sleep_ms((umword_t)(-1));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -556,13 +556,13 @@ int namespace_query(const char *path, obj_handler_t *hd)
|
||||
ns_unlock();
|
||||
return ret_inx;
|
||||
}
|
||||
|
||||
#if 0
|
||||
void namespace_loop(void)
|
||||
{
|
||||
rpc_loop();
|
||||
// rpc_mtd_loop();
|
||||
}
|
||||
|
||||
#endif
|
||||
int fs_svr_mkdir(char *path)
|
||||
{
|
||||
int ret = ns_reg(path, 0, DIR_NODE);
|
||||
|
||||
@@ -117,7 +117,7 @@ int parse_cfg(const char *parse_cfg_file_name, uenv_t *env)
|
||||
msg_tag_t tag;
|
||||
sys_info_t sys_info;
|
||||
|
||||
u_mutex_lock(&cmd_lock);
|
||||
u_mutex_lock(&cmd_lock, 0, NULL);
|
||||
|
||||
tag = sys_read_info(SYS_PROT, &sys_info, 0);
|
||||
if (msg_tag_get_val(tag) < 0)
|
||||
|
||||
@@ -137,6 +137,7 @@ int pm_rpc_watch_pid(pm_t *pm, obj_handler_t sig_rcv_hd, pid_t pid, int flags)
|
||||
printf("[pm] watch pid:%d, sig hd:%d.\n", src_pid, sig_rcv_hd);
|
||||
return 0;
|
||||
}
|
||||
#if IS_ENABLED(CONFIG_USING_SIG)
|
||||
/**
|
||||
* @brief pm给task的信号线程发送消息
|
||||
*
|
||||
@@ -175,6 +176,7 @@ static bool_t pm_send_sig_to_task(pm_t *pm, pid_t pid, umword_t sig_val)
|
||||
pos = next;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
/**
|
||||
* @brief 杀死某个进程
|
||||
*
|
||||
@@ -195,7 +197,9 @@ int pm_rpc_kill_task(int pid, int flags)
|
||||
|
||||
ns_node_del_by_pid(pid, flags); //!< 从ns中删除
|
||||
pm_del_watch_by_pid(&pm, pid); //!< 从watch中删除
|
||||
#if IS_ENABLED(CONFIG_USING_SIG)
|
||||
pm_send_sig_to_task(&pm, pid, KILL_SIG); //!< 给watch者发送sig
|
||||
#endif
|
||||
// handler_del_umap(pid);
|
||||
printf("[pm] kill pid:%d.\n", pid);
|
||||
return 0;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#if 0
|
||||
#include "u_log.h"
|
||||
#include "u_prot.h"
|
||||
#include "u_factory.h"
|
||||
@@ -229,3 +230,4 @@ CuSuite *ipc_test_suite(void)
|
||||
|
||||
return &suite;
|
||||
}
|
||||
#endif
|
||||
@@ -1,3 +1,4 @@
|
||||
#if 0
|
||||
#include "u_log.h"
|
||||
#include "u_prot.h"
|
||||
#include "u_factory.h"
|
||||
@@ -91,3 +92,4 @@ CuSuite *map_test_suite(void)
|
||||
|
||||
return &suite;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -21,7 +21,7 @@ int u_sema_test(void)
|
||||
assert(msg_tag_get_val(tag) >= 0);
|
||||
|
||||
u_sema_up(sema_hd);
|
||||
u_sema_down(sema_hd);
|
||||
u_sema_down(sema_hd, 0, NULL);
|
||||
|
||||
handler_free_umap(sema_hd);
|
||||
return 0;
|
||||
@@ -55,7 +55,7 @@ static void *thread_th2(void *arg)
|
||||
while (1)
|
||||
{
|
||||
printf("sema_down start\n");
|
||||
u_sema_down(sema_hd2);
|
||||
u_sema_down(sema_hd2, 0, NULL);
|
||||
u_sleep_ms(50);
|
||||
printf("sema_down end\n");
|
||||
if (j == TEST_CN)
|
||||
@@ -73,7 +73,7 @@ static void *thread_th3(void *arg)
|
||||
while (1)
|
||||
{
|
||||
printf("sema_down2 start\n");
|
||||
u_sema_down(sema_hd2);
|
||||
u_sema_down(sema_hd2, 0, NULL);
|
||||
u_sleep_ms(50);
|
||||
printf("sema_down2 end\n");
|
||||
if (j == TEST_CN)
|
||||
|
||||
@@ -15,13 +15,16 @@ static void RunAllTests(void)
|
||||
exit(1);
|
||||
}
|
||||
CuSuiteInit(&suite);
|
||||
|
||||
#if 0
|
||||
CuSuiteAddSuite(&suite, ipc_test_suite());
|
||||
#endif
|
||||
CuSuiteAddSuite(&suite, ulog_test_suite());
|
||||
CuSuiteAddSuite(&suite, printf_test_suite());
|
||||
CuSuiteAddSuite(&suite, vmm_test_suite());
|
||||
CuSuiteAddSuite(&suite, sharem_mem_test_suite());
|
||||
#if 0
|
||||
CuSuiteAddSuite(&suite, map_test_suite());
|
||||
#endif
|
||||
CuSuiteAddSuite(&suite, thread_base_test_suite());
|
||||
CuSuiteAddSuite(&suite, sema_test_suite());
|
||||
CuSuiteAddSuite(&suite, pthread_base_test_suite());
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "fs_rpc.h"
|
||||
#include "net_rpc.h"
|
||||
#include "u_fast_ipc.h"
|
||||
#include "net_test.h"
|
||||
static umword_t addr;
|
||||
static umword_t size;
|
||||
obj_handler_t net_drv_hd;
|
||||
@@ -107,7 +108,7 @@ again:
|
||||
net_test();
|
||||
while (1)
|
||||
{
|
||||
if (msg_tag_get_prot(u_sema_down(sem_hd)) < 0)
|
||||
if (msg_tag_get_prot(u_sema_down(sem_hd, 0, NULL)) < 0)
|
||||
{
|
||||
printf("error.\n");
|
||||
}
|
||||
|
||||
@@ -122,6 +122,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
while (1)
|
||||
{
|
||||
rpc_loop();
|
||||
// rpc_loop();
|
||||
u_sleep_ms((umword_t)(-1));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user