35 lines
744 B
C
35 lines
744 B
C
#ifndef KERNEL_EQUEUE_H_
|
|
#define KERNEL_EQUEUE_H_
|
|
|
|
#include <kernel/locks.h>
|
|
#include <kernel/object.h>
|
|
#include <kernel/sched.h>
|
|
#include <mango/types.h>
|
|
|
|
#define EQUEUE_PACKET_MAX 100
|
|
|
|
enum equeue_flags {
|
|
EQUEUE_WAIT,
|
|
EQUEUE_DISCARD,
|
|
};
|
|
|
|
struct equeue {
|
|
struct object eq_base;
|
|
unsigned short eq_read_ptr, eq_write_ptr;
|
|
equeue_packet_t eq_packets[EQUEUE_PACKET_MAX];
|
|
struct waitqueue eq_wq;
|
|
};
|
|
|
|
extern kern_status_t equeue_type_init(void);
|
|
extern struct equeue *equeue_cast(struct object *obj);
|
|
|
|
extern struct equeue *equeue_create(void);
|
|
|
|
extern kern_status_t equeue_enqueue(
|
|
struct equeue *q,
|
|
const equeue_packet_t *pkt,
|
|
enum equeue_flags flags);
|
|
extern kern_status_t equeue_dequeue(struct equeue *q, equeue_packet_t *out);
|
|
|
|
#endif
|