|
|
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.