22 #if !defined (_RTEMS_RFS_BLOCK_H_) 23 #define _RTEMS_RFS_BLOCK_H_ 25 #include <rtems/rfs/rtems-rfs-block-pos.h> 26 #include <rtems/rfs/rtems-rfs-buffer.h> 27 #include <rtems/rfs/rtems-rfs-data.h> 28 #include <rtems/rfs/rtems-rfs-file-system.h> 38 #define rtems_rfs_block_get_number(_h, _b) \ 39 ((rtems_rfs_block_no) \ 40 (rtems_rfs_read_u32 (rtems_rfs_buffer_data (_h) + \ 41 ((_b) * sizeof (rtems_rfs_block_no))))) 51 #define rtems_rfs_block_set_number(_h, _b, _n) \ 53 rtems_rfs_write_u32 (rtems_rfs_buffer_data (_h) + \ 54 ((_b) * sizeof (rtems_rfs_block_no)), (_n)); \ 55 rtems_rfs_buffer_mark_dirty (_h); \ 151 #define rtems_rfs_block_map_is_dirty(_m) ((_m)->dirty) 156 #define rtems_rfs_block_map_count(_m) ((_m)->size.count) 161 #define rtems_rfs_block_map_size(_m) (&((_m)->size)) 166 #define rtems_rfs_block_map_size_offset(_m) ((_m)->size.offset) 171 #define rtems_rfs_block_map_last(_m) \ 172 rtems_rfs_block_pos_last_block (&(_m)->bpos, &(_m)->size) 177 #define rtems_rfs_block_map_past_end(_m, _p) \ 178 rtems_rfs_block_pos_past_end (_p, &(_m)->size) 183 #define rtems_rfs_block_map_pos(_f, _m) \ 184 rtems_rfs_block_get_pos (_f, &(_m)->bpos) 189 #define rtems_rfs_block_map_block(_m) ((_m)->bpos.bno) 194 #define rtems_rfs_block_map_block_offset(_m) ((_m)->bpos.boff) int rtems_rfs_block_map_find(rtems_rfs_file_system *fs, rtems_rfs_block_map *map, rtems_rfs_block_pos *bpos, rtems_rfs_buffer_block *block)
Find a block number in the map from the position provided.
Definition: rtems-rfs-block.c:232
A block size is the number of blocks less one plus the offset where the offset must be less than the ...
Definition: rtems-rfs-block-pos.h:141
bool dirty
Is the map dirty ?
Definition: rtems-rfs-block.h:97
#define RTEMS_RFS_INODE_BLOCKS
The number of blocks in the inode.
Definition: rtems-rfs-file-system.h:67
uint32_t blocks[RTEMS_RFS_INODE_BLOCKS]
The block map.
Definition: rtems-rfs-block.h:134
int rtems_rfs_block_map_seek(rtems_rfs_file_system *fs, rtems_rfs_block_map *map, rtems_rfs_pos_rel offset, rtems_rfs_buffer_block *block)
Seek around the map.
Definition: rtems-rfs-block.c:332
#define rtems_rfs_block_copy_size(_lhs, _rhs)
Copy a block size.
Definition: rtems-rfs-block-pos.h:163
RFS File System data.
Definition: rtems-rfs-file-system.h:123
uint32_t rtems_rfs_buffer_block
Define the method used to interface to the buffers.
Definition: rtems-rfs-buffer.h:62
rtems_rfs_inode_block rtems_rfs_block_no
The block number is the same type as the inode block number.
Definition: rtems-rfs-block-pos.h:39
uint32_t rtems_rfs_block_off
The offset into a block.
Definition: rtems-rfs-block-pos.h:44
rtems_rfs_block_off offset
The offset into the block.
Definition: rtems-rfs-block-pos.h:153
int rtems_rfs_block_map_next_block(rtems_rfs_file_system *fs, rtems_rfs_block_map *map, rtems_rfs_buffer_block *block)
Seek to the next block.
Definition: rtems-rfs-block.c:344
int rtems_rfs_block_map_shrink(rtems_rfs_file_system *fs, rtems_rfs_block_map *map, size_t blocks)
Grow the block map by the specified number of blocks.
Definition: rtems-rfs-block.c:648
rtems_rfs_block_no last_data_block
The last data block allocated.
Definition: rtems-rfs-block.h:129
rtems_rfs_inode_handle * inode
The inode this map is attached to.
Definition: rtems-rfs-block.h:102
rtems_rfs_block_pos bpos
The block map position.
Definition: rtems-rfs-block.h:117
rtems_rfs_buffer_handle singly_buffer
Singly Buffer handle.
Definition: rtems-rfs-block.h:139
RFS Inode Handle.
Definition: rtems-rfs-inode.h:181
A block position is a block number times the block size plus the offset.
Definition: rtems-rfs-block-pos.h:51
rtems_rfs_block_no last_map_block
The last map block allocated.
Definition: rtems-rfs-block.h:123
A block map manges the block lists that originate from an inode.
Definition: rtems-rfs-block.h:92
int rtems_rfs_block_map_close(rtems_rfs_file_system *fs, rtems_rfs_block_map *map)
Close the map.
Definition: rtems-rfs-block.c:145
rtems_rfs_buffer_handle doubly_buffer
Doubly Buffer handle.
Definition: rtems-rfs-block.h:144
rtems_rfs_block_size size
The size of the map.
Definition: rtems-rfs-block.h:107
int rtems_rfs_block_map_free_all(rtems_rfs_file_system *fs, rtems_rfs_block_map *map)
Free all blocks in the map.
Definition: rtems-rfs-block.c:795
RFS Buffer handle.
Definition: rtems-rfs-buffer.h:91
int rtems_rfs_block_map_grow(rtems_rfs_file_system *fs, rtems_rfs_block_map *map, size_t blocks, rtems_rfs_block_no *new_block)
Grow the block map by the specified number of blocks.
Definition: rtems-rfs-block.c:405
int64_t rtems_rfs_pos_rel
Relative position.
Definition: rtems-rfs-file-system.h:95
struct rtems_rfs_block_map_s rtems_rfs_block_map
A block map manges the block lists that originate from an inode.
int rtems_rfs_block_map_open(rtems_rfs_file_system *fs, rtems_rfs_inode_handle *inode, rtems_rfs_block_map *map)
Open a block map.
Definition: rtems-rfs-block.c:94