Statistics
| Branch: | Revision:

root / hw / fifo.h @ bf3bc4c4

History | View | Annotate | Download (2.2 kB)

1 a3578d4a Peter A. G. Crosthwaite
#ifndef FIFO_H
2 a3578d4a Peter A. G. Crosthwaite
#define FIFO_H
3 a3578d4a Peter A. G. Crosthwaite
4 a3578d4a Peter A. G. Crosthwaite
#include "hw.h"
5 a3578d4a Peter A. G. Crosthwaite
6 a3578d4a Peter A. G. Crosthwaite
typedef struct {
7 a3578d4a Peter A. G. Crosthwaite
    /* All fields are private */
8 a3578d4a Peter A. G. Crosthwaite
    uint8_t *data;
9 a3578d4a Peter A. G. Crosthwaite
    uint32_t capacity;
10 a3578d4a Peter A. G. Crosthwaite
    uint32_t head;
11 a3578d4a Peter A. G. Crosthwaite
    uint32_t num;
12 a3578d4a Peter A. G. Crosthwaite
} Fifo8;
13 a3578d4a Peter A. G. Crosthwaite
14 a3578d4a Peter A. G. Crosthwaite
/**
15 a3578d4a Peter A. G. Crosthwaite
 * fifo8_create:
16 a3578d4a Peter A. G. Crosthwaite
 * @fifo: struct Fifo8 to initialise with new FIFO
17 a3578d4a Peter A. G. Crosthwaite
 * @capacity: capacity of the newly created FIFO
18 a3578d4a Peter A. G. Crosthwaite
 *
19 a3578d4a Peter A. G. Crosthwaite
 * Create a FIFO of the specified size. Clients should call fifo8_destroy()
20 a3578d4a Peter A. G. Crosthwaite
 * when finished using the fifo. The FIFO is initially empty.
21 a3578d4a Peter A. G. Crosthwaite
 */
22 a3578d4a Peter A. G. Crosthwaite
23 a3578d4a Peter A. G. Crosthwaite
void fifo8_create(Fifo8 *fifo, uint32_t capacity);
24 a3578d4a Peter A. G. Crosthwaite
25 a3578d4a Peter A. G. Crosthwaite
/**
26 a3578d4a Peter A. G. Crosthwaite
 * fifo8_destroy:
27 a3578d4a Peter A. G. Crosthwaite
 * @fifo: FIFO to cleanup
28 a3578d4a Peter A. G. Crosthwaite
 *
29 a3578d4a Peter A. G. Crosthwaite
 * Cleanup a FIFO created with fifo8_create(). Frees memory created for FIFO
30 a3578d4a Peter A. G. Crosthwaite
  *storage. The FIFO is no longer usable after this has been called.
31 a3578d4a Peter A. G. Crosthwaite
 */
32 a3578d4a Peter A. G. Crosthwaite
33 a3578d4a Peter A. G. Crosthwaite
void fifo8_destroy(Fifo8 *fifo);
34 a3578d4a Peter A. G. Crosthwaite
35 a3578d4a Peter A. G. Crosthwaite
/**
36 a3578d4a Peter A. G. Crosthwaite
 * fifo8_push:
37 a3578d4a Peter A. G. Crosthwaite
 * @fifo: FIFO to push to
38 a3578d4a Peter A. G. Crosthwaite
 * @data: data byte to push
39 a3578d4a Peter A. G. Crosthwaite
 *
40 a3578d4a Peter A. G. Crosthwaite
 * Push a data byte to the FIFO. Behaviour is undefined if the FIFO is full.
41 a3578d4a Peter A. G. Crosthwaite
 * Clients are responsible for checking for fullness using fifo8_is_full().
42 a3578d4a Peter A. G. Crosthwaite
 */
43 a3578d4a Peter A. G. Crosthwaite
44 a3578d4a Peter A. G. Crosthwaite
void fifo8_push(Fifo8 *fifo, uint8_t data);
45 a3578d4a Peter A. G. Crosthwaite
46 a3578d4a Peter A. G. Crosthwaite
/**
47 a3578d4a Peter A. G. Crosthwaite
 * fifo8_pop:
48 a3578d4a Peter A. G. Crosthwaite
 * @fifo: fifo to pop from
49 a3578d4a Peter A. G. Crosthwaite
 *
50 a3578d4a Peter A. G. Crosthwaite
 * Pop a data byte from the FIFO. Behaviour is undefined if the FIFO is empty.
51 a3578d4a Peter A. G. Crosthwaite
 * Clients are responsible for checking for emptyness using fifo8_is_empty().
52 a3578d4a Peter A. G. Crosthwaite
 *
53 a3578d4a Peter A. G. Crosthwaite
 * Returns: The popped data byte.
54 a3578d4a Peter A. G. Crosthwaite
 */
55 a3578d4a Peter A. G. Crosthwaite
56 a3578d4a Peter A. G. Crosthwaite
uint8_t fifo8_pop(Fifo8 *fifo);
57 a3578d4a Peter A. G. Crosthwaite
58 a3578d4a Peter A. G. Crosthwaite
/**
59 a3578d4a Peter A. G. Crosthwaite
 * fifo8_reset:
60 a3578d4a Peter A. G. Crosthwaite
 * @fifo: FIFO to reset
61 a3578d4a Peter A. G. Crosthwaite
 *
62 a3578d4a Peter A. G. Crosthwaite
 * Reset a FIFO. All data is discarded and the FIFO is emptied.
63 a3578d4a Peter A. G. Crosthwaite
 */
64 a3578d4a Peter A. G. Crosthwaite
65 a3578d4a Peter A. G. Crosthwaite
void fifo8_reset(Fifo8 *fifo);
66 a3578d4a Peter A. G. Crosthwaite
67 a3578d4a Peter A. G. Crosthwaite
/**
68 a3578d4a Peter A. G. Crosthwaite
 * fifo8_is_empty:
69 a3578d4a Peter A. G. Crosthwaite
 * @fifo: FIFO to check
70 a3578d4a Peter A. G. Crosthwaite
 *
71 a3578d4a Peter A. G. Crosthwaite
 * Check if a FIFO is empty.
72 a3578d4a Peter A. G. Crosthwaite
 *
73 a3578d4a Peter A. G. Crosthwaite
 * Returns: True if the fifo is empty, false otherwise.
74 a3578d4a Peter A. G. Crosthwaite
 */
75 a3578d4a Peter A. G. Crosthwaite
76 a3578d4a Peter A. G. Crosthwaite
bool fifo8_is_empty(Fifo8 *fifo);
77 a3578d4a Peter A. G. Crosthwaite
78 a3578d4a Peter A. G. Crosthwaite
/**
79 a3578d4a Peter A. G. Crosthwaite
 * fifo8_is_full:
80 a3578d4a Peter A. G. Crosthwaite
 * @fifo: FIFO to check
81 a3578d4a Peter A. G. Crosthwaite
 *
82 a3578d4a Peter A. G. Crosthwaite
 * Check if a FIFO is full.
83 a3578d4a Peter A. G. Crosthwaite
 *
84 a3578d4a Peter A. G. Crosthwaite
 * Returns: True if the fifo is full, false otherwise.
85 a3578d4a Peter A. G. Crosthwaite
 */
86 a3578d4a Peter A. G. Crosthwaite
87 a3578d4a Peter A. G. Crosthwaite
bool fifo8_is_full(Fifo8 *fifo);
88 a3578d4a Peter A. G. Crosthwaite
89 a3578d4a Peter A. G. Crosthwaite
extern const VMStateDescription vmstate_fifo8;
90 a3578d4a Peter A. G. Crosthwaite
91 a3578d4a Peter A. G. Crosthwaite
#define VMSTATE_FIFO8(_field, _state) {                              \
92 a3578d4a Peter A. G. Crosthwaite
    .name       = (stringify(_field)),                               \
93 a3578d4a Peter A. G. Crosthwaite
    .size       = sizeof(Fifo8),                                     \
94 a3578d4a Peter A. G. Crosthwaite
    .vmsd       = &vmstate_fifo8,                                    \
95 a3578d4a Peter A. G. Crosthwaite
    .flags      = VMS_STRUCT,                                        \
96 a3578d4a Peter A. G. Crosthwaite
    .offset     = vmstate_offset_value(_state, _field, Fifo8),       \
97 a3578d4a Peter A. G. Crosthwaite
}
98 a3578d4a Peter A. G. Crosthwaite
99 a3578d4a Peter A. G. Crosthwaite
#endif /* FIFO_H */