diff options
Diffstat (limited to 'src/include/buffer.h')
| -rw-r--r-- | src/include/buffer.h | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/include/buffer.h b/src/include/buffer.h index 3c99bdefb..7ed57fa2b 100644 --- a/src/include/buffer.h +++ b/src/include/buffer.h @@ -1,16 +1,38 @@ #ifndef BUFFER_H #define BUFFER_H +#include "stdint.h" + +/* + * Free blocks in the buffer start with a "tail byte". If non-zero, + * this byte indicates that the free block is the tail of the buffer, + * i.e. occupies all the remaining space up to the end of the buffer. + * When the tail byte is non-zero, it indicates that the remainder of + * the descriptor (the struct buffer_free_block) follows the tail + * byte. + * + * This scheme is necessary because we may end up with a tail that is + * smaller than a struct buffer_free_block. + * + */ + struct buffer_free_block { - struct buffer_free_block *next; - struct buffer_free_block *prev; - void *end; -}; + char tail; + physaddr_t next_free; + physaddr_t end; +} __attribute__ (( packed )); struct buffer { - struct buffer_free_block free_blocks; - void *start; - void *end; + physaddr_t start; + physaddr_t end; + physaddr_t first_free; }; +/* Functions in buffer.c */ + +extern void init_buffer ( struct buffer *buffer, physaddr_t start, + size_t len ); +extern off_t fill_buffer ( struct buffer *buffer, void *data, + off_t offset, size_t len ); + #endif /* BUFFER_H */ |
