1 /*
2  * Copyright (c) 1998-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_OSMESSAGENOTIFICATION_H
36 #define __OS_OSMESSAGENOTIFICATION_H
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 #include <mach/mach_types.h>
43 #include <device/device_types.h>
44 #include <IOKit/IOReturn.h>
45 
46 enum {
47 	kFirstIOKitNotificationType                 = 100,
48 	kIOServicePublishNotificationType           = 100,
49 	kIOServiceMatchedNotificationType           = 101,
50 	kIOServiceTerminatedNotificationType        = 102,
51 	kIOAsyncCompletionNotificationType          = 150,
52 	kIOServiceMessageNotificationType           = 160,
53 	kLastIOKitNotificationType                  = 199,
54 
55 	// reserved bits
56 	kIOKitNoticationTypeMask                    = 0x00000FFF,
57 	kIOKitNoticationTypeSizeAdjShift            = 30,
58 	kIOKitNoticationMsgSizeMask                 = 3,
59 };
60 
61 enum {
62 	kOSNotificationMessageID            = 53,
63 	kOSAsyncCompleteMessageID           = 57,
64 	kMaxAsyncArgs                       = 16
65 };
66 
67 enum {
68 	kIOAsyncReservedIndex       = 0,
69 	kIOAsyncReservedCount,
70 
71 	kIOAsyncCalloutFuncIndex    = kIOAsyncReservedCount,
72 	kIOAsyncCalloutRefconIndex,
73 	kIOAsyncCalloutCount,
74 
75 	kIOMatchingCalloutFuncIndex = kIOAsyncReservedCount,
76 	kIOMatchingCalloutRefconIndex,
77 	kIOMatchingCalloutCount,
78 
79 	kIOInterestCalloutFuncIndex = kIOAsyncReservedCount,
80 	kIOInterestCalloutRefconIndex,
81 	kIOInterestCalloutServiceIndex,
82 	kIOInterestCalloutCount
83 };
84 
85 
86 
87 // --------------
88 enum {
89 	kOSAsyncRef64Count  = 8,
90 	kOSAsyncRef64Size   = kOSAsyncRef64Count * ((int) sizeof(io_user_reference_t))
91 };
92 typedef io_user_reference_t OSAsyncReference64[kOSAsyncRef64Count];
93 
94 struct OSNotificationHeader64 {
95 	mach_msg_size_t     size;       /* content size */
96 	natural_t           type;
97 	OSAsyncReference64  reference;
98 
99 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
100 	unsigned char       content[];
101 #else
102 	unsigned char       content[0];
103 #endif
104 };
105 
106 #pragma pack(4)
107 struct IOServiceInterestContent64 {
108 	natural_t           messageType;
109 	io_user_reference_t messageArgument[1];
110 };
111 #pragma pack()
112 // --------------
113 
114 #if !KERNEL_USER32
115 
116 enum {
117 	kOSAsyncRefCount    = 8,
118 	kOSAsyncRefSize     = 32
119 };
120 typedef natural_t OSAsyncReference[kOSAsyncRefCount] __kernel_ptr_semantics;
121 
122 struct OSNotificationHeader {
123 	mach_msg_size_t     size;       /* content size */
124 	natural_t           type;
125 	OSAsyncReference    reference;
126 
127 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
128 	unsigned char       content[];
129 #else
130 	unsigned char       content[0];
131 #endif
132 };
133 
134 #pragma pack(4)
135 struct IOServiceInterestContent {
136 	natural_t   messageType;
137 	void *      messageArgument[1];
138 };
139 #pragma pack()
140 
141 #endif /* KERNEL_USER32  */
142 
143 struct IOAsyncCompletionContent {
144 	IOReturn result;
145 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
146 	void * args[] __attribute__ ((packed));
147 #else
148 	void * args[0] __attribute__ ((packed));
149 #endif
150 };
151 
152 #ifndef __cplusplus
153 typedef struct OSNotificationHeader OSNotificationHeader;
154 typedef struct IOServiceInterestContent IOServiceInterestContent;
155 typedef struct IOAsyncCompletionContent IOAsyncCompletionContent;
156 #endif
157 
158 #ifdef __cplusplus
159 }
160 #endif
161 
162 #endif /*  __OS_OSMESSAGENOTIFICATION_H */
163