1 | /* $NetBSD: sem.h,v 1.6 2009/01/19 19:39:41 christos Exp $ */ |
2 | |
3 | /* |
4 | * SVID compatible sem.h file |
5 | * |
6 | * Author: Daniel Boulet |
7 | */ |
8 | |
9 | #ifndef _COMPAT_SYS_SEM_H_ |
10 | #define _COMPAT_SYS_SEM_H_ |
11 | |
12 | #include <compat/sys/ipc.h> |
13 | |
14 | struct semid_ds14 { |
15 | struct ipc_perm14 sem_perm; /* operation permission struct */ |
16 | struct __sem *sem_base; /* pointer to first semaphore in set */ |
17 | unsigned short sem_nsems; /* number of sems in set */ |
18 | int32_t sem_otime; /* last operation time */ |
19 | long sem_pad1; /* SVABI/386 says I need this here */ |
20 | int32_t sem_ctime; /* last change time */ |
21 | /* Times measured in secs since */ |
22 | /* 00:00:00 GMT, Jan. 1, 1970 */ |
23 | long sem_pad2; /* SVABI/386 says I need this here */ |
24 | long sem_pad3[4]; /* SVABI/386 says I need this here */ |
25 | }; |
26 | |
27 | struct semid_ds13 { |
28 | struct ipc_perm sem_perm; /* operation permission structure */ |
29 | unsigned short sem_nsems; /* number of semaphores in set */ |
30 | int32_t sem_otime; /* last semop() time */ |
31 | int32_t sem_ctime; /* last time changed by semctl() */ |
32 | |
33 | /* |
34 | * These members are private and used only in the internal |
35 | * implementation of this interface. |
36 | */ |
37 | struct __sem *_sem_base; /* pointer to first semaphore in set */ |
38 | }; |
39 | |
40 | /* Warning: 64-bit structure padding is needed here */ |
41 | struct semid_ds_sysctl50 { |
42 | struct ipc_perm_sysctl sem_perm; |
43 | int16_t sem_nsems; |
44 | int16_t pad2; |
45 | int32_t pad3; |
46 | int32_t sem_otime; |
47 | int32_t sem_ctime; |
48 | }; |
49 | |
50 | struct sem_sysctl_info50 { |
51 | struct seminfo seminfo; |
52 | struct semid_ds_sysctl50 semids[1]; |
53 | }; |
54 | |
55 | __BEGIN_DECLS |
56 | static __inline void __semid_ds14_to_native(const struct semid_ds14 *, struct semid_ds *); |
57 | static __inline void __native_to_semid_ds14(const struct semid_ds *, struct semid_ds14 *); |
58 | static __inline void __semid_ds13_to_native(const struct semid_ds13 *, struct semid_ds *); |
59 | static __inline void __native_to_semid_ds13(const struct semid_ds *, struct semid_ds13 *); |
60 | |
61 | static __inline void |
62 | __semid_ds13_to_native(const struct semid_ds13 *osembuf, struct semid_ds *sembuf) |
63 | { |
64 | |
65 | sembuf->sem_perm = osembuf->sem_perm; |
66 | |
67 | #define CVT(x) sembuf->x = osembuf->x |
68 | CVT(sem_nsems); |
69 | CVT(sem_otime); |
70 | CVT(sem_ctime); |
71 | #undef CVT |
72 | } |
73 | |
74 | static __inline void |
75 | __native_to_semid_ds13(const struct semid_ds *sembuf, struct semid_ds13 *osembuf) |
76 | { |
77 | |
78 | osembuf->sem_perm = sembuf->sem_perm; |
79 | |
80 | #define CVT(x) osembuf->x = sembuf->x |
81 | #define CVTI(x) osembuf->x = (int)sembuf->x |
82 | CVT(sem_nsems); |
83 | CVTI(sem_otime); |
84 | CVTI(sem_ctime); |
85 | #undef CVT |
86 | #undef CVTI |
87 | } |
88 | |
89 | static __inline void |
90 | __semid_ds14_to_native(const struct semid_ds14 *osembuf, struct semid_ds *sembuf) |
91 | { |
92 | |
93 | __ipc_perm14_to_native(&osembuf->sem_perm, &sembuf->sem_perm); |
94 | |
95 | #define CVT(x) sembuf->x = osembuf->x |
96 | CVT(sem_nsems); |
97 | CVT(sem_otime); |
98 | CVT(sem_ctime); |
99 | #undef CVT |
100 | } |
101 | |
102 | static __inline void |
103 | __native_to_semid_ds14(const struct semid_ds *sembuf, struct semid_ds14 *osembuf) |
104 | { |
105 | |
106 | __native_to_ipc_perm14(&sembuf->sem_perm, &osembuf->sem_perm); |
107 | |
108 | #define CVT(x) osembuf->x = sembuf->x |
109 | #define CVTI(x) osembuf->x = (int)sembuf->x |
110 | CVT(sem_nsems); |
111 | CVTI(sem_otime); |
112 | CVTI(sem_ctime); |
113 | #undef CVT |
114 | #undef CVTI |
115 | } |
116 | |
117 | int semctl(int, int, int, ...); |
118 | int __semctl(int, int, int, union __semun *); |
119 | int __semctl13(int, int, int, ...); |
120 | int __semctl14(int, int, int, ...); |
121 | int __semctl50(int, int, int, ...); |
122 | int ____semctl50(int, int, int, ...); |
123 | __END_DECLS |
124 | |
125 | #endif /* !_COMPAT_SYS_SEM_H_ */ |
126 | |