X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/ea77b9c3fc7fb9bf9d7f9604fc187c8049212a2a..270869139db617e29a35bb9ded41087bb702f9ac:/lunaix-os/includes/lunaix/block.h diff --git a/lunaix-os/includes/lunaix/block.h b/lunaix-os/includes/lunaix/block.h index df481d8..075ed37 100644 --- a/lunaix-os/includes/lunaix/block.h +++ b/lunaix-os/includes/lunaix/block.h @@ -2,52 +2,78 @@ #define __LUNAIX_BLOCK_H #include +#include #include #define LPT_SIG 0x414e554c #define PARTITION_NAME_SIZE 48 #define DEV_ID_SIZE 32 -typedef uint64_t partition_t; -typedef uint32_t bdev_t; +struct block_dev; + +struct block_dev_ops +{ + int (*block_read)(struct block_dev*, void*, u64_t, size_t); + int (*block_write)(struct block_dev*, void*, u64_t, size_t); + void* (*block_alloc)(struct block_dev*); + void (*block_free)(struct block_dev*, void*); +}; struct block_dev { + struct llist_header parts; + struct blkio_context* blkio; + struct device* dev; char bdev_id[DEV_ID_SIZE]; char name[PARTITION_NAME_SIZE]; - struct hba_device* hd_dev; - struct device* dev; - uint64_t base_lba; - uint64_t end_lba; + void* driver; + u64_t start_lba; + u64_t end_lba; + u32_t blk_size; + struct block_dev_ops ops; + struct devclass* class; }; -struct lpt_entry -{ - char part_name[PARTITION_NAME_SIZE]; - uint64_t base_lba; - uint64_t end_lba; -} __attribute__((packed)); - // Lunaix Partition Table struct lpt_header { - uint32_t signature; - uint32_t crc; - uint32_t pt_start_lba; - uint32_t pt_end_lba; - uint32_t table_len; + u32_t signature; + u32_t crc; + u32_t pt_start_lba; + u32_t pt_end_lba; + u32_t table_len; } __attribute__((packed)); +typedef u64_t partition_t; +typedef u32_t bdev_t; +typedef void (*devfs_exporter)(struct block_dev* bdev, void* fsnode); + +static inline struct block_dev* +block_dev(struct device* dev) +{ + return (struct block_dev*)dev->underlay; +} + void block_init(); +struct block_dev* +block_alloc_dev(const char* blk_id, void* driver, req_handler ioreq_handler); + int -block_mount_disk(struct hba_device* hd_dev); +block_mount(struct block_dev* bdev, devfs_exporter export); void blk_mapping_init(); void -blk_set_blkmapping(struct block_dev* bdev); +blk_set_blkmapping(struct block_dev* bdev, void* fsnode); + +struct block_dev* +blk_mount_part(struct block_dev* bdev, + const char* name, + size_t index, + u64_t start_lba, + u64_t end_lba); #endif /* __LUNAIX_BLOCK_H */