Annotation of XNU/iokit/Families/IOFireWire/IOFireWireUnit.cpp, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * Copyright (c) 1999 Apple Computer, Inc.  All rights reserved.
                     24:  *
                     25:  * HISTORY
                     26:  * 21 May 99 wgulland created.
                     27:  *
                     28:  */
                     29: 
                     30: #define DEBUGGING_LEVEL 0      // 1 = low; 2 = high; 3 = extreme
                     31: #define DEBUGLOG kprintf
                     32: #include <IOKit/assert.h>
                     33: 
                     34: #include <IOKit/IOMessage.h>
                     35: #include <IOKit/firewire/IOFireWireUnit.h>
                     36: #include <IOKit/firewire/IOFireWireDevice.h>
                     37: #include <IOKit/firewire/IOFireWireController.h>
                     38: 
                     39: #define super IOFireWireNub
                     40: 
                     41: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                     42: 
                     43: OSDefineMetaClassAndStructors(IOFireWireUnit, IOFireWireNub)
                     44: 
                     45: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                     46: 
                     47: bool IOFireWireUnit::attach(IOService *provider)
                     48: {
                     49:     fDevice = OSDynamicCast(IOFireWireDevice, provider);
                     50:     if(!fDevice)
                     51:        return false;
                     52:     if( !super::attach(provider))
                     53:         return (false);
                     54:     fControl = fDevice->fControl;
                     55: 
                     56:     fROM = fDevice->fROM;
                     57:     fROMSize = fDevice->fROMSize;
                     58:     fNodeID = fDevice->fNodeID;
                     59:     fLocalNodeID = fDevice->fLocalNodeID;
                     60:     fGeneration = fDevice->fGeneration;
                     61: 
                     62:     return(true);
                     63: }
                     64: 
                     65: IOReturn IOFireWireUnit::message( UInt32 mess, IOService * provider,
                     66:                                 void * argument )
                     67: {
                     68:     if(provider == fDevice) {
                     69:         fNodeID = fDevice->fNodeID;
                     70:         fLocalNodeID = fDevice->fLocalNodeID;
                     71:         fGeneration = fDevice->fGeneration;
                     72:        messageClients( mess );
                     73:     }
                     74:     return kIOReturnSuccess;
                     75: }
                     76: 
                     77: /*
                     78:  * Create an iterator for the device ROM
                     79:  */
                     80: IOReturn IOFireWireUnit::CSRROMCreateIterator (CSRROMEntryIterator *pCSRROMIterator)
                     81: {
                     82:     CSRROMEntryIteratorRecPtr  pIteratorRec;
                     83:     UInt32                     hdrSize;
                     84: 
                     85:     // Allocate memory for iterator record.
                     86:     pIteratorRec = (CSRROMEntryIteratorRecPtr)IOMalloc (sizeof (CSRROMEntryIteratorRec));
                     87:     if (pIteratorRec == NULL)
                     88:         return kIOReturnNoMemory;
                     89: 
                     90:     // Fill in other record fields.
                     91:     // Set relationship to descendants.
                     92:     pIteratorRec->relationship = kIterateDescendants;
                     93:     // Find start of root directory.
                     94:     hdrSize = ((fROM[0] & kCSRBusInfoBlockLength) >> kCSRBusInfoBlockLengthPhase) + 1;
                     95:     pIteratorRec->data = fROM;
                     96:     pIteratorRec->logicalPath[0] = 0;
                     97:     pIteratorRec->physicalPath[0] = hdrSize;
                     98: 
                     99:     pIteratorRec->logicalPath[1] = 0;
                    100:     pIteratorRec->physicalPath[1] = pIteratorRec->physicalPath[0] + 1;
                    101: 
                    102:     pIteratorRec->pathSize = 2;
                    103:     pIteratorRec->reset = true;
                    104: 
                    105:     // Return iterator.
                    106:     *pCSRROMIterator = (CSRROMEntryIterator) pIteratorRec;
                    107: 
                    108:     return (kIOReturnSuccess);
                    109: }
                    110: 
                    111: /**
                    112:  ** Matching methods
                    113:  **/
                    114: bool IOFireWireUnit::matchPropertyTable(OSDictionary * table)
                    115: {
                    116:     //
                    117:     // If the service object wishes to compare some of its properties in its
                    118:     // property table against the supplied matching dictionary,
                    119:     // it should do so in this method and return truth on success.
                    120:     //
                    121:     if (!super::matchPropertyTable(table))  return false;
                    122: 
                    123:     // We return success if the following expression is true -- individual
                    124:     // comparisions evaluate to truth if the named property is not present
                    125:     // in the supplied matching dictionary.
                    126: 
                    127:     bool res = compareProperty(table, gFireWireUnit_Spec_ID) &&
                    128:         compareProperty(table, gFireWireUnit_SW_Version) &&
                    129:         compareProperty(table, gFireWireVendor_ID) &&
                    130:         compareProperty(table, gFireWire_GUID);
                    131:     return res;
                    132: }

unix.superglobalmegacorp.com

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