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