1/*
2 * @APPLE_LICENSE_HEADER_START@
3 *
4 * Copyright (c) 2010 Apple Computer, Inc.  All Rights Reserved.
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. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24
25#ifndef _IOKIT_IOHIDSECUREPROMPTCLIENT_H
26#define _IOKIT_IOHIDSECUREPROMPTCLIENT_H
27
28#include <libkern/c++/OSContainers.h>
29#include <IOKit/IOUserClient.h>
30
31struct IOHIDSecurePromptClient_ExpansionData;
32
33#ifndef sub_iokit_hidsystem
34#define sub_iokit_hidsystem                     err_sub(14)
35#endif
36
37class IOHIDSecurePromptClient : public IOUserClient
38{
39    OSDeclareDefaultStructors(IOHIDSecurePromptClient)
40
41private:
42    IOHIDSecurePromptClient_ExpansionData   *_reserved;
43
44public:
45    // IOService methods
46    void                free();
47    bool                start( IOService * provider );
48
49    // IOUserClient methods
50    bool                initWithTask(task_t owningTask,
51                                     void * securityToken,
52                                     UInt32 type,
53                                     OSDictionary * properties);
54
55    IOReturn			clientClose( void );
56
57    IOExternalMethod*	getTargetAndMethodForIndex(IOService ** targetP,
58                                                   UInt32 index );
59//  IOExternalAsyncMethod*  getAsyncTargetAndMethodForIndex(IOService ** targetP, UInt32 index );
60    IOReturn            registerNotificationPort(mach_port_t port,
61                                                 UInt32 type,
62                                                 io_user_reference_t refCon);
63
64
65    // IOHIDSecurePromptClient in kernel methods
66    bool                gathering();
67    bool                dead();
68    void                setNotifier(IONotifier *notifier);
69
70    IOReturn            postKey(UInt32 key, bool down);
71    IOReturn            postKeyGated(void * p1, void * p2, void * p3,void * p4);
72
73    // IOHIDSecurePromptClient external methods
74    IOReturn            setGatheringMethod(void * p1, void * p2, void * p3,
75                                           void * p4, void * p5, void * p6 );
76    IOReturn            setGathering(UInt32 state);
77
78    IOReturn            getGatheringMethod(void * p1, void * p2, void * p3,
79                                           void * p4, void * p5, void * p6 );
80
81    IOReturn            setLayoutMethod(void * p1, void * p2, void * p3,
82                                       void * p4, void * p5, void * p6 );
83    IOReturn            setLayoutGated(void * p1, void * p2, void * p3,void * p4);
84    IOReturn            setLayout(UInt32 layout);
85
86    IOReturn            getLayoutMethod(void * p1, void * p2, void * p3,
87                                        void * p4, void * p5, void * p6 );
88
89    IOReturn            confirmKeyMethod(void * p1, void * p2, void * p3,
90                                         void * p4, void * p5, void * p6 );
91    IOReturn            confirmKeyGated(void * p1, void * p2, void * p3,void * p4);
92    IOReturn            confirmKey(UInt32 id, UInt32 *count);
93
94    IOReturn            deleteKeysMethod(void * p1, void * p2, void * p3,
95                                        void * p4, void * p5, void * p6 );
96    IOReturn            deleteKeysGated(void * p1, void * p2, void * p3,void * p4);
97    IOReturn            deleteKeys(SInt32 index, UInt32 count, UInt32 *length);
98
99    IOReturn            setUUIDMethod(void * p1, void * p2, void * p3,
100                                      void * p4, void * p5, void * p6 );
101    IOReturn            setUUIDGated(void * p1, void * p2, void * p3,void * p4);
102    IOReturn            setUUID(UInt8* bytes_in);
103
104    IOReturn            getUUIDMethod(void * p1, void * p2, void * p3,
105                                      void * p4, void * p5, void * p6 );
106    IOReturn            getUUIDGated(void * p1, void * p2, void * p3, void * p4);
107
108    IOReturn            compareClientMethod(void * p1, void * p2, void * p3,
109                                            void * p4, void * p5, void * p6 );
110
111    IOReturn            getIdentifierMethod(void * p1, void * p2, void * p3,
112                                            void * p4, void * p5, void * p6 );
113    uint64_t            identifier();
114
115    IOReturn            getInsertionPointMethod(void * p1, void * p2, void * p3,
116                                                void * p4, void * p5, void * p6 );
117    uint64_t            getInsertionPoint();
118
119    IOReturn            setInsertionPointMethod(void * p1, void * p2, void * p3,
120                                                void * p4, void * p5, void * p6 );
121    IOReturn            setInsertionPointGated(void * p1, void * p2, void * p3,void * p4);
122
123    IOReturn            injectStringMethod(void * p1, void * p2, void * p3,
124                                           void * p4, void * p5, void * p6 );
125    IOReturn            injectStringGated(void * p1, void * p2, void * p3,void * p4);
126
127    static IOHIDSecurePromptClient*
128                        nextForIterator(OSIterator * iterator);
129
130    enum {
131        clientID        = 0x48535043, // HSPC
132        keyMessage      = 0x48535043, // HSPC
133        gatheringMessage= iokit_family_msg(sub_iokit_hidsystem, 4),
134    };
135
136private:
137    void                queueMessage(UInt8 code);
138    IOReturn            appendConfirmedKeyCode(UInt8 modifier, UInt8 code);
139    void                releaseReserved();
140    bool                valid();
141    UInt8               modifierState();
142    bool                modifierDown(UInt8 modifierFlag);
143    void                sync();
144    IOReturn            syncGated(void * p1, void * p2, void * p3,void * p4);
145    IOReturn            ensureBufferSize(UInt32 size);
146
147
148};
149
150#endif /* ! _IOKIT_IOHIDSECUREPROMPTCLIENT_H */
151