More documentation
[people/lynusvaz/gpxe.git] / src / include / buffer.h
1 #ifndef BUFFER_H
2 #define BUFFER_H
3
4 #include "stdint.h"
5
6 /* @file */
7
8 /**
9  * A buffer
10  *
11  * @c start and @c end denote the real boundaries of the buffer, and
12  * are physical addresses.  @c fill denotes the offset to the first
13  * free block in the buffer.  (If the buffer is full, @c fill will
14  * equal @c end-start.)
15  *
16  */
17 struct buffer {
18         physaddr_t      start;          /**< Start of buffer in memory */
19         physaddr_t      end;            /**< End of buffer in memory */
20         off_t           fill;           /**< Offset to first gap in buffer */
21 };
22
23 /**
24  * A free block descriptor.
25  *
26  * See \ref buffer_int for a full description of the fields.
27  *
28  */
29 struct buffer_free_block {
30         char            tail;           /**< Tail byte marker */
31         physaddr_t      next_free;      /**< Address of next free block */
32         physaddr_t      end;            /**< End of this block */
33 } __attribute__ (( packed ));
34
35 /* Functions in buffer.c */
36
37 extern void init_buffer ( struct buffer *buffer );
38 extern int fill_buffer ( struct buffer *buffer, const void *data,
39                          off_t offset, size_t len );
40
41 #endif /* BUFFER_H */