1 /* 2 * SYS/MSGPORT2.H 3 * 4 * Implements Inlines for LWKT messages and ports. 5 * 6 * $DragonFly: src/sys/sys/msgport2.h,v 1.7 2004/03/06 19:40:32 dillon Exp $ 7 */ 8 9 #ifndef _SYS_MSGPORT2_H_ 10 #define _SYS_MSGPORT2_H_ 11 12 static __inline 13 void 14 lwkt_initmsg(lwkt_msg_t msg, int cmd) 15 { 16 msg->ms_cmd = cmd; 17 msg->ms_flags = MSGF_DONE; 18 msg->ms_reply_port = &curthread->td_msgport; 19 msg->ms_msgsize = 0; 20 } 21 22 static __inline 23 void 24 lwkt_initmsg_rp(lwkt_msg_t msg, lwkt_port_t rport, int cmd) 25 { 26 msg->ms_cmd = cmd; 27 msg->ms_flags = MSGF_DONE; 28 msg->ms_reply_port = rport; 29 msg->ms_msgsize = 0; 30 } 31 32 static __inline 33 void 34 lwkt_reinitmsg(lwkt_msg_t msg, lwkt_port_t rport) 35 { 36 msg->ms_flags = (msg->ms_flags & MSGF_ASYNC) | MSGF_DONE; 37 msg->ms_reply_port = rport; 38 } 39 40 static __inline 41 int 42 lwkt_beginmsg(lwkt_port_t port, lwkt_msg_t msg) 43 { 44 return(port->mp_putport(port, msg)); 45 } 46 47 static __inline 48 int 49 lwkt_forwardmsg(lwkt_port_t port, lwkt_msg_t msg) 50 { 51 return(port->mp_putport(port, msg)); 52 } 53 54 static __inline 55 int 56 lwkt_waitmsg(lwkt_msg_t msg) 57 { 58 lwkt_port_t port = msg->ms_reply_port; 59 return(((lwkt_msg_t)port->mp_waitport(port, msg))->ms_error); 60 } 61 62 static __inline 63 void 64 lwkt_abortmsg(lwkt_msg_t msg) 65 { 66 lwkt_port_t port = msg->ms_target_port; 67 port->mp_abortport(port, msg); 68 } 69 70 static __inline 71 void 72 lwkt_replymsg(lwkt_msg_t msg, int error) 73 { 74 lwkt_port_t port = msg->ms_reply_port; 75 msg->ms_error = error; 76 port->mp_replyport(port, msg); 77 } 78 79 static __inline 80 void * 81 lwkt_waitport(lwkt_port_t port, lwkt_msg_t msg) 82 { 83 return(port->mp_waitport(port, msg)); 84 } 85 86 #endif 87 88