kernel: add equeue object
equeue is a way for the kernel to deliver events to userspace programs.
This commit is contained in:
34
include/kernel/equeue.h
Normal file
34
include/kernel/equeue.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user