Annotation of driverkit/libDriver/eisa/IOEISADeviceDescription.m, revision 1.1.1.1

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: /*
                     25:  * Copyright (c) 1993 NeXT Computer, Inc.
                     26:  *
                     27:  * ISA/EISA device description class.
                     28:  *
                     29:  * HISTORY
                     30:  *
                     31:  * 18Jan93 Brian Pinkerton at NeXT
                     32:  *     Created.
                     33:  */
                     34:  
                     35: #define KERNEL_PRIVATE 1
                     36: 
                     37: #import <objc/List.h>
                     38: 
                     39: #import <driverkit/KernDeviceDescription.h>
                     40: #import <driverkit/i386/EISAKernBus.h>
                     41: 
                     42: #import <driverkit/i386/IOEISADeviceDescription.h>
                     43: #import <driverkit/i386/IOEISADeviceDescriptionPrivate.h>
                     44: #import <driverkit/IODeviceDescriptionPrivate.h>
                     45: #import <driverkit/IOProperties.h>
                     46: 
                     47: struct _private {
                     48:     unsigned int       *channels;
                     49:     unsigned int       numChannels;
                     50:     IORange            *portRanges;
                     51:     unsigned int       numPortRanges;
                     52:     BOOL               valid;
                     53:     unsigned int       slotNum;
                     54:     unsigned long      slotID;
                     55: };
                     56: 
                     57: @implementation IOEISADeviceDescription
                     58: 
                     59: - free
                     60: {
                     61:     struct _private    *private = _eisa_private;
                     62:     
                     63:     if (private->numChannels > 0)
                     64:        IOFree(private->channels,
                     65:                private->numChannels * sizeof (*private->channels));
                     66:     if (private->numPortRanges > 0)
                     67:        IOFree(private->portRanges,
                     68:                private->numPortRanges * sizeof (*private->portRanges));
                     69:                        
                     70:     IOFree(private, sizeof (*private));
                     71:     
                     72:     return [super free];
                     73: }
                     74: 
                     75: - (unsigned int) channel
                     76: {
                     77:     return [self channelList][0];
                     78: }
                     79: 
                     80: 
                     81: - (unsigned int *) channelList
                     82: {
                     83:     struct _private    *private = _eisa_private;
                     84: 
                     85:     if (private->numChannels == 0)
                     86:        private->channels = [self
                     87:                                _fetchItemList:[[self _delegate] 
                     88:                                        resourcesForKey:DMA_CHANNELS_KEY]
                     89:                                    returnedNum:&private->numChannels];
                     90:     return private->channels;
                     91: }
                     92: 
                     93: - (unsigned int) numChannels
                     94: {
                     95:     struct _private    *private = _eisa_private;
                     96: 
                     97:     if (private->numChannels == 0)
                     98:        private->channels = [self
                     99:                                _fetchItemList:[[self _delegate] 
                    100:                                        resourcesForKey:DMA_CHANNELS_KEY]
                    101:                                    returnedNum:&private->numChannels];
                    102:     return private->numChannels;
                    103: }
                    104: 
                    105: - (IORange *) portRangeList
                    106: {
                    107:     struct _private    *private = _eisa_private;
                    108: 
                    109:     if (private->numPortRanges == 0)
                    110:        private->portRanges = [self
                    111:                                _fetchRangeList:[[self _delegate] 
                    112:                                        resourcesForKey:IO_PORTS_KEY]
                    113:                                    returnedNum:&private->numPortRanges];
                    114:     return private->portRanges;
                    115: }
                    116: 
                    117: - (unsigned int) numPortRanges
                    118: {
                    119:     struct _private    *private = _eisa_private;
                    120: 
                    121:     if (private->numPortRanges == 0)
                    122:        private->portRanges = [self
                    123:                                _fetchRangeList:[[self _delegate] 
                    124:                                        resourcesForKey:IO_PORTS_KEY]
                    125:                                    returnedNum:&private->numPortRanges];
                    126:     return private->numPortRanges;
                    127: }
                    128: 
                    129: 
                    130: - (IOReturn) setChannelList:(unsigned int *)aList num:(unsigned int) length
                    131: {
                    132:     IOReturn ret = IO_R_RESOURCE;
                    133:     
                    134:     if ([[self _delegate]
                    135:        allocateItems:aList numItems:length
                    136:        forKey:DMA_CHANNELS_KEY] != nil) {
                    137:        
                    138:        struct _private *private = (struct _private *)_eisa_private;
                    139:        if (private->numChannels > 0)
                    140:            IOFree(private->channels,
                    141:                private->numChannels * sizeof (*private->channels));
                    142:        private->numChannels = 0;
                    143:        ret = IO_R_SUCCESS;
                    144:     }
                    145:     return ret;
                    146: }
                    147: 
                    148: - (IOReturn) setPortRangeList:(IORange *)aList num:(unsigned int) length
                    149: {
                    150:     IOReturn ret = IO_R_RESOURCE;
                    151:     Range *ranges;
                    152:     int i;
                    153:     
                    154:     ranges = (Range *)IOMalloc(sizeof(Range) * length);
                    155:     for (i=0; i<length; i++) {
                    156:        ranges[i].base = aList[i].start;
                    157:        ranges[i].length = aList[i].size;
                    158:     }
                    159:     if ([[self _delegate]
                    160:        allocateRanges:ranges numRanges:length forKey:IO_PORTS_KEY] != nil) {
                    161:        
                    162:        struct _private *private = (struct _private *)_eisa_private;
                    163:        if (private->numPortRanges > 0)
                    164:            IOFree(private->portRanges,
                    165:                private->numPortRanges * sizeof (*private->portRanges));
                    166:        private->numPortRanges = 0;
                    167:        ret = IO_R_SUCCESS;
                    168:     }
                    169:     IOFree(ranges, sizeof(Range) * length);
                    170:     return ret;
                    171: }
                    172: 
                    173: - (IOReturn) getEISASlotNumber : (unsigned int *) slotNum
                    174: {
                    175:     struct _private    *private = _eisa_private;
                    176: 
                    177:     if (private->valid) {
                    178:        if (slotNum) *slotNum = private->slotNum;
                    179:        return IO_R_SUCCESS;
                    180:     }
                    181:     return IO_R_NO_DEVICE;
                    182: }
                    183: 
                    184: 
                    185: - (IOReturn) getEISASlotID : (unsigned long *) slotID
                    186: {
                    187:     struct _private    *private = _eisa_private;
                    188: 
                    189:     if (private->valid) {
                    190:        if (slotID) *slotID = private->slotID;
                    191:        return IO_R_SUCCESS;
                    192:     }
                    193:     return IO_R_NO_DEVICE;
                    194: }
                    195: 
                    196: @end
                    197: 
                    198: @implementation IOEISADeviceDescription(Private)
                    199: 
                    200: - _initWithDelegate:delegate
                    201: {
                    202:     struct _private    *private;
                    203:     id                  theEISABus = [KernBus lookupBusInstanceWithName:"EISA" busId:0];
                    204: 
                    205:     [super _initWithDelegate:delegate];
                    206:     _eisa_private = (void *)IOMalloc(sizeof (struct _private));
                    207:     bzero(_eisa_private, sizeof (struct _private));
                    208:     private = _eisa_private;
                    209: 
                    210:     private->valid = ( (theEISABus != nil) &&
                    211:        ([theEISABus getEISASlotNumber: &(private->slotNum)
                    212:                                slotID: &(private->slotID)
                    213:                usingDeviceDescription: delegate] == IO_R_SUCCESS) );
                    214: 
                    215:     return self;
                    216: }
                    217: 
                    218: - property_IODeviceType:(char *)types length:(unsigned int *)maxLen
                    219: {
                    220:     strcpy( types, IOTypePCComp);
                    221:     return( self);
                    222: }
                    223: 
                    224: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.