From 2c0efd93530c472e96ff3529aee983b53f3b78d9 Mon Sep 17 00:00:00 2001 From: Nathan Lee Date: Wed, 12 Aug 2026 17:44:17 -0500 Subject: rework project structure --- include/bump.h | 10 ------- include/common.h | 39 ------------------------- include/cpio.h | 23 --------------- include/dtb.h | 46 ----------------------------- include/early/bump.h | 9 ++++++ include/early/dtb.h | 46 +++++++++++++++++++++++++++++ include/elf.h | 81 ---------------------------------------------------- include/log.h | 10 ------- include/mem.h | 24 ---------------- include/mmio.h | 8 ------ include/sys/cpio.h | 23 +++++++++++++++ include/sys/elf.h | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++ include/sys/log.h | 10 +++++++ include/sys/mem.h | 30 +++++++++++++++++++ include/sys/stddef.h | 77 +++++++++++++++++++++++++++++++++++++++++++++++++ include/types.h | 41 -------------------------- 16 files changed, 276 insertions(+), 282 deletions(-) delete mode 100644 include/bump.h delete mode 100644 include/common.h delete mode 100644 include/cpio.h delete mode 100644 include/dtb.h create mode 100644 include/early/bump.h create mode 100644 include/early/dtb.h delete mode 100644 include/elf.h delete mode 100644 include/log.h delete mode 100644 include/mem.h delete mode 100644 include/mmio.h create mode 100644 include/sys/cpio.h create mode 100644 include/sys/elf.h create mode 100644 include/sys/log.h create mode 100644 include/sys/mem.h create mode 100644 include/sys/stddef.h delete mode 100644 include/types.h (limited to 'include') diff --git a/include/bump.h b/include/bump.h deleted file mode 100644 index 81cd571..0000000 --- a/include/bump.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -#include -#include -#include -#define EHEAP_SIZE (512 * 1024) - - -void* kemalloc(size_t size); -struct mem_info *km_find_memory(struct dt_node *head); - diff --git a/include/common.h b/include/common.h deleted file mode 100644 index d26b8ae..0000000 --- a/include/common.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once -#include - -static inline size_t strlen(const char *s) { - size_t len = 0; - while (*s++) { - ++len; - } - return len; -} -static inline int strcmp(const char *str1, const char* str2) { - while (*str1 && (*str1 == *str2)) { - ++str1; - ++str2; - } - return *(const unsigned char *)str1 - *(const unsigned char *)str2; -} - -static inline int memcmp(const void *s1, const void *s2, size_t n) { - const unsigned char *p1 = (const unsigned char *)s1; - const unsigned char *p2 = (const unsigned char *)s2; - - for (size_t i = 0; i < n; i++) { - if (p1[i] != p2[i]) { - return p1[i] - p2[i]; - } - } - - return 0; -} - -static inline void *memcpy(void *restrict dest, const void* restrict src, size_t size) { - unsigned char *d = (unsigned char *)dest; - unsigned char *s = (unsigned char *)src; - for (size_t i = 0; i < size; i++) { - d[i] = s[i]; - } - return d; -} diff --git a/include/cpio.h b/include/cpio.h deleted file mode 100644 index 3bb40c0..0000000 --- a/include/cpio.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once -#include -#define CPIO_HEADER_LEN 110 - -struct cpio_newc_hdr { - char magic[6]; - char ino[8]; - char mode[8]; - char uid[8]; - char gid[8]; - char nlink[8]; - char mtime[8]; - char filesize[8]; - char devmajor[8]; - char devminor[8]; - char rdevmajor[8]; - char rdevminor[8]; - char namesize[8]; - char check[8]; -}; - -void *cpio_get_file(void *archive, size_t size, const char *filename); - diff --git a/include/dtb.h b/include/dtb.h deleted file mode 100644 index 1f8f14f..0000000 --- a/include/dtb.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once -#include - -#define FDT_MAGIC 0xEDFE0DD0 -#define FDT_BEGIN_NODE 1 -#define FDT_END_NODE 2 -#define FDT_PROP 3 -#define FDT_NOP 4 -#define FDT_END 9 - -#define DTB_MAX_NODES 16 - -struct dt_node { - char *name; - struct dt_prop *props; - struct dt_node *children; - struct dt_node *next; -}; - -struct dt_prop { - char *name; - char *value; - size_t len; - struct dt_prop *next; -}; - -struct fdt_header { - uint32_t magic; - uint32_t totalsize; - uint32_t off_dt_struct; - uint32_t off_dt_strings; - uint32_t off_mem_rsvmap; - uint32_t version; - uint32_t last_comp_version; - uint32_t boot_cpuid_phys; - uint32_t size_dt_strings; - uint32_t size_dt_struct; -}; - -struct dt_node *dt_parse(void *fdt); -void *dt_get_prop(struct dt_node *node, char *name, size_t *len); -uint32_t dt_read_u32(struct dt_node *node, char *name, uint32_t *out); - - -struct dt_node *dt_node_alloc(char *name); -struct dt_prop *dt_prop_alloc(char *name, void *value, size_t len); diff --git a/include/early/bump.h b/include/early/bump.h new file mode 100644 index 0000000..bf3e6f9 --- /dev/null +++ b/include/early/bump.h @@ -0,0 +1,9 @@ +#pragma once +#include +#include +#define EHEAP_SIZE (512 * 1024) + + +void* kemalloc(size_t size); +struct mem_info *km_find_memory(struct dt_node *head); + diff --git a/include/early/dtb.h b/include/early/dtb.h new file mode 100644 index 0000000..41a7bcc --- /dev/null +++ b/include/early/dtb.h @@ -0,0 +1,46 @@ +#pragma once +#include + +#define FDT_MAGIC 0xEDFE0DD0 +#define FDT_BEGIN_NODE 1 +#define FDT_END_NODE 2 +#define FDT_PROP 3 +#define FDT_NOP 4 +#define FDT_END 9 + +#define DTB_MAX_NODES 16 + +struct dt_node { + char *name; + struct dt_prop *props; + struct dt_node *children; + struct dt_node *next; +}; + +struct dt_prop { + char *name; + char *value; + size_t len; + struct dt_prop *next; +}; + +struct fdt_header { + uint32_t magic; + uint32_t totalsize; + uint32_t off_dt_struct; + uint32_t off_dt_strings; + uint32_t off_mem_rsvmap; + uint32_t version; + uint32_t last_comp_version; + uint32_t boot_cpuid_phys; + uint32_t size_dt_strings; + uint32_t size_dt_struct; +}; + +struct dt_node *dt_parse(void *fdt); +void *dt_get_prop(struct dt_node *node, char *name, size_t *len); +uint32_t dt_read_u32(struct dt_node *node, char *name, uint32_t *out); + + +struct dt_node *dt_node_alloc(char *name); +struct dt_prop *dt_prop_alloc(char *name, void *value, size_t len); diff --git a/include/elf.h b/include/elf.h deleted file mode 100644 index 76c384d..0000000 --- a/include/elf.h +++ /dev/null @@ -1,81 +0,0 @@ -#pragma once -#include - -#define ELF_MAGIC_LE 0x464C457F -#define ELF_PAD 0 - -#define EI_CLASS 4 -#define EI_DATA 5 -#define EI_VERSION 6 -#define EI_OSABI 7 -#define EI_ABI_VERSION 8 - -#define ELFDATA2LSB 1 -#define ELFDATA2MSB 2 - -#define ELFCLASS32 1 -#define ELFCLASS64 2 - -#define EV_CURRENT 1 - -#ifdef __SYS_LITTLE_ENDIAN__ - #define ELFHOSTDATA ELFDATA2LSB -#else - #define ELFHOSTDATA ELFDATA2MSB -#endif - -#ifdef __SYS_64_BIT__ - #define ELFHOSTCLASS ELFCLASS64 -#else - #define ELFHOSTCLASS ELFCLASS32 -#endif - -struct elf_header { - uint8_t e_ident[16]; - - uint16_t e_type; - uint16_t e_machine; - uint32_t e_version; - - uint32_t e_entry; - uint32_t e_phoff; - uint32_t e_shoff; - - uint32_t e_flags; - - uint16_t e_ehsize; - uint16_t e_phentsize; - uint16_t e_phnum; - - uint16_t e_shentsize; - uint16_t e_shnum; - uint16_t e_shstrndx; -}; - -struct elf_section_header { - uint32_t sh_name; - uint32_t sh_type; - uint32_t sh_flags; - uint32_t sh_addr; - uint32_t sh_offset; - uint32_t sh_size; - uint32_t sh_link; - uint32_t sh_info; - uint32_t sh_addralign; - uint32_t sh_entsize; -}; - -struct elf_program_header { - uint32_t p_type; - uint32_t p_offset; - uint32_t p_vaddr; - uint32_t p_paddr; - uint32_t p_filesz; - uint32_t p_memsz; - uint32_t p_flags; - uint32_t p_align; -}; - -int elf_chk_header(struct elf_header *header); -struct elf_section_header *elf_get_section(struct elf_header *hdr, void *data, uint32_t index); -char *elf_get_section_name(struct elf_header *hdr, struct elf_section_header *section, void *data); diff --git a/include/log.h b/include/log.h deleted file mode 100644 index da9274b..0000000 --- a/include/log.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#define RINGBUF_SIZE 64 * 1024 - -typedef void (*console_callback_t)(char); - -void vprintk(const char *message, __builtin_va_list args); -void printk(const char *message, ...); - -void register_console_callback(console_callback_t callback); diff --git a/include/mem.h b/include/mem.h deleted file mode 100644 index bd6c911..0000000 --- a/include/mem.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once -#include - -struct mem_info { - void* start; - size_t size; -}; - -enum PageStatus { - MEMPAGE_FREE, MEMPAGE_USED -}; - -struct page { - struct page* next; - size_t size; - enum PageStatus status; -}; - -void* kmalloc(size_t size); -void* kzalloc(size_t size); -void kfree(void* ptr); - -void km_init(struct mem_info *info); - diff --git a/include/mmio.h b/include/mmio.h deleted file mode 100644 index b6531bf..0000000 --- a/include/mmio.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once -#include - -struct mmio_device_meta { - const char *name; - void *start; - size_t size; -}; diff --git a/include/sys/cpio.h b/include/sys/cpio.h new file mode 100644 index 0000000..c501e96 --- /dev/null +++ b/include/sys/cpio.h @@ -0,0 +1,23 @@ +#pragma once +#include +#define CPIO_HEADER_LEN 110 + +struct cpio_newc_hdr { + char magic[6]; + char ino[8]; + char mode[8]; + char uid[8]; + char gid[8]; + char nlink[8]; + char mtime[8]; + char filesize[8]; + char devmajor[8]; + char devminor[8]; + char rdevmajor[8]; + char rdevminor[8]; + char namesize[8]; + char check[8]; +}; + +void *cpio_get_file(void *archive, size_t size, const char *filename); + diff --git a/include/sys/elf.h b/include/sys/elf.h new file mode 100644 index 0000000..95ed592 --- /dev/null +++ b/include/sys/elf.h @@ -0,0 +1,81 @@ +#pragma once +#include + +#define ELF_MAGIC_LE 0x464C457F +#define ELF_PAD 0 + +#define EI_CLASS 4 +#define EI_DATA 5 +#define EI_VERSION 6 +#define EI_OSABI 7 +#define EI_ABI_VERSION 8 + +#define ELFDATA2LSB 1 +#define ELFDATA2MSB 2 + +#define ELFCLASS32 1 +#define ELFCLASS64 2 + +#define EV_CURRENT 1 + +#ifdef __SYS_LITTLE_ENDIAN__ + #define ELFHOSTDATA ELFDATA2LSB +#else + #define ELFHOSTDATA ELFDATA2MSB +#endif + +#ifdef __SYS_64_BIT__ + #define ELFHOSTCLASS ELFCLASS64 +#else + #define ELFHOSTCLASS ELFCLASS32 +#endif + +struct elf_header { + uint8_t e_ident[16]; + + uint16_t e_type; + uint16_t e_machine; + uint32_t e_version; + + uint32_t e_entry; + uint32_t e_phoff; + uint32_t e_shoff; + + uint32_t e_flags; + + uint16_t e_ehsize; + uint16_t e_phentsize; + uint16_t e_phnum; + + uint16_t e_shentsize; + uint16_t e_shnum; + uint16_t e_shstrndx; +}; + +struct elf_section_header { + uint32_t sh_name; + uint32_t sh_type; + uint32_t sh_flags; + uint32_t sh_addr; + uint32_t sh_offset; + uint32_t sh_size; + uint32_t sh_link; + uint32_t sh_info; + uint32_t sh_addralign; + uint32_t sh_entsize; +}; + +struct elf_program_header { + uint32_t p_type; + uint32_t p_offset; + uint32_t p_vaddr; + uint32_t p_paddr; + uint32_t p_filesz; + uint32_t p_memsz; + uint32_t p_flags; + uint32_t p_align; +}; + +int elf_chk_header(struct elf_header *header); +struct elf_section_header *elf_get_section(struct elf_header *hdr, void *data, uint32_t index); +char *elf_get_section_name(struct elf_header *hdr, struct elf_section_header *section, void *data); diff --git a/include/sys/log.h b/include/sys/log.h new file mode 100644 index 0000000..da9274b --- /dev/null +++ b/include/sys/log.h @@ -0,0 +1,10 @@ +#pragma once + +#define RINGBUF_SIZE 64 * 1024 + +typedef void (*console_callback_t)(char); + +void vprintk(const char *message, __builtin_va_list args); +void printk(const char *message, ...); + +void register_console_callback(console_callback_t callback); diff --git a/include/sys/mem.h b/include/sys/mem.h new file mode 100644 index 0000000..769a162 --- /dev/null +++ b/include/sys/mem.h @@ -0,0 +1,30 @@ +#pragma once +#include + +struct mem_info { + void* start; + size_t size; +}; + +enum PageStatus { + MEMPAGE_FREE, MEMPAGE_USED +}; + +struct page { + struct page* next; + size_t size; + enum PageStatus status; +}; + +struct mmio_device_meta { + const char *name; + void *start; + size_t size; +}; + +void* kmalloc(size_t size); +void* kzalloc(size_t size); +void kfree(void* ptr); + +void km_init(struct mem_info *info); + diff --git a/include/sys/stddef.h b/include/sys/stddef.h new file mode 100644 index 0000000..27aea74 --- /dev/null +++ b/include/sys/stddef.h @@ -0,0 +1,77 @@ +#pragma once +#define NULL (void*)0 + +#define uintptr_t __wk_size_t +#define size_t __wk_size_t +#define uint8_t __wk_uint8_t +#define uint16_t __wk_uint16_t +#define uint32_t __wk_uint32_t +#define uint64_t __wk_uint64_t + +#define htole + +#ifdef __SYS_LITTLE_ENDIAN__ + #define ltohs(x) x + #define ltohi(x) x + #define htols(x) x + #define htoli(x) x + + #define btohs(x) __builtin_bswap16(x) + #define btohi(x) __builtin_bswap32(x) + #define htobs(x) __builtin_bswap16(x) + #define htobi(x) __builtin_bswap32(x) +#else + #define ltohs(x) __builtin_bswap16(x) + #define ltohi(x) __builtin_bswap32(x) + #define htols(x) __builtin_bswap16(x) + #define htoli(x) __builtin_bswap32(x) + + #define btohs(x) x + #define btohi(x) x + #define htobs(x) x + #define htobi(x) x +#endif + +typedef __UINTPTR_TYPE__ __wk_size_t; +typedef __UINT8_TYPE__ __wk_uint8_t; +typedef __UINT16_TYPE__ __wk_uint16_t; +typedef __UINT32_TYPE__ __wk_uint32_t; +typedef __UINT64_TYPE__ __wk_uint64_t; + + +static inline size_t strlen(const char *s) { + size_t len = 0; + while (*s++) { + ++len; + } + return len; +} +static inline int strcmp(const char *str1, const char* str2) { + while (*str1 && (*str1 == *str2)) { + ++str1; + ++str2; + } + return *(const unsigned char *)str1 - *(const unsigned char *)str2; +} + +static inline int memcmp(const void *s1, const void *s2, size_t n) { + const unsigned char *p1 = (const unsigned char *)s1; + const unsigned char *p2 = (const unsigned char *)s2; + + for (size_t i = 0; i < n; i++) { + if (p1[i] != p2[i]) { + return p1[i] - p2[i]; + } + } + + return 0; +} + +static inline void *memcpy(void *restrict dest, const void* restrict src, size_t size) { + unsigned char *d = (unsigned char *)dest; + unsigned char *s = (unsigned char *)src; + for (size_t i = 0; i < size; i++) { + d[i] = s[i]; + } + return d; +} diff --git a/include/types.h b/include/types.h deleted file mode 100644 index 5be3023..0000000 --- a/include/types.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - -#define NULL (void*)0 - -#define uintptr_t __wk_size_t -#define size_t __wk_size_t -#define uint8_t __wk_uint8_t -#define uint16_t __wk_uint16_t -#define uint32_t __wk_uint32_t -#define uint64_t __wk_uint64_t - -#define htole - -#ifdef __SYS_LITTLE_ENDIAN__ - #define ltohs(x) x - #define ltohi(x) x - #define htols(x) x - #define htoli(x) x - - #define btohs(x) __builtin_bswap16(x) - #define btohi(x) __builtin_bswap32(x) - #define htobs(x) __builtin_bswap16(x) - #define htobi(x) __builtin_bswap32(x) -#else - #define ltohs(x) __builtin_bswap16(x) - #define ltohi(x) __builtin_bswap32(x) - #define htols(x) __builtin_bswap16(x) - #define htoli(x) __builtin_bswap32(x) - - #define btohs(x) x - #define btohi(x) x - #define htobs(x) x - #define htobi(x) x -#endif - -typedef __UINTPTR_TYPE__ __wk_size_t; -typedef __UINT8_TYPE__ __wk_uint8_t; -typedef __UINT16_TYPE__ __wk_uint16_t; -typedef __UINT32_TYPE__ __wk_uint32_t; -typedef __UINT64_TYPE__ __wk_uint64_t; - -- cgit v1.2.3