1 /*
2  * ipmi_locks.h
3  *
4  * MontaVista IPMI locking abstraction
5  *
6  * Author: MontaVista Software, Inc.
7  *         Corey Minyard <minyard@mvista.com>
8  *         source@mvista.com
9  *
10  * Copyright 2002,2003,2004,2005 MontaVista Software Inc.
11  *
12  * This software is available to you under a choice of one of two
13  * licenses.  You may choose to be licensed under the terms of the GNU
14  * Lesser General Public License (GPL) Version 2 or the modified BSD
15  * license below.  The following disclamer applies to both licenses:
16  *
17  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
18  *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20  *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
23  *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
25  *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
26  *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * GNU Lesser General Public Licence
29  *
30  *  This program is free software; you can redistribute it and/or
31  *  modify it under the terms of the GNU Lesser General Public License
32  *  as published by the Free Software Foundation; either version 2 of
33  *  the License, or (at your option) any later version.
34  *
35  *  You should have received a copy of the GNU Lesser General Public
36  *  License along with this program; if not, write to the Free
37  *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
38  *
39  * Modified BSD Licence
40  *
41  * Redistribution and use in source and binary forms, with or without
42  * modification, are permitted provided that the following conditions
43  * are met:
44  *
45  *   1. Redistributions of source code must retain the above copyright
46  *      notice, this list of conditions and the following disclaimer.
47  *   2. Redistributions in binary form must reproduce the above
48  *      copyright notice, this list of conditions and the following
49  *      disclaimer in the documentation and/or other materials provided
50  *      with the distribution.
51  *   3. The name of the author may not be used to endorse or promote
52  *      products derived from this software without specific prior
53  *      written permission.
54  */
55 
56 #ifndef OPENIPMI_LOCKS_H
57 #define OPENIPMI_LOCKS_H
58 
59 #include <OpenIPMI/os_handler.h>
60 
61 /* This is a generic lock used by the IPMI code. */
62 typedef struct ipmi_lock_s ipmi_lock_t;
63 
64 /* Create a lock but us your own OS handlers. */
65 int ipmi_create_lock_os_hnd(os_handler_t *os_hnd, ipmi_lock_t **lock);
66 
67 /* Destroy a lock. */
68 void ipmi_destroy_lock(ipmi_lock_t *lock);
69 
70 /* Lock the lock.  Locks are recursive, so the same thread can claim
71    the same lock multiple times, and must release it the same number
72    of times. */
73 void ipmi_lock(ipmi_lock_t *lock);
74 
75 /* Release the lock. */
76 void ipmi_unlock(ipmi_lock_t *lock);
77 
78 /* Like the above locks, but read/write locks. */
79 typedef struct ipmi_rwlock_s ipmi_rwlock_t;
80 int ipmi_create_rwlock_os_hnd(os_handler_t *os_hnd, ipmi_rwlock_t **new_lock);
81 void ipmi_destroy_rwlock(ipmi_rwlock_t *lock);
82 void ipmi_rwlock_read_lock(ipmi_rwlock_t *lock);
83 void ipmi_rwlock_read_unlock(ipmi_rwlock_t *lock);
84 void ipmi_rwlock_write_lock(ipmi_rwlock_t *lock);
85 void ipmi_rwlock_write_unlock(ipmi_rwlock_t *lock);
86 
87 #endif /* OPENIPMI_LOCKS_H */
88