diff options
author | Ian McFarlane <i.mcfarlane2002@gmail.com> | 2025-05-06 15:14:11 -0400 |
---|---|---|
committer | Ian McFarlane <i.mcfarlane2002@gmail.com> | 2025-05-06 15:14:11 -0400 |
commit | da396afa8b612b8f8ff07d71c57761a627b158eb (patch) | |
tree | b4935b29aca686c6ee17a583cffe149d7bb3c819 /kernel/include | |
parent | update forkman with spinlock (diff) | |
parent | start docs (diff) | |
download | comus-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.h | 14 | ||||
-rw-r--r-- | kernel/include/comus/drivers/ps2.h | 13 | ||||
-rw-r--r-- | kernel/include/comus/drivers/spkr.h | 29 | ||||
-rw-r--r-- | kernel/include/comus/fs.h | 17 | ||||
-rw-r--r-- | kernel/include/comus/fs/tar.h | 18 | ||||
-rw-r--r-- | kernel/include/comus/limits.h | 6 | ||||
-rw-r--r-- | kernel/include/comus/mboot.h | 10 | ||||
-rw-r--r-- | kernel/include/comus/procs.h | 4 | ||||
-rw-r--r-- | kernel/include/comus/ramfs.h | 40 | ||||
-rw-r--r-- | kernel/include/comus/syscalls.h | 9 | ||||
-rw-r--r-- | kernel/include/comus/tar.h | 6 | ||||
-rw-r--r-- | kernel/include/comus/user.h | 4 | ||||
-rw-r--r-- | kernel/include/lib/klib.h | 5 |
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 * |