Skip to content

Block Devices

include/block/block.h View source View on GitHub
struct partition {
    struct block_device  *disk;
    uint64_t             start_lba;
    uint64_t             sector_count;
    enum fs_type         fs_type;
    void                 *fs_data;
    char                 name[16];
    bool                 mounted;
    struct vfs_node      *(*mount)(struct partition *);
};
struct block_device {
    enum bdev_flags           flags;
    enum bdev_type            type;
    enum fs_type              fs_type;
    void                      *fs_data;
    char                      name[16];
    uint64_t                  total_sectors;
    bool                      is_removable;
    void                      *driver_data;
    uint32_t                  sector_size;
    bool                      (*read_sector)(struct block_device *disk, uint64_t lba, uint8_t *buffer, uint64_t sector_count);
    bool                      (*write_sector)(struct block_device *disk, uint64_t lba, const uint8_t *buffer, uint64_t sector_count);
    bool                      (*submit_bio_async)(struct block_device *disk, struct bio_request *bio);
    struct bio_scheduler_ops  *ops;
    struct bio_scheduler      *scheduler;
    struct bcache             *cache;
    uint64_t                  partition_count;
    struct partition          *partitions;
};
enum bdev_type {
    BDEV_IDE_DRIVE,
    BDEV_NVME_DRIVE,
    BDEV_AHCI_DRIVE,
    BDEV_ATAPI_DRIVE,
};
enum bdev_flags {
    BDEV_FLAG_NO_REORDER = 1,
    BDEV_FLAG_NO_COALESCE = 1 << 1,
    BDEV_FLAG_NO_SCHED = 1 << 2,
};
char get_block_device_str(enum bdev_type type);
bool bdev_skip_coalesce(struct block_device *disk);
bool bdev_skip_sched(struct block_device *disk);
bool bdev_skip_reorder(struct block_device *disk);