Linux preempt-rt

Check our new training course

Real-Time Linux with PREEMPT_RT

Check our new training course
with Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

/*
 * Copyright (c) 2016-2017 Nordic Semiconductor ASA
 * Copyright (c) 2016 Vinayak Kariappa Chettimada
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @brief   Element of a memory-queue
 * @details Elements form a linked list, and as payload carries a pointer
 */
struct _memq_link {
	struct _memq_link *next; /* permit chaining */
	void              *mem;  /* payload */
};

typedef struct _memq_link memq_link_t;

#define MEMQ_DECLARE(name) \
	struct { \
		memq_link_t *head; \
		memq_link_t *tail; \
	} memq_##name

memq_link_t *memq_init(memq_link_t *link, memq_link_t **head,
		       memq_link_t **tail);

#define MEMQ_INIT(name, link) \
	memq_init(link, &memq_##name.head, &memq_##name.tail)

memq_link_t *memq_deinit(memq_link_t **head, memq_link_t **tail);
memq_link_t *memq_enqueue(memq_link_t *link, void *mem, memq_link_t **tail);
memq_link_t *memq_peek(memq_link_t *head, memq_link_t *tail, void **mem);
memq_link_t *memq_peek_n(memq_link_t *head, memq_link_t *tail, uint8_t n,
			 void **mem);
memq_link_t *memq_dequeue(memq_link_t *tail, memq_link_t **head, void **mem);