Annotation of kernel/driverkit/KernBus.h, 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: /*
                     26:  * Copyright (c) 1993, 1994 NeXT Computer, Inc.
                     27:  *
                     28:  * Exported interface for Kernel Bus Resource Object(s).
                     29:  *
                     30:  * HISTORY
                     31:  *
                     32:  * 1 Jul 1994 ? at NeXT
                     33:  *     Modifications to support shared interrupts.
                     34:  * 16 Mar 1994 ? at NeXT
                     35:  *     Added range mapping.
                     36:  * 24 Feb 1994 ? at NeXT
                     37:  *     Major rewrite.
                     38:  * 29 Oct 1993 ? at NeXT
                     39:  *     Created.
                     40:  */
                     41: 
                     42: #ifdef DRIVER_PRIVATE
                     43: 
                     44: #import <objc/Object.h>
                     45: 
                     46: #import <mach/mach_types.h>
                     47: 
                     48: /*
                     49:  * The item object can be used to
                     50:  * allocate a small number (max 1024)
                     51:  * of items { base, base + count },
                     52:  * individually.  The only
                     53:  * constraint placed upon this
                     54:  * range is that it may not
                     55:  * wrap around.
                     56:  */
                     57: 
                     58: @interface KernBusItemResource : Object
                     59: {
                     60: @private
                     61:     id                 _owner;
                     62:     unsigned int       _count;
                     63:     unsigned int       _base;
                     64:     id                 _kind;
                     65:     int                        _itemCount;
                     66:     void               *_items;
                     67: }
                     68: 
                     69: - initWithItemCount: (unsigned int)count
                     70:            itemBase: (unsigned int)base
                     71:            itemKind: kind
                     72:            owner: owner;
                     73: - initWithItemCount: (unsigned int)count
                     74:            itemKind: kind
                     75:            owner: owner;
                     76: 
                     77: - reserveItem: (unsigned int)item;
                     78: - shareItem: (unsigned int)item;
                     79: 
                     80: - (unsigned int)findFreeItem;
                     81: 
                     82: @end
                     83: 
                     84: @interface KernBusItem : Object
                     85: {
                     86: @private
                     87:     id                 _resource;
                     88:     unsigned int       _item;
                     89:     int                        _useCount;
                     90:     BOOL               _shareable;
                     91: }
                     92: 
                     93: - initForResource: resource
                     94:            item: (unsigned int)item
                     95:            shareable: (BOOL)shareable;
                     96: - dealloc;
                     97: 
                     98: - share;
                     99: - (unsigned int)item;
                    100: 
                    101: @end
                    102: 
                    103: /*
                    104:  * The range object is used to allocate
                    105:  * ranges of values in a large,
                    106:  * potentially sparse address space.
                    107:  * It does support the full range
                    108:  * of address values, where a full
                    109:  * range {0, maxunsigned int + 1} is
                    110:  * denoted as (Range) { 0, 0 }.
                    111:  */
                    112: 
                    113: typedef struct _Range {
                    114:     unsigned int       base;
                    115:     unsigned int       length;
                    116: } Range;
                    117: 
                    118: #define        RangeMAX        ((Range) { 0, 0 })
                    119: 
                    120: static __inline__
                    121: BOOL
                    122: rangeIsValid(
                    123:     Range      range
                    124: )
                    125: {
                    126:     unsigned int       end = range.base + range.length;
                    127:     
                    128:     if (end > 0 && end <= range.base)
                    129:        return NO;
                    130:        
                    131:     return YES;
                    132: }
                    133: 
                    134: @interface KernBusRangeResource : Object
                    135: {
                    136: @private
                    137:     id                 _owner;
                    138:     unsigned int       _base;
                    139:     unsigned int       _end;
                    140:     id                 _kind;
                    141:     int                        _rangeCount;
                    142:     void               *_ranges;
                    143: }
                    144: 
                    145: - initWithExtent: (Range)extent
                    146:            kind: kind
                    147:            owner: owner;
                    148: 
                    149: - reserveRange: (Range)range;
                    150: - shareRange: (Range)range;
                    151: 
                    152: - (Range)findFreeRangeWithSize:(unsigned int)size
                    153:         alignment:(unsigned int)align;
                    154: 
                    155: @end
                    156: 
                    157: @interface KernBusRange : Object
                    158: {
                    159: @private
                    160:     void               *_next;
                    161:     id                 _resource;
                    162:     unsigned int       _base;
                    163:     unsigned int       _end;
                    164:     int                        _useCount;
                    165:     BOOL               _shareable;    
                    166:     int                        _mappingCount;
                    167: }
                    168: 
                    169: - initForResource: resource
                    170:            range: (Range)range
                    171:            shareable: (BOOL)shareable;    
                    172: - dealloc;
                    173: 
                    174: - share;
                    175: - (Range)range;
                    176: 
                    177: @end
                    178: 
                    179: /*
                    180:  * A mapping is basically an
                    181:  * an alias for a range.
                    182:  * Multiple mappings for a
                    183:  * particular range can be
                    184:  * created, and each one
                    185:  * can refer either to the
                    186:  * entire range, or only a
                    187:  * portion of it.
                    188:  */
                    189: 
                    190: @interface KernBusRangeMapping : Object
                    191: {
                    192: @private
                    193:     id                 _range;
                    194:     Range              _mappedRange;
                    195: }
                    196: 
                    197: - initWithRange: range
                    198:        subRange: (Range)subRange;
                    199:        
                    200: - (Range)mappedRange;
                    201:        
                    202: @end
                    203: 
                    204: /*
                    205:  * The generic bus object is
                    206:  * available for subclassing by
                    207:  * specific bus architectures.
                    208:  * The bus object defines the
                    209:  * system resources (interrupt
                    210:  * sources, dma channels,
                    211:  * physical memory regions,
                    212:  * io port ranges), which
                    213:  * need to be allocated among
                    214:  * the device drivers.
                    215:  */
                    216: 
                    217: @interface KernBus : Object
                    218: {
                    219: @private
                    220:     void               *_resources;
                    221:     int                        _activeResourceCount;
                    222:     int                        _busId;
                    223: }
                    224: 
                    225: - (BOOL)areResourcesActive;
                    226: 
                    227: /*
                    228:  * Returns a NULL-terminated array of the names of resources
                    229:  * defined by this bus.
                    230:  */
                    231: - (const char **)resourceNames;
                    232: 
                    233: /*
                    234:  * Creates a KernDeviceDescription from an IOConfigTable.
                    235:  */
                    236: + deviceDescriptionFromConfigTable:table;
                    237: 
                    238: /*
                    239:  * Allocates resource objects for a device description.
                    240:  * Returns the device description.
                    241:  */
                    242: - allocateResourcesForDeviceDescription:descr;
                    243: 
                    244: - _insertResource: object withKey: (const char *)key;
                    245: - _deleteResourceWithKey: (const char *)key;
                    246: - _lookupResourceWithKey: (const char *)key;
                    247: 
                    248: + registerBusClass:busClass name:(char *)name;
                    249: + registerBusInstance:busInstance name:(char *)busName  busId:(int)index;
                    250: + lookupBusClassWithName:(char *)name;
                    251: + lookupBusInstanceWithName:(char *)busName busId:(int)index;
                    252: 
                    253: /*
                    254:  * Returns NO if the bus does not want to configure the driver.
                    255:  */
                    256: + (BOOL)configureDriverWithTable:configTable;
                    257: 
                    258: - (int)busId;
                    259: - (void)setBusId:(int)busId;
                    260: 
                    261: /*
                    262:  * Called when bus is detected, before drivers are probed
                    263:  */
                    264: + (BOOL)probeBus:configTable;
                    265: 
                    266: @end
                    267: 
                    268: /*
                    269:  * Classes which implement
                    270:  * hardware bus interrupts
                    271:  * must adopt this protocol.
                    272:  */
                    273: 
                    274: @protocol KernBusInterrupt
                    275: 
                    276: - attachDeviceInterrupt: deviceInterrupt;
                    277: - attachDeviceInterrupt: deviceInterrupt
                    278:                atLevel: (int)level;
                    279: - detachDeviceInterrupt: deviceInterrupt;
                    280: 
                    281: - suspend;
                    282: - resume;
                    283: 
                    284: @end
                    285: 
                    286: #endif /* DRIVER_PRIVATE */

unix.superglobalmegacorp.com

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