|
|
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) 1993 NeXT Computer, Inc. All rights reserved.
25: *
26: * IODeviceMaster.m
27: *
28: * HISTORY
29: * 13-Jan-98 Martin Minow at Apple
30: * Added createMachPort
31: * 08-Jan-93 Doug Mitchell at NeXT
32: * Created.
33: */
34:
35: #import <driverkit/IODeviceMaster.h>
36: #import <driverkit/driverServer.h>
37: #import <mach/port.h>
38:
39: /*
40: * IODeviceMaster class. Used in user space only, to do Get/Set parameter
41: * type operations.
42: */
43:
44: static IODeviceMaster *thisTasksId = nil;
45:
46: @implementation IODeviceMaster
47:
48: /*
49: * Alloc and init (if necessary) an instance of IODeviceMaster.
50: */
51: + new
52: {
53: if(thisTasksId == nil) {
54: thisTasksId = [self alloc];
55: thisTasksId->_deviceMasterPort = device_master_self();
56: }
57: return thisTasksId;
58: }
59:
60: /*
61: * Free an instance of IODeviceMaster. Nop; we keep the instance around.
62: */
63: - free
64: {
65: return self;
66: }
67:
68: /*
69: * Get device type and device name for specified IOObjectNumber.
70: */
71: - (IOReturn)lookUpByObjectNumber : (IOObjectNumber)objectNumber
72: deviceKind : (IOString *)deviceKind
73: deviceName : (IOString *)deviceName
74: {
75: return _IOLookupByObjectNumber(_deviceMasterPort,
76: objectNumber,
77: deviceKind,
78: deviceName);
79: }
80:
81:
82: /*
83: * Get IOObjectNumber and device type for specified deviceName.
84: */
85: - (IOReturn)lookUpByDeviceName : (IOString)deviceName
86: objectNumber : (IOObjectNumber *)objectNumber
87: deviceKind : (IOString *)deviceKind
88: {
89: return _IOLookupByDeviceName(_deviceMasterPort,
90: deviceName,
91: objectNumber,
92: deviceKind);
93: }
94:
95: /*
96: * Get/set parameter methods used at user level to communicate with
97: * kernel-level drivers.
98: */
99: - (IOReturn)getIntValues : (unsigned *)parameterArray
100: forParameter : (IOParameterName)parameterName
101: objectNumber : (IOObjectNumber)objectNumber
102: count : (unsigned *)count // in/out
103: {
104: return _IOGetIntValues(_deviceMasterPort,
105: objectNumber,
106: parameterName,
107: *count,
108: parameterArray,
109: count);
110: }
111:
112: - (IOReturn)getCharValues : (unsigned char *)parameterArray
113: forParameter : (IOParameterName)parameterName
114: objectNumber : (IOObjectNumber)objectNumber
115: count : (unsigned *)count // in/out
116: {
117: return _IOGetCharValues(_deviceMasterPort,
118: objectNumber,
119: parameterName,
120: *count,
121: parameterArray,
122: count);
123:
124: }
125:
126: - (IOReturn)setIntValues : (unsigned *)parameterArray
127: forParameter : (IOParameterName)parameterName
128: objectNumber : (IOObjectNumber)objectNumber
129: count : (unsigned)count;
130: {
131: return _IOSetIntValues(_deviceMasterPort,
132: objectNumber,
133: parameterName,
134: parameterArray,
135: count);
136: }
137:
138: - (IOReturn)setCharValues : (unsigned char *)parameterArray
139: forParameter : (IOParameterName)parameterName
140: objectNumber : (IOObjectNumber)objectNumber
141: count : (unsigned)count;
142: {
143: return _IOSetCharValues(_deviceMasterPort,
144: objectNumber,
145: parameterName,
146: parameterArray,
147: count);
148:
149: }
150:
151: /*
152: * - serverConnect:taskPort: notifies an object that is a sub class of
153: * IODevice that a client task is interested in communicating with it.
154: * The IODevice superclass implements this method returning IO_R_UNSUPPORTED.
155: * If a subclass, such as the IOSCSIController class, provices direct RPC
156: * service, it will override serverConnect:taskPort: and, when called, create a
157: * port, returning IO_R_SUCCESS to IODeviceMaster, which will return send right
158: * to the non-privileged client. The client and IODevice are subsequently
159: * responsible for all port management.
160: */
161: - (IOReturn) serverConnect: (port_t *) machPort
162: objectNumber: (IOObjectNumber) objectNumber
163: {
164: return _IOServerConnect(_deviceMasterPort, objectNumber,
165: task_self(), machPort);
166: }
167:
168: - (IOReturn) lookUpByStringPropertyList:(const char *)values
169: results:(char *)results
170: maxLength:(unsigned int)length
171: {
172: int unused = length;
173:
174: return( _IOLookUpByStringPropertyList( _deviceMasterPort,
175: (unsigned char *) values, strlen( values) + 1,
176: (unsigned char *) results, &unused,
177: length));
178: }
179:
180: - (IOReturn) getStringPropertyList:(IOObjectNumber) objectNumber
181: names:(const char *)names
182: results:(char *) results
183: maxLength:(unsigned int)length
184: {
185: int unused = length;
186:
187: return( _IOGetStringPropertyList( _deviceMasterPort, objectNumber,
188: (unsigned char *) names, strlen( names) + 1,
189: (unsigned char *) results, &unused,
190: length));
191: }
192:
193: - (IOReturn) getByteProperty:(IOObjectNumber) objectNumber
194: name:(const char *)name
195: results:(char *) results
196: maxLength:(unsigned int *)length
197: {
198:
199: return( _IOGetByteProperty( _deviceMasterPort, objectNumber,
200: (unsigned char *) name, strlen( name) + 1,
201: (unsigned char *) results, length,
202: *length));
203: }
204:
205:
206: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.