Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / sys / ksem.h @ 14

History | View | Annotate | Download (2.77 KB)

1
/*        $NetBSD: ksem.h,v 1.14 2012/11/25 01:05:04 christos Exp $        */
2

    
3
/*
4
 * Copyright (c) 2002 Alfred Perlstein <alfred@FreeBSD.org>
5
 * All rights reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without
8
 * modification, are permitted provided that the following conditions
9
 * are met:
10
 * 1. Redistributions of source code must retain the above copyright
11
 *    notice, this list of conditions and the following disclaimer.
12
 * 2. Redistributions in binary form must reproduce the above copyright
13
 *    notice, this list of conditions and the following disclaimer in the
14
 *    documentation and/or other materials provided with the distribution.
15
 *
16
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26
 * SUCH DAMAGE.
27
 */
28

    
29
#ifndef _SYS_KSEM_H_
30
#define _SYS_KSEM_H_
31

    
32
#include <sys/cdefs.h>
33

    
34
struct timespec;
35

    
36
#ifdef _KERNEL
37
#define        KSEM_MAX        128
38

    
39
typedef struct ksem {
40
        LIST_ENTRY(ksem)        ks_entry;        /* global list entry */
41
        kmutex_t                ks_lock;        /* lock on this ksem */
42
        kcondvar_t                ks_cv;                /* condition variable */
43
        u_int                        ks_ref;                /* number of references */
44
        u_int                        ks_value;        /* current value */
45
        u_int                        ks_waiters;        /* number of waiters */
46
        char *                        ks_name;        /* name, if named */
47
        size_t                        ks_namelen;        /* length of name */
48
        int                        ks_flags;        /* for KS_UNLINKED */
49
        mode_t                        ks_mode;        /* protection bits */
50
        uid_t                        ks_uid;                /* creator uid */
51
        gid_t                        ks_gid;                /* creator gid */
52
} ksem_t;
53

    
54
int do_ksem_init(struct lwp *, unsigned int, intptr_t *, copyout_t);
55
int do_ksem_open(struct lwp *, const char *, int, mode_t, unsigned int,
56
    intptr_t *, copyout_t);
57
int do_ksem_wait(struct lwp *, intptr_t, bool, struct timespec *);
58

    
59
extern int        ksem_max;
60
#endif
61

    
62
#ifdef _LIBC
63
__BEGIN_DECLS
64
int _ksem_close(intptr_t);
65
int _ksem_destroy(intptr_t);
66
int _ksem_getvalue(intptr_t, int *);
67
int _ksem_init(unsigned int, intptr_t *);
68
int _ksem_open(const char *, int, mode_t, unsigned int, intptr_t *);
69
int _ksem_post(intptr_t);
70
int _ksem_timedwait(intptr_t, const struct timespec * __restrict);
71
int _ksem_trywait(intptr_t);
72
int _ksem_unlink(const char *);
73
int _ksem_wait(intptr_t);
74
__END_DECLS
75
#endif /* _LIBC */
76

    
77
#endif /* _SYS_KSEM_H_ */