xref: /xnu-8019.80.24/osfmk/i386/hw_lock_types.h (revision a325d9c4a84054e40bbe985afedcb50ab80993ea)
1 /*
2  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5  *
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. The rights granted to you under the License
10  * may not be used to create, or enable the creation or redistribution of,
11  * unlawful or unlicensed copies of an Apple operating system, or to
12  * circumvent, violate, or enable the circumvention or violation of, any
13  * terms of an Apple operating system software license agreement.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
18  * The Original Code and all software distributed under the License are
19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23  * Please see the License for the specific language governing rights and
24  * limitations under the License.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 /*
29  * @OSF_COPYRIGHT@
30  */
31 
32 /*
33  * Mach Operating System
34  * Copyright (c) 1991,1990 Carnegie Mellon University
35  * All Rights Reserved.
36  *
37  * Permission to use, copy, modify and distribute this software and its
38  * documentation is hereby granted, provided that both the copyright
39  * notice and this permission notice appear in all copies of the
40  * software, derivative works or modified versions, and any portions
41  * thereof, and that both notices appear in supporting documentation.
42  *
43  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
44  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
45  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
46  *
47  * Carnegie Mellon requests users of this software to return to
48  *
49  *  Software Distribution Coordinator  or  [email protected]
50  *  School of Computer Science
51  *  Carnegie Mellon University
52  *  Pittsburgh PA 15213-3890
53  *
54  * any improvements or extensions that they make and grant Carnegie Mellon
55  * the rights to redistribute these changes.
56  */
57 
58 /*
59  * Machine-dependent simple locks for the i386.
60  */
61 
62 #ifndef _I386_HW_LOCK_TYPES_H_
63 #define _I386_HW_LOCK_TYPES_H_
64 
65 #include <stdint.h>
66 
67 /*
68  *	The "hardware lock".  Low-level locking primitives that
69  *	MUST be exported by machine-dependent code; this abstraction
70  *	must provide atomic, non-blocking mutual exclusion that
71  *	is invulnerable to uniprocessor or SMP races, interrupts,
72  *	traps or any other events.
73  *
74  *		hw_lock_data_t		machine-specific lock data structure
75  *		hw_lock_t		pointer to hw_lock_data_t
76  *
77  *	An implementation must export these data types and must
78  *	also provide routines to manipulate them (see prototypes,
79  *	below).  These routines may be external, inlined, optimized,
80  *	or whatever, based on the kernel configuration.  In the event
81  *	that the implementation wishes to define its own prototypes,
82  *	macros, or inline functions, it may define LOCK_HW_PROTOS
83  *	to disable the definitions below.
84  *
85  *	Mach does not expect these locks to support statistics,
86  *	debugging, tracing or any other complexity.  In certain
87  *	configurations, Mach will build other locking constructs
88  *	on top of this one.  A correctly functioning Mach port need
89  *	only implement these locks to be successful.  However,
90  *	greater efficiency may be gained with additional machine-
91  *	dependent optimizations for the locking constructs defined
92  *	later in kern/lock.h..
93  */
94 struct hslock {
95 	uintptr_t       lock_data __kernel_data_semantics;
96 };
97 typedef struct hslock hw_lock_data_t, *hw_lock_t;
98 #define hw_lock_addr(hwl)       (&((hwl).lock_data))
99 
100 #endif  /* _I386_HW_LOCK_TYPES_H_ */
101