|
|
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) 1991 NeXT Computer, Inc. All rights reserved. ! 25: * ! 26: * IOBufDevice.m - Buffered Device abstract superclass. ! 27: * ! 28: * HISTORY ! 29: * 13-Jan-93 John Seamons (jks) at NeXT ! 30: * Ported to i386. ! 31: * ! 32: * 23-Jun-92 Mike DeMoney ([email protected]) ! 33: * Major hacks... ! 34: * ! 35: * 16-Jul-91 Doug Mitchell at NeXT ! 36: * Created. ! 37: * ! 38: * FIXME: ! 39: * Check unit number. Clean-up unit number usage between this ! 40: * class and subclasses. ! 41: */ ! 42: ! 43: #import <driverkit/IOBufDevice.h> ! 44: ! 45: #import <sys/errno.h> ! 46: ! 47: @interface IOBufDevice (ProxyForSubclass) ! 48: - (IOReturn)initializeUnit : (unsigned) unitNumber; ! 49: - (IOReturn)shutdownUnit : (unsigned) unitNumber; ! 50: @end ! 51: ! 52: @implementation IOBufDevice ! 53: ! 54: - init ! 55: { ! 56: unsigned unit; ! 57: UnitInfo *unitInfoP; ! 58: ! 59: for (unit = 0; unit < MAX_IOBUFDEVICE_UNITS; unit += 1) { ! 60: unitInfoP = &unitInfo[unit]; ! 61: unitInfoP->callbackId = nil; ! 62: unitInfoP->deviceTag = 0; ! 63: unitInfoP->ownerName[0] = '\0'; ! 64: } ! 65: return self; ! 66: } ! 67: ! 68: - (IOReturn)acquireUnit : (unsigned) unit ! 69: for : (OwnerName) newName ! 70: callbackId : (id) newId ! 71: deviceTag : (Tag) newTag; ! 72: { ! 73: UnitInfo *unitInfoP = &unitInfo[unit]; ! 74: ! 75: if (unitInfoP->callbackId != NULL) { ! 76: return /* FIXME */ IO_R_BUSY; ! 77: } ! 78: strncpy(unitInfoP->ownerName, newName, sizeof(unitInfoP->ownerName)); ! 79: unitInfoP->callbackId = newId; ! 80: unitInfoP->deviceTag = newTag; ! 81: [self initializeUnit:unit]; ! 82: return IO_R_SUCCESS; ! 83: } ! 84: ! 85: ! 86: - (IOReturn)releaseUnit : (unsigned) unit ! 87: { ! 88: UnitInfo *unitInfoP = &unitInfo[unit]; ! 89: ! 90: if (unitInfoP->callbackId == NULL) { ! 91: return /* FIXME */ IO_R_NOT_OWNER; ! 92: } ! 93: [self shutdownUnit:unit]; ! 94: unitInfoP->callbackId = NULL; ! 95: unitInfoP->ownerName[0] = '\0'; ! 96: return IO_R_SUCCESS; ! 97: } ! 98: ! 99: - (IOReturn)ownerForUnit : (unsigned) unit ! 100: isNamed : (OwnerName) currentName ! 101: { ! 102: UnitInfo *unitInfoP = &unitInfo[unit]; ! 103: ! 104: strncpy(currentName, unitInfoP->ownerName, sizeof(currentName)); ! 105: return IO_R_SUCCESS; ! 106: } ! 107: ! 108: /* ! 109: * Convert an IOReturn to text. Subclasses which add additional ! 110: * IOReturn's should override this method and call [super ioReturnText] if ! 111: * the desired value is not found. ! 112: */ ! 113: - (const char *)stringFromReturn : (IOReturn) rtn ! 114: { ! 115: switch (rtn) { ! 116: case IO_R_FLUSHED: ! 117: return "Buffer Flushed"; ! 118: case IO_R_NOT_OWNER: ! 119: return "Not Owner"; ! 120: } ! 121: return [super stringFromReturn:rtn]; ! 122: } ! 123: ! 124: /* ! 125: * Convert an IOReturn to a Unix errno. ! 126: */ ! 127: - (int)errnoFromReturn : (IOReturn) rtn ! 128: { ! 129: switch (rtn) { ! 130: case IO_R_FLUSHED: ! 131: return ESHUTDOWN; ! 132: case IO_R_NOT_OWNER: ! 133: return EPERM; ! 134: } ! 135: return [super errnoFromReturn:rtn]; ! 136: } ! 137: @end ! 138: ! 139: @implementation IOBufDevice (ProxyForSubclass) ! 140: - (IOReturn)initializeUnit : (unsigned) unitNumber ! 141: { ! 142: } ! 143: ! 144: - (IOReturn)shutdownUnit : (unsigned) unitNumber ! 145: { ! 146: } ! 147: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.