1 /* 2 * SYS/MSGPORT2.H 3 * 4 * Implements Inlines for LWKT messages and ports. 5 * 6 * $DragonFly: src/sys/sys/msgport2.h,v 1.15 2007/05/24 20:51:19 dillon Exp $ 7 */ 8 9 #ifndef _SYS_MSGPORT2_H_ 10 #define _SYS_MSGPORT2_H_ 11 12 #ifndef _KERNEL 13 14 #error "This file should not be included by userland programs." 15 16 #else 17 18 #ifndef _SYS_THREAD2_H_ 19 #include <sys/thread2.h> 20 #endif 21 22 /* 23 * Initialize a LWKT message structure. Note that if the message supports 24 * an abort MSGF_ABORTABLE must be passed in flags. 25 * 26 * Note that other areas of the LWKT msg may already be initialized, so we 27 * do not zero the message here. 28 * 29 * Messages are marked as DONE until sent. 30 */ 31 static __inline 32 void 33 lwkt_initmsg(lwkt_msg_t msg, lwkt_port_t rport, int flags) 34 { 35 msg->ms_flags = MSGF_DONE | flags; 36 msg->ms_reply_port = rport; 37 } 38 39 static __inline 40 void 41 lwkt_initmsg_abortable(lwkt_msg_t msg, lwkt_port_t rport, int flags, 42 void (*abortfn)(lwkt_msg_t)) 43 { 44 lwkt_initmsg(msg, rport, flags | MSGF_ABORTABLE); 45 msg->ms_abortfn = abortfn; 46 } 47 48 static __inline 49 int 50 lwkt_beginmsg(lwkt_port_t port, lwkt_msg_t msg) 51 { 52 return(port->mp_putport(port, msg)); 53 } 54 55 static __inline 56 void 57 lwkt_replymsg(lwkt_msg_t msg, int error) 58 { 59 lwkt_port_t port; 60 61 msg->ms_error = error; 62 port = msg->ms_reply_port; 63 port->mp_replyport(port, msg); 64 } 65 66 static __inline 67 void * 68 lwkt_getport(lwkt_port_t port) 69 { 70 return(port->mp_getport(port)); 71 } 72 73 static __inline 74 void * 75 lwkt_waitport(lwkt_port_t port, int flags) 76 { 77 return(port->mp_waitport(port, flags)); 78 } 79 80 static __inline 81 int 82 lwkt_waitmsg(lwkt_msg_t msg, int flags) 83 { 84 return(msg->ms_reply_port->mp_waitmsg(msg, flags)); 85 } 86 87 88 static __inline 89 int 90 lwkt_checkmsg(lwkt_msg_t msg) 91 { 92 return(msg->ms_flags & MSGF_DONE); 93 } 94 95 #endif /* _KERNEL */ 96 #endif /* _SYS_MSGPORT2_H_ */ 97