|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24: /* Copyright (c) 1992 NeXT Computer, Inc. All rights reserved.
25: *
26: * EventIO.m - Event System MiG interface for driver control and status.
27: *
28: * HISTORY
29: * 2-April-92 Mike Paquette at NeXT
30: * Created.
31: */
32:
33: #import <objc/objc.h>
34: #import <driverkit/generalFuncs.h>
35: #import <driverkit/kernelDriver.h>
36: #import <bsd/dev/evio.h>
37:
38: #import <kernserv/queue.h>
39: #import <bsd/dev/machine/ev_private.h> /* Per-machine configuration info */
40: #import <driverkit/EventDriver.h>
41:
42: /*
43: * Event Status services.
44: *
45: * These functions invoke the normal Get and Set Parameter methods
46: * from an interface that does not require root access to use. The
47: * Event Status subsystem is used by all apps that wish to modify
48: * or query system state maintained by the Event Status driver.
49: *
50: * Items handled by this driver include key maps, key repeat rate,
51: * wait cursor behavior, mouse handedness and acceleration, screen
52: * brightness and autodim behavior, and much more. We don't want apps
53: * which manipulate these things to run setuid as root. (Think of the
54: * havoc that a setuid root version of BackSpace could cause...)
55: */
56: IOReturn EvGetParameterInt(
57: port_t dev_port,
58: IOObjectNumber unit,
59: IOParameterName parameterName,
60: unsigned int maxCount, // 0 means "as much as
61: // possible"
62: unsigned int *parameterArray, // data returned here
63: unsigned int *returnedCount) // size returned here
64: {
65: id instance;
66: IOReturn rtn;
67: unsigned count = maxCount;
68:
69: *returnedCount = maxCount;
70: instance = [EventDriver instance];
71: if(instance == nil)
72: return IO_R_NOT_ATTACHED;
73: rtn = [instance getIntValues : parameterArray
74: forParameter:parameterName
75: count : &count];
76: if(rtn == IO_R_SUCCESS) {
77: *returnedCount = count;
78: }
79: return rtn;
80:
81: }
82:
83: IOReturn EvGetParameterChar(
84: port_t dev_port,
85: IOObjectNumber unit,
86: IOParameterName parameterName,
87: unsigned int maxCount, // 0 means "as much as
88: // possible"
89: unsigned char *parameterArray, // data returned here
90: unsigned int *returnedCount) // size returned here
91: {
92: id instance;
93: IOReturn rtn;
94: unsigned count = maxCount;
95:
96: *returnedCount = maxCount;
97: instance = [EventDriver instance];
98: if(instance == nil)
99: return IO_R_NOT_ATTACHED;
100: rtn = [instance getCharValues : parameterArray
101: forParameter:parameterName
102: count : &count];
103: if(rtn == IO_R_SUCCESS) {
104: *returnedCount = count;
105: }
106: return rtn;
107:
108: }
109:
110: IOReturn EvSetParameterInt(
111: port_t dev_port,
112: IOObjectNumber unit,
113: IOParameterName parameterName,
114: unsigned int *parameterArray,
115: unsigned int count) // size of parameterArray
116: {
117: id instance;
118:
119: instance = [EventDriver instance];
120: if(instance == nil)
121: return IO_R_NOT_ATTACHED;
122: if ( strncmp( parameterName, EV_PREFIX, (sizeof EV_PREFIX) - 1 ) == 0
123: && [instance ev_port] != dev_port )
124: return IO_R_PRIVILEGE;
125: return [instance setIntValues : parameterArray
126: forParameter:parameterName
127: count : count];
128: }
129:
130:
131: IOReturn EvSetParameterChar(
132: port_t dev_port,
133: IOObjectNumber unit,
134: IOParameterName parameterName,
135: unsigned char *parameterArray,
136: unsigned int count) // size of parameterArray
137: {
138: id instance;
139:
140: instance = [EventDriver instance];
141: if(instance == nil)
142: return IO_R_NOT_ATTACHED;
143: if ( strncmp( parameterName, EV_PREFIX, (sizeof EV_PREFIX) - 1 ) == 0
144: && [instance ev_port] != dev_port )
145: return IO_R_PRIVILEGE;
146: return [instance setCharValues : parameterArray
147: forParameter:parameterName
148: count : count];
149: }
150:
151: /*
152: * Event services.
153: *
154: * These functions are invoked by a privileged port which can be
155: * obtained only by root. The functions exist primarily to pass
156: * send rights on frame buffer ports out to the WindowServer, and
157: * to control specialized operations of the Event Driver including
158: * setting up the shared memory area.
159: */
160: IOReturn EvOpen(
161: port_t dev_port,
162: port_t event_port )
163: {
164: return [[EventDriver instance] evOpen:dev_port token:event_port];
165: }
166:
167: IOReturn EvClose(
168: port_t dev_port,
169: port_t event_port )
170: {
171: return [[EventDriver instance] evClose:dev_port token:event_port];
172: }
173:
174: IOReturn EvSetSpecialKeyPort(
175: port_t dev_port,
176: int special_key,
177: port_t key_port )
178: {
179: return [[EventDriver instance] setSpecialKeyPort:dev_port
180: keyFlavor: special_key
181: keyPort:key_port];
182: }
183:
184: /*
185: * FIXME: These routines only work from within the kernel.
186: */
187: #ifdef KERNEL
188: IOReturn EvMapEventShmem(
189: port_t dev_port, // Only ev_port allowed
190: port_t event_port,
191: port_t task, // Task to map shared memory into
192: vm_size_t size, // Size of shared memory area in bytes
193: vm_offset_t *addr ) // Returned address of shared memory
194: {
195: return [[EventDriver instance] mapEventShmem:event_port
196: task:task
197: size:size
198: at:addr];
199: }
200:
201: IOReturn EvFrameBufferDevicePort(
202: port_t dev_port,
203: port_t event_port,
204: IOString name,
205: IOString class,
206: port_t *nameDevicePort )
207: {
208: return [[EventDriver instance] evFrameBufferDevicePort:event_port
209: unitName:name
210: unitClass:class
211: unitPort:nameDevicePort];
212: }
213:
214: /*
215: * Additional kernel API to drivers using the Event Driver
216: */
217: int
218: EventCoalesceDisplayCmd( int cmd, int oldcmd )
219: {
220: static const char coalesce[4][4] = {
221: /* nop */ {EVNOP, EVHIDE, EVSHOW, EVMOVE},
222: /* hide */ {EVHIDE, EVHIDE, EVNOP, EVSHOW},
223: /* show */ {EVSHOW, EVNOP, EVSHOW, EVSHOW},
224: /* move */ {EVMOVE, EVHIDE, EVSHOW, EVMOVE}
225: };
226: if ( cmd < EVLEVEL ) // coalesce EVNOP thru EVMOVE only
227: cmd = coalesce[oldcmd & 3][cmd & 3];
228: return cmd;
229: }
230:
231: #endif /* KERNEL */
232:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.