1 #ifndef __LWP_MESSAGES_H__ 2 #define __LWP_MESSAGES_H__ 3 4 #include <gctypes.h> 5 #include <limits.h> 6 #include <string.h> 7 #include <lwp_threadq.h> 8 9 //#define _LWPMQ_DEBUG 10 11 #define LWP_MQ_FIFO 0 12 #define LWP_MQ_PRIORITY 1 13 14 #define LWP_MQ_STATUS_SUCCESSFUL 0 15 #define LWP_MQ_STATUS_INVALID_SIZE 1 16 #define LWP_MQ_STATUS_TOO_MANY 2 17 #define LWP_MQ_STATUS_UNSATISFIED 3 18 #define LWP_MQ_STATUS_UNSATISFIED_NOWAIT 4 19 #define LWP_MQ_STATUS_DELETED 5 20 #define LWP_MQ_STATUS_TIMEOUT 6 21 #define LWP_MQ_STATUS_UNSATISFIED_WAIT 7 22 23 #define LWP_MQ_SEND_REQUEST INT_MAX 24 #define LWP_MQ_SEND_URGENT INT_MIN 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 typedef void (*mq_notifyhandler)(void *); 31 32 typedef struct _mqbuffer { 33 u32 size; 34 u32 buffer[1]; 35 } mq_buffer; 36 37 typedef struct _mqbuffercntrl { 38 lwp_node node; 39 u32 prio; 40 mq_buffer contents; 41 } mq_buffercntrl; 42 43 //the following struct is extensible 44 typedef struct _mqattr { 45 u32 mode; 46 } mq_attr; 47 48 typedef struct _mqcntrl { 49 lwp_thrqueue wait_queue; 50 mq_attr attr; 51 u32 max_pendingmsgs; 52 u32 num_pendingmsgs; 53 u32 max_msgsize; 54 lwp_queue pending_msgs; 55 mq_buffer *msq_buffers; 56 mq_notifyhandler notify_handler; 57 void *notify_arg; 58 lwp_queue inactive_msgs; 59 } mq_cntrl; 60 61 u32 __lwpmq_initialize(mq_cntrl *mqueue,mq_attr *attrs,u32 max_pendingmsgs,u32 max_msgsize); 62 void __lwpmq_close(mq_cntrl *mqueue,u32 status); 63 u32 __lwpmq_seize(mq_cntrl *mqueue,u32 id,void *buffer,u32 *size,u32 wait,u64 timeout); 64 u32 __lwpmq_submit(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 type,u32 wait,u64 timeout); 65 u32 __lwpmq_broadcast(mq_cntrl *mqueue,void *buffer,u32 size,u32 id,u32 *count); 66 void __lwpmq_msg_insert(mq_cntrl *mqueue,mq_buffercntrl *msg,u32 type); 67 u32 __lwpmq_flush(mq_cntrl *mqueue); 68 u32 __lwpmq_flush_support(mq_cntrl *mqueue); 69 void __lwpmq_flush_waitthreads(mq_cntrl *mqueue); 70 71 #ifdef LIBOGC_INTERNAL 72 #include <libogc/lwp_messages.inl> 73 #endif 74 75 #ifdef __cplusplus 76 } 77 #endif 78 79 #endif 80