修复一些编译警告
This commit is contained in:
6
.config
6
.config
@@ -1,5 +1,11 @@
|
|||||||
CONFIG_RTT_DIR="./"
|
CONFIG_RTT_DIR="./"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Libc backend
|
||||||
|
#
|
||||||
|
CONFIG_MKRTOS_LIBC_FD_MAP_NR=128
|
||||||
|
# end of Libc backend
|
||||||
|
|
||||||
#
|
#
|
||||||
# DFS: device virtual file system
|
# 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
|
# Device Drivers
|
||||||
|
|||||||
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@@ -241,7 +241,9 @@
|
|||||||
"uart_config.h": "c",
|
"uart_config.h": "c",
|
||||||
"drv_crypto.h": "c",
|
"drv_crypto.h": "c",
|
||||||
"drv_log.h": "c",
|
"drv_log.h": "c",
|
||||||
"drv_usart.h": "c"
|
"drv_usart.h": "c",
|
||||||
|
"__locale": "c",
|
||||||
|
"__string": "c"
|
||||||
},
|
},
|
||||||
"cortex-debug.showRTOS": false,
|
"cortex-debug.showRTOS": false,
|
||||||
"cortex-debug.variableUseNaturalFormat": false,
|
"cortex-debug.variableUseNaturalFormat": false,
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
|
source "mkrtos_user/lib/Kconfig"
|
||||||
source "mkrtos_user/server/drv/rtthread_drv/Kconfig"
|
source "mkrtos_user/server/drv/rtthread_drv/Kconfig"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.13)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
# -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative
|
# -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 \
|
-fPIC -fPIE -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||||
-D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
|
-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)
|
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 \
|
-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__ \
|
-D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
|
||||||
" )
|
" )
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.13)
|
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 \
|
-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__ \
|
-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_util/inc
|
||||||
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys
|
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys
|
||||||
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/libc_backend/inc
|
${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/arm/
|
||||||
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/mlibc/arch/generic
|
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/mlibc/arch/generic
|
||||||
@@ -28,6 +29,7 @@ target_link_libraries(
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
muslc
|
muslc
|
||||||
sys
|
sys
|
||||||
|
sys_svr
|
||||||
)
|
)
|
||||||
set_target_properties(libc_be PROPERTIES LINK_FLAGS "-pie ")
|
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 "fs_backend.h"
|
||||||
#include "syscall_backend.h"
|
#include "syscall_backend.h"
|
||||||
|
#include "fs_cli.h"
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <u_prot.h>
|
#include <u_prot.h>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.13)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=700 ")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -D_XOPEN_SOURCE=700 ")
|
||||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -D_XOPEN_SOURCE=700 ")
|
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -w -D_XOPEN_SOURCE=700 ")
|
||||||
|
|
||||||
file(GLOB_RECURSE deps
|
file(GLOB_RECURSE deps
|
||||||
src/*.C
|
src/*.C
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.13)
|
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 \
|
-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__ \
|
-D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
|
||||||
" )
|
" )
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.13)
|
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 \
|
-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__ \
|
-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);
|
return ((data >> 8) & 0xff) | ((data & 0xff) << 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mk_syscall(unsigned long nr, ...);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "u_types.h"
|
#include "u_types.h"
|
||||||
#include "u_prot.h"
|
#include "u_prot.h"
|
||||||
#include "u_factory.h"
|
#include "u_factory.h"
|
||||||
|
#include "u_arch.h"
|
||||||
|
|
||||||
enum
|
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");
|
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,
|
0,
|
||||||
IRQ_PROT,
|
IRQ_PROT,
|
||||||
vpage.raw,
|
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");
|
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,
|
0,
|
||||||
THREAD_PROT,
|
THREAD_PROT,
|
||||||
vpage.raw,
|
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");
|
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,
|
0,
|
||||||
TASK_PROT,
|
TASK_PROT,
|
||||||
vpage.raw,
|
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");
|
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,
|
0,
|
||||||
IPC_PROT,
|
IPC_PROT,
|
||||||
vpage.raw,
|
vpage.raw,
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
#include "u_prot.h"
|
#include "u_prot.h"
|
||||||
#include "u_ipc.h"
|
#include "u_ipc.h"
|
||||||
#include "u_util.h"
|
#include "u_util.h"
|
||||||
|
#include "u_arch.h"
|
||||||
|
|
||||||
enum ipc_op
|
enum ipc_op
|
||||||
{
|
{
|
||||||
IPC_CALL, //!< 客户端CALL操作
|
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");
|
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,
|
0,
|
||||||
tag_th,
|
tag_th,
|
||||||
user_obj,
|
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 r0 asm("r0");
|
||||||
register volatile umword_t r1 asm("r1");
|
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,
|
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");
|
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,
|
in_tag.raw,
|
||||||
0,
|
0,
|
||||||
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");
|
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,
|
in_tag.raw,
|
||||||
timeout.raw,
|
timeout.raw,
|
||||||
0,
|
0,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "u_prot.h"
|
#include "u_prot.h"
|
||||||
#include "u_types.h"
|
#include "u_types.h"
|
||||||
#include "u_util.h"
|
#include "u_util.h"
|
||||||
|
#include "u_arch.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
enum log_op
|
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");
|
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,
|
0,
|
||||||
irq_no,
|
irq_no,
|
||||||
0,
|
0,
|
||||||
@@ -41,7 +42,7 @@ msg_tag_t uirq_wait(obj_handler_t obj_inx, int flags)
|
|||||||
{
|
{
|
||||||
register volatile umword_t r0 asm("r0");
|
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,
|
0,
|
||||||
flags,
|
flags,
|
||||||
0,
|
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");
|
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,
|
0,
|
||||||
irq_no,
|
irq_no,
|
||||||
0,
|
0,
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "u_log.h"
|
#include "u_log.h"
|
||||||
#include "u_prot.h"
|
#include "u_prot.h"
|
||||||
#include "u_types.h"
|
#include "u_types.h"
|
||||||
|
#include "u_arch.h"
|
||||||
#include "u_util.h"
|
#include "u_util.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
enum log_op
|
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 r3 asm("r3");
|
||||||
register volatile umword_t r4 asm("r4");
|
register volatile umword_t r4 asm("r4");
|
||||||
register volatile umword_t r5 asm("r5");
|
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,
|
msg_tag_init4(0, 0, 0, 0).raw,
|
||||||
len,
|
len,
|
||||||
0,
|
0,
|
||||||
@@ -71,7 +72,7 @@ void ulog_write_bytes(obj_handler_t obj_inx, const uint8_t *data, umword_t len)
|
|||||||
if (i > 0)
|
if (i > 0)
|
||||||
{
|
{
|
||||||
umword_t *write_word_buf = (umword_t *)write_buf;
|
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,
|
msg_tag_init4(0, ROUND_UP(i, WORD_BYTES), 0, 0).raw,
|
||||||
write_word_buf[0],
|
write_word_buf[0],
|
||||||
write_word_buf[1],
|
write_word_buf[1],
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "u_mm.h"
|
#include "u_mm.h"
|
||||||
#include "u_types.h"
|
#include "u_types.h"
|
||||||
#include "u_prot.h"
|
#include "u_prot.h"
|
||||||
|
#include "u_arch.h"
|
||||||
|
|
||||||
enum mm_op
|
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 r1 asm("r1");
|
||||||
register volatile umword_t r2 asm("r2");
|
register volatile umword_t r2 asm("r2");
|
||||||
register volatile umword_t r3 asm("r3");
|
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,
|
0,
|
||||||
pnf_nr,
|
pnf_nr,
|
||||||
attrs,
|
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)
|
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,
|
0,
|
||||||
addr,
|
addr,
|
||||||
pfn_nr,
|
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");
|
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,
|
0,
|
||||||
addr,
|
addr,
|
||||||
size,
|
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 r1 asm("r1");
|
||||||
register volatile umword_t r2 asm("r2");
|
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,
|
0,
|
||||||
0,
|
0,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "u_types.h"
|
#include "u_types.h"
|
||||||
#include "u_prot.h"
|
#include "u_prot.h"
|
||||||
|
#include "u_arch.h"
|
||||||
#include "u_task.h"
|
#include "u_task.h"
|
||||||
enum task_op_code
|
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");
|
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,
|
0,
|
||||||
obj_inx,
|
obj_inx,
|
||||||
0,
|
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");
|
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,
|
0,
|
||||||
src_obj,
|
src_obj,
|
||||||
dst_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");
|
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,
|
0,
|
||||||
vpage.raw,
|
vpage.raw,
|
||||||
0,
|
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 r0 asm("r0");
|
||||||
register volatile umword_t r1 asm("r1");
|
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,
|
0,
|
||||||
size,
|
size,
|
||||||
0,
|
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 r1 asm("r1");
|
||||||
register volatile umword_t r2 asm("r2");
|
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,
|
0,
|
||||||
msg,
|
msg,
|
||||||
0,
|
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 r1 asm("r1");
|
||||||
register volatile umword_t r2 asm("r2");
|
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,
|
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");
|
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,
|
0,
|
||||||
pc,
|
pc,
|
||||||
sp,
|
sp,
|
||||||
@@ -79,7 +79,7 @@ msg_tag_t thread_run(obj_handler_t obj, uint8_t prio)
|
|||||||
{
|
{
|
||||||
register volatile umword_t r0 asm("r0");
|
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,
|
0,
|
||||||
prio,
|
prio,
|
||||||
0,
|
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");
|
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,
|
0,
|
||||||
tk_obj,
|
tk_obj,
|
||||||
0,
|
0,
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "u_env.h"
|
#include "u_env.h"
|
||||||
#include "u_prot.h"
|
#include "u_prot.h"
|
||||||
#include "u_hd_man.h"
|
#include "u_hd_man.h"
|
||||||
|
#include <ns_cli.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.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_GENERATION_CALL3(drv_t, DRV_READ, read,
|
||||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
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_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_GENERATION_CALL3(drv_t, DRV_WRITE, write,
|
||||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
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_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_GENERATION_CALL3(drv_t, DRV_IOCTL, ioctl,
|
||||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
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_mword_t_t, rpc_mword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
|
||||||
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
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)
|
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 = {
|
rpc_ref_array_uint32_t_uint8_t_32_t rpc_path = {
|
||||||
.data = &path[ret],
|
.data = (uint8_t *)(&path[ret]),
|
||||||
.len = strlen(&path[ret]) + 1,
|
.len = strlen(&path[ret]) + 1,
|
||||||
};
|
};
|
||||||
rpc_uint32_t_t rpc_flags = {
|
rpc_uint32_t_t rpc_flags = {
|
||||||
@@ -102,7 +103,7 @@ int dev_fs_write(int desc, const void *buf, size_t size)
|
|||||||
.data = fd,
|
.data = fd,
|
||||||
};
|
};
|
||||||
rpc_ref_array_uint32_t_uint8_t_32_t rpc_data = {
|
rpc_ref_array_uint32_t_uint8_t_32_t rpc_data = {
|
||||||
.data = buf,
|
.data = (uint8_t *)buf,
|
||||||
.len = size,
|
.len = size,
|
||||||
};
|
};
|
||||||
rpc_size_t_t rpc_flags = {
|
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 = {
|
rpc_int_t rpc_desc = {
|
||||||
.data = fd,
|
.data = fd,
|
||||||
};
|
};
|
||||||
rpc_int_t rpc_cmd = {
|
rpc_mword_t_t rpc_cmd = {
|
||||||
.data = fd,
|
.data = cmd,
|
||||||
};
|
};
|
||||||
rpc_umword_t_t rpc_args = {
|
rpc_umword_t_t rpc_args = {
|
||||||
.data = (umword_t)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_GENERATION_OP3(drv_t, DRV_READ, read,
|
||||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
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_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);
|
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_GENERATION_DISPATCH3(drv_t, DRV_READ, read,
|
||||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
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_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);*/
|
/*ssize_t mr_dev_write(int desc, const void *buf, size_t size);*/
|
||||||
RPC_GENERATION_OP3(drv_t, DRV_WRITE, write,
|
RPC_GENERATION_OP3(drv_t, DRV_WRITE, write,
|
||||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
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_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);
|
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_GENERATION_DISPATCH3(drv_t, DRV_WRITE, write,
|
||||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
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_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);*/
|
/*int mr_dev_ioctl(int desc, int cmd, void *args);*/
|
||||||
RPC_GENERATION_OP3(drv_t, DRV_IOCTL, ioctl,
|
RPC_GENERATION_OP3(drv_t, DRV_IOCTL, ioctl,
|
||||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
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_mword_t_t, rpc_mword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
|
||||||
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
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_GENERATION_DISPATCH3(drv_t, DRV_IOCTL, ioctl,
|
||||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
|
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_mword_t_t, rpc_mword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
|
||||||
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
|
||||||
|
|
||||||
/*dispatch*/
|
/*dispatch*/
|
||||||
RPC_DISPATCH5(drv_t, typeof(DRV_OPEN), DRV_OPEN, open, DRV_CLOSE, close, DRV_READ, read, DRV_WRITE, write, DRV_IOCTL, ioctl)
|
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);
|
assert(path);
|
||||||
|
|
||||||
rpc_ref_array_uint32_t_uint8_t_32_t rpc_path = {
|
rpc_ref_array_uint32_t_uint8_t_32_t rpc_path = {
|
||||||
.data = path,
|
.data = (uint8_t *)path,
|
||||||
.len = strlen(path) + 1,
|
.len = strlen(path) + 1,
|
||||||
};
|
};
|
||||||
rpc_obj_handler_t_t rpc_svr_hd = {
|
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 = {
|
rpc_ref_array_uint32_t_uint8_t_32_t rpc_path = {
|
||||||
.data = path,
|
.data = (uint8_t *)path,
|
||||||
.len = strlen(path) + 1,
|
.len = strlen(path) + 1,
|
||||||
};
|
};
|
||||||
rpc_obj_handler_t_t rpc_svr_hd = {
|
rpc_obj_handler_t_t rpc_svr_hd = {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "ns_types.h"
|
#include "ns_types.h"
|
||||||
#include "u_rpc.h"
|
#include "u_rpc.h"
|
||||||
#include "u_rpc_svr.h"
|
#include "u_rpc_svr.h"
|
||||||
|
#include "u_arch.h"
|
||||||
#include "u_hd_man.h"
|
#include "u_hd_man.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|||||||
@@ -179,9 +179,10 @@ static inline void rpc_memcpy(void *dst, void *src, size_t size)
|
|||||||
RPC_CLI_TYPE_TRAN_TO_SVR_TYPE(rpc_##type##_t, rpc_##type##_t)
|
RPC_CLI_TYPE_TRAN_TO_SVR_TYPE(rpc_##type##_t, rpc_##type##_t)
|
||||||
|
|
||||||
RPC_TYPE_DEF_ALL(int) //!< 定义所有的
|
RPC_TYPE_DEF_ALL(int) //!< 定义所有的
|
||||||
RPC_TYPE_DEF_ALL(uint32_t) //!< 定义所有的
|
RPC_TYPE_DEF_ALL(uint32_t) //!< 定义所有的
|
||||||
RPC_TYPE_DEF_ALL(size_t) //!< 定义所有的
|
RPC_TYPE_DEF_ALL(size_t) //!< 定义所有的
|
||||||
RPC_TYPE_DEF_ALL(umword_t) //!< 定义所有的
|
RPC_TYPE_DEF_ALL(umword_t) //!< 定义所有的
|
||||||
|
RPC_TYPE_DEF_ALL(mword_t) //!< 定义所有的
|
||||||
RPC_TYPE_DEF_ALL(dirent_t) //!< 目录类型
|
RPC_TYPE_DEF_ALL(dirent_t) //!< 目录类型
|
||||||
RPC_TYPE_DEF_ALL(stat_t)
|
RPC_TYPE_DEF_ALL(stat_t)
|
||||||
|
|
||||||
@@ -565,49 +566,49 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define RPC_DISPATCH1(struct_type, op_type, func0_op, func0_name) \
|
#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); \
|
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||||
size_t op_val; \
|
size_t op_val; \
|
||||||
\
|
\
|
||||||
op_val = *((op_type *)(ipc_msg->msg_buf)); \
|
op_val = *((op_type *)(ipc_msg->msg_buf)); \
|
||||||
switch (op_val) \
|
switch (op_val) \
|
||||||
{ \
|
{ \
|
||||||
case func0_op: \
|
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; \
|
break; \
|
||||||
} \
|
} \
|
||||||
return tag; \
|
return tag; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define RPC_DISPATCH2(struct_type, op_type, func0_op, func0_name, func1_op, func1_name) \
|
#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); \
|
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||||
size_t op_val; \
|
size_t op_val; \
|
||||||
\
|
\
|
||||||
op_val = *((op_type *)(ipc_msg->msg_buf)); \
|
op_val = *((op_type *)(ipc_msg->msg_buf)); \
|
||||||
switch (op_val) \
|
switch (op_val) \
|
||||||
{ \
|
{ \
|
||||||
case func0_op: \
|
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; \
|
break; \
|
||||||
case func1_op: \
|
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; \
|
break; \
|
||||||
} \
|
} \
|
||||||
return tag; \
|
return tag; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define RPC_DISPATCH3(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, func2_op, func2_name) \
|
#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); \
|
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||||
size_t op_val; \
|
size_t op_val; \
|
||||||
@@ -617,17 +618,17 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
|||||||
{ \
|
{ \
|
||||||
case func0_op: \
|
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; \
|
break; \
|
||||||
case func1_op: \
|
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; \
|
break; \
|
||||||
case func2_op: \
|
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; \
|
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) \
|
#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); \
|
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||||
size_t op_val; \
|
size_t op_val; \
|
||||||
@@ -645,144 +646,144 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
|
|||||||
{ \
|
{ \
|
||||||
case func0_op: \
|
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; \
|
break; \
|
||||||
case func1_op: \
|
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; \
|
break; \
|
||||||
case func2_op: \
|
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; \
|
break; \
|
||||||
case func3_op: \
|
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; \
|
break; \
|
||||||
} \
|
} \
|
||||||
return tag; \
|
return tag; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define RPC_DISPATCH5(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, \
|
#define RPC_DISPATCH5(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, \
|
||||||
func2_op, func2_name, func3_op, func3_name, \
|
func2_op, func2_name, func3_op, func3_name, \
|
||||||
func4_op, func4_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); \
|
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||||
size_t op_val; \
|
size_t op_val; \
|
||||||
\
|
\
|
||||||
op_val = *((op_type *)(ipc_msg->msg_buf)); \
|
op_val = *((op_type *)(ipc_msg->msg_buf)); \
|
||||||
switch (op_val) \
|
switch (op_val) \
|
||||||
{ \
|
{ \
|
||||||
case func0_op: \
|
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; \
|
break; \
|
||||||
case func1_op: \
|
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; \
|
break; \
|
||||||
case func2_op: \
|
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; \
|
break; \
|
||||||
case func3_op: \
|
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; \
|
break; \
|
||||||
case func4_op: \
|
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; \
|
break; \
|
||||||
} \
|
} \
|
||||||
return tag; \
|
return tag; \
|
||||||
}
|
}
|
||||||
#define RPC_DISPATCH12(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, \
|
#define RPC_DISPATCH12(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, \
|
||||||
func2_op, func2_name, func3_op, func3_name, \
|
func2_op, func2_name, func3_op, func3_name, \
|
||||||
func4_op, func4_name, func5_op, func5_name, func6_op, func6_name, \
|
func4_op, func4_name, func5_op, func5_name, func6_op, func6_name, \
|
||||||
func7_op, func7_name, func8_op, func8_name, func9_op, func9_name, \
|
func7_op, func7_name, func8_op, func8_name, func9_op, func9_name, \
|
||||||
func10_op, func10_name, func11_op, func11_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); \
|
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
|
||||||
size_t op_val; \
|
size_t op_val; \
|
||||||
\
|
\
|
||||||
op_val = *((op_type *)(ipc_msg->msg_buf)); \
|
op_val = *((op_type *)(ipc_msg->msg_buf)); \
|
||||||
switch (op_val) \
|
switch (op_val) \
|
||||||
{ \
|
{ \
|
||||||
case func0_op: \
|
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; \
|
break; \
|
||||||
case func1_op: \
|
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; \
|
break; \
|
||||||
case func2_op: \
|
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; \
|
break; \
|
||||||
case func3_op: \
|
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; \
|
break; \
|
||||||
case func4_op: \
|
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; \
|
break; \
|
||||||
case func5_op: \
|
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; \
|
break; \
|
||||||
case func6_op: \
|
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; \
|
break; \
|
||||||
case func7_op: \
|
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; \
|
break; \
|
||||||
case func8_op: \
|
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; \
|
break; \
|
||||||
case func9_op: \
|
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; \
|
break; \
|
||||||
case func10_op: \
|
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; \
|
break; \
|
||||||
case func11_op: \
|
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; \
|
break; \
|
||||||
default: \
|
default: \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
return tag; \
|
return tag; \
|
||||||
}
|
}
|
||||||
#include "u_rpc_1.h"
|
#include "u_rpc_1.h"
|
||||||
#include "u_rpc_2.h"
|
#include "u_rpc_2.h"
|
||||||
|
|||||||
@@ -3,7 +3,9 @@
|
|||||||
#include "u_types.h"
|
#include "u_types.h"
|
||||||
#include "u_prot.h"
|
#include "u_prot.h"
|
||||||
#include "u_ipc.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
|
typedef struct rpc_svr_obj
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user