Add MBus syscalls
This commit is contained in:
@ -170,7 +170,7 @@ int32_t ps2kbdev_readch(struct Dev *dev, uint8_t *buffer, size_t len, uint64_t p
|
||||
int32_t ps2kbdev_attchcons(struct Dev *dev, uint8_t *buffer, size_t len, uint64_t pid) {
|
||||
(void)dev; (void)buffer; (void)len;
|
||||
|
||||
return ipc_mbusattchcons("ps2kb", pid);
|
||||
return ipc_mbusattch("ps2kb", pid);
|
||||
}
|
||||
|
||||
void ps2kbdev_intr(void) {
|
||||
|
||||
@ -117,7 +117,7 @@ int32_t ipc_mbusconsume(const char *name, uint8_t *const buffer, uint64_t pid) {
|
||||
return i;
|
||||
}
|
||||
|
||||
int32_t ipc_mbusattchcons(const char *name, uint64_t pid) {
|
||||
int32_t ipc_mbusattch(const char *name, uint64_t pid) {
|
||||
IpcMBus *mbus = NULL;
|
||||
|
||||
spinlock_acquire(&IPC_MBUSES.spinlock);
|
||||
@ -148,7 +148,7 @@ int32_t ipc_mbusattchcons(const char *name, uint64_t pid) {
|
||||
return E_OK;
|
||||
}
|
||||
|
||||
int32_t ipc_mbusdttchcons(const char *name, uint64_t pid) {
|
||||
int32_t ipc_mbusdttch(const char *name, uint64_t pid) {
|
||||
IpcMBus *mbus = NULL;
|
||||
|
||||
spinlock_acquire(&IPC_MBUSES.spinlock);
|
||||
|
||||
@ -32,8 +32,8 @@ IpcMBus *ipc_mbusmake(const char *name, size_t objsize, size_t objmax);
|
||||
int32_t ipc_mbusdelete(const char *name);
|
||||
int32_t ipc_mbuspublish(const char *name, const uint8_t *const buffer);
|
||||
int32_t ipc_mbusconsume(const char *name, uint8_t *const buffer, uint64_t pid);
|
||||
int32_t ipc_mbusattchcons(const char *name, uint64_t pid);
|
||||
int32_t ipc_mbusdttchcons(const char *name, uint64_t pid);
|
||||
int32_t ipc_mbusattch(const char *name, uint64_t pid);
|
||||
int32_t ipc_mbusdttch(const char *name, uint64_t pid);
|
||||
void ipc_mbustick(void);
|
||||
|
||||
#endif // IPC_MBUS_MBUS_H_
|
||||
|
||||
79
kernel/syscall/ipcmbus.c
Normal file
79
kernel/syscall/ipcmbus.c
Normal file
@ -0,0 +1,79 @@
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include "syscall/syscall.h"
|
||||
#include "syscall/ipcmbus.h"
|
||||
#include "ipc/mbus/mbus.h"
|
||||
#include "errors.h"
|
||||
|
||||
int32_t SYSCALL3(sys_ipc_mbusmake, name1, objsize1, objmax1) {
|
||||
const char *name = (const char *)name1;
|
||||
size_t objsize = objsize1;
|
||||
size_t objmax = objmax1;
|
||||
|
||||
if (name == NULL) {
|
||||
return E_INVALIDARGUMENT;
|
||||
}
|
||||
|
||||
IpcMBus *mbus = ipc_mbusmake(name, objsize, objmax);
|
||||
if (mbus == NULL) {
|
||||
return E_NOMEMORY;
|
||||
}
|
||||
|
||||
return E_OK;
|
||||
}
|
||||
|
||||
int32_t SYSCALL1(sys_ipc_mbusdelete, name1) {
|
||||
const char *name = (const char *)name1;
|
||||
|
||||
return ipc_mbusdelete(name);
|
||||
}
|
||||
|
||||
int32_t SYSCALL2(sys_ipc_mbuspublish, name1, buffer1) {
|
||||
const char *name = (const char *)name1;
|
||||
const uint8_t *const buffer = (const uint8_t *const)buffer1;
|
||||
|
||||
if (name == NULL) {
|
||||
return E_INVALIDARGUMENT;
|
||||
}
|
||||
|
||||
if (buffer == NULL) {
|
||||
return E_INVALIDARGUMENT;
|
||||
}
|
||||
|
||||
return ipc_mbuspublish(name, buffer);
|
||||
}
|
||||
|
||||
int32_t SYSCALL2(sys_ipc_mbusconsume, name1, buffer1) {
|
||||
const char *name = (const char *)name1;
|
||||
uint8_t *const buffer = (int8_t *const)buffer1;
|
||||
|
||||
if (name == NULL) {
|
||||
return E_INVALIDARGUMENT;
|
||||
}
|
||||
|
||||
if (buffer == NULL) {
|
||||
return E_INVALIDARGUMENT;
|
||||
}
|
||||
|
||||
return ipc_mbusconsume(name, buffer, _caller_pid);
|
||||
}
|
||||
|
||||
int32_t SYSCALL1(sys_ipc_mbusattch, name1) {
|
||||
const char *name = (const char *)name1;
|
||||
|
||||
if (name == NULL) {
|
||||
return E_INVALIDARGUMENT;
|
||||
}
|
||||
|
||||
return ipc_mbusattch(name, _caller_pid);
|
||||
}
|
||||
|
||||
int32_t SYSCALL1(sys_ipc_mbusdttch, name1) {
|
||||
const char *name = (const char *)name1;
|
||||
|
||||
if (name == NULL) {
|
||||
return E_INVALIDARGUMENT;
|
||||
}
|
||||
|
||||
return ipc_mbusattch(name, _caller_pid);
|
||||
}
|
||||
15
kernel/syscall/ipcmbus.h
Normal file
15
kernel/syscall/ipcmbus.h
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef SYSCALL_IPCMBUS_H_
|
||||
#define SYSCALL_IPCMBUS_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include "syscall/syscall.h"
|
||||
|
||||
int32_t SYSCALL3(sys_ipc_mbusmake, name1, objsize1, objmax1);
|
||||
int32_t SYSCALL1(sys_ipc_mbusdelete, name1);
|
||||
int32_t SYSCALL2(sys_ipc_mbuspublish, name1, buffer1);
|
||||
int32_t SYSCALL2(sys_ipc_mbusconsume, name1, buffer1);
|
||||
int32_t SYSCALL1(sys_ipc_mbusattch, name1);
|
||||
int32_t SYSCALL1(sys_ipc_mbusdttch, name1);
|
||||
|
||||
#endif // SYSCALL_IPCMBUS_H_
|
||||
@ -10,6 +10,7 @@
|
||||
#include "syscall/fs.h"
|
||||
#include "syscall/dev.h"
|
||||
#include "syscall/time.h"
|
||||
#include "syscall/ipcmbus.h"
|
||||
#include "errors.h"
|
||||
#include "kprintf.h"
|
||||
|
||||
@ -67,4 +68,11 @@ SyscallFn SYSCALL_TABLE[SYSCALLS_MAX] = {
|
||||
[SYS_DEV_DELHANDLE] = &sys_dev_delhandle,
|
||||
|
||||
[SYS_TIME] = &sys_time,
|
||||
|
||||
[SYS_IPC_MBUSMAKE] = &sys_ipc_mbusmake,
|
||||
[SYS_IPC_MBUSDELETE] = &sys_ipc_mbusdelete,
|
||||
[SYS_IPC_MBUSPUBLISH] = &sys_ipc_mbuspublish,
|
||||
[SYS_IPC_MBUSCONSUME] = &sys_ipc_mbusconsume,
|
||||
[SYS_IPC_MBUSATTCH] = &sys_ipc_mbusattch,
|
||||
[SYS_IPC_MBUSDTTCH] = &sys_ipc_mbusdttch,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user