Annotation of XNU/iokit/Drivers/usb/drvAppleOHCI/AppleComposite.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) 1998 Apple Computer, Inc.  All rights reserved.
                     24:  *
                     25:  * HISTORY
                     26:  *
                     27:  */
                     28: 
                     29: #include <libkern/OSByteOrder.h>
                     30: #include "AppleComposite.h"
                     31: #include <IOKit/usb/IOUSBInterface.h>
                     32: 
                     33: #include <IOKit/assert.h>
                     34: 
                     35: #define super IOService
                     36: #define DEBUGGING_LEVEL 0
                     37: 
                     38: OSDefineMetaClassAndStructors(AppleComposite, IOService)
                     39: 
                     40: bool AppleComposite::start(IOService * provider)
                     41: {
                     42:     IOReturn                   err = 0;
                     43:     UInt8                      configNum;
                     44:     IOUSBDevice::FindInterfaceRequest  req;
                     45:     IOUSBInterface *           interface;
                     46:     IOUSBDevice *              device;
                     47: 
                     48:     if( !super::start(provider))
                     49:         return (false);
                     50: 
                     51:     // get my device
                     52:     device = OSDynamicCast(IOUSBDevice, provider);
                     53:     if(!device)
                     54:        return false;
                     55: 
                     56:     do {
                     57: #if (DEBUGGING_LEVEL > 0)
                     58:         IOLog("%s: USB Generic Composite @ %d\n", getName(), _device->address());
                     59: #endif
                     60:         // Find the first config/interface
                     61:         if (device->deviceDescriptor()->numConf < 1)
                     62:         {
                     63:             IOLog("%s: no composite configurations\n", getName());
                     64:             continue;
                     65:         }
                     66: 
                     67:         req.theClass = req.subClass = req.protocol = 0;
                     68:         req.maxPower = 0;
                     69:         if ((interface = device->findNextInterface(NULL, &req)) == 0)
                     70:         {
                     71:             IOLog("%s: no interface found\n", getName());
                     72:             continue;
                     73:         }
                     74: 
                     75:         configNum = interface->getConfigValue();
                     76: 
                     77:         // set my configuration
                     78:         if ((err = device->SetConfiguration(configNum)))
                     79:             continue;
                     80: 
                     81: #if (DEBUGGING_LEVEL > 0)
                     82:         printInterfaceDescriptor(interface->descriptor);
                     83: #endif
                     84:         // Set up interface for matching, and release it.
                     85:        // it's also held by the device (which it is attached to)
                     86:         interface->registerService();
                     87:         interface->release();
                     88: 
                     89:        // create a new IOUSBInterface nub for each interface
                     90:         // with the same configuration.
                     91:        do {
                     92:             req.theClass = req.subClass = req.protocol = 0;
                     93:             req.maxPower = 0;
                     94:             interface = device->findNextInterface(interface, &req);
                     95:             if (interface == 0)
                     96:             {
                     97:                 break;
                     98:             }
                     99:             if(interface->getConfigValue() == configNum)
                    100:                 interface->registerService();
                    101:             interface->release();
                    102:         } while (true);
                    103: 
                    104:         return(true);
                    105: 
                    106:     } while (false);
                    107: 
                    108:     IOLog("%s: aborting startup.  err = %d\n", getName(), err);
                    109:     
                    110:     return(false);
                    111: }
                    112: 
                    113: 

unix.superglobalmegacorp.com

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