1/* iig(DriverKit-286) generated from IOService.iig */
2
3/* IOService.iig:1-71 */
4/*
5 * Copyright (c) 2019-2019 Apple Inc. All rights reserved.
6 *
7 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
8 *
9 * This file contains Original Code and/or Modifications of Original Code
10 * as defined in and that are subject to the Apple Public Source License
11 * Version 2.0 (the 'License'). You may not use this file except in
12 * compliance with the License. The rights granted to you under the License
13 * may not be used to create, or enable the creation or redistribution of,
14 * unlawful or unlicensed copies of an Apple operating system, or to
15 * circumvent, violate, or enable the circumvention or violation of, any
16 * terms of an Apple operating system software license agreement.
17 *
18 * Please obtain a copy of the License at
19 * http://www.opensource.apple.com/apsl/ and read it before using this file.
20 *
21 * The Original Code and all software distributed under the License are
22 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
23 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
24 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
25 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
26 * Please see the License for the specific language governing rights and
27 * limitations under the License.
28 *
29 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
30 */
31
32#if !__IIG
33#if KERNEL
34#include <IOKit/IOService.h>
35#endif
36#endif
37
38#ifndef _IOKIT_UIOSERVICE_H
39#define _IOKIT_UIOSERVICE_H
40
41#include <DriverKit/OSObject.h> /* .iig include */
42
43class IOMemoryDescriptor;
44class IOBufferMemoryDescriptor;
45class IOUserClient;
46class OSAction;
47class IOServiceStateNotificationDispatchSource;
48
49typedef char IOServiceName[128];
50typedef char IOPropertyName[128];
51typedef char IORegistryPlaneName[128];
52
53enum {
54 kIOServiceSearchPropertyParents = 0x00000001,
55};
56
57#define kIOServiceDefaultQueueName "Default"
58
59enum {
60 kIOServicePowerCapabilityOff = 0x00000000,
61 kIOServicePowerCapabilityOn = 0x00000002,
62 kIOServicePowerCapabilityLow = 0x00010000,
63};
64
65enum {
66 _kIOPMWakeEventSource = 0x00000001,
67};
68
69// values for OSNumber kIOSystemStateHaltDescriptionKey:kIOSystemStateHaltDescriptionHaltStateKey
70enum {
71 kIOServiceHaltStatePowerOff = 0x00000001,
72 kIOServiceHaltStateRestart = 0x00000002,
73};
74
75/* source class IOService IOService.iig:72-551 */
76
77#if __DOCUMENTATION__
78#define KERNEL IIG_KERNEL
79
80/*!
81 * @class IOService
82 *
83 * @abstract
84 * IOService represents an device or OS service in IOKit and DriverKit.
85 *
86 * @discussion
87 * IOKit provides driver lifecycle management through the IOService APIs.
88 * Drivers and devices are represented as subclasses of IOService.
89 *
90
91*/
92
93class KERNEL IOService : public OSObject
94{
95public:
96 virtual bool
97 init() override;
98
99 virtual void
100 free() override;
101
102 /*!
103 * @brief First call made to a matched IOService.
104 * @discussion During matching IOKit will create an IOService object for successful matches.
105 * Start is the first call made to the new object.
106 * @param provider The IOService provider for the match. This should be OSRequiredCast to the expected class.
107 * The provider is retained by DriverKit for the duration of Start() and on successful Start() until
108 * IOService::Stop() is called.
109 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
110 */
111 virtual kern_return_t
112 Start(IOService * provider) LOCAL;
113
114 /*!
115 * @brief Terminate access to provider.
116 * @discussion During termination IOKit will teardown any IOService objects attached to a terminated provider.
117 * Stop should quiesce all activity and when complete, pass the call to super. After calling super, the
118 * provider is no longer valid and this object will likely be freed.
119 * @param provider The IOService provider for being terminated, one previously passed to Start
120 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
121 */
122 virtual kern_return_t
123 Stop(IOService * provider) LOCAL;
124
125 /*! @function ClientCrashed
126 * @discussion Notification for kernel objects of a client crash.
127 * @param client Attached client.
128 * @param options No options are currently defined.
129 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
130 */
131 virtual kern_return_t
132 ClientCrashed(IOService * client, uint64_t options);
133
134 /*!
135 * @brief Obtain IOKit IORegistryEntryID.
136 * @param registryEntryID IORegistryEntryID for the IOKit object.
137 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
138 */
139 virtual kern_return_t
140 GetRegistryEntryID(uint64_t * registryEntryID) LOCAL;
141
142 /*!
143 * @brief Set the IORegistryEntry name.
144 * @param name Name for the IOKit object. The c-string will be copied.
145 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
146 */
147 virtual kern_return_t
148 SetName(
149 const IOServiceName name);
150
151 /*!
152 * @brief Start the matching process on the IOService object.
153 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
154 */
155 virtual kern_return_t
156 RegisterService();
157
158 /*!
159 * @brief Set the IODispatchQueue for a given name on the IOService.
160 * @param name Name for the queue. The name may be referenced by methods in the .iig class definition
161 * with the QUEUENAME() attribute to indicate the method must be invoked on that queue. If a method
162 * is invoked before the queue is set for the name, the default queue is used. A default queue is
163 * created by DriverKit for every new IOService object with the name kIOServiceDefaultQueueName.
164 * @param queue Queue to be associated with the name on this IOService.
165 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
166 */
167 virtual kern_return_t
168 SetDispatchQueue(
169 const IODispatchQueueName name,
170 IODispatchQueue * queue) override LOCAL;
171
172 /*!
173 * @brief Obtain the IODispatchQueue for a given name on the IOService.
174 * @param name Name for the queue.
175 * @param queue Returned, retained queue or NULL. The caller should release this queue.
176 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
177 */
178 virtual kern_return_t
179 CopyDispatchQueue(
180 const IODispatchQueueName name,
181 IODispatchQueue ** queue) override;
182
183 /*!
184 * @brief Create the default IODispatchQueue for an IOService. IOService::init()
185 * calls this to create its default queue.
186 * @param queue Returned, retained queue or NULL.
187 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
188 */
189 virtual kern_return_t
190 CreateDefaultDispatchQueue(
191 IODispatchQueue ** queue) LOCAL;
192
193 /*!
194 * @brief Obtain the IOKit registry properties for the IOService.
195 * @param properties Returned, retained dictionary of properties or NULL. The caller should release this dictionary.
196 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
197 */
198 virtual kern_return_t
199 CopyProperties(
200 OSDictionary ** properties);
201
202 /*!
203 * @brief Obtain the an IOKit registry properties from the service or one of its parents.
204 * @param name Name of the property as a c-string.
205 * @param plane Name of the registry plane to be searched, if the option kIOServiceSearchPropertyParents
206 * is used.
207 * @param options Pass kIOServiceSearchPropertyParents to search for the property in the IOService and all
208 * its parents in the IOKit registry.
209 * @param property Returned, retained property object or NULL. The caller should release this property.
210 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
211 */
212 virtual kern_return_t
213 SearchProperty(
214 const IOPropertyName name,
215 const IORegistryPlaneName plane,
216 uint64_t options,
217 OSContainer ** property);
218
219 /*!
220 * @brief Send a dictionary of properties to an IOService.
221 * @discussion By default the method will fail. A DriverKit subclass or kernel class may implement this method.
222 * @param properties Dictionary of properties.
223 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
224 */
225 virtual kern_return_t
226 SetProperties(
227 OSDictionary * properties);
228
229 /*!
230 * @brief Add an IOService created by Create() to the power manangement tree.
231 * @discussion IOService objects created by matching on a provider are always added to the power management tree.
232 * Any IOService created with the Create() API is not, but may be added by calling this method.
233 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
234 */
235 virtual kern_return_t
236 JoinPMTree(void);
237
238 /*!
239 * @brief Notification of change in power state of a provider.
240 * @discussion DriverKit notifies of changes in power of a provider. The driver should make itself safe for
241 * the new state before passing the call to super.
242 * @param powerFlags The power capabilities of the new state. The values possible are:
243 * kIOServicePowerCapabilityOff the system will be entering sleep state
244 * kIOServicePowerCapabilityOn the device and system are fully powered
245 * kIOServicePowerCapabilityLow the device is in a reduced power state while the system is running
246 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
247 */
248 virtual kern_return_t
249 SetPowerState(
250 uint32_t powerFlags) LOCAL;
251
252 /*!
253 * @brief Allow provider to enter a low power state.
254 * @discussion A driver may allow a device to enter a lower power state.
255 * @param powerFlags The power capabilities of the new state. The values possible are:
256 * kIOServicePowerCapabilityLow the device is in a reduced power state while the system is running
257 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
258 */
259 virtual kern_return_t
260 ChangePowerState(
261 uint32_t powerFlags);
262
263 /*!
264 * @brief Request create a new user client for a client process.
265 * @discussion An application may request an IOUserClient be opened with the IOKit framework
266 * IOServiceOpen() call. The type parameter of that call is passed here. The driver should respond to
267 * the call by calling IOService::Create() with a plist entry describing the new user client object.
268 * @param type The type passed to IOServiceOpen().
269 * @param userClient The object created by IOService::Create()
270 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
271 */
272 virtual kern_return_t
273 NewUserClient(
274 uint32_t type,
275 IOUserClient ** userClient);
276
277 /*!
278 * @brief Request to create an IOService object from a plist property.
279 * @discussion An IOService interface or IOUserClient subclass may be created from a plist property of the driver.
280 * The plist should contain the following IOKit matching keys:
281 * IOClass - kernel class of IOUserUserClient
282 * IOUserClass - DriverKit class to be instantiated
283 * IOServiceDEXTEntitlements - Array of entitlements to be checked against a user client owning task
284 * @param provider The provider of the new object.
285 * @param propertiesKey The name of the properties dictionary in this IOService
286 * @param result The created object retained, to be released by the caller.
287 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
288 */
289 virtual kern_return_t
290 Create(
291 IOService * provider,
292 const IOPropertyName propertiesKey,
293 IOService ** result) LOCAL;
294
295 /*!
296 * @brief Start an IOService termination.
297 * @discussion An IOService object created with Create() may be removed by calling Terminate().
298 * The termination is asynchronous and will later call Stop() on the service.
299 * @param options No options are currently defined, pass zero.
300 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
301 */
302 virtual kern_return_t
303 Terminate(
304 uint64_t options);
305
306 /*!
307 * @brief Obtain supportable properties describing the provider chain.
308 * @discussion Obtain supportable properties describing the provider chain. This will be a subset of registry
309 * properties the OS considers supportable.
310 * The array is ordered with a dictionary of properties for each entry in the provider chain from this
311 * service towards the root.
312 * @param propertyKeys If only certain property values are need, they may be passed in this array.
313 * @param properties Returned, retained array of dictionaries of properties or NULL. The caller should release
314 * this array.
315 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
316 */
317 virtual kern_return_t
318 CopyProviderProperties(
319 OSArray * propertyKeys,
320 OSArray ** properties);
321
322 /*!
323 * @brief Reduce power saving modes in the system in order to provide decreased latency
324 * to hardware DMA requests.
325 * @discussion When the system enters lower power states DMA access to memory may be affected.
326 * The best way by far to handle this is to change how you schedule your time-critical DMA operations in
327 * your driver such that an occasional delay will not affect the proper functioning of your device.
328 * However, if this is not possible, your driver can inform power management when a time-critical transfer
329 * begins and ends so that the system will not enter the lowest power states during that time. To do this,
330 * pass a value to requireMaxBusStall that informs power management of the maximum memory access latency in
331 * nanoseconds that can be tolerated by the driver. This value is hardware dependent and is related to the
332 * amount of buffering available in the hardware.
333 * Supported values are given by the kIOMaxBusStall* enum in IOTypes.h
334 * Pass the largest value possible that works for your device. This will minimize power
335 * consumption and maximize battery life by still allowing some level of CPU power management.
336 * @param maxBusStall A value from the kIOMaxBusStall* enum in IOTypes.h
337 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
338 */
339 virtual kern_return_t
340 RequireMaxBusStall(
341 uint64_t maxBusStall);
342
343 /*! @function AdjustBusy
344 * @discussion Adjust the busy state of this service by applying a delta to the current busy state.
345 * Adjusting the busy state of a service to or from zero will change the provider's busy state by one, in the same direction.
346 * @param delta The delta value to apply to the busy state.
347 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
348 */
349 virtual kern_return_t
350 AdjustBusy(int32_t delta);
351
352 /*! @function GetBusyState
353 * @discussion Get the busy state of this service.
354 * @param busyState The returned busy state.
355 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
356 */
357 virtual kern_return_t
358 GetBusyState(uint32_t *busyState);
359
360 /*!
361 * @brief Post an event to CoreAnalytics.
362 * @discussion Post an event to CoreAnalytics. See the CoreAnalytics documentation for
363 * details.
364 * @param options No options currently defined pass zero.
365 * @param eventName See the CoreAnalytics documentation for details.
366 * @param eventPayload See the CoreAnalytics documentation for details.
367 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
368 */
369 virtual kern_return_t
370 CoreAnalyticsSendEvent(
371 uint64_t options,
372 OSString * eventName,
373 OSDictionary * eventPayload);
374
375 /*! @function IOCreatePropertyMatchingDictionary
376 * @abstract Construct a matching dictionary for property matching.
377 */
378 static OSDictionary *
379 CreatePropertyMatchingDictionary(const char * key, OSObjectPtr value, OSDictionary * matching) LOCALONLY;
380
381 /*! @function IOCreatePropertyMatchingDictionary
382 * @abstract Construct a matching dictionary for property matching.
383 */
384 static OSDictionary *
385 CreatePropertyMatchingDictionary(const char * key, const char * stringValue, OSDictionary * matching) LOCALONLY;
386
387 /*! @function IOCreateKernelClassMatchingDictionary
388 * @abstract Construct a matching dictionary for kernel class matching.
389 */
390 static OSDictionary *
391 CreateKernelClassMatchingDictionary(OSString * className, OSDictionary * matching) LOCALONLY;
392
393 /*! @function IOCreateKernelClassMatchingDictionary
394 * @abstract Construct a matching dictionary for kernel class matching.
395 */
396 static OSDictionary *
397 CreateKernelClassMatchingDictionary(const char * className, OSDictionary * matching) LOCALONLY;
398
399 /*! @function IOCreateUserClassMatchingDictionary
400 * @abstract Construct a matching dictionary for user class matching.
401 */
402 static OSDictionary *
403 CreateUserClassMatchingDictionary(OSString * className, OSDictionary * matching) LOCALONLY;
404
405 /*! @function IOCreateUserClassMatchingDictionary
406 * @abstract Construct a matching dictionary for user class matching.
407 */
408 static OSDictionary *
409 CreateUserClassMatchingDictionary(const char * className, OSDictionary * matching) LOCALONLY;
410
411 /*! @function IOCreateNameMatchingDictionary
412 * @abstract Construct a matching dictionary for IOService name matching.
413 */
414 static OSDictionary *
415 CreateNameMatchingDictionary(OSString * serviceName, OSDictionary * matching) LOCALONLY;
416
417 /*! @function IOCreateNameMatchingDictionary
418 * @abstract Construct a matching dictionary for IOService name matching.
419 */
420 static OSDictionary *
421 CreateNameMatchingDictionary(const char * serviceName, OSDictionary * matching) LOCALONLY;
422
423 /*! @function UpdateReport
424 * @abstract update an IOReporting subscription by reading out channel data.
425 */
426 virtual IOReturn UpdateReport(OSData *channels, uint32_t action,
427 uint32_t *outElementCount,
428 uint64_t offset, uint64_t capacity,
429 IOMemoryDescriptor *buffer);
430
431 /*! @function ConfigureReport
432 * @abstract Configure an IOReporting subscription
433 * @discussion outCount is counting channels for enable,disable. It is counting
434 * elements for getDimensions
435 */
436 virtual IOReturn ConfigureReport(OSData *channels, uint32_t action, uint32_t *outCount);
437
438 /*! @function SetLegend
439 * @abstract set IORLegend and IORLegendPublic ioreg properties on this service.
440 * @discussion For use by DriverKit userspace services, since they can't set
441 * registry properties directly.
442 */
443 virtual IOReturn SetLegend(OSArray *legend, bool is_public);
444
445 /*!
446 * @brief Get the IORegistryEntry name.
447 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
448 */
449 virtual kern_return_t
450 CopyName(OSString ** name);
451
452 /*! @function StringFromReturn
453 * @abstract Get a string description for an IOReturn value.
454 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
455 */
456 virtual kern_return_t
457 StringFromReturn(
458 IOReturn retval,
459 OSString ** str);
460
461 virtual kern_return_t
462 _ClaimSystemWakeEvent(
463 IOService * device,
464 uint64_t flags,
465 const IOPropertyName reason,
466 OSContainer * details);
467
468#if PRIVATE_WIFI_ONLY
469 /*!
470 * @brief Optionally supported external method to set properties in this service.
471 * @param properties The properties to set.
472 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
473 */
474 virtual kern_return_t
475 UserSetProperties(OSContainer * properties) LOCAL;
476
477 /*!
478 * @brief Send the kIOMessageServicePropertyChange message
479 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
480 */
481 virtual kern_return_t
482 SendIOMessageServicePropertyChange();
483
484 const char *
485 StringFromReturn(
486 IOReturn retval) LOCALONLY;
487#endif /* PRIVATE_WIFI_ONLY */
488
489 /*! @function RemoveProperty
490 * @abstract Remove a property from the IOService.
491 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
492 */
493 virtual kern_return_t
494 RemoveProperty(OSString * propertyName);
495
496 /*! @function GetProvider
497 * @abstract Get the provider of this IOService.
498 * @discussion The DriverKit runtime caches the provider passed to IOService::Start(IOService * provider).
499 * This method returns the cached object.
500 */
501 IOService *
502 GetProvider() const LOCALONLY;
503
504 /*!
505 * @function CopySystemStateNotificationService
506 * @abstract Obtain the system state notification service.
507 * @param service Return IOService object with +1 retain count, to be released
508 * by the caller.
509 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
510 */
511 virtual kern_return_t
512 CopySystemStateNotificationService(IOService ** service);
513
514 /*!
515 * @function StateNotificationItemCreate
516 * @abstract Create a state notification item.
517 * @param itemName name of the item.
518 * @param schema dictionary describing behaviors for the item. Keys are defined in
519 * IOKitKeys.h kIOStateNotification*
520 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
521 */
522 virtual kern_return_t
523 StateNotificationItemCreate(OSString * itemName, OSDictionary * schema);
524
525 /*!
526 * @function StateNotificationItemSet
527 * @abstract Set the value of a state notification item.
528 * @param itemName name of the item.
529 * @param value dictionary value for the item, item creator to define.
530 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
531 */
532 virtual kern_return_t
533 StateNotificationItemSet(OSString * itemName, OSDictionary * value);
534
535 /*!
536 * @function StateNotificationItemCopy
537 * @abstract Set the value of a state notification item.
538 * @param itemName name of the item.
539 * @param value dictionary value for the item, item creator to define.
540 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
541 */
542 virtual kern_return_t
543 StateNotificationItemCopy(OSString * itemName, OSDictionary ** value);
544
545private:
546 virtual void
547 Stop_async(
548 IOService * provider) LOCAL;
549
550 virtual kern_return_t
551 _NewUserClient(
552 uint32_t type,
553 OSDictionary * entitlements,
554 IOUserClient ** userClient) LOCAL;
555};
556
557#undef KERNEL
558#else /* __DOCUMENTATION__ */
559
560/* generated class IOService IOService.iig:72-551 */
561
562#define IOService_Start_ID 0xab6f76dde6d693f2ULL
563#define IOService_Stop_ID 0x98e715041c459fa5ULL
564#define IOService_ClientCrashed_ID 0xf608d8d479c824a3ULL
565#define IOService_GetRegistryEntryID_ID 0x8a6f522f3894a0d7ULL
566#define IOService_SetName_ID 0xff378dd57615eb9fULL
567#define IOService_RegisterService_ID 0xe9722c2bb1347c28ULL
568#define IOService_CreateDefaultDispatchQueue_ID 0x805bb452f0b44ef7ULL
569#define IOService_CopyProperties_ID 0x833ec8f92f8b5362ULL
570#define IOService_SearchProperty_ID 0xad751cdb94c8dcc8ULL
571#define IOService_SetProperties_ID 0xd8a753ea156f9162ULL
572#define IOService_JoinPMTree_ID 0xf26c46526735efffULL
573#define IOService_SetPowerState_ID 0xd200fde7d57ecca6ULL
574#define IOService_ChangePowerState_ID 0xdb75cfc3395484a0ULL
575#define IOService_NewUserClient_ID 0xf669efffcb89ed9cULL
576#define IOService_Create_ID 0xe1a46dbd68bbe09cULL
577#define IOService_Terminate_ID 0xf7a595d9927810c8ULL
578#define IOService_CopyProviderProperties_ID 0xc2a554959002c8e7ULL
579#define IOService_RequireMaxBusStall_ID 0xc21228652ff536afULL
580#define IOService_AdjustBusy_ID 0xde9f5ab8cc9758ebULL
581#define IOService_GetBusyState_ID 0xf5e47b685861dee5ULL
582#define IOService_CoreAnalyticsSendEvent_ID 0xedf64411b90d31caULL
583#define IOService_UpdateReport_ID 0x8509eed786c7ff1aULL
584#define IOService_ConfigureReport_ID 0x85d9def59e3f02beULL
585#define IOService_SetLegend_ID 0xa32ee5222548afa2ULL
586#define IOService_CopyName_ID 0xfe0617febc5b2cc4ULL
587#define IOService_StringFromReturn_ID 0xf62cec3df59db769ULL
588#define IOService__ClaimSystemWakeEvent_ID 0x845c18dfe6f75305ULL
589#define IOService_UserSetProperties_ID 0xad8461d6bb5e656dULL
590#define IOService_SendIOMessageServicePropertyChange_ID 0xf26f1c63c935e672ULL
591#define IOService_RemoveProperty_ID 0xdadeb06419d321b0ULL
592#define IOService_CopySystemStateNotificationService_ID 0x9165d1fce9b2ca5aULL
593#define IOService_StateNotificationItemCreate_ID 0xb35947bdab354e9eULL
594#define IOService_StateNotificationItemSet_ID 0xb318c8fa26b5b891ULL
595#define IOService_StateNotificationItemCopy_ID 0xad2e6404fde4b615ULL
596#define IOService_Stop_async_ID 0xa8c93137712a16a2ULL
597#define IOService__NewUserClient_ID 0x80b22dd60ee3abb6ULL
598
599#define IOService_Start_Args \
600 IOService * provider
601
602#define IOService_Stop_Args \
603 IOService * provider
604
605#define IOService_ClientCrashed_Args \
606 IOService * client, \
607 uint64_t options
608
609#define IOService_GetRegistryEntryID_Args \
610 uint64_t * registryEntryID
611
612#define IOService_SetName_Args \
613 const char * name
614
615#define IOService_RegisterService_Args \
616
617
618#define IOService_SetDispatchQueue_Args \
619 const char * name, \
620 IODispatchQueue * queue
621
622#define IOService_CopyDispatchQueue_Args \
623 const char * name, \
624 IODispatchQueue ** queue
625
626#define IOService_CreateDefaultDispatchQueue_Args \
627 IODispatchQueue ** queue
628
629#define IOService_CopyProperties_Args \
630 OSDictionary ** properties
631
632#define IOService_SearchProperty_Args \
633 const char * name, \
634 const char * plane, \
635 uint64_t options, \
636 OSContainer ** property
637
638#define IOService_SetProperties_Args \
639 OSDictionary * properties
640
641#define IOService_JoinPMTree_Args \
642
643
644#define IOService_SetPowerState_Args \
645 uint32_t powerFlags
646
647#define IOService_ChangePowerState_Args \
648 uint32_t powerFlags
649
650#define IOService_NewUserClient_Args \
651 uint32_t type, \
652 IOUserClient ** userClient
653
654#define IOService_Create_Args \
655 IOService * provider, \
656 const char * propertiesKey, \
657 IOService ** result
658
659#define IOService_Terminate_Args \
660 uint64_t options
661
662#define IOService_CopyProviderProperties_Args \
663 OSArray * propertyKeys, \
664 OSArray ** properties
665
666#define IOService_RequireMaxBusStall_Args \
667 uint64_t maxBusStall
668
669#define IOService_AdjustBusy_Args \
670 int32_t delta
671
672#define IOService_GetBusyState_Args \
673 uint32_t * busyState
674
675#define IOService_CoreAnalyticsSendEvent_Args \
676 uint64_t options, \
677 OSString * eventName, \
678 OSDictionary * eventPayload
679
680#define IOService_UpdateReport_Args \
681 OSData * channels, \
682 uint32_t action, \
683 uint32_t * outElementCount, \
684 uint64_t offset, \
685 uint64_t capacity, \
686 IOMemoryDescriptor * buffer
687
688#define IOService_ConfigureReport_Args \
689 OSData * channels, \
690 uint32_t action, \
691 uint32_t * outCount
692
693#define IOService_SetLegend_Args \
694 OSArray * legend, \
695 bool is_public
696
697#define IOService_CopyName_Args \
698 OSString ** name
699
700#define IOService_StringFromReturn_Args \
701 IOReturn retval, \
702 OSString ** str
703
704#define IOService__ClaimSystemWakeEvent_Args \
705 IOService * device, \
706 uint64_t flags, \
707 const char * reason, \
708 OSContainer * details
709
710#define IOService_UserSetProperties_Args \
711 OSContainer * properties
712
713#define IOService_SendIOMessageServicePropertyChange_Args \
714
715
716#define IOService_RemoveProperty_Args \
717 OSString * propertyName
718
719#define IOService_CopySystemStateNotificationService_Args \
720 IOService ** service
721
722#define IOService_StateNotificationItemCreate_Args \
723 OSString * itemName, \
724 OSDictionary * schema
725
726#define IOService_StateNotificationItemSet_Args \
727 OSString * itemName, \
728 OSDictionary * value
729
730#define IOService_StateNotificationItemCopy_Args \
731 OSString * itemName, \
732 OSDictionary ** value
733
734#define IOService_Stop_async_Args \
735 IOService * provider
736
737#define IOService__NewUserClient_Args \
738 uint32_t type, \
739 OSDictionary * entitlements, \
740 IOUserClient ** userClient
741
742#define IOService_Methods \
743\
744public:\
745\
746 virtual kern_return_t\
747 Dispatch(const IORPC rpc) APPLE_KEXT_OVERRIDE;\
748\
749 static kern_return_t\
750 _Dispatch(IOService * self, const IORPC rpc);\
751\
752 kern_return_t\
753 Start(\
754 IOService * provider,\
755 OSDispatchMethod supermethod = NULL);\
756\
757 kern_return_t\
758 Stop(\
759 IOService * provider,\
760 OSDispatchMethod supermethod = NULL);\
761\
762 kern_return_t\
763 ClientCrashed(\
764 IOService * client,\
765 uint64_t options,\
766 OSDispatchMethod supermethod = NULL);\
767\
768 kern_return_t\
769 GetRegistryEntryID(\
770 uint64_t * registryEntryID,\
771 OSDispatchMethod supermethod = NULL);\
772\
773 kern_return_t\
774 SetName(\
775 const char * name,\
776 OSDispatchMethod supermethod = NULL);\
777\
778 kern_return_t\
779 RegisterService(\
780 OSDispatchMethod supermethod = NULL);\
781\
782 kern_return_t\
783 CreateDefaultDispatchQueue(\
784 IODispatchQueue ** queue,\
785 OSDispatchMethod supermethod = NULL);\
786\
787 kern_return_t\
788 CopyProperties(\
789 OSDictionary ** properties,\
790 OSDispatchMethod supermethod = NULL);\
791\
792 kern_return_t\
793 SearchProperty(\
794 const char * name,\
795 const char * plane,\
796 uint64_t options,\
797 OSContainer ** property,\
798 OSDispatchMethod supermethod = NULL);\
799\
800 kern_return_t\
801 SetProperties(\
802 OSDictionary * properties,\
803 OSDispatchMethod supermethod = NULL);\
804\
805 kern_return_t\
806 JoinPMTree(\
807 OSDispatchMethod supermethod = NULL);\
808\
809 kern_return_t\
810 SetPowerState(\
811 uint32_t powerFlags,\
812 OSDispatchMethod supermethod = NULL);\
813\
814 kern_return_t\
815 ChangePowerState(\
816 uint32_t powerFlags,\
817 OSDispatchMethod supermethod = NULL);\
818\
819 kern_return_t\
820 NewUserClient(\
821 uint32_t type,\
822 IOUserClient ** userClient,\
823 OSDispatchMethod supermethod = NULL);\
824\
825 kern_return_t\
826 Create(\
827 IOService * provider,\
828 const char * propertiesKey,\
829 IOService ** result,\
830 OSDispatchMethod supermethod = NULL);\
831\
832 kern_return_t\
833 Terminate(\
834 uint64_t options,\
835 OSDispatchMethod supermethod = NULL);\
836\
837 kern_return_t\
838 CopyProviderProperties(\
839 OSArray * propertyKeys,\
840 OSArray ** properties,\
841 OSDispatchMethod supermethod = NULL);\
842\
843 kern_return_t\
844 RequireMaxBusStall(\
845 uint64_t maxBusStall,\
846 OSDispatchMethod supermethod = NULL);\
847\
848 kern_return_t\
849 AdjustBusy(\
850 int32_t delta,\
851 OSDispatchMethod supermethod = NULL);\
852\
853 kern_return_t\
854 GetBusyState(\
855 uint32_t * busyState,\
856 OSDispatchMethod supermethod = NULL);\
857\
858 kern_return_t\
859 CoreAnalyticsSendEvent(\
860 uint64_t options,\
861 OSString * eventName,\
862 OSDictionary * eventPayload,\
863 OSDispatchMethod supermethod = NULL);\
864\
865 static OSDictionary *\
866 CreatePropertyMatchingDictionary(\
867 const char * key,\
868 OSObjectPtr value,\
869 OSDictionary * matching);\
870\
871 static OSDictionary *\
872 CreatePropertyMatchingDictionary(\
873 const char * key,\
874 const char * stringValue,\
875 OSDictionary * matching);\
876\
877 static OSDictionary *\
878 CreateKernelClassMatchingDictionary(\
879 OSString * className,\
880 OSDictionary * matching);\
881\
882 static OSDictionary *\
883 CreateKernelClassMatchingDictionary(\
884 const char * className,\
885 OSDictionary * matching);\
886\
887 static OSDictionary *\
888 CreateUserClassMatchingDictionary(\
889 OSString * className,\
890 OSDictionary * matching);\
891\
892 static OSDictionary *\
893 CreateUserClassMatchingDictionary(\
894 const char * className,\
895 OSDictionary * matching);\
896\
897 static OSDictionary *\
898 CreateNameMatchingDictionary(\
899 OSString * serviceName,\
900 OSDictionary * matching);\
901\
902 static OSDictionary *\
903 CreateNameMatchingDictionary(\
904 const char * serviceName,\
905 OSDictionary * matching);\
906\
907 IOReturn\
908 UpdateReport(\
909 OSData * channels,\
910 uint32_t action,\
911 uint32_t * outElementCount,\
912 uint64_t offset,\
913 uint64_t capacity,\
914 IOMemoryDescriptor * buffer,\
915 OSDispatchMethod supermethod = NULL);\
916\
917 IOReturn\
918 ConfigureReport(\
919 OSData * channels,\
920 uint32_t action,\
921 uint32_t * outCount,\
922 OSDispatchMethod supermethod = NULL);\
923\
924 IOReturn\
925 SetLegend(\
926 OSArray * legend,\
927 bool is_public,\
928 OSDispatchMethod supermethod = NULL);\
929\
930 kern_return_t\
931 CopyName(\
932 OSString ** name,\
933 OSDispatchMethod supermethod = NULL);\
934\
935 kern_return_t\
936 StringFromReturn(\
937 IOReturn retval,\
938 OSString ** str,\
939 OSDispatchMethod supermethod = NULL);\
940\
941 kern_return_t\
942 _ClaimSystemWakeEvent(\
943 IOService * device,\
944 uint64_t flags,\
945 const char * reason,\
946 OSContainer * details,\
947 OSDispatchMethod supermethod = NULL);\
948\
949 kern_return_t\
950 UserSetProperties(\
951 OSContainer * properties,\
952 OSDispatchMethod supermethod = NULL);\
953\
954 kern_return_t\
955 SendIOMessageServicePropertyChange(\
956 OSDispatchMethod supermethod = NULL);\
957\
958 const char *\
959 StringFromReturn(\
960 IOReturn retval);\
961\
962 kern_return_t\
963 RemoveProperty(\
964 OSString * propertyName,\
965 OSDispatchMethod supermethod = NULL);\
966\
967 IOService *\
968 GetProvider(\
969) const;\
970\
971 kern_return_t\
972 CopySystemStateNotificationService(\
973 IOService ** service,\
974 OSDispatchMethod supermethod = NULL);\
975\
976 kern_return_t\
977 StateNotificationItemCreate(\
978 OSString * itemName,\
979 OSDictionary * schema,\
980 OSDispatchMethod supermethod = NULL);\
981\
982 kern_return_t\
983 StateNotificationItemSet(\
984 OSString * itemName,\
985 OSDictionary * value,\
986 OSDispatchMethod supermethod = NULL);\
987\
988 kern_return_t\
989 StateNotificationItemCopy(\
990 OSString * itemName,\
991 OSDictionary ** value,\
992 OSDispatchMethod supermethod = NULL);\
993\
994 void\
995 Stop_async(\
996 IOService * provider,\
997 OSDispatchMethod supermethod = NULL);\
998\
999 kern_return_t\
1000 _NewUserClient(\
1001 uint32_t type,\
1002 OSDictionary * entitlements,\
1003 IOUserClient ** userClient,\
1004 OSDispatchMethod supermethod = NULL);\
1005\
1006\
1007protected:\
1008 /* _Impl methods */\
1009\
1010 kern_return_t\
1011 Start_Impl(IOService_Start_Args);\
1012\
1013 kern_return_t\
1014 Stop_Impl(IOService_Stop_Args);\
1015\
1016 kern_return_t\
1017 GetRegistryEntryID_Impl(IOService_GetRegistryEntryID_Args);\
1018\
1019 kern_return_t\
1020 SetDispatchQueue_Impl(OSObject_SetDispatchQueue_Args);\
1021\
1022 kern_return_t\
1023 CreateDefaultDispatchQueue_Impl(IOService_CreateDefaultDispatchQueue_Args);\
1024\
1025 kern_return_t\
1026 SetPowerState_Impl(IOService_SetPowerState_Args);\
1027\
1028 kern_return_t\
1029 Create_Impl(IOService_Create_Args);\
1030\
1031 kern_return_t\
1032 UserSetProperties_Impl(IOService_UserSetProperties_Args);\
1033\
1034 void\
1035 Stop_async_Impl(IOService_Stop_async_Args);\
1036\
1037 kern_return_t\
1038 _NewUserClient_Impl(IOService__NewUserClient_Args);\
1039\
1040\
1041public:\
1042 /* _Invoke methods */\
1043\
1044 typedef kern_return_t (*Start_Handler)(OSMetaClassBase * target, IOService_Start_Args);\
1045 static kern_return_t\
1046 Start_Invoke(const IORPC rpc,\
1047 OSMetaClassBase * target,\
1048 Start_Handler func);\
1049\
1050 typedef kern_return_t (*Stop_Handler)(OSMetaClassBase * target, IOService_Stop_Args);\
1051 static kern_return_t\
1052 Stop_Invoke(const IORPC rpc,\
1053 OSMetaClassBase * target,\
1054 Stop_Handler func);\
1055\
1056 typedef kern_return_t (*ClientCrashed_Handler)(OSMetaClassBase * target, IOService_ClientCrashed_Args);\
1057 static kern_return_t\
1058 ClientCrashed_Invoke(const IORPC rpc,\
1059 OSMetaClassBase * target,\
1060 ClientCrashed_Handler func);\
1061\
1062 typedef kern_return_t (*GetRegistryEntryID_Handler)(OSMetaClassBase * target, IOService_GetRegistryEntryID_Args);\
1063 static kern_return_t\
1064 GetRegistryEntryID_Invoke(const IORPC rpc,\
1065 OSMetaClassBase * target,\
1066 GetRegistryEntryID_Handler func);\
1067\
1068 typedef kern_return_t (*SetName_Handler)(OSMetaClassBase * target, IOService_SetName_Args);\
1069 static kern_return_t\
1070 SetName_Invoke(const IORPC rpc,\
1071 OSMetaClassBase * target,\
1072 SetName_Handler func);\
1073\
1074 typedef kern_return_t (*RegisterService_Handler)(OSMetaClassBase * targetIOService_RegisterService_Args);\
1075 static kern_return_t\
1076 RegisterService_Invoke(const IORPC rpc,\
1077 OSMetaClassBase * target,\
1078 RegisterService_Handler func);\
1079\
1080 typedef kern_return_t (*CreateDefaultDispatchQueue_Handler)(OSMetaClassBase * target, IOService_CreateDefaultDispatchQueue_Args);\
1081 static kern_return_t\
1082 CreateDefaultDispatchQueue_Invoke(const IORPC rpc,\
1083 OSMetaClassBase * target,\
1084 CreateDefaultDispatchQueue_Handler func);\
1085\
1086 typedef kern_return_t (*CopyProperties_Handler)(OSMetaClassBase * target, IOService_CopyProperties_Args);\
1087 static kern_return_t\
1088 CopyProperties_Invoke(const IORPC rpc,\
1089 OSMetaClassBase * target,\
1090 CopyProperties_Handler func);\
1091\
1092 typedef kern_return_t (*SearchProperty_Handler)(OSMetaClassBase * target, IOService_SearchProperty_Args);\
1093 static kern_return_t\
1094 SearchProperty_Invoke(const IORPC rpc,\
1095 OSMetaClassBase * target,\
1096 SearchProperty_Handler func);\
1097\
1098 typedef kern_return_t (*SetProperties_Handler)(OSMetaClassBase * target, IOService_SetProperties_Args);\
1099 static kern_return_t\
1100 SetProperties_Invoke(const IORPC rpc,\
1101 OSMetaClassBase * target,\
1102 SetProperties_Handler func);\
1103\
1104 typedef kern_return_t (*JoinPMTree_Handler)(OSMetaClassBase * targetIOService_JoinPMTree_Args);\
1105 static kern_return_t\
1106 JoinPMTree_Invoke(const IORPC rpc,\
1107 OSMetaClassBase * target,\
1108 JoinPMTree_Handler func);\
1109\
1110 typedef kern_return_t (*SetPowerState_Handler)(OSMetaClassBase * target, IOService_SetPowerState_Args);\
1111 static kern_return_t\
1112 SetPowerState_Invoke(const IORPC rpc,\
1113 OSMetaClassBase * target,\
1114 SetPowerState_Handler func);\
1115\
1116 typedef kern_return_t (*ChangePowerState_Handler)(OSMetaClassBase * target, IOService_ChangePowerState_Args);\
1117 static kern_return_t\
1118 ChangePowerState_Invoke(const IORPC rpc,\
1119 OSMetaClassBase * target,\
1120 ChangePowerState_Handler func);\
1121\
1122 typedef kern_return_t (*NewUserClient_Handler)(OSMetaClassBase * target, IOService_NewUserClient_Args);\
1123 static kern_return_t\
1124 NewUserClient_Invoke(const IORPC rpc,\
1125 OSMetaClassBase * target,\
1126 NewUserClient_Handler func);\
1127\
1128 typedef kern_return_t (*Create_Handler)(OSMetaClassBase * target, IOService_Create_Args);\
1129 static kern_return_t\
1130 Create_Invoke(const IORPC rpc,\
1131 OSMetaClassBase * target,\
1132 Create_Handler func);\
1133\
1134 typedef kern_return_t (*Terminate_Handler)(OSMetaClassBase * target, IOService_Terminate_Args);\
1135 static kern_return_t\
1136 Terminate_Invoke(const IORPC rpc,\
1137 OSMetaClassBase * target,\
1138 Terminate_Handler func);\
1139\
1140 typedef kern_return_t (*CopyProviderProperties_Handler)(OSMetaClassBase * target, IOService_CopyProviderProperties_Args);\
1141 static kern_return_t\
1142 CopyProviderProperties_Invoke(const IORPC rpc,\
1143 OSMetaClassBase * target,\
1144 CopyProviderProperties_Handler func);\
1145\
1146 typedef kern_return_t (*RequireMaxBusStall_Handler)(OSMetaClassBase * target, IOService_RequireMaxBusStall_Args);\
1147 static kern_return_t\
1148 RequireMaxBusStall_Invoke(const IORPC rpc,\
1149 OSMetaClassBase * target,\
1150 RequireMaxBusStall_Handler func);\
1151\
1152 typedef kern_return_t (*AdjustBusy_Handler)(OSMetaClassBase * target, IOService_AdjustBusy_Args);\
1153 static kern_return_t\
1154 AdjustBusy_Invoke(const IORPC rpc,\
1155 OSMetaClassBase * target,\
1156 AdjustBusy_Handler func);\
1157\
1158 typedef kern_return_t (*GetBusyState_Handler)(OSMetaClassBase * target, IOService_GetBusyState_Args);\
1159 static kern_return_t\
1160 GetBusyState_Invoke(const IORPC rpc,\
1161 OSMetaClassBase * target,\
1162 GetBusyState_Handler func);\
1163\
1164 typedef kern_return_t (*CoreAnalyticsSendEvent_Handler)(OSMetaClassBase * target, IOService_CoreAnalyticsSendEvent_Args);\
1165 static kern_return_t\
1166 CoreAnalyticsSendEvent_Invoke(const IORPC rpc,\
1167 OSMetaClassBase * target,\
1168 CoreAnalyticsSendEvent_Handler func);\
1169\
1170 typedef IOReturn (*UpdateReport_Handler)(OSMetaClassBase * target, IOService_UpdateReport_Args);\
1171 static kern_return_t\
1172 UpdateReport_Invoke(const IORPC rpc,\
1173 OSMetaClassBase * target,\
1174 UpdateReport_Handler func);\
1175\
1176 typedef IOReturn (*ConfigureReport_Handler)(OSMetaClassBase * target, IOService_ConfigureReport_Args);\
1177 static kern_return_t\
1178 ConfigureReport_Invoke(const IORPC rpc,\
1179 OSMetaClassBase * target,\
1180 ConfigureReport_Handler func);\
1181\
1182 typedef IOReturn (*SetLegend_Handler)(OSMetaClassBase * target, IOService_SetLegend_Args);\
1183 static kern_return_t\
1184 SetLegend_Invoke(const IORPC rpc,\
1185 OSMetaClassBase * target,\
1186 SetLegend_Handler func);\
1187\
1188 typedef kern_return_t (*CopyName_Handler)(OSMetaClassBase * target, IOService_CopyName_Args);\
1189 static kern_return_t\
1190 CopyName_Invoke(const IORPC rpc,\
1191 OSMetaClassBase * target,\
1192 CopyName_Handler func);\
1193\
1194 typedef kern_return_t (*StringFromReturn_Handler)(OSMetaClassBase * target, IOService_StringFromReturn_Args);\
1195 static kern_return_t\
1196 StringFromReturn_Invoke(const IORPC rpc,\
1197 OSMetaClassBase * target,\
1198 StringFromReturn_Handler func);\
1199\
1200 typedef kern_return_t (*_ClaimSystemWakeEvent_Handler)(OSMetaClassBase * target, IOService__ClaimSystemWakeEvent_Args);\
1201 static kern_return_t\
1202 _ClaimSystemWakeEvent_Invoke(const IORPC rpc,\
1203 OSMetaClassBase * target,\
1204 _ClaimSystemWakeEvent_Handler func);\
1205\
1206 typedef kern_return_t (*UserSetProperties_Handler)(OSMetaClassBase * target, IOService_UserSetProperties_Args);\
1207 static kern_return_t\
1208 UserSetProperties_Invoke(const IORPC rpc,\
1209 OSMetaClassBase * target,\
1210 UserSetProperties_Handler func);\
1211\
1212 typedef kern_return_t (*SendIOMessageServicePropertyChange_Handler)(OSMetaClassBase * targetIOService_SendIOMessageServicePropertyChange_Args);\
1213 static kern_return_t\
1214 SendIOMessageServicePropertyChange_Invoke(const IORPC rpc,\
1215 OSMetaClassBase * target,\
1216 SendIOMessageServicePropertyChange_Handler func);\
1217\
1218 typedef kern_return_t (*RemoveProperty_Handler)(OSMetaClassBase * target, IOService_RemoveProperty_Args);\
1219 static kern_return_t\
1220 RemoveProperty_Invoke(const IORPC rpc,\
1221 OSMetaClassBase * target,\
1222 RemoveProperty_Handler func);\
1223\
1224 typedef kern_return_t (*CopySystemStateNotificationService_Handler)(OSMetaClassBase * target, IOService_CopySystemStateNotificationService_Args);\
1225 static kern_return_t\
1226 CopySystemStateNotificationService_Invoke(const IORPC rpc,\
1227 OSMetaClassBase * target,\
1228 CopySystemStateNotificationService_Handler func);\
1229\
1230 typedef kern_return_t (*StateNotificationItemCreate_Handler)(OSMetaClassBase * target, IOService_StateNotificationItemCreate_Args);\
1231 static kern_return_t\
1232 StateNotificationItemCreate_Invoke(const IORPC rpc,\
1233 OSMetaClassBase * target,\
1234 StateNotificationItemCreate_Handler func);\
1235\
1236 typedef kern_return_t (*StateNotificationItemSet_Handler)(OSMetaClassBase * target, IOService_StateNotificationItemSet_Args);\
1237 static kern_return_t\
1238 StateNotificationItemSet_Invoke(const IORPC rpc,\
1239 OSMetaClassBase * target,\
1240 StateNotificationItemSet_Handler func);\
1241\
1242 typedef kern_return_t (*StateNotificationItemCopy_Handler)(OSMetaClassBase * target, IOService_StateNotificationItemCopy_Args);\
1243 static kern_return_t\
1244 StateNotificationItemCopy_Invoke(const IORPC rpc,\
1245 OSMetaClassBase * target,\
1246 StateNotificationItemCopy_Handler func);\
1247\
1248 typedef void (*Stop_async_Handler)(OSMetaClassBase * target, IOService_Stop_async_Args);\
1249 static kern_return_t\
1250 Stop_async_Invoke(const IORPC rpc,\
1251 OSMetaClassBase * target,\
1252 Stop_async_Handler func);\
1253\
1254 typedef kern_return_t (*_NewUserClient_Handler)(OSMetaClassBase * target, IOService__NewUserClient_Args);\
1255 static kern_return_t\
1256 _NewUserClient_Invoke(const IORPC rpc,\
1257 OSMetaClassBase * target,\
1258 _NewUserClient_Handler func);\
1259\
1260
1261
1262#define IOService_KernelMethods \
1263\
1264protected:\
1265 /* _Impl methods */\
1266\
1267 kern_return_t\
1268 ClientCrashed_Impl(IOService_ClientCrashed_Args);\
1269\
1270 kern_return_t\
1271 SetName_Impl(IOService_SetName_Args);\
1272\
1273 kern_return_t\
1274 RegisterService_Impl(IOService_RegisterService_Args);\
1275\
1276 kern_return_t\
1277 CopyDispatchQueue_Impl(OSObject_CopyDispatchQueue_Args);\
1278\
1279 kern_return_t\
1280 CopyProperties_Impl(IOService_CopyProperties_Args);\
1281\
1282 kern_return_t\
1283 SearchProperty_Impl(IOService_SearchProperty_Args);\
1284\
1285 kern_return_t\
1286 SetProperties_Impl(IOService_SetProperties_Args);\
1287\
1288 kern_return_t\
1289 JoinPMTree_Impl(IOService_JoinPMTree_Args);\
1290\
1291 kern_return_t\
1292 ChangePowerState_Impl(IOService_ChangePowerState_Args);\
1293\
1294 kern_return_t\
1295 NewUserClient_Impl(IOService_NewUserClient_Args);\
1296\
1297 kern_return_t\
1298 Terminate_Impl(IOService_Terminate_Args);\
1299\
1300 kern_return_t\
1301 CopyProviderProperties_Impl(IOService_CopyProviderProperties_Args);\
1302\
1303 kern_return_t\
1304 RequireMaxBusStall_Impl(IOService_RequireMaxBusStall_Args);\
1305\
1306 kern_return_t\
1307 AdjustBusy_Impl(IOService_AdjustBusy_Args);\
1308\
1309 kern_return_t\
1310 GetBusyState_Impl(IOService_GetBusyState_Args);\
1311\
1312 kern_return_t\
1313 CoreAnalyticsSendEvent_Impl(IOService_CoreAnalyticsSendEvent_Args);\
1314\
1315 IOReturn\
1316 UpdateReport_Impl(IOService_UpdateReport_Args);\
1317\
1318 IOReturn\
1319 ConfigureReport_Impl(IOService_ConfigureReport_Args);\
1320\
1321 IOReturn\
1322 SetLegend_Impl(IOService_SetLegend_Args);\
1323\
1324 kern_return_t\
1325 CopyName_Impl(IOService_CopyName_Args);\
1326\
1327 kern_return_t\
1328 StringFromReturn_Impl(IOService_StringFromReturn_Args);\
1329\
1330 kern_return_t\
1331 _ClaimSystemWakeEvent_Impl(IOService__ClaimSystemWakeEvent_Args);\
1332\
1333 kern_return_t\
1334 SendIOMessageServicePropertyChange_Impl(IOService_SendIOMessageServicePropertyChange_Args);\
1335\
1336 kern_return_t\
1337 RemoveProperty_Impl(IOService_RemoveProperty_Args);\
1338\
1339 kern_return_t\
1340 CopySystemStateNotificationService_Impl(IOService_CopySystemStateNotificationService_Args);\
1341\
1342 kern_return_t\
1343 StateNotificationItemCreate_Impl(IOService_StateNotificationItemCreate_Args);\
1344\
1345 kern_return_t\
1346 StateNotificationItemSet_Impl(IOService_StateNotificationItemSet_Args);\
1347\
1348 kern_return_t\
1349 StateNotificationItemCopy_Impl(IOService_StateNotificationItemCopy_Args);\
1350\
1351
1352
1353#define IOService_VirtualMethods \
1354\
1355public:\
1356\
1357 virtual bool\
1358 init(\
1359) APPLE_KEXT_OVERRIDE;\
1360\
1361 virtual void\
1362 free(\
1363) APPLE_KEXT_OVERRIDE;\
1364\
1365
1366
1367#if !KERNEL
1368
1369extern OSMetaClass * gIOServiceMetaClass;
1370extern const OSClassLoadInformation IOService_Class;
1371
1372class IOServiceMetaClass : public OSMetaClass
1373{
1374public:
1375 virtual kern_return_t
1376 New(OSObject * instance) override;
1377 virtual kern_return_t
1378 Dispatch(const IORPC rpc) override;
1379};
1380
1381#endif /* !KERNEL */
1382
1383#if !KERNEL
1384
1385class IOServiceInterface : public OSInterface
1386{
1387public:
1388};
1389
1390struct IOService_IVars;
1391struct IOService_LocalIVars;
1392
1393class IOService : public OSObject, public IOServiceInterface
1394{
1395#if !KERNEL
1396 friend class IOServiceMetaClass;
1397#endif /* !KERNEL */
1398
1399#if !KERNEL
1400public:
1401#ifdef IOService_DECLARE_IVARS
1402IOService_DECLARE_IVARS
1403#else /* IOService_DECLARE_IVARS */
1404 union
1405 {
1406 IOService_IVars * ivars;
1407 IOService_LocalIVars * lvars;
1408 };
1409#endif /* IOService_DECLARE_IVARS */
1410#endif /* !KERNEL */
1411
1412#if !KERNEL
1413 static OSMetaClass *
1414 sGetMetaClass() { return gIOServiceMetaClass; };
1415#endif /* KERNEL */
1416
1417 using super = OSObject;
1418
1419#if !KERNEL
1420 IOService_Methods
1421 IOService_VirtualMethods
1422#endif /* !KERNEL */
1423
1424};
1425#endif /* !KERNEL */
1426
1427
1428#endif /* !__DOCUMENTATION__ */
1429
1430/* IOService.iig:553- */
1431
1432#endif /* ! _IOKIT_UIOSERVICE_H */
1433