Statistics
| Branch: | Revision:

root / hw / fifo.h @ a1bc20df

History | View | Annotate | Download (2.2 kB)

1
#ifndef FIFO_H
2
#define FIFO_H
3

    
4
#include "hw.h"
5

    
6
typedef struct {
7
    /* All fields are private */
8
    uint8_t *data;
9
    uint32_t capacity;
10
    uint32_t head;
11
    uint32_t num;
12
} Fifo8;
13

    
14
/**
15
 * fifo8_create:
16
 * @fifo: struct Fifo8 to initialise with new FIFO
17
 * @capacity: capacity of the newly created FIFO
18
 *
19
 * Create a FIFO of the specified size. Clients should call fifo8_destroy()
20
 * when finished using the fifo. The FIFO is initially empty.
21
 */
22

    
23
void fifo8_create(Fifo8 *fifo, uint32_t capacity);
24

    
25
/**
26
 * fifo8_destroy:
27
 * @fifo: FIFO to cleanup
28
 *
29
 * Cleanup a FIFO created with fifo8_create(). Frees memory created for FIFO
30
  *storage. The FIFO is no longer usable after this has been called.
31
 */
32

    
33
void fifo8_destroy(Fifo8 *fifo);
34

    
35
/**
36
 * fifo8_push:
37
 * @fifo: FIFO to push to
38
 * @data: data byte to push
39
 *
40
 * Push a data byte to the FIFO. Behaviour is undefined if the FIFO is full.
41
 * Clients are responsible for checking for fullness using fifo8_is_full().
42
 */
43

    
44
void fifo8_push(Fifo8 *fifo, uint8_t data);
45

    
46
/**
47
 * fifo8_pop:
48
 * @fifo: fifo to pop from
49
 *
50
 * Pop a data byte from the FIFO. Behaviour is undefined if the FIFO is empty.
51
 * Clients are responsible for checking for emptyness using fifo8_is_empty().
52
 *
53
 * Returns: The popped data byte.
54
 */
55

    
56
uint8_t fifo8_pop(Fifo8 *fifo);
57

    
58
/**
59
 * fifo8_reset:
60
 * @fifo: FIFO to reset
61
 *
62
 * Reset a FIFO. All data is discarded and the FIFO is emptied.
63
 */
64

    
65
void fifo8_reset(Fifo8 *fifo);
66

    
67
/**
68
 * fifo8_is_empty:
69
 * @fifo: FIFO to check
70
 *
71
 * Check if a FIFO is empty.
72
 *
73
 * Returns: True if the fifo is empty, false otherwise.
74
 */
75

    
76
bool fifo8_is_empty(Fifo8 *fifo);
77

    
78
/**
79
 * fifo8_is_full:
80
 * @fifo: FIFO to check
81
 *
82
 * Check if a FIFO is full.
83
 *
84
 * Returns: True if the fifo is full, false otherwise.
85
 */
86

    
87
bool fifo8_is_full(Fifo8 *fifo);
88

    
89
extern const VMStateDescription vmstate_fifo8;
90

    
91
#define VMSTATE_FIFO8(_field, _state) {                              \
92
    .name       = (stringify(_field)),                               \
93
    .size       = sizeof(Fifo8),                                     \
94
    .vmsd       = &vmstate_fifo8,                                    \
95
    .flags      = VMS_STRUCT,                                        \
96
    .offset     = vmstate_offset_value(_state, _field, Fifo8),       \
97
}
98

    
99
#endif /* FIFO_H */