summaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorIan McFarlane <i.mcfarlane2002@gmail.com>2025-05-06 15:14:11 -0400
committerIan McFarlane <i.mcfarlane2002@gmail.com>2025-05-06 15:14:11 -0400
commitda396afa8b612b8f8ff07d71c57761a627b158eb (patch)
treeb4935b29aca686c6ee17a583cffe149d7bb3c819 /kernel/include
parentupdate forkman with spinlock (diff)
parentstart docs (diff)
downloadcomus-da396afa8b612b8f8ff07d71c57761a627b158eb.tar.gz
comus-da396afa8b612b8f8ff07d71c57761a627b158eb.tar.bz2
comus-da396afa8b612b8f8ff07d71c57761a627b158eb.zip
merge main into forkmanforkman
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/comus/drivers/pit.h14
-rw-r--r--kernel/include/comus/drivers/ps2.h13
-rw-r--r--kernel/include/comus/drivers/spkr.h29
-rw-r--r--kernel/include/comus/fs.h17
-rw-r--r--kernel/include/comus/fs/tar.h18
-rw-r--r--kernel/include/comus/limits.h6
-rw-r--r--kernel/include/comus/mboot.h10
-rw-r--r--kernel/include/comus/procs.h4
-rw-r--r--kernel/include/comus/ramfs.h40
-rw-r--r--kernel/include/comus/syscalls.h9
-rw-r--r--kernel/include/comus/tar.h6
-rw-r--r--kernel/include/comus/user.h4
-rw-r--r--kernel/include/lib/klib.h5
13 files changed, 163 insertions, 12 deletions
diff --git a/kernel/include/comus/drivers/pit.h b/kernel/include/comus/drivers/pit.h
index 77f0a14..22b8153 100644
--- a/kernel/include/comus/drivers/pit.h
+++ b/kernel/include/comus/drivers/pit.h
@@ -9,13 +9,23 @@
#ifndef PIT_H_
#define PIT_H_
+#define CHAN_TIMER 0x40
+#define CHAN_SPKR 0x42
+
#include <stdint.h>
// how many time the pit has ticked
// not accurate time, good for spinning though
extern volatile uint64_t ticks;
-uint16_t pit_read_divider(void);
-void pit_set_divider(uint16_t count);
+/**
+ * Read timer frequency
+ */
+uint32_t pit_read_freq(uint8_t chan);
+
+/**
+ * Set timer frequency
+ */
+void pit_set_freq(uint8_t chan, uint32_t hz);
#endif
diff --git a/kernel/include/comus/drivers/ps2.h b/kernel/include/comus/drivers/ps2.h
index 7634e5f..c012ad4 100644
--- a/kernel/include/comus/drivers/ps2.h
+++ b/kernel/include/comus/drivers/ps2.h
@@ -9,6 +9,8 @@
#ifndef PS2_H_
#define PS2_H_
+#include <stdint.h>
+
/**
* Initalize the ps2 controller
*/
@@ -24,4 +26,15 @@ void ps2kb_recv(void);
*/
void ps2mouse_recv(void);
+/**
+ * Set ps2 led state
+ *
+ * Bits
+ * ----
+ * 0 - Scroll lock
+ * 1 - Num Lock
+ * 2 - Caps lock
+ */
+int ps2_set_leds(uint8_t state);
+
#endif /* ps2.h */
diff --git a/kernel/include/comus/drivers/spkr.h b/kernel/include/comus/drivers/spkr.h
new file mode 100644
index 0000000..f9e427e
--- /dev/null
+++ b/kernel/include/comus/drivers/spkr.h
@@ -0,0 +1,29 @@
+/**
+ * @file spkr.h
+ *
+ * @author Freya Murphy <freya@freyacat.org>
+ *
+ * PC Speaker
+ */
+
+#ifndef SPKR_H_
+#define SPKR_H_
+
+#include <stdint.h>
+
+/**
+ * Play a tone on the pc speaker continuously
+ */
+void spkr_play_tone(uint32_t hz);
+
+/**
+ * Shut up the pc speaker
+ */
+void spkr_quiet(void);
+
+/**
+ * Beep the pc speaker for a short period
+ */
+void spkr_beep(void);
+
+#endif /* spkr.h */
diff --git a/kernel/include/comus/fs.h b/kernel/include/comus/fs.h
index 2f678b6..b1d0e80 100644
--- a/kernel/include/comus/fs.h
+++ b/kernel/include/comus/fs.h
@@ -28,7 +28,7 @@ struct disk {
/// internal disk device
union {
struct {
- char *start;
+ uint8_t *start;
size_t len;
} rd;
ide_device_t ide;
@@ -137,9 +137,9 @@ struct file {
/// file type
enum file_type f_type;
/// read from the file
- int (*read)(struct file *file, char *buffer, size_t nbytes);
+ int (*read)(struct file *file, void *buffer, size_t nbytes);
/// write into the file
- int (*write)(struct file *file, const char *buffer, size_t nbytes);
+ int (*write)(struct file *file, const void *buffer, size_t nbytes);
/// seeks the file
int (*seek)(struct file *file, long int offset, int whence);
/// get directory entry at index
@@ -148,6 +148,15 @@ struct file {
void (*close)(struct file *file);
};
+/// open flags
+enum {
+ O_CREATE = 0x01,
+ O_RDONLY = 0x02,
+ O_WRONLY = 0x04,
+ O_APPEND = 0x08,
+ O_RDWR = 0x10,
+};
+
/// file system vtable, used for opening
/// and stating files. filesystem mount functions must
/// set fs_name, fs_disk, open, and stat.
@@ -200,7 +209,7 @@ struct file_system {
/// filesystem name
const char *fs_name;
/// opens a file
- int (*open)(struct file_system *fs, const char *fullpath,
+ int (*open)(struct file_system *fs, const char *fullpath, int flags,
struct file **out);
/// stats a file
int (*stat)(struct file_system *fs, const char *fullpath,
diff --git a/kernel/include/comus/fs/tar.h b/kernel/include/comus/fs/tar.h
new file mode 100644
index 0000000..084c8bd
--- /dev/null
+++ b/kernel/include/comus/fs/tar.h
@@ -0,0 +1,18 @@
+/**
+ * @file tar.h
+ *
+ * Tarball
+ */
+
+#ifndef TAR_FS_H_
+#define TAR_FS_H_
+
+#include <comus/fs.h>
+
+/**
+ * Attempts to mount tar filesystem on disk
+ * @returns 0 on success
+ */
+int tar_mount(struct file_system *fs);
+
+#endif /* fs.h */
diff --git a/kernel/include/comus/limits.h b/kernel/include/comus/limits.h
index 4cb348d..a036fcb 100644
--- a/kernel/include/comus/limits.h
+++ b/kernel/include/comus/limits.h
@@ -7,11 +7,15 @@
*/
/// number of pts to identity map the kernel (1pt = 2MB)
-#define N_IDENT_PTS 4 // max 512 (1G)
+#define N_IDENT_PTS 64 // max 512 (1G)
/// max number of processes
#define N_PROCS 256
+/// process limits
+#define N_OPEN_FILES 64
+#define N_ARGS 64
+
/// max nubmer of pci devices
#define N_PCI_DEV 256
diff --git a/kernel/include/comus/mboot.h b/kernel/include/comus/mboot.h
index aba3e4e..bed29f1 100644
--- a/kernel/include/comus/mboot.h
+++ b/kernel/include/comus/mboot.h
@@ -47,4 +47,14 @@ EFI_HANDLE mboot_get_efi_hdl(void);
*/
void *mboot_get_initrd(size_t *len);
+/**
+ * Returns the physical pointer to the loaded init ram disk with size given by len
+ */
+void *mboot_get_initrd_phys(size_t *len);
+
+/**
+ * Gets the end of the mboot pointer
+ */
+void *mboot_end(void);
+
#endif /* mboot.h */
diff --git a/kernel/include/comus/procs.h b/kernel/include/comus/procs.h
index 717f27a..ee723aa 100644
--- a/kernel/include/comus/procs.h
+++ b/kernel/include/comus/procs.h
@@ -13,6 +13,7 @@
#include <comus/limits.h>
#include <comus/memory.h>
#include <comus/syscalls.h>
+#include <comus/fs.h>
#include <lib.h>
#include <elf.h>
@@ -59,6 +60,9 @@ struct pcb {
char *heap_start;
size_t heap_len;
+ // open files
+ struct file *open_files[N_OPEN_FILES];
+
// elf metadata
Elf64_Ehdr elf_header;
Elf64_Phdr elf_segments[N_ELF_SEGMENTS];
diff --git a/kernel/include/comus/ramfs.h b/kernel/include/comus/ramfs.h
new file mode 100644
index 0000000..d3cd703
--- /dev/null
+++ b/kernel/include/comus/ramfs.h
@@ -0,0 +1,40 @@
+/*#include <comus/fs.h>
+#ifndef RAMFS_H_
+#define RAMFS_H_
+#define MAX_FILES 32
+#define MAX_FILE_SIZE 4096
+
+struct file {
+ char name[32];
+ size_t size;
+ char *data;
+} file;
+
+struct file allTheFiles[MAX_FILES];
+int numberOfFiles = 0;
+
+#endif
+/*
+typedef struct ramfs_file {
+ char name[32];
+ int size;
+ char *data;
+} file;
+
+typedef struct ramfs_directory {
+ char name[32];
+ file *files[MAX_FILES];
+ directory *directories[MAX_FILES];
+ int file_count;
+ int directory_count;
+} directory;
+
+typedef struct ramfs_root {
+ directory *root;
+} root;
+
+//struct file allTheFiles[MAX_FILES];
+int numberOfFiles = 0;
+
+
+#endif*/ \ No newline at end of file
diff --git a/kernel/include/comus/syscalls.h b/kernel/include/comus/syscalls.h
index ffc9d1b..146bce1 100644
--- a/kernel/include/comus/syscalls.h
+++ b/kernel/include/comus/syscalls.h
@@ -30,12 +30,13 @@
#define SYS_poweroff 17
#define SYS_drm 18
#define SYS_ticks 19
-#define SYS_allocshared 20
-#define SYS_popsharedmem 21
-#define SYS_keypoll 22
+#define SYS_seek 20
+#define SYS_allocshared 21
+#define SYS_popsharedmem 22
+#define SYS_keypoll 23
// UPDATE THIS DEFINITION IF MORE SYSCALLS ARE ADDED!
-#define N_SYSCALLS 23
+#define N_SYSCALLS 24
// interrupt vector entry for system calls
#define VEC_SYSCALL 0x80
diff --git a/kernel/include/comus/tar.h b/kernel/include/comus/tar.h
new file mode 100644
index 0000000..b08f668
--- /dev/null
+++ b/kernel/include/comus/tar.h
@@ -0,0 +1,6 @@
+#include <comus/fs.h>
+#ifndef TAR_FS_H_
+#define TAR_FS_H_
+
+int tar_mount(struct file_system *fs);
+#endif \ No newline at end of file
diff --git a/kernel/include/comus/user.h b/kernel/include/comus/user.h
index f51ada5..1b35ac4 100644
--- a/kernel/include/comus/user.h
+++ b/kernel/include/comus/user.h
@@ -9,13 +9,15 @@
#ifndef USER_H_
#define USER_H_
+#include "comus/memory.h"
#include <comus/procs.h>
#include <comus/fs.h>
/**
* Load a user elf program from a file into a pcb
*/
-int user_load(struct pcb *pcb, struct disk *disk);
+int user_load(struct pcb *pcb, struct file *file, const char **args,
+ mem_ctx_t args_ctx);
/**
* Clone a user process. Used for fork().
diff --git a/kernel/include/lib/klib.h b/kernel/include/lib/klib.h
index b4d26ed..f549a09 100644
--- a/kernel/include/lib/klib.h
+++ b/kernel/include/lib/klib.h
@@ -264,6 +264,11 @@ __attribute__((noreturn, format(printf, 3, 4))) void
__panic(unsigned int line, const char *file, const char *format, ...);
/**
+ * Loop kernel in fatal notifier (beep and blink caps lock key)
+ */
+__attribute__((noreturn)) void fatal_loop(void);
+
+/**
* Fill dst with a stack trace consisting of return addresses in order
* from top to bottom
*