4 #include <minix/callnr.h>
6 #include <minix/config.h>
8 #include <minix/endpoint.h>
9 #include <minix/sysutil.h>
10 #include <minix/const.h>
11 #include <minix/type.h>
15 #include <sys/types.h>
23 PRIVATE
int get_ipc_endpt(endpoint_t
*pt
)
25 return minix_rs_lookup("ipc", pt
);
28 /* Shared memory control operation. */
29 PUBLIC
int shmctl(int shmid
, int cmd
, struct shmid_ds
*buf
)
35 if (get_ipc_endpt(&ipc_pt
) != OK
) {
42 m
.SHMCTL_BUF
= (long) buf
;
44 r
= _syscall(ipc_pt
, IPC_SHMCTL
, &m
);
45 if ((cmd
== IPC_INFO
|| cmd
== SHM_INFO
|| cmd
== SHM_STAT
)
51 /* Get shared memory segment. */
52 PUBLIC
int shmget(key_t key
, size_t size
, int shmflg
)
58 if (get_ipc_endpt(&ipc_pt
) != OK
) {
65 m
.SHMGET_FLAG
= shmflg
;
67 r
= _syscall(ipc_pt
, IPC_SHMGET
, &m
);
70 return m
.SHMGET_RETID
;
73 /* Attach shared memory segment. */
74 PUBLIC
void *shmat(int shmid
, const void *shmaddr
, int shmflg
)
80 if (get_ipc_endpt(&ipc_pt
) != OK
) {
86 m
.SHMAT_ADDR
= (long) shmaddr
;
87 m
.SHMAT_FLAG
= shmflg
;
89 r
= _syscall(ipc_pt
, IPC_SHMAT
, &m
);
92 return (void *) m
.SHMAT_RETADDR
;
95 /* Deattach shared memory segment. */
96 PUBLIC
int shmdt(const void *shmaddr
)
101 if (get_ipc_endpt(&ipc_pt
) != OK
) {
106 m
.SHMDT_ADDR
= (long) shmaddr
;
108 return _syscall(ipc_pt
, IPC_SHMDT
, &m
);