From a160f6f15180f7fb5aed31be753d64d2722d9b15 Mon Sep 17 00:00:00 2001 From: Bahadir Balban Date: Mon, 18 Feb 2008 22:42:33 +0000 Subject: [PATCH] Added vfs_read and vfs_write ipc calls to mm0 --- tasks/libl4/include/l4lib/arch-arm/syslib.h | 1 + tasks/mm0/src/file.c | 43 +++++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/tasks/libl4/include/l4lib/arch-arm/syslib.h b/tasks/libl4/include/l4lib/arch-arm/syslib.h index bbfe77f..379c90a 100644 --- a/tasks/libl4/include/l4lib/arch-arm/syslib.h +++ b/tasks/libl4/include/l4lib/arch-arm/syslib.h @@ -28,6 +28,7 @@ #define L4SYS_ARG0 (MR_UNUSED_START) #define L4SYS_ARG1 (MR_UNUSED_START + 1) #define L4SYS_ARG2 (MR_UNUSED_START + 2) +#define L4SYS_ARG3 (MR_UNUSED_START + 3) /* * Servers get sender. diff --git a/tasks/mm0/src/file.c b/tasks/mm0/src/file.c index 07a4f8e..0940ccc 100644 --- a/tasks/mm0/src/file.c +++ b/tasks/mm0/src/file.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -38,13 +39,49 @@ void vmfile_init(void) int vfs_read(unsigned long vnum, unsigned long f_offset, unsigned long npages, void *pagebuf) { - return 0; + int err; + + write_mr(L4SYS_ARG0, vnum); + write_mr(L4SYS_ARG1, f_offset); + write_mr(L4SYS_ARG2, npages); + write_mr(L4SYS_ARG3, (u32)pagebuf); + + if ((err = l4_sendrecv(VFS_TID, VFS_TID, L4_IPC_TAG_READ)) < 0) { + printf("%s: L4 IPC Error: %d.\n", __FUNCTION__, err); + return err; + } + + /* Check if syscall was successful */ + if ((err = l4_get_retval()) < 0) { + printf("%s: Pager from VFS read error: %d.\n", __FUNCTION__, err); + return err; + } + + return err; } int vfs_write(unsigned long vnum, unsigned long f_offset, unsigned long npages, - void *pagebuf) + void *pagebuf) { - return 0; + int err; + + write_mr(L4SYS_ARG0, vnum); + write_mr(L4SYS_ARG1, f_offset); + write_mr(L4SYS_ARG2, npages); + write_mr(L4SYS_ARG3, (u32)pagebuf); + + if ((err = l4_sendrecv(VFS_TID, VFS_TID, L4_IPC_TAG_WRITE)) < 0) { + printf("%s: L4 IPC Error: %d.\n", __FUNCTION__, err); + return err; + } + + /* Check if syscall was successful */ + if ((err = l4_get_retval()) < 0) { + printf("%s: Pager to VFS write error: %d.\n", __FUNCTION__, err); + return err; + } + + return err; } /*