61f41e3c54
This adds a simple block layer to barebox. Reading and writing to block devices can be painfully slow without caching, so add a simple caching layer here. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
33 lines
873 B
C
33 lines
873 B
C
#ifndef __BLOCK_H
|
|
#define __BLOCK_H
|
|
|
|
#include <driver.h>
|
|
|
|
struct block_device;
|
|
|
|
struct block_device_ops {
|
|
int (*read)(struct block_device *, void *buf, int block, int num_blocks);
|
|
int (*write)(struct block_device *, const void *buf, int block, int num_blocks);
|
|
};
|
|
|
|
struct block_device {
|
|
struct device_d *dev;
|
|
struct block_device_ops *ops;
|
|
int blockbits;
|
|
int num_blocks;
|
|
void *rdbuf; /* read buffer */
|
|
int rdbufsize;
|
|
int rdblock; /* start block in read buffer */
|
|
int rdblockend; /* end block in read buffer */
|
|
void *wrbuf; /* write buffer */
|
|
int wrblock; /* start block in write buffer */
|
|
int wrbufblocks; /* number of blocks currently in write buffer */
|
|
int wrbufsize; /* size of write buffer in blocks */
|
|
struct cdev cdev;
|
|
};
|
|
|
|
int blockdevice_register(struct block_device *blk);
|
|
int blockdevice_unregister(struct block_device *blk);
|
|
|
|
#endif /* __BLOCK_H */
|