#ifndef KERNEL_CHANNEL_H_ #define KERNEL_CHANNEL_H_ #include #include struct kmsg; struct channel { struct object c_base; unsigned int c_id; struct waitqueue c_wq; struct btree c_msg; struct btree_node c_node; }; extern kern_status_t channel_type_init(void); extern struct channel *channel_create(void); extern kern_status_t channel_enqueue_msg( struct channel *channel, struct kmsg *msg); extern kern_status_t channel_recv_msg( struct channel *channel, struct msg *out_msg, msgid_t *out_id, unsigned long *irq_flags); extern kern_status_t channel_reply_msg( struct channel *channel, msgid_t id, const struct msg *resp, unsigned long *irq_flags); extern kern_status_t channel_read_msg( struct channel *channel, msgid_t msg, size_t offset, void *buf, size_t len, size_t *nr_read); extern kern_status_t channel_write_msg( struct channel *channel, msgid_t msg, size_t offset, const void *buf, size_t len, size_t *nr_written); DEFINE_OBJECT_LOCK_FUNCTION(channel, c_base) #endif