linprocfs - Introduce /proc/mounts
[dragonfly.git] / sys / sys / msgport2.h
blobc4a66104c60ce860d66622ac6bdaab8ea55fed90
1 /*
2 * SYS/MSGPORT2.H
4 * Implements Inlines for LWKT messages and ports.
5 *
6 * $DragonFly: src/sys/sys/msgport2.h,v 1.17 2008/11/09 09:20:09 sephe Exp $
7 */
9 #ifndef _SYS_MSGPORT2_H_
10 #define _SYS_MSGPORT2_H_
12 #ifndef _KERNEL
14 #error "This file should not be included by userland programs."
16 #else
18 #ifndef _SYS_THREAD2_H_
19 #include <sys/thread2.h>
20 #endif
23 * Initialize a LWKT message structure. Note that if the message supports
24 * an abort MSGF_ABORTABLE must be passed in flags.
26 * Note that other areas of the LWKT msg may already be initialized, so we
27 * do not zero the message here.
29 * Messages are marked as DONE until sent.
31 static __inline
32 void
33 lwkt_initmsg(lwkt_msg_t msg, lwkt_port_t rport, int flags)
35 msg->ms_flags = MSGF_DONE | flags;
36 msg->ms_reply_port = rport;
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))
44 lwkt_initmsg(msg, rport, flags | MSGF_ABORTABLE);
45 msg->ms_abortfn = abortfn;
48 static __inline
49 int
50 lwkt_beginmsg(lwkt_port_t port, lwkt_msg_t msg)
52 return(port->mp_putport(port, msg));
55 static __inline
56 void
57 lwkt_replymsg(lwkt_msg_t msg, int error)
59 lwkt_port_t port;
61 msg->ms_error = error;
62 port = msg->ms_reply_port;
63 port->mp_replyport(port, msg);
67 * Retrieve the next message from the port's message queue, return NULL
68 * if no messages are pending. The retrieved message will either be a
69 * request or a reply based on the MSGF_REPLY bit.
71 * If the backend port is a thread port, the the calling thread MUST
72 * own the port.
74 static __inline
75 void *
76 lwkt_getport(lwkt_port_t port)
78 return(port->mp_getport(port));
81 static __inline
82 void *
83 lwkt_waitport(lwkt_port_t port, int flags)
85 return(port->mp_waitport(port, flags));
88 static __inline
89 int
90 lwkt_waitmsg(lwkt_msg_t msg, int flags)
92 return(msg->ms_reply_port->mp_waitmsg(msg, flags));
96 static __inline
97 int
98 lwkt_checkmsg(lwkt_msg_t msg)
100 return(msg->ms_flags & MSGF_DONE);
103 static __inline
104 void
105 lwkt_dropmsg(lwkt_msg_t msg)
107 lwkt_port_t port;
109 KKASSERT((msg->ms_flags & (MSGF_DROPABLE | MSGF_DONE | MSGF_QUEUED)) ==
110 (MSGF_DROPABLE | MSGF_QUEUED));
111 port = msg->ms_target_port;
112 port->mp_dropmsg(port, msg);
115 #endif /* _KERNEL */
116 #endif /* _SYS_MSGPORT2_H_ */