Clean up more #include files. Create an internal __boolean_t so two or
[dragonfly.git] / sys / sys / sysmsg.h
1 /*
2  * SYS/SYSMSG.H
3  *
4  * $DragonFly: src/sys/sys/sysmsg.h,v 1.9 2006/05/21 03:43:47 dillon Exp $
5  */
6
7 #ifndef _SYS_SYSMSG_H_
8 #define _SYS_SYSMSG_H_
9
10 #ifndef _SYS_MSGPORT_H_
11 #include <sys/msgport.h>
12 #endif
13
14 #ifdef _KERNEL
15
16 #ifndef _SYS_CALLOUT_H_
17 #include <sys/callout.h>        /* for struct callout */
18 #endif
19 #ifndef _SYS_TIME_H_
20 #include <sys/time.h>           /* for struct timespec */
21 #endif
22
23 /*
24  * The sysmsg holds the kernelland version of a system call.
25  * It typically preceeds the usrmsg and syscall arguments in sysunion
26  * (see sys/sysunion.h).  Note that msgq field is used by the governing
27  * process to record a system call that returns EASYNC in order to be able
28  * to properly abort and/or wait on it in exit1().  This is different from
29  * any localized queueing of the LWKT message that the syscall itself might
30  * do.
31  */
32 union sysunion;
33
34 struct sysmsg {
35         struct lwkt_msg lmsg;
36         void            (*copyout)(union sysunion *sysun);
37         TAILQ_ENTRY(sysmsg)     msgq;
38         union {
39             struct sysmsg_sleep {
40                 struct lwkt_msg lmsg;
41                 struct timespec rmt;
42                 struct timespec rqt;
43                 struct callout  timer;
44             } sleep;
45         } sm;
46 };
47
48 struct lwp;
49 union sysunion;
50
51 struct sysmsg *sysmsg_wait(struct lwp *lp, struct sysmsg *sysmsg, int nonblock);
52 void sysmsg_rundown(struct lwp *lp, int doabort);
53
54 #endif
55
56 /*
57  * The usrmsg holds the userland version of the system call message which
58  * typically preceeds the original user arguments.  This message structure
59  * is typically loaded by the copyin() and adjusted prior to copyout(), but
60  * not used in the nominal running of the system call.
61  */
62 union usrmsg {
63         struct lwkt_msg umsg;
64 };
65
66 #ifdef _KERNEL
67 typedef struct sysmsg *sysmsg_t;
68 #define sysmsg_copyout  sysmsg.copyout
69 #define sysmsg_lmsg     sysmsg.lmsg
70 #define sysmsg_result   sysmsg.lmsg.u.ms_result
71 #define sysmsg_lresult  sysmsg.lmsg.u.ms_lresult
72 #define sysmsg_resultp  sysmsg.lmsg.u.ms_resultp
73 #define sysmsg_fds      sysmsg.lmsg.u.ms_fds
74 #define sysmsg_offset   sysmsg.lmsg.u.ms_offset
75 #define sysmsg_result32 sysmsg.lmsg.u.ms_result32
76 #define sysmsg_result64 sysmsg.lmsg.u.ms_result64
77 #endif
78
79 typedef union usrmsg *usrmsg_t;
80 #define usrmsg_result   usrmsg.umsg.u.ms_result
81 #define usrmsg_lresult  usrmsg.umsg.u.ms_lresult
82 #define usrmsg_resultp  usrmsg.umsg.u.ms_resultp
83 #define usrmsg_fds      usrmsg.umsg.u.ms_fds
84 #define usrmsg_offset   usrmsg.umsg.u.ms_offset
85 #define usrmsg_result32 usrmsg.umsg.u.ms_result32
86 #define usrmsg_result64 usrmsg.umsg.u.ms_result64
87
88 #endif
89