summaryrefslogtreecommitdiff
path: root/kernel/scalls
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2023-11-16 15:24:45 +0100
committerAnton Kling <anton@kling.gg>2023-11-16 15:24:45 +0100
commita288258785bac3c2000227532f4a17210813c506 (patch)
tree450f6e9afdb961728f4ecbc89a91f9782e3aa4c6 /kernel/scalls
parent6164f8564e94ffa7ee8fbfcc82f4350a35ab08a5 (diff)
Kernel: Change how syscalls are built and implemented.
Diffstat (limited to 'kernel/scalls')
-rw-r--r--kernel/scalls/accept.c5
-rw-r--r--kernel/scalls/accept.h9
-rw-r--r--kernel/scalls/bind.c5
-rw-r--r--kernel/scalls/bind.h9
-rw-r--r--kernel/scalls/chdir.c6
-rw-r--r--kernel/scalls/chdir.h1
-rw-r--r--kernel/scalls/clock_gettime.c10
-rw-r--r--kernel/scalls/clock_gettime.h8
-rw-r--r--kernel/scalls/ftruncate.c6
-rw-r--r--kernel/scalls/ftruncate.h2
-rw-r--r--kernel/scalls/getcwd.c11
-rw-r--r--kernel/scalls/getcwd.h3
-rw-r--r--kernel/scalls/kill.c5
-rw-r--r--kernel/scalls/kill.h2
-rw-r--r--kernel/scalls/mkdir.c5
-rw-r--r--kernel/scalls/mkdir.h2
-rw-r--r--kernel/scalls/mmap.c7
-rw-r--r--kernel/scalls/mmap.h13
-rw-r--r--kernel/scalls/msleep.c9
-rw-r--r--kernel/scalls/msleep.h5
-rw-r--r--kernel/scalls/ppoll.c11
-rw-r--r--kernel/scalls/ppoll.h9
-rw-r--r--kernel/scalls/recvfrom.c59
-rw-r--r--kernel/scalls/recvfrom.h11
-rw-r--r--kernel/scalls/sendto.c23
-rw-r--r--kernel/scalls/sendto.h11
-rw-r--r--kernel/scalls/shm.c6
-rw-r--r--kernel/scalls/shm.h14
-rw-r--r--kernel/scalls/sigaction.c9
-rw-r--r--kernel/scalls/sigaction.h3
-rw-r--r--kernel/scalls/socket.c5
-rw-r--r--kernel/scalls/socket.h9
-rw-r--r--kernel/scalls/stat.c12
-rw-r--r--kernel/scalls/stat.h9
-rw-r--r--kernel/scalls/uptime.c4
-rw-r--r--kernel/scalls/uptime.h2
36 files changed, 0 insertions, 320 deletions
diff --git a/kernel/scalls/accept.c b/kernel/scalls/accept.c
deleted file mode 100644
index 3c3f5ad..0000000
--- a/kernel/scalls/accept.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "accept.h"
-
-int syscall_accept(SYS_ACCEPT_PARAMS *args) {
- return accept(args->socket, args->address, args->address_len);
-}
diff --git a/kernel/scalls/accept.h b/kernel/scalls/accept.h
deleted file mode 100644
index d022999..0000000
--- a/kernel/scalls/accept.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "../socket.h"
-
-typedef struct SYS_ACCEPT_PARAMS {
- int socket;
- struct sockaddr *address;
- socklen_t *address_len;
-} __attribute__((packed)) SYS_ACCEPT_PARAMS;
-
-int syscall_accept(SYS_ACCEPT_PARAMS *args);
diff --git a/kernel/scalls/bind.c b/kernel/scalls/bind.c
deleted file mode 100644
index 76e36ab..0000000
--- a/kernel/scalls/bind.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "bind.h"
-
-int syscall_bind(SYS_BIND_PARAMS *args) {
- return bind(args->sockfd, args->addr, args->addrlen);
-}
diff --git a/kernel/scalls/bind.h b/kernel/scalls/bind.h
deleted file mode 100644
index 5661ad0..0000000
--- a/kernel/scalls/bind.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "../socket.h"
-
-typedef struct SYS_BIND_PARAMS {
- int sockfd;
- const struct sockaddr *addr;
- socklen_t addrlen;
-} __attribute__((packed)) SYS_BIND_PARAMS;
-
-int syscall_bind(SYS_BIND_PARAMS *args);
diff --git a/kernel/scalls/chdir.c b/kernel/scalls/chdir.c
deleted file mode 100644
index ec6ba92..0000000
--- a/kernel/scalls/chdir.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <fs/vfs.h>
-#include <scalls/chdir.h>
-
-int syscall_chdir(const char *path) {
- return vfs_chdir(path);
-}
diff --git a/kernel/scalls/chdir.h b/kernel/scalls/chdir.h
deleted file mode 100644
index 574ca0d..0000000
--- a/kernel/scalls/chdir.h
+++ /dev/null
@@ -1 +0,0 @@
-int syscall_chdir(const char *path);
diff --git a/kernel/scalls/clock_gettime.c b/kernel/scalls/clock_gettime.c
deleted file mode 100644
index 632ea08..0000000
--- a/kernel/scalls/clock_gettime.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <scalls/clock_gettime.h>
-
-int syscall_clock_gettime(SYS_CLOCK_GETTIME_PARAMS *args) {
- // FIXME: Actually implement this
- if (args->ts) {
- args->ts->tv_sec = 0;
- args->ts->tv_nsec = 0;
- }
- return 0;
-}
diff --git a/kernel/scalls/clock_gettime.h b/kernel/scalls/clock_gettime.h
deleted file mode 100644
index 145aa24..0000000
--- a/kernel/scalls/clock_gettime.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <time.h>
-
-typedef struct SYS_CLOCK_GETTIME_PARAMS {
- clockid_t clk;
- struct timespec *ts;
-} __attribute__((packed)) SYS_CLOCK_GETTIME_PARAMS;
-
-int syscall_clock_gettime(SYS_CLOCK_GETTIME_PARAMS *args);
diff --git a/kernel/scalls/ftruncate.c b/kernel/scalls/ftruncate.c
deleted file mode 100644
index 6bc1170..0000000
--- a/kernel/scalls/ftruncate.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <fs/vfs.h>
-#include <scalls/ftruncate.h>
-
-int syscall_ftruncate(int fd, size_t length) {
- return vfs_ftruncate(fd, length);
-}
diff --git a/kernel/scalls/ftruncate.h b/kernel/scalls/ftruncate.h
deleted file mode 100644
index 9213e85..0000000
--- a/kernel/scalls/ftruncate.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include <stddef.h>
-int syscall_ftruncate(int fd, size_t length);
diff --git a/kernel/scalls/getcwd.c b/kernel/scalls/getcwd.c
deleted file mode 100644
index 629d0f5..0000000
--- a/kernel/scalls/getcwd.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <math.h>
-#include <scalls/getcwd.h>
-#include <sched/scheduler.h>
-
-char *syscall_getcwd(char *buf, size_t size) {
- kprintf("syscall_getcwd\n");
- const char *cwd = get_current_task()->current_working_directory;
- size_t len = min(size, strlen(cwd));
- strlcpy(buf, get_current_task()->current_working_directory, len);
- return buf;
-}
diff --git a/kernel/scalls/getcwd.h b/kernel/scalls/getcwd.h
deleted file mode 100644
index 671d7bd..0000000
--- a/kernel/scalls/getcwd.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <stddef.h>
-
-char *syscall_getcwd(char *buf, size_t size);
diff --git a/kernel/scalls/kill.c b/kernel/scalls/kill.c
deleted file mode 100644
index d5b7445..0000000
--- a/kernel/scalls/kill.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <scalls/kill.h>
-#include <sched/scheduler.h>
-#include <signal.h>
-
-int syscall_kill(pid_t pid, int sig) {return kill(pid, sig);}
diff --git a/kernel/scalls/kill.h b/kernel/scalls/kill.h
deleted file mode 100644
index acf5f30..0000000
--- a/kernel/scalls/kill.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include <signal.h>
-int syscall_kill(pid_t pid, int sig);
diff --git a/kernel/scalls/mkdir.c b/kernel/scalls/mkdir.c
deleted file mode 100644
index 43f2424..0000000
--- a/kernel/scalls/mkdir.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <scalls/mkdir.h>
-
-int syscall_mkdir(const char *path, int mode) {
- return vfs_mkdir(path, mode);
-}
diff --git a/kernel/scalls/mkdir.h b/kernel/scalls/mkdir.h
deleted file mode 100644
index 0bf0043..0000000
--- a/kernel/scalls/mkdir.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include <fs/vfs.h>
-int syscall_mkdir(const char *path, int mode);
diff --git a/kernel/scalls/mmap.c b/kernel/scalls/mmap.c
deleted file mode 100644
index 83fff6a..0000000
--- a/kernel/scalls/mmap.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <scalls/mmap.h>
-#include <sched/scheduler.h>
-
-void *syscall_mmap(SYS_MMAP_PARAMS *args) {
- return mmap(args->addr, args->length, args->prot, args->flags, args->fd,
- args->offset);
-}
diff --git a/kernel/scalls/mmap.h b/kernel/scalls/mmap.h
deleted file mode 100644
index 6b27005..0000000
--- a/kernel/scalls/mmap.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <stddef.h>
-#include <typedefs.h>
-
-typedef struct SYS_MMAP_PARAMS {
- void *addr;
- size_t length;
- int prot;
- int flags;
- int fd;
- size_t offset;
-} __attribute__((packed)) SYS_MMAP_PARAMS;
-
-void *syscall_mmap(SYS_MMAP_PARAMS *args);
diff --git a/kernel/scalls/msleep.c b/kernel/scalls/msleep.c
deleted file mode 100644
index 77c4272..0000000
--- a/kernel/scalls/msleep.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <drivers/pit.h>
-#include <scalls/msleep.h>
-#include <sched/scheduler.h>
-#include <stdio.h>
-
-void syscall_msleep(u32 ms) {
- get_current_task()->sleep_until = pit_num_ms() + ms;
- switch_task();
-}
diff --git a/kernel/scalls/msleep.h b/kernel/scalls/msleep.h
deleted file mode 100644
index 03be904..0000000
--- a/kernel/scalls/msleep.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef MSLEEP_H
-#define MSLEEP_H
-#include <typedefs.h>
-void syscall_msleep(u32 ms);
-#endif
diff --git a/kernel/scalls/ppoll.c b/kernel/scalls/ppoll.c
deleted file mode 100644
index 8feb35c..0000000
--- a/kernel/scalls/ppoll.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <scalls/ppoll.h>
-#include <fs/vfs.h>
-#include <poll.h>
-#include <sched/scheduler.h>
-
-int syscall_poll(SYS_POLL_PARAMS *args) {
- struct pollfd *fds = args->fds;
- size_t nfds = args->nfds;
- int timeout = args->timeout;
- return poll(fds, nfds, timeout);
-}
diff --git a/kernel/scalls/ppoll.h b/kernel/scalls/ppoll.h
deleted file mode 100644
index 13700b5..0000000
--- a/kernel/scalls/ppoll.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stddef.h>
-
-typedef struct SYS_POLL_PARAMS {
- struct pollfd *fds;
- size_t nfds;
- int timeout;
-} __attribute__((packed)) SYS_POLL_PARAMS;
-
-int syscall_poll(SYS_POLL_PARAMS *args);
diff --git a/kernel/scalls/recvfrom.c b/kernel/scalls/recvfrom.c
deleted file mode 100644
index af4e809..0000000
--- a/kernel/scalls/recvfrom.c
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <assert.h>
-#include <fs/vfs.h>
-#include <math.h>
-#include <poll.h>
-#include <scalls/recvfrom.h>
-
-size_t syscall_recvfrom(
- int socket, void *buffer, size_t length, int flags,
- struct two_args
- *extra_args /*struct sockaddr *address, socklen_t *address_len*/) {
-
- struct sockaddr *address = (struct sockaddr *)extra_args->a;
- socklen_t *address_len = (socklen_t *)extra_args->b;
- kprintf("address: %x\n", address);
- kprintf("address_len: %x\n", address_len);
-
- if (flags & MSG_WAITALL) {
- struct pollfd fds[1];
- fds[0].fd = socket;
- fds[0].events = POLLIN;
- poll(fds, 1, 0);
- }
-
- u16 data_length;
- socklen_t tmp_socklen;
- vfs_pread(socket, &tmp_socklen, sizeof(socklen_t), 0);
- if (address_len)
- *address_len = tmp_socklen;
- if (address) {
- vfs_pread(socket, address, tmp_socklen, 0);
- } else {
- // We still have to throwaway the data.
- char devnull[100];
- for (; tmp_socklen;) {
- int rc = vfs_pread(socket, devnull, min(tmp_socklen, 100), 0);
- assert(rc >= 0);
- tmp_socklen -= rc;
- }
- }
-
- vfs_pread(socket, &data_length, sizeof(data_length), 0);
- // If it is reading less than the packet length that could cause
- // problems as the next read will not be put at a new header. Luckily
- // it seems as if other UNIX systems can discard the rest of the
- // packet if not read.
-
- // Read in the data requested
- int read_len = min(length, data_length);
- int rc = vfs_pread(socket, buffer, read_len, 0);
- // Discard the rest of the packet
- int rest = data_length - read_len;
- char devnull[100];
- for (; rest;) {
- int rc = vfs_pread(socket, devnull, 100, 0);
- assert(rc >= 0);
- rest -= rc;
- }
- return rc;
-}
diff --git a/kernel/scalls/recvfrom.h b/kernel/scalls/recvfrom.h
deleted file mode 100644
index 72e4712..0000000
--- a/kernel/scalls/recvfrom.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <socket.h>
-
-struct two_args {
- u32 a;
- u32 b;
-};
-
-size_t syscall_recvfrom(
- int socket, void *buffer, size_t length, int flags,
- struct two_args
- *extra_args /*struct sockaddr *address, socklen_t *address_len*/);
diff --git a/kernel/scalls/sendto.c b/kernel/scalls/sendto.c
deleted file mode 100644
index 48c4020..0000000
--- a/kernel/scalls/sendto.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <assert.h>
-#include <network/bytes.h>
-#include <network/udp.h>
-#include <scalls/sendto.h>
-
-size_t syscall_sendto(int socket, const void *message, size_t length,
- int flags, struct t_two_args *extra_args /*
- const struct sockaddr *dest_addr,
- socklen_t dest_len*/) {
- const struct sockaddr *dest_addr = (const struct sockaddr *)extra_args->a;
- socklen_t dest_len = (socklen_t)extra_args->b;
- (void)dest_len;
- vfs_fd_t *fd = get_vfs_fd(socket);
- assert(fd);
- SOCKET *s = (SOCKET *)fd->inode->internal_object;
- OPEN_INET_SOCKET *inet = s->child;
- assert(inet);
- struct sockaddr_in in;
- in.sin_addr.s_addr = inet->address;
- in.sin_port = inet->port;
- send_udp_packet(&in, (const struct sockaddr_in *)dest_addr, message, length);
- return length; // FIXME: This is probably not true.
-}
diff --git a/kernel/scalls/sendto.h b/kernel/scalls/sendto.h
deleted file mode 100644
index 40c32ee..0000000
--- a/kernel/scalls/sendto.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <socket.h>
-#include <typedefs.h>
-
-struct t_two_args {
- u32 a;
- u32 b;
-};
-size_t syscall_sendto(int socket, const void *message, size_t length,
- int flags, struct t_two_args *extra_args /*
- const struct sockaddr *dest_addr,
- socklen_t dest_len*/);
diff --git a/kernel/scalls/shm.c b/kernel/scalls/shm.c
deleted file mode 100644
index 979084a..0000000
--- a/kernel/scalls/shm.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "shm.h"
-#include "../fs/shm.h"
-
-int syscall_shm_open(SYS_SHM_OPEN_PARAMS *args) {
- return shm_open(args->name, args->oflag, args->mode);
-}
diff --git a/kernel/scalls/shm.h b/kernel/scalls/shm.h
deleted file mode 100644
index a247cfd..0000000
--- a/kernel/scalls/shm.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef SYS_SHM_H
-#define SYS_SHM_H
-#include <stddef.h>
-#include <typedefs.h>
-#include <sys/types.h>
-
-typedef struct SYS_SHM_OPEN_PARAMS {
- const char *name;
- int oflag;
- mode_t mode;
-} __attribute__((packed)) SYS_SHM_OPEN_PARAMS;
-
-int syscall_shm_open(SYS_SHM_OPEN_PARAMS *args);
-#endif
diff --git a/kernel/scalls/sigaction.c b/kernel/scalls/sigaction.c
deleted file mode 100644
index 0166fab..0000000
--- a/kernel/scalls/sigaction.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <scalls/sigaction.h>
-#include <signal.h>
-#include <sched/scheduler.h>
-
-int syscall_sigaction(int sig, const struct sigaction *restrict act,
- struct sigaction *restrict oact) {
- set_signal_handler(sig, act->sa_handler);
- return 0;
-}
diff --git a/kernel/scalls/sigaction.h b/kernel/scalls/sigaction.h
deleted file mode 100644
index 0f0aa5f..0000000
--- a/kernel/scalls/sigaction.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <signal.h>
-int syscall_sigaction(int sig, const struct sigaction *restrict act,
- struct sigaction *restrict oact) ;
diff --git a/kernel/scalls/socket.c b/kernel/scalls/socket.c
deleted file mode 100644
index 594c745..0000000
--- a/kernel/scalls/socket.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "socket.h"
-
-int syscall_socket(SYS_SOCKET_PARAMS *args) {
- return socket(args->domain, args->type, args->protocol);
-}
diff --git a/kernel/scalls/socket.h b/kernel/scalls/socket.h
deleted file mode 100644
index 6540b0f..0000000
--- a/kernel/scalls/socket.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "../socket.h"
-
-typedef struct SYS_SOCKET_PARAMS {
- int domain;
- int type;
- int protocol;
-} __attribute__((packed)) SYS_SOCKET_PARAMS;
-
-int syscall_socket(SYS_SOCKET_PARAMS *args);
diff --git a/kernel/scalls/stat.c b/kernel/scalls/stat.c
deleted file mode 100644
index 9fc115b..0000000
--- a/kernel/scalls/stat.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <errno.h>
-#include <fs/vfs.h>
-#include <scalls/stat.h>
-
-int syscall_stat(SYS_STAT_PARAMS *args) {
- const char *pathname = copy_and_allocate_user_string(args->pathname);
- struct stat *statbuf = args->statbuf;
- int fd = vfs_open(pathname, O_READ, 0);
- int rc = vfs_fstat(fd, statbuf);
- vfs_close(fd);
- return rc;
-}
diff --git a/kernel/scalls/stat.h b/kernel/scalls/stat.h
deleted file mode 100644
index 24c5d7c..0000000
--- a/kernel/scalls/stat.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <types.h>
-#include <time.h>
-
-typedef struct SYS_STAT_PARAMS {
- const char *pathname;
- struct stat *statbuf;
-} __attribute__((packed)) SYS_STAT_PARAMS;
-
-int syscall_stat(SYS_STAT_PARAMS *args);
diff --git a/kernel/scalls/uptime.c b/kernel/scalls/uptime.c
deleted file mode 100644
index 748915e..0000000
--- a/kernel/scalls/uptime.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <scalls/uptime.h>
-#include <drivers/pit.h>
-
-u32 syscall_uptime(void) { return (u32)pit_num_ms(); }
diff --git a/kernel/scalls/uptime.h b/kernel/scalls/uptime.h
deleted file mode 100644
index b432454..0000000
--- a/kernel/scalls/uptime.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include <typedefs.h>
-u32 syscall_uptime(void);