#ifndef __LWP_MESSAGES_H__ #define __LWP_MESSAGES_H__ #include #include #include #include //#define _LWPMQ_DEBUG #define LWP_MQ_FIFO 0 #define LWP_MQ_PRIORITY 1 #define LWP_MQ_STATUS_SUCCESSFUL 0 #define LWP_MQ_STATUS_INVALID_SIZE 1 #define LWP_MQ_STATUS_TOO_MANY 2 #define LWP_MQ_STATUS_UNSATISFIED 3 #define LWP_MQ_STATUS_UNSATISFIED_NOWAIT 4 #define LWP_MQ_STATUS_DELETED 5 #define LWP_MQ_STATUS_TIMEOUT 6 #define LWP_MQ_STATUS_UNSATISFIED_WAIT 7 #define LWP_MQ_SEND_REQUEST INT_MAX #define LWP_MQ_SEND_URGENT INT_MIN #ifdef __cplusplus extern "C" { #endif typedef void (*mq_notifyhandler)(void *); typedef struct _mqbuffer { u32 size; u32 buffer[1]; } mq_buffer; typedef struct _mqbuffercntrl { lwp_node node; u32 prio; mq_buffer contents; } mq_buffercntrl; //the following struct is extensible typedef struct _mqattr { u32 mode; } mq_attr; typedef struct _mqcntrl { lwp_thrqueue wait_queue; mq_attr attr; u32 max_pendingmsgs; u32 num_pendingmsgs; u32 max_msgsize; lwp_queue pending_msgs; mq_buffer *msq_buffers; mq_notifyhandler notify_handler; void *notify_arg; lwp_queue inactive_msgs; } mq_cntrl; u32 __lwpmq_initialize(mq_cntrl *mqueue,mq_attr *attrs,u32 max_pendingmsgs,u32 max_msgsize); void __lwpmq_close(mq_cntrl *mqueue,u32 status); u32 __lwpmq_seize(mq_cntrl *mqueue,u32 id,void *buffer,u32 *size,u32 wait,u64 timeout); u32 __lwpmq_submit(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 type,u32 wait,u64 timeout); u32 __lwpmq_broadcast(mq_cntrl *mqueue,void *buffer,u32 size,u32 id,u32 *count); void __lwpmq_msg_insert(mq_cntrl *mqueue,mq_buffercntrl *msg,u32 type); u32 __lwpmq_flush(mq_cntrl *mqueue); u32 __lwpmq_flush_support(mq_cntrl *mqueue); void __lwpmq_flush_waitthreads(mq_cntrl *mqueue); #ifdef LIBOGC_INTERNAL #include #endif #ifdef __cplusplus } #endif #endif