xref: /xnu-8019.80.24/libkern/libkern/OSBase.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  * Copyright (c) 1999 Apple Computer, Inc.  All rights reserved.
30  *
31  * HISTORY
32  *
33  */
34 
35 #ifndef _OS_OSBASE_H
36 #define _OS_OSBASE_H
37 
38 #include <sys/cdefs.h>
39 
40 #include <libkern/OSTypes.h>
41 
42 #include <stdint.h>
43 
44 __BEGIN_DECLS
45 
46 #ifdef  KERNEL_PRIVATE
47 
48 OS_INLINE
49 uint64_t
__OSAbsoluteTime(AbsoluteTime abstime)50 __OSAbsoluteTime(
51 	AbsoluteTime    abstime)
52 {
53 	return *(uint64_t *)&abstime;
54 }
55 
56 OS_INLINE
57 uint64_t *
__OSAbsoluteTimePtr(AbsoluteTime * abstime)58 __OSAbsoluteTimePtr(
59 	AbsoluteTime    *abstime)
60 {
61 	return (uint64_t *)abstime;
62 }
63 
64 #define AbsoluteTime_to_scalar(x)       (*(uint64_t *)(x))
65 
66 /* t1 < = > t2 */
67 #define CMP_ABSOLUTETIME(t1, t2)                                \
68 	(AbsoluteTime_to_scalar(t1) >                           \
69 	        AbsoluteTime_to_scalar(t2)? (int)+1 :   \
70 	 (AbsoluteTime_to_scalar(t1) <                          \
71 	        AbsoluteTime_to_scalar(t2)? (int)-1 : 0))
72 
73 /* t1 += t2 */
74 #define ADD_ABSOLUTETIME(t1, t2)                                \
75 	(AbsoluteTime_to_scalar(t1) +=                          \
76 	                        AbsoluteTime_to_scalar(t2))
77 
78 /* t1 -= t2 */
79 #define SUB_ABSOLUTETIME(t1, t2)                                \
80 	(AbsoluteTime_to_scalar(t1) -=                          \
81 	                        AbsoluteTime_to_scalar(t2))
82 
83 #define ADD_ABSOLUTETIME_TICKS(t1, ticks)               \
84 	(AbsoluteTime_to_scalar(t1) +=                          \
85 	                                        (int32_t)(ticks))
86 
87 #endif  /* KERNEL_PRIVATE */
88 
89 __END_DECLS
90 
91 #endif /* _OS_OSBASE_H */
92