X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Kernel%2Fsyscalls.c;h=8e02c5dec558a9dc43cb1b456410e975dc483147;hb=f8528eeb40cbea394df23878f78ff9cb19f25771;hp=d89d6e6ad010f04cd39bf20f7dca249754ab5d48;hpb=8bc40333b1401d7616b225945fee53d972c2f418;p=tpg%2Facess2.git diff --git a/Kernel/syscalls.c b/Kernel/syscalls.c index d89d6e6a..8e02c5de 100644 --- a/Kernel/syscalls.c +++ b/Kernel/syscalls.c @@ -2,7 +2,7 @@ * AcessOS Microkernel Version * syscalls.c */ -#define DEBUG 1 +#define DEBUG 0 #include #include @@ -15,11 +15,13 @@ extern Uint Proc_SendMessage(Uint *Err, Uint Dest, Uint Length, void *Data); extern int Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer); extern int Proc_Execve(char *File, char **ArgV, char **EnvP); extern Uint Binary_Load(char *file, Uint *entryPoint); +extern int VFS_FInfo(int FD, void *Dest, int MaxACLs); // === CODE === void SyscallHandler(tSyscallRegs *Regs) { - Uint ret=0, err=0; + Uint64 ret = 0; + Uint err = 0; #if DEBUG ENTER("iThread iNum", gCurrentThread->TID, Regs->Num); if(Regs->Num < NUM_SYSCALLS) @@ -52,6 +54,9 @@ void SyscallHandler(tSyscallRegs *Regs) ret = -1; break; + case SYS_GETPHYS: + ret = MM_GetPhysAddr(Regs->Arg1); + break; // -- Map an address case SYS_MAP: MM_Map(Regs->Arg1, Regs->Arg2); break; // -- Allocate an address @@ -120,6 +125,17 @@ void SyscallHandler(tSyscallRegs *Regs) #endif break; + case SYS_READ: + #if BITS < 64 + VFS_Read( Regs->Arg1, Regs->Arg2|((Uint64)Regs->Arg3<<32), (void*)Regs->Arg4 ); + #else + VFS_Read( Regs->Arg1, Regs->Arg2, (void*)Regs->Arg3 ); + #endif + break; + + case SYS_FINFO: + ret = VFS_FInfo( Regs->Arg1, (void*)Regs->Arg2, Regs->Arg3 ); + break; // -- Debug case SYS_DEBUG: @@ -131,12 +147,17 @@ void SyscallHandler(tSyscallRegs *Regs) default: Warning("SyscallHandler: Unknown System Call %i", Regs->Num); if(Regs->Num < NUM_SYSCALLS) - Warning(" Syscall %s", cSYSCALL_NAMES[Regs->Num]); + Warning(" Syscall '%s'", cSYSCALL_NAMES[Regs->Num]); err = -ENOSYS; ret = -1; break; } + #if BITS < 64 + Regs->Return = ret&0xFFFFFFFF; + Regs->RetHi = ret >> 32; + #else Regs->Return = ret; + #endif Regs->Error = err; #if DEBUG LOG("SyscallHandler: err = %i", err);