diff options
author | Alex Auvolat <alex@adnab.me> | 2015-03-10 16:28:38 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2015-03-10 16:28:38 +0100 |
commit | 0c710141bbb9bd62617d981a3dbaed1b8775fded (patch) | |
tree | 0094294fc5b6182bada5db8e5a64cd3a52e872e2 /src/kernel/include | |
parent | 48c1c4dcc449d05e9950a861e165f456e0d583a1 (diff) | |
download | kogata-0c710141bbb9bd62617d981a3dbaed1b8775fded.tar.gz kogata-0c710141bbb9bd62617d981a3dbaed1b8775fded.zip |
Add simple shared memory facility to IPC (no syscall yet)
Diffstat (limited to 'src/kernel/include')
-rw-r--r-- | src/kernel/include/ipc.h | 4 | ||||
-rw-r--r-- | src/kernel/include/pager.h | 5 | ||||
-rw-r--r-- | src/kernel/include/vfs.h | 10 |
3 files changed, 13 insertions, 6 deletions
diff --git a/src/kernel/include/ipc.h b/src/kernel/include/ipc.h index 05d14a8..4f8573c 100644 --- a/src/kernel/include/ipc.h +++ b/src/kernel/include/ipc.h @@ -14,6 +14,10 @@ typedef struct { fs_handle_pair_t make_channel(bool blocking); +// ---- shared memory regions + +fs_handle_t* make_shm(size_t size); + // ---- Tokens for sharing file descriptors between processes #define TOKEN_LIFETIME 1500000 // in usecs diff --git a/src/kernel/include/pager.h b/src/kernel/include/pager.h index 03e5da4..a53c7d3 100644 --- a/src/kernel/include/pager.h +++ b/src/kernel/include/pager.h @@ -33,6 +33,9 @@ typedef struct pager { union { struct { + bool allow_resize; + } swap_pager; + struct { fs_node_t* node; vfs_pager_ops_t *ops; } vfs_pager; @@ -49,7 +52,7 @@ typedef struct pager { user_region_t *maps; } pager_t; -pager_t* new_swap_pager(size_t size); +pager_t* new_swap_pager(size_t size, bool allow_resize); pager_t* new_vfs_pager(size_t size, fs_node_t* vfs_node, vfs_pager_ops_t *vfs_ops); pager_t* new_device_pager(size_t size, void* phys_offset); diff --git a/src/kernel/include/vfs.h b/src/kernel/include/vfs.h index c22ec9a..888c0bc 100644 --- a/src/kernel/include/vfs.h +++ b/src/kernel/include/vfs.h @@ -81,11 +81,11 @@ typedef struct fs_handle { typedef struct fs_node_ops { bool (*open)(fs_node_ptr n, int mode); - size_t (*read)(fs_handle_t *f, size_t offset, size_t len, char* buf); - size_t (*write)(fs_handle_t *f, size_t offset, size_t len, const char* buf); - bool (*readdir)(fs_handle_t *f, size_t ent_no, dirent_t *d); - int (*poll)(fs_handle_t *f, void** out_wait_obj); - void (*close)(fs_handle_t *f); + size_t (*read)(fs_handle_t *h, size_t offset, size_t len, char* buf); + size_t (*write)(fs_handle_t *h, size_t offset, size_t len, const char* buf); + bool (*readdir)(fs_handle_t *h, size_t ent_no, dirent_t *d); + int (*poll)(fs_handle_t *h, void** out_wait_obj); + void (*close)(fs_handle_t *h); bool (*stat)(fs_node_ptr n, stat_t *st); int (*ioctl)(fs_node_ptr n, int command, void* data); |