#ifndef _JOVE_OBJECT_H #define _JOVE_OBJECT_H #include enum { INIT_OBJECT_ROOTDIR = 0, INIT_OBJECT_PAGEMAP, INIT_OBJECT_PROCESSOR_DIR, INIT_OBJECT_UNTYPED_DIR, INIT_OBJECT_INITRD_DIR, INIT_OBJECT_TCB, INIT_OBJECT_MESSAGE, INIT_OBJECT_LOG }; enum { /* Generic objects */ KO_NONE = 0, KO_OBJECT_DIRECTORY, KO_INIT_DATA, KO_MEMORY_UNTYPED, KO_MEMORY_MAPPING, //4KiB aligned fixed width KO_INITRD_FILE, KO_TCB, KO_MESSAGE, /* Device objects*/ KO_DEV_INVALID = 0x100, KO_DEV_PROCESSOR, KO_DEV_UART }; #define KO_MESSAGE_BYTES 4096 #define KO_MESSAGE_ALIGN 0x1000 typedef uint8_t path_byte_t; typedef uint16_t obj_type_t; typedef struct jove_ObjectDirectoryEntry { obj_type_t type; union { struct { unsigned char lock; char u0; }; unsigned short flg; }; uintmax_t data; } objdir_entry_t; #define OBJECT_DIRECTORY_MAX_ENTRIES 256 typedef struct jove_ObjectDirectory { union { objdir_entry_t self; objdir_entry_t entries[OBJECT_DIRECTORY_MAX_ENTRIES]; }; } objdir_t; objdir_entry_t *objdir_seek(objdir_t *dir, uint8_t *path, unsigned long pathw); unsigned long objdir_pathw(objdir_t *dir, uint8_t *path); #endif