28 struct mmpkt *
volatile head;
30 struct mmpkt *
volatile tail;
32 volatile uint32_t
len;
36#define MMPKT_LIST_INIT { NULL, NULL, 0 }
44static inline void mmpkt_list_init(
struct mmpkt_list *list)
58static inline uint32_t mmpkt_list_length(
struct mmpkt_list *list)
69void mmpkt_list_prepend(
struct mmpkt_list *list,
struct mmpkt *mmpkt);
77void mmpkt_list_append(
struct mmpkt_list *list,
struct mmpkt *mmpkt);
86void mmpkt_list_insert_after(
struct mmpkt_list *list,
struct mmpkt *ref,
struct mmpkt *mmpkt);
94void mmpkt_list_remove(
struct mmpkt_list *list,
struct mmpkt *mmpkt);
103struct mmpkt *mmpkt_list_dequeue(
struct mmpkt_list *list);
112struct mmpkt *mmpkt_list_dequeue_tail(
struct mmpkt_list *list);
121static inline struct mmpkt *mmpkt_list_dequeue_all(
struct mmpkt_list *list)
123 struct mmpkt *head = list->
head;
137static inline bool mmpkt_list_is_empty(
struct mmpkt_list *list)
139 return (list->
head == NULL);
149static inline struct mmpkt *mmpkt_list_peek(
struct mmpkt_list *list)
161static inline struct mmpkt *mmpkt_list_peek_tail(
struct mmpkt_list *list)
171void mmpkt_list_clear(
struct mmpkt_list *list);
191#define MMPKT_LIST_WALK(_lst, _wlk, _nxt) \
192 if ((_lst)->head != NULL) \
193 for (_wlk = (_lst)->head, _nxt = mmpkt_get_next(_wlk); _wlk != NULL; \
194 _wlk = _nxt, _nxt = _wlk ? mmpkt_get_next(_wlk) : NULL)
Structure that can be used as the head of a linked list of mmpkts that counts its length.
struct mmpkt *volatile tail
Last mmpkt in the list.
volatile uint32_t len
Length of the list.
struct mmpkt *volatile head
First mmpkt in the list.