Files

41 lines
1.4 KiB
C

#pragma once
#include "sys/block/cache.h"
#include "sys/types.h"
#define BLK_CACHE (1 << 1)
#define BLK_BUSY (1 << 0)
struct vnode;
struct ofile;
struct blkdev {
uint32_t flags;
size_t block_size;
struct block_cache cache;
void *dev_data;
ssize_t (*read) (struct blkdev *blk, void *buf, size_t off, size_t count);
ssize_t (*write) (struct blkdev *blk, const void *buf, size_t off, size_t count);
int (*ioctl) (struct blkdev *blk, unsigned long req, void *ptr);
int (*mmap)(struct blkdev *blk, uintptr_t base, size_t page_count, int prot, int flags);
void (*destroy) (struct blkdev *blk);
};
void blk_set_cache(struct blkdev *blk, size_t capacity);
void blk_cache_release(struct blkdev *blk);
void blk_sync(struct blkdev *blk);
int blk_page_sync(struct blkdev *blk, uintptr_t address, uintptr_t page);
void blk_sync_all(void);
int blk_mmap(struct blkdev *blk, uintptr_t base, size_t page_count, int prot, int flags);
ssize_t blk_read(struct blkdev *blk, void *buf, size_t off, size_t count);
ssize_t blk_write(struct blkdev *blk, const void *buf, size_t off, size_t count);
int blk_ioctl(struct blkdev *blk, unsigned long req, void *ptr);
int blk_mount_auto(struct vnode *at, struct blkdev *blkdev, uint32_t flags, const char *opt);
int blk_add_part(struct vnode *of, int n, uint64_t lba, uint64_t size);
int blk_enumerate_partitions(struct blkdev *blk, struct vnode *node);