1/* iig(DriverKit-286) generated from IOUserClient.iig */
2
3/* IOUserClient.iig:1-156 */
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/IOUserClient.h>
35#endif
36#endif
37
38#ifndef _IOKIT_UIOUSERCLIENT_H
39#define _IOKIT_UIOUSERCLIENT_H
40
41#include <DriverKit/OSAction.h> /* .iig include */
42#include <DriverKit/IOService.h> /* .iig include */
43#include <DriverKit/IOBufferMemoryDescriptor.h> /* .iig include */
44
45
46enum {
47 kIOUserClientScalarArrayCountMax = 16,
48};
49typedef uint64_t IOUserClientScalarArray[kIOUserClientScalarArrayCountMax];
50
51enum {
52 kIOUserClientAsyncReferenceCountMax = 16,
53};
54typedef uint64_t IOUserClientAsyncReferenceArray[kIOUserClientAsyncReferenceCountMax];
55
56enum {
57 kIOUserClientAsyncArgumentsCountMax = 16,
58};
59typedef uint64_t IOUserClientAsyncArgumentsArray[kIOUserClientAsyncArgumentsCountMax];
60
61// CopyClientMemoryForType options
62enum {
63 kIOUserClientMemoryReadOnly = 0x00000001,
64};
65
66#define kIOUserClientQueueNameExternalMethod "IOUserClientQueueExternalMethod"
67
68
69/*! @enum
70 * @abstract Constant to denote a variable length structure argument to IOUserClient.
71 * @constant kIOUserClientVariableStructureSize Use in the structures IOUserClientMethodDispatch to specify the size of the structure is variable.
72 */
73enum {
74 kIOUserClientVariableStructureSize = 0xffffffff
75};
76
77
78enum {
79#define IO_USER_CLIENT_METHOD_ARGUMENTS_CURRENT_VERSION 2
80 kIOUserClientMethodArgumentsCurrentVersion = IO_USER_CLIENT_METHOD_ARGUMENTS_CURRENT_VERSION
81};
82
83/*!
84 * @struct IOUserClientMethodArguments
85 * @brief Holds arguments from IOKit.framework IOConnectMethod calls.
86 * @discussion Any argument may be passed as NULL if not passed by the caller.
87 * @field selector Selector argument to IOConnectMethod.
88 * @field scalarInput Array of scalars from caller.
89 * @field scalarInputCount Count of valid scalars in scalarInput.
90 * @field structureInput OSData object containing structure input from IOConnectMethod.
91 * @field structureInputDescriptor IOMemoryDescriptor containing structure input from IOConnectMethod.
92 * This parameter is only set for large structures, and if set structureInput will be NULL.
93 * @field scalarOutput Array of scalars to return to the caller.
94 * @field scalarOutputCount Count of scalars to return to the caller in scalarOutput.
95 * @field structureOutput An OSData to be returned to the caller as structure output.
96 * This field should be set by the driver to an OSData object it created with
97 * the data to be returned, and the OSData instance will be released by the OS.
98 * It is an error for the driver to set this field if structureOutputDescriptor was passed in
99 * @field structureOutputDescriptor A IOMemoryDescriptor specified by the caller for structure output.
100 * @field structureOutputMaximumSize Maximum size of structure output specified by caller
101 * or kIOUserClientVariableStructureSize.
102 * @field completion For IOConnectAsyncMethod, an OSAction used to deliver async data to the caller.
103 * It is only retained during the invocation of ExternalMethod and should be retained if
104 * used beyond then.
105 */
106
107struct IOUserClientMethodArguments {
108 uint64_t version;
109 uint64_t selector;
110 OSAction * completion;
111 const uint64_t * scalarInput;
112 uint32_t scalarInputCount;
113 OSData * structureInput;
114 IOMemoryDescriptor * structureInputDescriptor;
115 uint64_t * scalarOutput;
116 uint32_t scalarOutputCount;
117 OSData * structureOutput;
118 IOMemoryDescriptor * structureOutputDescriptor;
119 uint64_t structureOutputMaximumSize;
120 uint64_t __reserved[30];
121};
122
123typedef kern_return_t (*IOUserClientMethodFunction)(
124 OSObject * target,
125 void * reference,
126 IOUserClientMethodArguments * arguments);
127
128/*!
129 * @struct IOUserClientMethodDispatch
130 * @brief Used to check fields in IOUserClientMethodArguments
131 * @field function to invoke after making the checks specified below. If NULL and all checks pass,
132 * kIOReturnNoCompletion will be returned for the caller to implement the method.
133 * @field checkCompletionExists
134 * if true completion field must be set,
135 * if false must be zero,
136 * if -1U don't care
137 * @field checkScalarInputCount
138 * if has value kIOUserClientVariableStructureSize don't care,
139 * otherwise must equal args->scalarInputCount
140 * @field checkStructureInputSize
141 * if has value kIOUserClientVariableStructureSize don't care,
142 * otherwise must equal length of structureInput or structureInputDescriptor
143 * @field checkScalarOutputCount
144 * if has value kIOUserClientVariableStructureSize don't care,
145 * otherwise must equal args->scalarOutputCount
146 * @field checkStructureOutputSize
147 * if has value kIOUserClientVariableStructureSize don't care,
148 * otherwise must equal length of structureOutputMaximumSize
149 */
150
151struct IOUserClientMethodDispatch {
152 IOUserClientMethodFunction function;
153 uint32_t checkCompletionExists;
154 uint32_t checkScalarInputCount;
155 uint32_t checkStructureInputSize;
156 uint32_t checkScalarOutputCount;
157 uint32_t checkStructureOutputSize;
158};
159
160/* source class IOUserClient IOUserClient.iig:157-300 */
161
162#if __DOCUMENTATION__
163#define KERNEL IIG_KERNEL
164
165/*!
166 * @class IOUserClient
167 *
168 * @abstract
169 * IOUserClient represents a connection opened by IOServiceOpen in the IOKit.framework.
170 *
171 * @discussion
172 * An application may open an IOUserClient by calling IOServiceOpen(). This results in a call
173 * to the IOService::NewUserClient API to create an instance representing the connection.
174 * and to receive untyped data via IOConnectMethod/IOConnectAsyncMethod.
175 * As an IOService subclass, IOUserClient receives the normal Start()/Stop() lifecyle calls.
176 *
177
178*/
179
180class KERNEL IOUserClient : public IOService
181{
182public:
183 virtual bool
184 init() override;
185
186 virtual void
187 free() override;
188
189 /*!
190 * @brief Receive arguments from IOKit.framework IOConnectMethod calls.
191 * @discussion IOConnectMethod calls from the owner of the connection come here.
192 * Any argument may be passed as NULL if not passed by the caller.
193 * The method runs on a queue set by IOService::SetDispatchQueuue()
194 * with the name kIOUserClientQueueNameExternalMethod, or the default
195 * queue for the IOUserClient object if one was not set.
196 * @param selector Selector argument to IOConnectMethod.
197 * @param arguments Structure describing all arguments being passed to IOConnectMethod.
198 * See the IOUserClientMethodArguments definition.
199 * @param dispatch NULL when called in the driver. The IOUserClient::ExternalMethod()
200 * implementation may be called with a non-NULL argument to check
201 * certain fields of the arguments structure before calling a target procedure
202 * specified by the dispatch structure 'function' field, and the
203 * 'target' and 'reference' parameters to this method.
204 * See the IOUserClientMethodDispatch definition.
205 * @param target Target for the dispatch function
206 * @param reference Reference constant for the dispatch function
207 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
208 */
209
210 virtual kern_return_t
211 ExternalMethod(
212 uint64_t selector,
213 IOUserClientMethodArguments * arguments,
214 const IOUserClientMethodDispatch * dispatch,
215 OSObject * target,
216 void * reference) LOCALONLY
217 QUEUENAME(IOUserClientQueueExternalMethod);
218
219
220 /*!
221 * @brief Send asynchronous arguments to a completion supplied by ExternalMethod().
222 * @discussion IOConnectAsyncMethod calls from the owner of the connection come will pass an OSAction instance.
223 * To deliver the asynchronous results the driver calls AsyncCompletion().
224 * @param action OSAction passed to IOExternalMethod().
225 * @param status An IOReturn status value to be sent.
226 * @param asyncData An array of scalar data to be sent.
227 * @param asyncDataCount Count of valid data in asyncData.
228 */
229 virtual void
230 AsyncCompletion(
231 OSAction * action TARGET,
232 IOReturn status,
233 const IOUserClientAsyncArgumentsArray asyncData,
234 uint32_t asyncDataCount) = 0;
235
236 /*!
237 * @brief Return an IOMemoryDescriptor to be mapped into the client task.
238 * @discussion IOConnectMapMemory()/UnmapMemory() will result in a call to this method to obtain
239 * an IOMemoryDescriptor instance for shared memory. For a given IOUserClient instance, calling
240 * CopyClientMemoryForType() with a given type, should return the same IOMemoryDescriptor instance.
241 * @param type Type parameter IOConnectMapMemory()/UnmapMemory().
242 * @param options Set kIOUserClientMemoryReadOnly for memory to be mapped read only in the client.
243 * @param memory An instance of IOMemoryDescriptor on success. One reference will be consumed by the caller
244 * of this method.
245 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
246 */
247 virtual kern_return_t
248 CopyClientMemoryForType(
249 uint64_t type,
250 uint64_t * options,
251 IOMemoryDescriptor ** memory) = 0;
252
253 /*!
254 * @brief Create a memory descriptor that describes a set of virtual ranges in
255 * the client task of the user client.
256 * @param memoryDescriptorCreateOptions
257 * kIOMemoryDirectionIn memory described will be writable
258 * kIOMemoryDirectionOut memory described will be readable
259 * @param segmentsCount Number of valid address ranges being passed
260 * in the segments array.
261 * @param segments Array of address ranges.
262 * @param memory Returned IOMemoryDescriptor object with +1 retain count.
263 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
264 */
265 virtual kern_return_t
266 CreateMemoryDescriptorFromClient(
267 uint64_t memoryDescriptorCreateOptions,
268 uint32_t segmentsCount,
269 const IOAddressSegment segments[32],
270 IOMemoryDescriptor ** memory) __attribute__((availability(driverkit,introduced=20.0)));
271
272 /*!
273 * @function CopyClientEntitlements
274 * @abstract Return owning task's entitlements dictionary.
275 * @param entitlements Dictionary of entitlements given to the owning task. To be released by caller.
276 * @return kIOReturnSuccess on success. See IOReturn.h for error codes.
277 */
278 virtual kern_return_t
279 CopyClientEntitlements(OSDictionary ** entitlements) LOCAL;
280
281
282private:
283 virtual kern_return_t
284 _ExternalMethod(
285 uint64_t selector,
286 const IOUserClientScalarArray scalarInput,
287 uint32_t scalarInputCount,
288 OSData * structureInput,
289 IOMemoryDescriptor * structureInputDescriptor,
290 IOUserClientScalarArray scalarOutput,
291 uint32_t * scalarOutputCount,
292 uint64_t structureOutputMaximumSize,
293 OSData ** structureOutput,
294 IOMemoryDescriptor * structureOutputDescriptor,
295 OSAction * completion TYPE(IOUserClient::AsyncCompletion)) LOCAL
296 QUEUENAME(IOUserClientQueueExternalMethod);
297
298 virtual void
299 KernelCompletion(
300 OSAction * action TARGET,
301 IOReturn status,
302 const IOUserClientAsyncArgumentsArray asyncData,
303 uint32_t asyncDataCount)
304 KERNEL
305 TYPE(IOUserClient::AsyncCompletion);
306};
307
308#undef KERNEL
309#else /* __DOCUMENTATION__ */
310
311/* generated class IOUserClient IOUserClient.iig:157-300 */
312
313#define IOUserClient_AsyncCompletion_ID 0xdbc5b2e5d2b446f4ULL
314#define IOUserClient_CopyClientMemoryForType_ID 0x8399bdb3d0b4f474ULL
315#define IOUserClient_CreateMemoryDescriptorFromClient_ID 0xf2fa2faa5cc11191ULL
316#define IOUserClient_CopyClientEntitlements_ID 0xcaf3bd8932c8486fULL
317#define IOUserClient__ExternalMethod_ID 0xcfe0c99e739d92f9ULL
318#define IOUserClient_KernelCompletion_ID 0xf609f134c9046444ULL
319
320#define IOUserClient_AsyncCompletion_Args \
321 OSAction * action, \
322 IOReturn status, \
323 const unsigned long long * asyncData, \
324 uint32_t asyncDataCount
325
326#define IOUserClient_CopyClientMemoryForType_Args \
327 uint64_t type, \
328 uint64_t * options, \
329 IOMemoryDescriptor ** memory
330
331#define IOUserClient_CreateMemoryDescriptorFromClient_Args \
332 uint64_t memoryDescriptorCreateOptions, \
333 uint32_t segmentsCount, \
334 const IOAddressSegment * segments, \
335 IOMemoryDescriptor ** memory
336
337#define IOUserClient_CopyClientEntitlements_Args \
338 OSDictionary ** entitlements
339
340#define IOUserClient__ExternalMethod_Args \
341 uint64_t selector, \
342 const unsigned long long * scalarInput, \
343 uint32_t scalarInputCount, \
344 OSData * structureInput, \
345 IOMemoryDescriptor * structureInputDescriptor, \
346 unsigned long long * scalarOutput, \
347 uint32_t * scalarOutputCount, \
348 uint64_t structureOutputMaximumSize, \
349 OSData ** structureOutput, \
350 IOMemoryDescriptor * structureOutputDescriptor, \
351 OSAction * completion
352
353#define IOUserClient_KernelCompletion_Args \
354 OSAction * action, \
355 IOReturn status, \
356 const unsigned long long * asyncData, \
357 uint32_t asyncDataCount
358
359#define IOUserClient_Methods \
360\
361public:\
362\
363 virtual kern_return_t\
364 Dispatch(const IORPC rpc) APPLE_KEXT_OVERRIDE;\
365\
366 static kern_return_t\
367 _Dispatch(IOUserClient * self, const IORPC rpc);\
368\
369 void\
370 AsyncCompletion(\
371 OSAction * action,\
372 IOReturn status,\
373 const unsigned long long * asyncData,\
374 uint32_t asyncDataCount,\
375 OSDispatchMethod supermethod = NULL);\
376\
377 kern_return_t\
378 CopyClientMemoryForType(\
379 uint64_t type,\
380 uint64_t * options,\
381 IOMemoryDescriptor ** memory,\
382 OSDispatchMethod supermethod = NULL);\
383\
384 kern_return_t\
385 CreateMemoryDescriptorFromClient(\
386 uint64_t memoryDescriptorCreateOptions,\
387 uint32_t segmentsCount,\
388 const IOAddressSegment * segments,\
389 IOMemoryDescriptor ** memory,\
390 OSDispatchMethod supermethod = NULL) __attribute__((availability(driverkit,introduced=20.0)));\
391\
392 kern_return_t\
393 CopyClientEntitlements(\
394 OSDictionary ** entitlements,\
395 OSDispatchMethod supermethod = NULL);\
396\
397 kern_return_t\
398 _ExternalMethod(\
399 uint64_t selector,\
400 const unsigned long long * scalarInput,\
401 uint32_t scalarInputCount,\
402 OSData * structureInput,\
403 IOMemoryDescriptor * structureInputDescriptor,\
404 unsigned long long * scalarOutput,\
405 uint32_t * scalarOutputCount,\
406 uint64_t structureOutputMaximumSize,\
407 OSData ** structureOutput,\
408 IOMemoryDescriptor * structureOutputDescriptor,\
409 OSAction * completion,\
410 OSDispatchMethod supermethod = NULL);\
411\
412 kern_return_t\
413 CreateActionKernelCompletion(size_t referenceSize, OSAction ** action);\
414\
415\
416protected:\
417 /* _Impl methods */\
418\
419 kern_return_t\
420 CopyClientEntitlements_Impl(IOUserClient_CopyClientEntitlements_Args);\
421\
422 kern_return_t\
423 _ExternalMethod_Impl(IOUserClient__ExternalMethod_Args);\
424\
425\
426public:\
427 /* _Invoke methods */\
428\
429 typedef void (*AsyncCompletion_Handler)(OSMetaClassBase * target, IOUserClient_AsyncCompletion_Args);\
430 static kern_return_t\
431 AsyncCompletion_Invoke(const IORPC rpc,\
432 OSMetaClassBase * target,\
433 AsyncCompletion_Handler func,\
434 const OSMetaClass * targetActionClass);\
435\
436 static kern_return_t\
437 AsyncCompletion_Invoke(const IORPC rpc,\
438 OSMetaClassBase * target,\
439 AsyncCompletion_Handler func);\
440\
441 typedef kern_return_t (*CopyClientMemoryForType_Handler)(OSMetaClassBase * target, IOUserClient_CopyClientMemoryForType_Args);\
442 static kern_return_t\
443 CopyClientMemoryForType_Invoke(const IORPC rpc,\
444 OSMetaClassBase * target,\
445 CopyClientMemoryForType_Handler func);\
446\
447 typedef kern_return_t (*CreateMemoryDescriptorFromClient_Handler)(OSMetaClassBase * target, IOUserClient_CreateMemoryDescriptorFromClient_Args);\
448 static kern_return_t\
449 CreateMemoryDescriptorFromClient_Invoke(const IORPC rpc,\
450 OSMetaClassBase * target,\
451 CreateMemoryDescriptorFromClient_Handler func);\
452\
453 typedef kern_return_t (*CopyClientEntitlements_Handler)(OSMetaClassBase * target, IOUserClient_CopyClientEntitlements_Args);\
454 static kern_return_t\
455 CopyClientEntitlements_Invoke(const IORPC rpc,\
456 OSMetaClassBase * target,\
457 CopyClientEntitlements_Handler func);\
458\
459 typedef kern_return_t (*_ExternalMethod_Handler)(OSMetaClassBase * target, IOUserClient__ExternalMethod_Args);\
460 static kern_return_t\
461 _ExternalMethod_Invoke(const IORPC rpc,\
462 OSMetaClassBase * target,\
463 _ExternalMethod_Handler func);\
464\
465
466
467#define IOUserClient_KernelMethods \
468\
469protected:\
470 /* _Impl methods */\
471\
472 kern_return_t\
473 CreateMemoryDescriptorFromClient_Impl(IOUserClient_CreateMemoryDescriptorFromClient_Args);\
474\
475 void\
476 KernelCompletion_Impl(IOUserClient_KernelCompletion_Args);\
477\
478
479
480#define IOUserClient_VirtualMethods \
481\
482public:\
483\
484 virtual bool\
485 init(\
486) APPLE_KEXT_OVERRIDE;\
487\
488 virtual void\
489 free(\
490) APPLE_KEXT_OVERRIDE;\
491\
492 virtual kern_return_t\
493 ExternalMethod(\
494 uint64_t selector,\
495 IOUserClientMethodArguments * arguments,\
496 const IOUserClientMethodDispatch * dispatch,\
497 OSObject * target,\
498 void * reference) APPLE_KEXT_OVERRIDE;\
499\
500
501
502#if !KERNEL
503
504extern OSMetaClass * gIOUserClientMetaClass;
505extern const OSClassLoadInformation IOUserClient_Class;
506
507class IOUserClientMetaClass : public OSMetaClass
508{
509public:
510 virtual kern_return_t
511 New(OSObject * instance) override;
512 virtual kern_return_t
513 Dispatch(const IORPC rpc) override;
514};
515
516#endif /* !KERNEL */
517
518#if !KERNEL
519
520class IOUserClientInterface : public OSInterface
521{
522public:
523 virtual kern_return_t
524 ExternalMethod(uint64_t selector,
525 IOUserClientMethodArguments * arguments,
526 const IOUserClientMethodDispatch * dispatch,
527 OSObject * target,
528 void * reference) = 0;
529
530 kern_return_t
531 ExternalMethod_Call(uint64_t selector,
532 IOUserClientMethodArguments * arguments,
533 const IOUserClientMethodDispatch * dispatch,
534 OSObject * target,
535 void * reference) { return ExternalMethod(selector, arguments, dispatch, target, reference); };\
536
537};
538
539struct IOUserClient_IVars;
540struct IOUserClient_LocalIVars;
541
542class IOUserClient : public IOService, public IOUserClientInterface
543{
544#if !KERNEL
545 friend class IOUserClientMetaClass;
546#endif /* !KERNEL */
547
548#if !KERNEL
549public:
550#ifdef IOUserClient_DECLARE_IVARS
551IOUserClient_DECLARE_IVARS
552#else /* IOUserClient_DECLARE_IVARS */
553 union
554 {
555 IOUserClient_IVars * ivars;
556 IOUserClient_LocalIVars * lvars;
557 };
558#endif /* IOUserClient_DECLARE_IVARS */
559#endif /* !KERNEL */
560
561#if !KERNEL
562 static OSMetaClass *
563 sGetMetaClass() { return gIOUserClientMetaClass; };
564#endif /* KERNEL */
565
566 using super = IOService;
567
568#if !KERNEL
569 IOUserClient_Methods
570 IOUserClient_VirtualMethods
571#endif /* !KERNEL */
572
573};
574#endif /* !KERNEL */
575
576
577#define OSAction_IOUserClient_KernelCompletion_Methods \
578\
579public:\
580\
581 virtual kern_return_t\
582 Dispatch(const IORPC rpc) APPLE_KEXT_OVERRIDE;\
583\
584 static kern_return_t\
585 _Dispatch(OSAction_IOUserClient_KernelCompletion * self, const IORPC rpc);\
586\
587\
588protected:\
589 /* _Impl methods */\
590\
591\
592public:\
593 /* _Invoke methods */\
594\
595
596
597#define OSAction_IOUserClient_KernelCompletion_KernelMethods \
598\
599protected:\
600 /* _Impl methods */\
601\
602
603
604#define OSAction_IOUserClient_KernelCompletion_VirtualMethods \
605\
606public:\
607\
608
609
610#if !KERNEL
611
612extern OSMetaClass * gOSAction_IOUserClient_KernelCompletionMetaClass;
613extern const OSClassLoadInformation OSAction_IOUserClient_KernelCompletion_Class;
614
615class OSAction_IOUserClient_KernelCompletionMetaClass : public OSMetaClass
616{
617public:
618 virtual kern_return_t
619 New(OSObject * instance) override;
620 virtual kern_return_t
621 Dispatch(const IORPC rpc) override;
622};
623
624#endif /* !KERNEL */
625
626class OSAction_IOUserClient_KernelCompletionInterface : public OSInterface
627{
628public:
629};
630
631struct OSAction_IOUserClient_KernelCompletion_IVars;
632struct OSAction_IOUserClient_KernelCompletion_LocalIVars;
633
634class __attribute__((availability(driverkit,introduced=20,message="Type-safe OSAction factory methods are available in DriverKit 20 and newer"))) OSAction_IOUserClient_KernelCompletion : public OSAction, public OSAction_IOUserClient_KernelCompletionInterface
635{
636#if KERNEL
637 OSDeclareDefaultStructorsWithDispatch(OSAction_IOUserClient_KernelCompletion);
638#endif /* KERNEL */
639
640#if !KERNEL
641 friend class OSAction_IOUserClient_KernelCompletionMetaClass;
642#endif /* !KERNEL */
643
644public:
645#ifdef OSAction_IOUserClient_KernelCompletion_DECLARE_IVARS
646OSAction_IOUserClient_KernelCompletion_DECLARE_IVARS
647#else /* OSAction_IOUserClient_KernelCompletion_DECLARE_IVARS */
648 union
649 {
650 OSAction_IOUserClient_KernelCompletion_IVars * ivars;
651 OSAction_IOUserClient_KernelCompletion_LocalIVars * lvars;
652 };
653#endif /* OSAction_IOUserClient_KernelCompletion_DECLARE_IVARS */
654#if !KERNEL
655 static OSMetaClass *
656 sGetMetaClass() { return gOSAction_IOUserClient_KernelCompletionMetaClass; };
657 virtual const OSMetaClass *
658 getMetaClass() const APPLE_KEXT_OVERRIDE { return gOSAction_IOUserClient_KernelCompletionMetaClass; };
659#endif /* KERNEL */
660
661 using super = OSAction;
662
663#if !KERNEL
664 OSAction_IOUserClient_KernelCompletion_Methods
665#endif /* !KERNEL */
666
667 OSAction_IOUserClient_KernelCompletion_VirtualMethods
668};
669
670#endif /* !__DOCUMENTATION__ */
671
672/* IOUserClient.iig:302- */
673
674#endif /* ! _IOKIT_UIOUSERCLIENT_H */
675