Add MBus syscalls

This commit is contained in:
2025-11-11 23:44:43 +01:00
parent 4fe907a733
commit c2364fbd48
7 changed files with 113 additions and 5 deletions

79
kernel/syscall/ipcmbus.c Normal file
View 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
View 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_

View File

@ -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,
};