aboutsummaryrefslogtreecommitdiff
path: root/src/kernel/include
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2015-03-10 16:28:38 +0100
committerAlex Auvolat <alex@adnab.me>2015-03-10 16:28:38 +0100
commit0c710141bbb9bd62617d981a3dbaed1b8775fded (patch)
tree0094294fc5b6182bada5db8e5a64cd3a52e872e2 /src/kernel/include
parent48c1c4dcc449d05e9950a861e165f456e0d583a1 (diff)
downloadkogata-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.h4
-rw-r--r--src/kernel/include/pager.h5
-rw-r--r--src/kernel/include/vfs.h10
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);