summaryrefslogtreecommitdiffstats
path: root/sys/mips/include/queue.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/mips/include/queue.h')
-rw-r--r--sys/mips/include/queue.h171
1 files changed, 171 insertions, 0 deletions
diff --git a/sys/mips/include/queue.h b/sys/mips/include/queue.h
new file mode 100644
index 0000000..d992332
--- /dev/null
+++ b/sys/mips/include/queue.h
@@ -0,0 +1,171 @@
+/*-
+ * Copyright (c) 1996-1997, 2001, 2005, Juniper Networks, Inc.
+ * All rights reserved.
+ * Jim Hayes, November 1996
+ *
+ * queue.h - Description of uKernel queues, for the Juniper Kernel
+ *
+ * JNPR: queue.h,v 1.1 2006/08/07 05:38:57 katta
+ * $FreeBSD$
+ *
+ */
+
+#ifndef __QUEUE_H__
+#define __QUEUE_H__
+
+/*---------------------------------------------------------------------------
+ * QUEUE MANAGEMENT DOCUMENTATION
+ */
+
+/*
+ --------
+ Q_INIT()
+ --------
+
+ void q_init(void)
+
+ Initialize the queue management system for the microkernel.
+ This initializes the debugging flags and sets up accounting.
+
+ ---------
+ Q_ALLOC()
+ ---------
+
+ queue_t *q_alloc()
+
+ Allocates a queue from kernel memory, and initializes it for you.
+
+ The default initialization provides a queue that is unbounded.
+
+ If you want to be bounded with special features, use q_control
+ after initialization.
+
+ q_alloc() returns NULL in the face of peril or low memory.
+
+ --------
+ Q_FREE()
+ --------
+
+ void *q_free(queue_t *queue_pointer)
+
+ Returns a queue to kernel memory, and frees the queue contents
+ for you using free() and complains (with a traceback) that you
+ tried to kill of a non-empty queue.
+
+ If any threads are waiting on the queue, wake them up.
+
+ -----------
+ Q_CONTROL()
+ -----------
+ void q_control(queue_t *queue_pointer, queue_size_t max_queue_size);
+
+ For now, allows you to limit queue growth.
+
+ ----------------
+ Q_DEQUEUE_WAIT() ** MAY CAUSE THREAD TO BLOCK/CANNOT BE CALLED FROM ISRs **
+ ----------------
+
+ void *q_dequeue_wait(queue_t *queue_pointer, wakeup_mask_t *mask)
+
+ Removes and returns a pointer to the next message in the specified
+ queue. If the queue is empty, the calling thread goes to sleep
+ until something is queued to the queue. If this call returns NULL,
+ then an extraordinary event requires this thread's attention--
+ check errno in this case.
+
+ ---------
+ Q_DEQUEUE ** CAN BE CALLED FROM ISRs **
+ ---------
+
+ void *q_dequeue(queue_t *queue_pointer)
+
+ Just like q_dequeue_wait(), but instead of blocking, return NULL.
+
+ -----------
+ Q_ENQUEUE() ** CAN BE CALLED FROM ISRs **
+ -----------
+
+ boolean q_enqueue(queue_t *queue_pointer, void *element_pointer)
+
+ Add the element to the end of the named queue. If the add fails
+ because a limit has been reached, return TRUE. Otherwise return
+ FALSE if everything went OK.
+
+ ----------
+ Q_URGENT()
+ ----------
+
+ boolean q_urgent(queue_t *queue_pointer, void *element_pointer)
+
+ Same as q_enqueue(), except this element will be placed at the top
+ of the queue, and will be picked off at the next q_dequeue_wait()
+ operation.
+
+ --------
+ Q_PEEK() ** CAN BE CALLED FROM ISRs **
+ --------
+
+ void *q_peek(queue_t *queue_pointer)
+
+ Returns a pointer to the top element of the queue without actually
+ dequeuing it. Returns NULL of the queue is empty.
+
+ This routine will never block.
+
+ ----------
+ Q_DELETE()
+ ----------
+
+ void q_delete(queue_t *queue_pointer, void *element_pointer)
+
+ Delete the element_pointer from the queue, if it exists. This
+ isn't speedy, and isn't meant for tasks requiring performance.
+ It's primary use is to pull something off the queue when you know
+ in the common case that it's gonna be at or near the top of the
+ list. (I.e. waking a thread from a wake list when extraordinary
+ conditions exist, and you have to pluck it from the middle of the
+ list.)
+
+ This routine does not block or return anything.
+
+ --------
+ Q_SIZE()
+ --------
+
+ queue_size_t q_size(queue_t *queue_pointer)
+
+ Returns the number of elements in the queue.
+
+ ------------
+ Q_MAX_SIZE()
+ ------------
+
+ queue_size_t q_max_size(queue_t *queue_pointer);
+
+ Returns the maximum size of this queue, or 0 if this queue is
+ unbounded.
+
+*/
+
+/*-------------------------------------------------------------------------
+ * Basic queue management structures.
+ */
+
+/*
+ * Typedefs
+ */
+
+typedef u_int32_t queue_size_t;
+
+/*
+ * Prototypes
+ */
+
+void q_init(void);
+queue_t *q_alloc(void);
+void *q_peek(queue_t *queue);
+void *q_dequeue(queue_t *queue);
+boolean q_enqueue(queue_t *queue, void *item);
+boolean q_urgent(queue_t *queue, void *item);
+
+#endif /* __QUEUE_H__ */
OpenPOWER on IntegriCloud