X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=lwext4%2Fext4_blockdev.h;h=39514a4f278545c3601b00a1df6c6e2de604b739;hb=3a0b63fa2dd085a7b9410678a33b71e0647492d4;hp=5cebd709b896fe8328591d8300a92cafcfa0a9a7;hpb=ead60f17e6fe9c651e2c954cd2f3eba796fa9ff5;p=lwext4.git diff --git a/lwext4/ext4_blockdev.h b/lwext4/ext4_blockdev.h index 5cebd70..39514a4 100644 --- a/lwext4/ext4_blockdev.h +++ b/lwext4/ext4_blockdev.h @@ -36,89 +36,86 @@ * @brief Block device module. */ -#include -#include -#include - +#include "ext4_config.h" +#include "ext4_bcache.h" +#include "ext4_debug.h" #include #include /**@brief Initialization status flag*/ -#define EXT4_BDEV_INITIALIZED (1 << 0) - +#define EXT4_BDEV_INITIALIZED (1 << 0) -/**@brief Definiton of the simple block device.*/ -struct ext4_blockdev { +/**@brief Definition of the simple block device.*/ +struct ext4_blockdev { - /**@brief Open device function - * @param bdev block device.*/ - int (*open)(struct ext4_blockdev *bdev); + /**@brief Open device function + * @param bdev block device.*/ + int (*open)(struct ext4_blockdev *bdev); - /**@brief Block read function. - * @param bdev block device - * @param buf output buffer - * @param blk_id block id - * @param blk_cnt block count*/ - int (*bread)(struct ext4_blockdev *bdev, void *buf, - uint64_t blk_id, uint32_t blk_cnt); + /**@brief Block read function. + * @param bdev block device + * @param buf output buffer + * @param blk_id block id + * @param blk_cnt block count*/ + int (*bread)(struct ext4_blockdev *bdev, void *buf, uint64_t blk_id, + uint32_t blk_cnt); - /**@brief Block write function. - * @param buf input buffer - * @param blk_id block id - * @param blk_cnt block count*/ - int (*bwrite)(struct ext4_blockdev *bdev, const void *buf, - uint64_t blk_id, uint32_t blk_cnt); + /**@brief Block write function. + * @param buf input buffer + * @param blk_id block id + * @param blk_cnt block count*/ + int (*bwrite)(struct ext4_blockdev *bdev, const void *buf, + uint64_t blk_id, uint32_t blk_cnt); - /**@brief Close device function. - * @param bdev block device.*/ - int (*close)(struct ext4_blockdev *bdev); + /**@brief Close device function. + * @param bdev block device.*/ + int (*close)(struct ext4_blockdev *bdev); - /**@brief Block cache.*/ - struct ext4_bcache *bc; + /**@brief Block cache.*/ + struct ext4_bcache *bc; - /**@brief Block size (bytes): physical*/ - uint32_t ph_bsize; + /**@brief Block size (bytes): physical*/ + uint32_t ph_bsize; - /**@brief Block count: physical.*/ - uint64_t ph_bcnt; + /**@brief Block count: physical*/ + uint64_t ph_bcnt; - /**@brief Block size buffer: physical.*/ - uint8_t *ph_bbuf; + /**@brief Block size buffer: physical*/ + uint8_t *ph_bbuf; - /**@brief Block size (bytes) logical*/ - uint32_t lg_bsize; + /**@brief Block size (bytes) logical*/ + uint32_t lg_bsize; - /**@brief Block count: phisical.*/ - uint64_t lg_bcnt; + /**@brief Block count: physical*/ + uint64_t lg_bcnt; - /**@brief Flags of te block device.*/ - uint8_t flags; + /**@brief Flags of block device*/ + uint32_t flags; - /**@brief Cache flush delay mode flag.*/ - uint8_t cache_flush_delay; + /**@brief Cache write back mode reference counter*/ + uint32_t cache_write_back; - /**@brief Physical read counter*/ - uint32_t bread_ctr; + /**@brief Physical read counter*/ + uint32_t bread_ctr; - /**@brief Physical write counter*/ - uint32_t bwrite_ctr; + /**@brief Physical write counter*/ + uint32_t bwrite_ctr; }; - -/**@brief Static initialization fo the block device.*/ -#define EXT4_BLOCKDEV_STATIC_INSTANCE(__name, __bsize, __bcnt, __open, \ - __bread, __bwrite, __close) \ - static uint8_t __name##_ph_bbuf[(__bsize)]; \ - static struct ext4_blockdev __name = { \ - .open = __open, \ - .bread = __bread, \ - .bwrite = __bwrite, \ - .close = __close, \ - .ph_bsize = __bsize, \ - .ph_bcnt = __bcnt, \ - .ph_bbuf = __name##_ph_bbuf, \ - } +/**@brief Static initialization of the block device.*/ +#define EXT4_BLOCKDEV_STATIC_INSTANCE(__name, __bsize, __bcnt, __open, \ + __bread, __bwrite, __close) \ + static uint8_t __name##_ph_bbuf[(__bsize)]; \ + static struct ext4_blockdev __name = { \ + .open = __open, \ + .bread = __bread, \ + .bwrite = __bwrite, \ + .close = __close, \ + .ph_bsize = __bsize, \ + .ph_bcnt = __bcnt, \ + .ph_bbuf = __name##_ph_bbuf, \ + } /**@brief Block device initialization. * @param bdev block device descriptor @@ -127,26 +124,30 @@ struct ext4_blockdev { * @return standard error code*/ int ext4_block_init(struct ext4_blockdev *bdev); - /**@brief Binds a bcache to block device. * @param bdev block device descriptor * @param bc block cache descriptor * @return standard error code*/ -int ext4_block_bind_bcache(struct ext4_blockdev *bdev, - struct ext4_bcache *bc); +int ext4_block_bind_bcache(struct ext4_blockdev *bdev, struct ext4_bcache *bc); /**@brief Close block device * @param bdev block device descriptor * @return standard error code*/ int ext4_block_fini(struct ext4_blockdev *bdev); - /**@brief Set logical block size in block device. * @param bdev block device descriptor - * @param lb_size ligical block size (in bytes) + * @param lb_size logical block size (in bytes) * @return standard error code*/ -void ext4_block_set_lb_size(struct ext4_blockdev *bdev, - uint64_t lb_bsize); +void ext4_block_set_lb_size(struct ext4_blockdev *bdev, uint64_t lb_bsize); + +/**@brief Block get function (through cache, don't read). + * @param bdev block device descriptor + * @param b block descriptor + * @param lba logical block address + * @return standard error code*/ +int ext4_block_get_noread(struct ext4_blockdev *bdev, struct ext4_block *b, + uint64_t lba); /**@brief Block get function (through cache). * @param bdev block device descriptor @@ -154,7 +155,7 @@ void ext4_block_set_lb_size(struct ext4_blockdev *bdev, * @param lba logical block address * @return standard error code*/ int ext4_block_get(struct ext4_blockdev *bdev, struct ext4_block *b, - uint64_t lba); + uint64_t lba); /**@brief Block set procedure (through cache). * @param bdev block device descriptor @@ -162,15 +163,13 @@ int ext4_block_get(struct ext4_blockdev *bdev, struct ext4_block *b, * @return standard error code*/ int ext4_block_set(struct ext4_blockdev *bdev, struct ext4_block *b); - /**@brief Block read procedure (without cache) * @param bdev block device descriptor * @param buf output buffer - * @param lba logical block adderss + * @param lba logical block address * @return standard error code*/ -int ext4_blocks_get_direct(struct ext4_blockdev *bdev, void *buf, - uint64_t lba, uint32_t cnt); - +int ext4_blocks_get_direct(struct ext4_blockdev *bdev, void *buf, uint64_t lba, + uint32_t cnt); /**@brief Block write procedure (without cache) * @param bdev block device descriptor @@ -178,35 +177,33 @@ int ext4_blocks_get_direct(struct ext4_blockdev *bdev, void *buf, * @param lba logical block address * @return standard error code*/ int ext4_blocks_set_direct(struct ext4_blockdev *bdev, const void *buf, - uint64_t lba, uint32_t cnt); + uint64_t lba, uint32_t cnt); -/**@brief Write to block device (by direct adress). +/**@brief Write to block device (by direct address). * @param bdev block device descriptor * @param off byte offset in block device * @param buf input buffer - * @param len length of the write nuffer - * @return EOK when sucess*/ + * @param len length of the write buffer + * @return standard error code*/ int ext4_block_writebytes(struct ext4_blockdev *bdev, uint64_t off, - const void *buf, uint32_t len); - + const void *buf, uint32_t len); - -/**@brief Read freom block device (by direct adress). +/**@brief Read freom block device (by direct address). * @param bdev block device descriptor * @param off byte offset in block device * @param buf input buffer - * @param len length of the write nuffer - * @return EOK when sucess*/ -int ext4_block_readbytes(struct ext4_blockdev *bdev, uint64_t off, - void *buf, uint32_t len); + * @param len length of the write buffer + * @return standard error code*/ +int ext4_block_readbytes(struct ext4_blockdev *bdev, uint64_t off, void *buf, + uint32_t len); -/**@brief Enable/disable delayed cache flush mode. +/**@brief Enable/disable write back cache mode * @param bdev block device descriptor * @param on_off * !0 - ENABLE * 0 - DISABLE (all delayed cache buffers will be flushed) * @return standard error code*/ -int ext4_block_delay_cache_flush(struct ext4_blockdev *bdev, uint8_t on_off); +int ext4_block_cache_write_back(struct ext4_blockdev *bdev, uint8_t on_off); #endif /* EXT4_BLOCKDEV_H_ */