X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/3b6a05fc894d0c1a3d431045ee5a53955ba093a0..b60166b327a9108b07e3069fa6568a451529ffd9:/lunaix-os/includes/lunaix/block.h diff --git a/lunaix-os/includes/lunaix/block.h b/lunaix-os/includes/lunaix/block.h index 4b0c824..0eb7775 100644 --- a/lunaix-os/includes/lunaix/block.h +++ b/lunaix-os/includes/lunaix/block.h @@ -9,24 +9,31 @@ #define PARTITION_NAME_SIZE 48 #define DEV_ID_SIZE 32 +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 { - char bdev_id[DEV_ID_SIZE]; - char name[PARTITION_NAME_SIZE]; + struct llist_header parts; struct blkio_context* blkio; struct device* dev; + char bdev_id[DEV_ID_SIZE]; + char name[PARTITION_NAME_SIZE]; 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]; - u64_t base_lba; - u64_t end_lba; -} __attribute__((packed)); - // Lunaix Partition Table struct lpt_header { @@ -38,7 +45,7 @@ struct lpt_header } __attribute__((packed)); typedef u64_t partition_t; -typedef uint32_t bdev_t; +typedef u32_t bdev_t; typedef void (*devfs_exporter)(struct block_dev* bdev, void* fsnode); void @@ -56,4 +63,11 @@ blk_mapping_init(); void 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 */