#ifndef KERNEL_CHANNEL_H_ #define KERNEL_CHANNEL_H_ #include #include struct msg; 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_cast(struct object *obj); extern struct channel *channel_create(void); extern kern_status_t channel_enqueue_msg( struct channel *channel, struct msg *msg); extern kern_status_t channel_recv_msg( struct channel *channel, msgid_t *out_id, struct iovec *out_data, size_t out_data_count, unsigned long *irq_flags); extern kern_status_t channel_reply_msg( struct channel *channel, msgid_t id, const struct iovec *resp_data, size_t resp_data_count, unsigned long *irq_flags); extern kern_status_t channel_read_msg( struct channel *channel, msgid_t msg, size_t offset, struct vm_region *dest_region, const struct iovec *dest_iov, size_t dest_iov_count, size_t *nr_read); extern kern_status_t channel_write_msg( struct channel *channel, msgid_t msg, size_t offset, struct vm_region *src_region, const struct iovec *src_iov, size_t src_iov_count, size_t *nr_written); DEFINE_OBJECT_LOCK_FUNCTION(channel, c_base) #endif