diff --git a/src/.gitignore b/src/.gitignore index d0d0e66ec0caba4fd88e23f3266c1af1dbab48cf..25e471be8ae344e18ae8d293959a2d1f3ded6293 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -63,3 +63,4 @@ dkms.conf fixdep init/rootfs.c build +drivers/block/romdisk.S diff --git a/src/drivers/block/romdisk.S b/src/drivers/block/romdisk.S deleted file mode 100644 index b0c309073aa3acf7d972b3145b9c6cd69a2a03e5..0000000000000000000000000000000000000000 --- a/src/drivers/block/romdisk.S +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) 2018-2022, NXOS Development Team - * SPDX-License-Identifier: Apache-2.0 - * - * Contains: romdisk from cpio binary - * - * Change Logs: - * Date Author Notes - * 2022-3-21 JasonHu Init - */ - -#define __ASSEMBLY__ -#include - -#ifdef CONFIG_NX_DRIVER_ROMDISK - -.section .romdisk, "a" -.incbin CONFIG_NX_DRIVER_ROMDISK_HOSTOS_PATH /* path from current dir */ - -#endif diff --git a/src/include/fs/romfs.h b/src/include/fs/romfs.h deleted file mode 100644 index 0c13fea768121ad27a22df2c2126a3efe82490c8..0000000000000000000000000000000000000000 --- a/src/include/fs/romfs.h +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (c) 2018-2022, NXOS Development Team - * SPDX-License-Identifier: Apache-2.0 - * - * Contains: rom file system - * - * Change Logs: - * Date Author Notes - * 2022-1-31 JasonHu Init - */ - -#ifndef __MODS_FS_ROMFS__ -#define __MODS_FS_ROMFS__ - -#include - -#define NX_ROMFS_SEEK_SET 0 -#define NX_ROMFS_SEEK_CUR 1 -#define NX_ROMFS_SEEK_END 2 - -struct NX_RomfsFile -{ - char *buf; - NX_Size size; - NX_Offset off; -}; -typedef struct NX_RomfsFile NX_RomfsFile; - -struct NX_RomfsDir -{ -}; -typedef struct NX_RomfsDir NX_RomfsDir; - -struct NX_RomfsSystem -{ - void *archive; /* cpio archive */ -}; -typedef struct NX_RomfsSystem NX_RomfsSystem; - -NX_Error NX_RomfsMount(const char *path, const char *devname, int flags); -NX_Error NX_RomfsUnmount(const char *path, int flags); - -NX_Error NX_RomfsOpen(const char *path, int flags, NX_RomfsFile **outFile); -NX_Error NX_RomfsClose(NX_RomfsFile *file); - -NX_Error NX_RomfsRead(NX_RomfsFile *file, void *buf, NX_Size bytes, NX_Size *outBytes); -NX_Error NX_RomfsSeek(NX_RomfsFile *file, NX_Offset off, int flags, NX_Offset *outOff); - -#endif /* __MODS_FS_ROMFS__ */ - diff --git a/src/process/process.c b/src/process/process.c index 293172ba539bb0dbfdb5a2f2c332f009fdec9411..a647aafed637bd6fef5b6bd7304c216b63be5836 100644 --- a/src/process/process.c +++ b/src/process/process.c @@ -18,7 +18,6 @@ #include #include #include -#include #define NX_LOG_NAME "process" #define NX_LOG_LEVEL NX_LOG_INFO @@ -181,7 +180,7 @@ NX_PRIVATE NX_Error NX_LoadCheck(char *path, int fd, NX_Size len, NX_Vmspace *sp } /* load header */ - if (NX_VfsFileSeek(fd, 0, NX_ROMFS_SEEK_SET, NX_NULL) != 0) + if (NX_VfsFileSeek(fd, 0, NX_VFS_SEEK_SET, NX_NULL) != 0) { return NX_EFAULT; } @@ -246,7 +245,7 @@ NX_PRIVATE NX_Error NX_LoadMapUserSpace(int fd, NX_Size len, NX_Vmspace *space, return NX_EFAULT; } - if (NX_VfsFileSeek(fd, off, NX_ROMFS_SEEK_SET, NX_NULL) != off) + if (NX_VfsFileSeek(fd, off, NX_VFS_SEEK_SET, NX_NULL) != off) { return NX_EFAULT; } @@ -301,7 +300,7 @@ NX_PRIVATE NX_Error NX_LoadFileData(int fd, NX_Size len, NX_Vmspace *space, Elf_ } /* read program header */ - if (NX_VfsFileSeek(fd, progOff, NX_ROMFS_SEEK_SET, NX_NULL) != progOff) + if (NX_VfsFileSeek(fd, progOff, NX_VFS_SEEK_SET, NX_NULL) != progOff) { return NX_EFAULT; } @@ -324,7 +323,7 @@ NX_PRIVATE NX_Error NX_LoadFileData(int fd, NX_Size len, NX_Vmspace *space, Elf_ return NX_ERROR; } - if (NX_VfsFileSeek(fd, progHeader.p_offset, NX_ROMFS_SEEK_SET, NX_NULL) != progHeader.p_offset) + if (NX_VfsFileSeek(fd, progHeader.p_offset, NX_VFS_SEEK_SET, NX_NULL) != progHeader.p_offset) { return NX_EIO; } diff --git a/src/process/syscall.c b/src/process/syscall.c index 0609025e16fa5dbfe7867652aead129637ee0bef..a1ba35253d80a0499ea367d851a4dc66dfb68cee 100644 --- a/src/process/syscall.c +++ b/src/process/syscall.c @@ -16,55 +16,191 @@ #include #include #include +#include -NX_PRIVATE int NX_SysInvalidCall(void) +NX_PRIVATE int SysInvalidCall(void) { NX_Thread *cur = NX_ThreadSelf(); NX_LOG_E("thread %s/%d call invalid syscall!", cur->name, cur->tid); return 0; } -NX_PRIVATE int NX_SysDebugLog(const char *buf, int size) +NX_PRIVATE int SysDebugLog(const char *buf, int size) { /* FIXME: check buf -> buf + size accessable */ NX_Printf(buf); return 0; } -NX_PRIVATE void NX_SysProcessExit(NX_Error errCode) +NX_PRIVATE void SysProcessExit(NX_Error errCode) { NX_ProcessExit(errCode); NX_PANIC("process exit syscall failed !"); } -NX_PRIVATE NX_Error NX_SysProcessCreate(char *name, char *path, NX_U32 flags) +NX_PRIVATE NX_Error SysProcessCreate(char *name, char *path, NX_U32 flags) { return NX_ProcessCreate(name, path, flags); } +NX_PRIVATE NX_Error SysVfsMount(const char * dev, const char * dir, const char * fsname, NX_U32 flags) +{ + return NX_VfsMountFileSystem(dev, dir, fsname, flags); +} + +NX_PRIVATE NX_Error SysVfsUnmount(const char * path) +{ + return NX_VfsUnmountFileSystem(path); +} + +NX_PRIVATE NX_Error SysVfsSync(void) +{ + return NX_VfsSync(); +} + +NX_PRIVATE int SysVfsOpen(const char * path, NX_U32 flags, NX_U32 mode, NX_Error *outErr) +{ + return NX_VfsOpen(path, flags, mode, outErr); +} + +NX_PRIVATE NX_Error SysVfsClose(int fd) +{ + return NX_VfsClose(fd); +} + +/* NOTICE: To compate 32 bit cpu, syscall need use NX_Size not NX_U64 */ +NX_PRIVATE NX_Size SysVfsRead(int fd, void * buf, NX_Size len, NX_Error *outErr) +{ + return NX_VfsRead(fd, buf, len, outErr); +} + +/* NOTICE: To compate 32 bit cpu, syscall need use NX_Size not NX_U64 */ +NX_PRIVATE NX_Size SysVfsWrite(int fd, void * buf, NX_Size len, NX_Error *outErr) +{ + return NX_VfsWrite(fd, buf, len, outErr); +} + +/* NOTICE: To compate 32 bit cpu, syscall need use NX_Offset not NX_I64 */ +NX_PRIVATE NX_Offset SysVfsFileSeek(int fd, NX_Offset off, int whence, NX_Error *outErr) +{ + return NX_VfsFileSeek(fd, off, whence, outErr); +} + +NX_PRIVATE NX_Error SysVfsFileSync(int fd) +{ + return NX_VfsFileSync(fd); +} + +NX_PRIVATE NX_Error SysVfsFileChmod(int fd, NX_U32 mode) +{ + return NX_VfsFileChmod(fd, mode); +} + +NX_PRIVATE NX_Error SysVfsFileStat(int fd, NX_VfsStatInfo * st) +{ + return NX_VfsFileStat(fd, st); +} + +NX_PRIVATE int SysVfsOpenDir(const char * name, NX_Error *outErr) +{ + return NX_VfsOpenDir(name, outErr); +} + +NX_PRIVATE NX_Error SysVfsCloseDir(int fd) +{ + return NX_VfsCloseDir(fd); +} + +NX_PRIVATE NX_Error SysVfsReadDir(int fd, NX_VfsDirent * dir) +{ + return NX_VfsReadDir(fd, dir); +} + +NX_PRIVATE NX_Error SysVfsRewindDir(int fd) +{ + return NX_VfsRewindDir(fd); +} + +NX_PRIVATE NX_Error SysVfsMakeDir(const char * path, NX_U32 mode) +{ + return NX_VfsMakeDir(path, mode); +} + +NX_PRIVATE NX_Error SysVfsRemoveDir(const char * path) +{ + return NX_VfsRemoveDir(path); +} + +NX_PRIVATE NX_Error SysVfsRename(const char * src, const char * dst) +{ + return NX_VfsRename(src, dst); +} + +NX_PRIVATE NX_Error SysVfsUnlink(const char * path) +{ + return NX_VfsUnlink(path); +} + +NX_PRIVATE NX_Error SysVfsAccess(const char * path, NX_U32 mode) +{ + return NX_VfsAccess(path, mode); +} + +NX_PRIVATE NX_Error SysVfsChmod(const char * path, NX_U32 mode) +{ + return NX_VfsChmod(path, mode); +} + +NX_PRIVATE NX_Error SysVfsStat(const char * path, NX_VfsStatInfo * st) +{ + return NX_VfsStat(path, st); +} + /* xbook env syscall table */ NX_PRIVATE const NX_SyscallHandler NX_SyscallTable[] = { - NX_SysInvalidCall, /* 0 */ - NX_SysDebugLog, /* 1 */ - NX_SysProcessExit, - NX_SysProcessCreate, + SysInvalidCall, /* 0 */ + SysDebugLog, /* 1 */ + SysProcessExit, + SysProcessCreate, + SysVfsMount, + SysVfsUnmount, /* 5 */ + SysVfsSync, + SysVfsOpen, + SysVfsClose, + SysVfsRead, + SysVfsWrite, /* 10 */ + SysVfsFileSeek, + SysVfsFileSync, + SysVfsFileChmod, + SysVfsFileStat, + SysVfsOpenDir, /* 15 */ + SysVfsCloseDir, + SysVfsReadDir, + SysVfsRewindDir, + SysVfsMakeDir, + SysVfsRemoveDir, /* 20 */ + SysVfsRename, + SysVfsUnlink, + SysVfsAccess, + SysVfsChmod, + SysVfsStat, /* 25 */ }; /* posix env syscall table */ NX_PRIVATE const NX_SyscallHandler NX_SyscallTablePosix[] = { - NX_SysInvalidCall, /* 0 */ + SysInvalidCall, /* 0 */ }; NX_PRIVATE const NX_SyscallHandler NX_SyscallTableWin32[] = { - NX_SysInvalidCall, /* 0 */ + SysInvalidCall, /* 0 */ }; NX_SyscallHandler NX_SyscallGetHandler(NX_SyscallApi api) { - NX_SyscallHandler handler = NX_SysInvalidCall; + NX_SyscallHandler handler = SysInvalidCall; NX_U32 callNumber = NX_SYSCALL_NUMBER(api); NX_U32 callEnv = NX_SYSCALL_ENV(api);