kernel: add equeue object

equeue is a way for the kernel to deliver events to userspace programs.
This commit is contained in:
2026-03-12 20:37:51 +00:00
parent 7d4cede788
commit 3fd608b623
4 changed files with 149 additions and 15 deletions

34
include/kernel/equeue.h Normal file
View 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