From e8c6577617bffa4402c07c7aa20e3c24f03c1c20 Mon Sep 17 00:00:00 2001 From: Benji Dial Date: Sun, 6 Sep 2020 00:48:07 -0400 Subject: program loading, others big kernel additions: paging, elf loading, separate kernel and user page allocation it now properly loads and runs sd0:bin/init.elf still need to determine which disk was booted from, and start the init on that disk --- src/kernel/drive.h | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'src/kernel/drive.h') diff --git a/src/kernel/drive.h b/src/kernel/drive.h index 8eb6955..b02b4ad 100644 --- a/src/kernel/drive.h +++ b/src/kernel/drive.h @@ -4,7 +4,7 @@ #include #include -typedef uint8_t drive_file_id_t; +typedef uint8_t file_id_t; typedef uint8_t fs_id_t; typedef uint8_t drive_id_t; @@ -22,23 +22,26 @@ struct drive { char *drive_type; char *fs_type; - uint8_t (*read_sectors) (const struct drive *d, uint32_t start, uint32_t count, void *buffer); - uint8_t (*write_sectors)(const struct drive *d, uint32_t start, uint32_t count, const void *buffer); + uint32_t (*read_sectors) (const struct drive *d, uint32_t start, uint32_t count, void *buffer); + uint32_t (*write_sectors)(const struct drive *d, uint32_t start, uint32_t count, const void *buffer); + void (*ready) (const struct drive *d); + void (*done) (const struct drive *d); uint32_t n_sectors; drive_id_t drive_id; - drive_file_id_t (*get_file) (const struct drive *d, const char *path); - void (*free_file) (const struct drive *d, drive_file_id_t fid); - void (*load_sector) (const struct drive *d, drive_file_id_t fid, uint32_t sector, void *at); - uint32_t (*get_file_length) (const struct drive *d, drive_file_id_t fid); - uint32_t (*enumerate_dir) (const struct drive *d, const char *path, struct directory_content_info *info, uint32_t max); - uint32_t (*get_free_sectors)(const struct drive *d); + file_id_t (*get_file) (const struct drive *d, const char *path); + void (*free_file) (const struct drive *d, file_id_t fid); + void (*load_sector) (const struct drive *d, file_id_t fid, uint32_t sector, void *at); + uint32_t (*get_file_length) (const struct drive *d, file_id_t fid); + uint32_t (*enumerate_dir) (const struct drive *d, const char *path, struct directory_content_info *info, uint32_t max); + uint32_t (*get_free_sectors)(const struct drive *d); fs_id_t fs_id; }; extern uint8_t n_drives; extern struct drive drives[MAX_DRIVES]; +void init_drives(); void commit_drive(struct drive data); #endif \ No newline at end of file -- cgit v1.2.3