修复一些编译警告
This commit is contained in:
6
.config
6
.config
@@ -1,5 +1,11 @@
|
||||
CONFIG_RTT_DIR="./"
|
||||
|
||||
#
|
||||
# Libc backend
|
||||
#
|
||||
CONFIG_MKRTOS_LIBC_FD_MAP_NR=128
|
||||
# end of Libc backend
|
||||
|
||||
#
|
||||
# DFS: device virtual file system
|
||||
#
|
||||
|
||||
22
.config.old
22
.config.old
@@ -1,3 +1,25 @@
|
||||
CONFIG_RTT_DIR="./"
|
||||
|
||||
#
|
||||
# DFS: device virtual file system
|
||||
#
|
||||
CONFIG_RT_USING_DFS=y
|
||||
CONFIG_DFS_USING_POSIX=y
|
||||
CONFIG_DFS_USING_WORKDIR=y
|
||||
# CONFIG_RT_USING_DFS_MNTTABLE is not set
|
||||
CONFIG_DFS_FD_MAX=16
|
||||
CONFIG_RT_USING_DFS_V1=y
|
||||
# CONFIG_RT_USING_DFS_V2 is not set
|
||||
CONFIG_DFS_FILESYSTEMS_MAX=4
|
||||
CONFIG_DFS_FILESYSTEM_TYPES_MAX=4
|
||||
# CONFIG_RT_USING_DFS_ELMFAT is not set
|
||||
CONFIG_RT_USING_DFS_DEVFS=y
|
||||
# CONFIG_RT_USING_DFS_ROMFS is not set
|
||||
# CONFIG_RT_USING_DFS_CROMFS is not set
|
||||
# CONFIG_RT_USING_DFS_RAMFS is not set
|
||||
# CONFIG_RT_USING_DFS_TMPFS is not set
|
||||
# CONFIG_RT_USING_DFS_MQUEUE is not set
|
||||
# end of DFS: device virtual file system
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
|
||||
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@@ -241,7 +241,9 @@
|
||||
"uart_config.h": "c",
|
||||
"drv_crypto.h": "c",
|
||||
"drv_log.h": "c",
|
||||
"drv_usart.h": "c"
|
||||
"drv_usart.h": "c",
|
||||
"__locale": "c",
|
||||
"__string": "c"
|
||||
},
|
||||
"cortex-debug.showRTOS": false,
|
||||
"cortex-debug.variableUseNaturalFormat": false,
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
|
||||
source "mkrtos_user/lib/Kconfig"
|
||||
source "mkrtos_user/server/drv/rtthread_drv/Kconfig"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
# -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
|
||||
-fPIC -fPIE -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
|
||||
" )
|
||||
|
||||
4
mkrtos_user/lib/Kconfig
Normal file
4
mkrtos_user/lib/Kconfig
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
|
||||
source "mkrtos_user/lib/libc_backend/Kconfig"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
|
||||
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
|
||||
" )
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
|
||||
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
|
||||
" )
|
||||
|
||||
@@ -14,6 +14,7 @@ target_include_directories(
|
||||
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_util/inc
|
||||
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys
|
||||
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/libc_backend/inc
|
||||
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_svr/inc
|
||||
|
||||
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/mlibc/arch/arm/
|
||||
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/mlibc/arch/generic
|
||||
@@ -28,6 +29,7 @@ target_link_libraries(
|
||||
PUBLIC
|
||||
muslc
|
||||
sys
|
||||
sys_svr
|
||||
)
|
||||
set_target_properties(libc_be PROPERTIES LINK_FLAGS "-pie ")
|
||||
|
||||
|
||||
8
mkrtos_user/lib/libc_backend/Kconfig
Normal file
8
mkrtos_user/lib/libc_backend/Kconfig
Normal file
@@ -0,0 +1,8 @@
|
||||
menu "Libc backend"
|
||||
|
||||
config MKRTOS_LIBC_FD_MAP_NR
|
||||
int "fd map layer size"
|
||||
default 32
|
||||
help
|
||||
Set the number of mapping layers, the larger the number of FD available to the user.
|
||||
endmenu
|
||||
7
mkrtos_user/lib/libc_backend/inc/fd_map.h
Normal file
7
mkrtos_user/lib/libc_backend/inc/fd_map.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
#include <u_type.h>
|
||||
typedef struct fd_map_entry fd_map_entry_t;
|
||||
|
||||
int fd_map_alloc(uint16_t svr_fd, uint16_t priv_fd);
|
||||
int fd_map_update(int fd, fd_map_entry_t *new_entry);
|
||||
int fd_map_free(int fd, fd_map_entry_t *ret_entry);
|
||||
126
mkrtos_user/lib/libc_backend/src/fd_map.c
Normal file
126
mkrtos_user/lib/libc_backend/src/fd_map.c
Normal file
@@ -0,0 +1,126 @@
|
||||
|
||||
#include <u_types.h>
|
||||
#include <assert.h>
|
||||
#include <malloc.h>
|
||||
#include <errno.h>
|
||||
#include <pthread.h>
|
||||
typedef struct fd_map_entry
|
||||
{
|
||||
uint16_t svr_fd;
|
||||
uint16_t priv_fd;
|
||||
uint8_t flags;
|
||||
} fd_map_entry_t;
|
||||
|
||||
#define FD_MAP_ROW_CN 16
|
||||
#define FD_MAP_ROW_NR 16
|
||||
|
||||
#define FD_MAP_TOTAL (FD_MAP_ROW_CN * FD_MAP_ROW_NR)
|
||||
|
||||
typedef struct fd_map_row
|
||||
{
|
||||
fd_map_entry_t entry[FD_MAP_ROW_CN];
|
||||
} fd_map_row_t;
|
||||
|
||||
typedef struct fd_map
|
||||
{
|
||||
fd_map_row_t *row[FD_MAP_ROW_NR];
|
||||
pthread_spinlock_t lock;
|
||||
uint16_t free_fd;
|
||||
} fd_map_t;
|
||||
|
||||
static fd_map_t fd_map;
|
||||
|
||||
int fd_map_alloc(uint16_t svr_fd, uint16_t priv_fd)
|
||||
{
|
||||
int alloc_fd = 0;
|
||||
|
||||
again_alloc:
|
||||
pthread_spin_lock(&fd_map.lock);
|
||||
if (fd_map.free_fd >= FD_MAP_TOTAL)
|
||||
{
|
||||
// 没有可用的fd了,尝试循环查找
|
||||
for (int i = 0; i < FD_MAP_ROW_NR; i++)
|
||||
{
|
||||
for (int j = 0; j < FD_MAP_ROW_CN; j++)
|
||||
{
|
||||
if (fd_map.row[i]->entry[j].flags == 0)
|
||||
{
|
||||
alloc_fd = i * FD_MAP_ROW_CN + j;
|
||||
goto next;
|
||||
}
|
||||
}
|
||||
}
|
||||
pthread_spin_unlock(&fd_map.lock);
|
||||
// 没有可用的了
|
||||
return -EAGAIN;
|
||||
}
|
||||
else
|
||||
{
|
||||
alloc_fd = fd_map.free_fd;
|
||||
}
|
||||
next:;
|
||||
int row_inx = alloc_fd / FD_MAP_ROW_CN;
|
||||
int inx = alloc_fd % FD_MAP_ROW_CN;
|
||||
|
||||
assert(row_inx < FD_MAP_ROW_NR);
|
||||
if (fd_map.row[row_inx] == NULL)
|
||||
{
|
||||
fd_map.row[row_inx] = malloc(sizeof(fd_map_row_t));
|
||||
if (fd_map.row[row_inx] == NULL)
|
||||
{
|
||||
pthread_spin_unlock(&fd_map.lock);
|
||||
return -EAGAIN;
|
||||
}
|
||||
}
|
||||
assert(fd_map.row[row_inx]->entry[inx].flags == 0);
|
||||
fd_map.row[row_inx]->entry[inx].flags = 1;
|
||||
fd_map.row[row_inx]->entry[inx].svr_fd = svr_fd;
|
||||
fd_map.row[row_inx]->entry[inx].priv_fd = priv_fd;
|
||||
pthread_spin_unlock(&fd_map.lock);
|
||||
|
||||
return alloc_fd;
|
||||
}
|
||||
|
||||
int fd_map_update(int fd, fd_map_entry_t *new_entry)
|
||||
{
|
||||
if (fd >= FD_MAP_TOTAL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
int row_inx = fd / FD_MAP_ROW_CN;
|
||||
int inx = fd % FD_MAP_ROW_CN;
|
||||
|
||||
pthread_spin_lock(&fd_map.lock);
|
||||
int flags = fd_map.row[row_inx]->entry[inx].flags;
|
||||
|
||||
fd_map.row[row_inx]->entry[inx] = *new_entry;
|
||||
fd_map.row[row_inx]->entry[inx].flags = flags;
|
||||
pthread_spin_unlock(&fd_map.lock);
|
||||
}
|
||||
|
||||
int fd_map_free(int fd, fd_map_entry_t *ret_entry)
|
||||
{
|
||||
if (fd >= FD_MAP_TOTAL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
int row_inx = fd / FD_MAP_ROW_CN;
|
||||
int inx = fd % FD_MAP_ROW_CN;
|
||||
|
||||
pthread_spin_lock(&fd_map.lock);
|
||||
if (fd_map.row[row_inx]->entry[inx].flags == 1)
|
||||
{
|
||||
if (ret_entry)
|
||||
{
|
||||
*ret_entry = fd_map.row[row_inx]->entry[inx];
|
||||
}
|
||||
fd_map.row[row_inx]->entry[inx].flags = 0;
|
||||
pthread_spin_unlock(&fd_map.lock);
|
||||
}
|
||||
else
|
||||
{
|
||||
pthread_spin_unlock(&fd_map.lock);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
#include "fs_backend.h"
|
||||
#include "syscall_backend.h"
|
||||
#include "fs_cli.h"
|
||||
#include <stdarg.h>
|
||||
#include <errno.h>
|
||||
#include <u_prot.h>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=700 ")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -D_XOPEN_SOURCE=700 ")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -D_XOPEN_SOURCE=700 ")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -w -D_XOPEN_SOURCE=700 ")
|
||||
|
||||
file(GLOB_RECURSE deps
|
||||
src/*.C
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
|
||||
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
|
||||
" )
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_STDPERIPH_DRIVER=1 -DSTM32F10X_XL \
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -DUSE_STDPERIPH_DRIVER=1 -DSTM32F10X_XL \
|
||||
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
|
||||
" )
|
||||
|
||||
@@ -20,3 +20,5 @@ static inline uint16_t swap_u16(uint16_t data)
|
||||
{
|
||||
return ((data >> 8) & 0xff) | ((data & 0xff) << 8);
|
||||
}
|
||||
|
||||
int mk_syscall(unsigned long nr, ...);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "u_types.h"
|
||||
#include "u_prot.h"
|
||||
#include "u_factory.h"
|
||||
#include "u_arch.h"
|
||||
|
||||
enum
|
||||
{
|
||||
@@ -10,7 +11,7 @@ msg_tag_t factory_create_irq_sender(obj_handler_t obj, vpage_t vpage)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj).raw,
|
||||
0,
|
||||
IRQ_PROT,
|
||||
vpage.raw,
|
||||
@@ -25,7 +26,7 @@ msg_tag_t factory_create_thread(obj_handler_t obj, vpage_t vpage)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj).raw,
|
||||
0,
|
||||
THREAD_PROT,
|
||||
vpage.raw,
|
||||
@@ -40,7 +41,7 @@ msg_tag_t factory_create_task(obj_handler_t obj, vpage_t vpage)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj).raw,
|
||||
0,
|
||||
TASK_PROT,
|
||||
vpage.raw,
|
||||
@@ -55,7 +56,7 @@ msg_tag_t factory_create_ipc(obj_handler_t obj, vpage_t vpage)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj).raw,
|
||||
0,
|
||||
IPC_PROT,
|
||||
vpage.raw,
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
#include "u_prot.h"
|
||||
#include "u_ipc.h"
|
||||
#include "u_util.h"
|
||||
#include "u_arch.h"
|
||||
|
||||
enum ipc_op
|
||||
{
|
||||
IPC_CALL, //!< 客户端CALL操作
|
||||
@@ -14,7 +16,7 @@ msg_tag_t ipc_bind(obj_handler_t obj, obj_handler_t tag_th, umword_t user_obj)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(IPC_BIND, IPC_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(IPC_BIND, IPC_PROT, obj).raw,
|
||||
0,
|
||||
tag_th,
|
||||
user_obj,
|
||||
@@ -34,7 +36,7 @@ msg_tag_t ipc_wait(obj_handler_t obj, umword_t *user_obj)
|
||||
register volatile umword_t r0 asm("r0");
|
||||
register volatile umword_t r1 asm("r1");
|
||||
|
||||
mk_syscall(syscall_prot_create(IPC_WAIT, IPC_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(IPC_WAIT, IPC_PROT, obj).raw,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
@@ -55,7 +57,7 @@ msg_tag_t ipc_reply(obj_handler_t obj, msg_tag_t in_tag)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(IPC_REPLY, IPC_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(IPC_REPLY, IPC_PROT, obj).raw,
|
||||
in_tag.raw,
|
||||
0,
|
||||
0,
|
||||
@@ -74,7 +76,7 @@ msg_tag_t ipc_call(obj_handler_t obj, msg_tag_t in_tag, ipc_timeout_t timeout)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(IPC_CALL, IPC_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(IPC_CALL, IPC_PROT, obj).raw,
|
||||
in_tag.raw,
|
||||
timeout.raw,
|
||||
0,
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "u_prot.h"
|
||||
#include "u_types.h"
|
||||
#include "u_util.h"
|
||||
#include "u_arch.h"
|
||||
#include <string.h>
|
||||
enum log_op
|
||||
{
|
||||
@@ -22,7 +23,7 @@ msg_tag_t uirq_bind(obj_handler_t obj_inx, umword_t irq_no, umword_t prio_sub_pr
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(BIND_IRQ, IRQ_PROT, obj_inx),
|
||||
mk_syscall(syscall_prot_create(BIND_IRQ, IRQ_PROT, obj_inx).raw,
|
||||
0,
|
||||
irq_no,
|
||||
0,
|
||||
@@ -41,7 +42,7 @@ msg_tag_t uirq_wait(obj_handler_t obj_inx, int flags)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(WAIT_IRQ, IRQ_PROT, obj_inx),
|
||||
mk_syscall(syscall_prot_create(WAIT_IRQ, IRQ_PROT, obj_inx).raw,
|
||||
0,
|
||||
flags,
|
||||
0,
|
||||
@@ -60,7 +61,7 @@ msg_tag_t uirq_ack(obj_handler_t obj_inx, umword_t irq_no)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(ACK_IRQ, IRQ_PROT, obj_inx),
|
||||
mk_syscall(syscall_prot_create(ACK_IRQ, IRQ_PROT, obj_inx).raw,
|
||||
0,
|
||||
irq_no,
|
||||
0,
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "u_log.h"
|
||||
#include "u_prot.h"
|
||||
#include "u_types.h"
|
||||
#include "u_arch.h"
|
||||
#include "u_util.h"
|
||||
#include <string.h>
|
||||
enum log_op
|
||||
@@ -19,7 +20,7 @@ static msg_tag_t ulog_read_bytes_raw(obj_handler_t obj_inx, umword_t data[5], in
|
||||
register volatile umword_t r3 asm("r3");
|
||||
register volatile umword_t r4 asm("r4");
|
||||
register volatile umword_t r5 asm("r5");
|
||||
mk_syscall(syscall_prot_create(READ_DATA, LOG_PROT, obj_inx),
|
||||
mk_syscall(syscall_prot_create(READ_DATA, LOG_PROT, obj_inx).raw,
|
||||
msg_tag_init4(0, 0, 0, 0).raw,
|
||||
len,
|
||||
0,
|
||||
@@ -71,7 +72,7 @@ void ulog_write_bytes(obj_handler_t obj_inx, const uint8_t *data, umword_t len)
|
||||
if (i > 0)
|
||||
{
|
||||
umword_t *write_word_buf = (umword_t *)write_buf;
|
||||
mk_syscall(syscall_prot_create(WRITE_DATA, LOG_PROT, obj_inx),
|
||||
mk_syscall(syscall_prot_create(WRITE_DATA, LOG_PROT, obj_inx).raw,
|
||||
msg_tag_init4(0, ROUND_UP(i, WORD_BYTES), 0, 0).raw,
|
||||
write_word_buf[0],
|
||||
write_word_buf[1],
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "u_mm.h"
|
||||
#include "u_types.h"
|
||||
#include "u_prot.h"
|
||||
#include "u_arch.h"
|
||||
|
||||
enum mm_op
|
||||
{
|
||||
@@ -16,7 +17,7 @@ void *mm_alloc_page(obj_handler_t obj_inx, umword_t pnf_nr, uint8_t attrs)
|
||||
register volatile umword_t r1 asm("r1");
|
||||
register volatile umword_t r2 asm("r2");
|
||||
register volatile umword_t r3 asm("r3");
|
||||
mk_syscall(syscall_prot_create(MM_ALLOC, MM_PROT, obj_inx),
|
||||
mk_syscall(syscall_prot_create(MM_ALLOC, MM_PROT, obj_inx).raw,
|
||||
0,
|
||||
pnf_nr,
|
||||
attrs,
|
||||
@@ -40,7 +41,7 @@ void *mm_alloc_page(obj_handler_t obj_inx, umword_t pnf_nr, uint8_t attrs)
|
||||
}
|
||||
void mm_free_page(obj_handler_t obj_inx, void *addr, umword_t pfn_nr)
|
||||
{
|
||||
mk_syscall(syscall_prot_create(MM_FREE, MM_PROT, obj_inx),
|
||||
mk_syscall(syscall_prot_create(MM_FREE, MM_PROT, obj_inx).raw,
|
||||
0,
|
||||
addr,
|
||||
pfn_nr,
|
||||
@@ -52,7 +53,7 @@ msg_tag_t mm_align_alloc(obj_handler_t obj_inx, void *addr, umword_t size)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(MM_ALIGN_ALLOC, MM_PROT, obj_inx),
|
||||
mk_syscall(syscall_prot_create(MM_ALIGN_ALLOC, MM_PROT, obj_inx).raw,
|
||||
0,
|
||||
addr,
|
||||
size,
|
||||
|
||||
@@ -19,7 +19,7 @@ msg_tag_t sys_read_info(obj_handler_t obj, sys_info_t *info)
|
||||
register volatile umword_t r1 asm("r1");
|
||||
register volatile umword_t r2 asm("r2");
|
||||
|
||||
mk_syscall(syscall_prot_create(SYS_INFO_GET, SYS_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(SYS_INFO_GET, SYS_PROT, obj).raw,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "u_types.h"
|
||||
#include "u_prot.h"
|
||||
#include "u_arch.h"
|
||||
#include "u_task.h"
|
||||
enum task_op_code
|
||||
{
|
||||
@@ -12,7 +13,7 @@ msg_tag_t task_obj_valid(obj_handler_t dst_task, obj_handler_t obj_inx)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(TASK_OBJ_MAP, TASK_PROT, dst_task),
|
||||
mk_syscall(syscall_prot_create(TASK_OBJ_MAP, TASK_PROT, dst_task).raw,
|
||||
0,
|
||||
obj_inx,
|
||||
0,
|
||||
@@ -32,7 +33,7 @@ msg_tag_t task_map(obj_handler_t dst_task, obj_handler_t src_obj, obj_handler_t
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(TASK_OBJ_MAP, TASK_PROT, dst_task),
|
||||
mk_syscall(syscall_prot_create(TASK_OBJ_MAP, TASK_PROT, dst_task).raw,
|
||||
0,
|
||||
src_obj,
|
||||
dst_obj,
|
||||
@@ -52,7 +53,7 @@ msg_tag_t task_unmap(obj_handler_t task_han, vpage_t vpage)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(TASK_OBJ_UNMAP, TASK_PROT, task_han),
|
||||
mk_syscall(syscall_prot_create(TASK_OBJ_UNMAP, TASK_PROT, task_han).raw,
|
||||
0,
|
||||
vpage.raw,
|
||||
0,
|
||||
@@ -68,7 +69,7 @@ msg_tag_t task_alloc_ram_base(obj_handler_t task_han, umword_t size, addr_t *all
|
||||
register volatile umword_t r0 asm("r0");
|
||||
register volatile umword_t r1 asm("r1");
|
||||
|
||||
mk_syscall(syscall_prot_create(TASK_ALLOC_RAM_BASE, TASK_PROT, task_han),
|
||||
mk_syscall(syscall_prot_create(TASK_ALLOC_RAM_BASE, TASK_PROT, task_han).raw,
|
||||
0,
|
||||
size,
|
||||
0,
|
||||
|
||||
@@ -15,7 +15,7 @@ msg_tag_t thread_msg_buf_set(obj_handler_t obj, void *msg)
|
||||
register volatile umword_t r1 asm("r1");
|
||||
register volatile umword_t r2 asm("r2");
|
||||
|
||||
mk_syscall(syscall_prot_create(MSG_BUG_SET, THREAD_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(MSG_BUG_SET, THREAD_PROT, obj).raw,
|
||||
0,
|
||||
msg,
|
||||
0,
|
||||
@@ -34,7 +34,7 @@ msg_tag_t thread_msg_buf_get(obj_handler_t obj, umword_t *msg, umword_t *len)
|
||||
register volatile umword_t r1 asm("r1");
|
||||
register volatile umword_t r2 asm("r2");
|
||||
|
||||
mk_syscall(syscall_prot_create4(MSG_BUG_GET, THREAD_PROT, obj, TRUE),
|
||||
mk_syscall(syscall_prot_create4(MSG_BUG_GET, THREAD_PROT, obj, TRUE).raw,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
@@ -60,7 +60,7 @@ msg_tag_t thread_exec_regs(obj_handler_t obj, umword_t pc, umword_t sp, umword_t
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(SET_EXEC_REGS, THREAD_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(SET_EXEC_REGS, THREAD_PROT, obj).raw,
|
||||
0,
|
||||
pc,
|
||||
sp,
|
||||
@@ -79,7 +79,7 @@ msg_tag_t thread_run(obj_handler_t obj, uint8_t prio)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(RUN_THREAD, THREAD_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(RUN_THREAD, THREAD_PROT, obj).raw,
|
||||
0,
|
||||
prio,
|
||||
0,
|
||||
@@ -94,7 +94,7 @@ msg_tag_t thread_bind_task(obj_handler_t obj, obj_handler_t tk_obj)
|
||||
{
|
||||
register volatile umword_t r0 asm("r0");
|
||||
|
||||
mk_syscall(syscall_prot_create(BIND_TASK, THREAD_PROT, obj),
|
||||
mk_syscall(syscall_prot_create(BIND_TASK, THREAD_PROT, obj).raw,
|
||||
0,
|
||||
tk_obj,
|
||||
0,
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "u_env.h"
|
||||
#include "u_prot.h"
|
||||
#include "u_hd_man.h"
|
||||
#include <ns_cli.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
@@ -17,15 +18,15 @@ RPC_GENERATION_CALL1(drv_t, DRV_CLOSE, close,
|
||||
RPC_GENERATION_CALL3(drv_t, 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_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
RPC_GENERATION_CALL3(drv_t, 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_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
RPC_GENERATION_CALL3(drv_t, DRV_IOCTL, ioctl,
|
||||
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_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
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)
|
||||
|
||||
int dev_fs_open(const char *path, uint32_t oflags)
|
||||
{
|
||||
@@ -38,7 +39,7 @@ int dev_fs_open(const char *path, uint32_t oflags)
|
||||
}
|
||||
|
||||
rpc_ref_array_uint32_t_uint8_t_32_t rpc_path = {
|
||||
.data = &path[ret],
|
||||
.data = (uint8_t *)(&path[ret]),
|
||||
.len = strlen(&path[ret]) + 1,
|
||||
};
|
||||
rpc_uint32_t_t rpc_flags = {
|
||||
@@ -102,7 +103,7 @@ int dev_fs_write(int desc, const void *buf, size_t size)
|
||||
.data = fd,
|
||||
};
|
||||
rpc_ref_array_uint32_t_uint8_t_32_t rpc_data = {
|
||||
.data = buf,
|
||||
.data = (uint8_t *)buf,
|
||||
.len = size,
|
||||
};
|
||||
rpc_size_t_t rpc_flags = {
|
||||
@@ -123,8 +124,8 @@ int dev_fs_ioctl(int desc, int cmd, void *args)
|
||||
rpc_int_t rpc_desc = {
|
||||
.data = fd,
|
||||
};
|
||||
rpc_int_t rpc_cmd = {
|
||||
.data = fd,
|
||||
rpc_mword_t_t rpc_cmd = {
|
||||
.data = cmd,
|
||||
};
|
||||
rpc_umword_t_t rpc_args = {
|
||||
.data = (umword_t)args,
|
||||
|
||||
@@ -32,7 +32,7 @@ RPC_GENERATION_DISPATCH1(drv_t, DRV_CLOSE, close,
|
||||
RPC_GENERATION_OP3(drv_t, 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_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
{
|
||||
return dev_read(desc->data, data->data, size->data);
|
||||
}
|
||||
@@ -40,13 +40,13 @@ RPC_GENERATION_OP3(drv_t, DRV_READ, read,
|
||||
RPC_GENERATION_DISPATCH3(drv_t, 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_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
|
||||
/*ssize_t mr_dev_write(int desc, const void *buf, size_t size);*/
|
||||
RPC_GENERATION_OP3(drv_t, 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_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
{
|
||||
return dev_write(desc->data, data->data, size->data);
|
||||
}
|
||||
@@ -54,21 +54,21 @@ RPC_GENERATION_OP3(drv_t, DRV_WRITE, write,
|
||||
RPC_GENERATION_DISPATCH3(drv_t, 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_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
|
||||
/*int mr_dev_ioctl(int desc, int cmd, void *args);*/
|
||||
RPC_GENERATION_OP3(drv_t, DRV_IOCTL, ioctl,
|
||||
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_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
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)
|
||||
{
|
||||
return dev_ioctl(desc->data, data->data, size->data);
|
||||
return dev_ioctl(desc->data, (int)(data->data), (void *)(size->data));
|
||||
}
|
||||
|
||||
RPC_GENERATION_DISPATCH3(drv_t, DRV_IOCTL, ioctl,
|
||||
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_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||
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)
|
||||
|
||||
/*dispatch*/
|
||||
RPC_DISPATCH5(drv_t, typeof(DRV_OPEN), DRV_OPEN, open, DRV_CLOSE, close, DRV_READ, read, DRV_WRITE, write, DRV_IOCTL, ioctl)
|
||||
|
||||
@@ -81,7 +81,7 @@ int ns_register(const char *path, obj_handler_t svr_hd)
|
||||
assert(path);
|
||||
|
||||
rpc_ref_array_uint32_t_uint8_t_32_t rpc_path = {
|
||||
.data = path,
|
||||
.data = (uint8_t *)path,
|
||||
.len = strlen(path) + 1,
|
||||
};
|
||||
rpc_obj_handler_t_t rpc_svr_hd = {
|
||||
@@ -115,7 +115,7 @@ int ns_query(const char *path, obj_handler_t *svr_hd)
|
||||
}
|
||||
|
||||
rpc_ref_array_uint32_t_uint8_t_32_t rpc_path = {
|
||||
.data = path,
|
||||
.data = (uint8_t *)path,
|
||||
.len = strlen(path) + 1,
|
||||
};
|
||||
rpc_obj_handler_t_t rpc_svr_hd = {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "ns_types.h"
|
||||
#include "u_rpc.h"
|
||||
#include "u_rpc_svr.h"
|
||||
#include "u_arch.h"
|
||||
#include "u_hd_man.h"
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
@@ -182,6 +182,7 @@ RPC_TYPE_DEF_ALL(int) //!< 定义所有的
|
||||
RPC_TYPE_DEF_ALL(uint32_t) //!< 定义所有的
|
||||
RPC_TYPE_DEF_ALL(size_t) //!< 定义所有的
|
||||
RPC_TYPE_DEF_ALL(umword_t) //!< 定义所有的
|
||||
RPC_TYPE_DEF_ALL(mword_t) //!< 定义所有的
|
||||
RPC_TYPE_DEF_ALL(dirent_t) //!< 目录类型
|
||||
RPC_TYPE_DEF_ALL(stat_t)
|
||||
|
||||
@@ -566,7 +567,7 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
} while (0)
|
||||
|
||||
#define RPC_DISPATCH1(struct_type, op_type, func0_op, func0_name) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
{ \
|
||||
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||
size_t op_val; \
|
||||
@@ -576,7 +577,7 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
{ \
|
||||
case func0_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
@@ -584,7 +585,7 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
}
|
||||
|
||||
#define RPC_DISPATCH2(struct_type, op_type, func0_op, func0_name, func1_op, func1_name) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
{ \
|
||||
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||
size_t op_val; \
|
||||
@@ -594,12 +595,12 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
{ \
|
||||
case func0_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func1_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func1_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
@@ -607,7 +608,7 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
}
|
||||
|
||||
#define RPC_DISPATCH3(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, func2_op, func2_name) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
{ \
|
||||
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||
size_t op_val; \
|
||||
@@ -617,17 +618,17 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
{ \
|
||||
case func0_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func1_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func1_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func2_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func2_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
@@ -635,7 +636,7 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
}
|
||||
|
||||
#define RPC_DISPATCH4(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, func2_op, func2_name, func3_op, func3_name) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
{ \
|
||||
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||
size_t op_val; \
|
||||
@@ -645,22 +646,22 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
{ \
|
||||
case func0_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func1_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func1_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func2_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func2_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func3_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func3_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func3_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
@@ -670,7 +671,7 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
#define RPC_DISPATCH5(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, \
|
||||
func2_op, func2_name, func3_op, func3_name, \
|
||||
func4_op, func4_name) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
{ \
|
||||
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||
size_t op_val; \
|
||||
@@ -680,27 +681,27 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
{ \
|
||||
case func0_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func1_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func1_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func2_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func2_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func3_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func3_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func3_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func4_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func4_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func4_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
@@ -711,7 +712,7 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
func4_op, func4_name, func5_op, func5_name, func6_op, func6_name, \
|
||||
func7_op, func7_name, func8_op, func8_name, func9_op, func9_name, \
|
||||
func10_op, func10_name, func11_op, func11_name) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
|
||||
{ \
|
||||
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||
size_t op_val; \
|
||||
@@ -721,62 +722,62 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
||||
{ \
|
||||
case func0_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func1_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func1_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func2_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func2_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func3_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func3_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func3_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func4_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func4_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func4_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func5_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func5_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func5_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func6_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func6_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func6_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func7_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func7_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func7_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func8_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func8_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func8_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func9_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func9_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func9_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func10_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func10_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func10_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
case func11_op: \
|
||||
{ \
|
||||
tag = struct_type##_##func11_name##_dispatch(obj, in_tag, ipc_msg); \
|
||||
tag = struct_type##_##func11_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
|
||||
} \
|
||||
break; \
|
||||
default: \
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
#include "u_types.h"
|
||||
#include "u_prot.h"
|
||||
#include "u_ipc.h"
|
||||
typedef msg_tag_t (*rpc_dispatch_func)(void *obj, msg_tag_t tag, ipc_msg_t *msg);
|
||||
|
||||
struct rpc_svr_obj;
|
||||
typedef msg_tag_t (*rpc_dispatch_func)(struct rpc_svr_obj *obj, msg_tag_t tag, ipc_msg_t *msg);
|
||||
|
||||
typedef struct rpc_svr_obj
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user