Loading...
--- xnu/xnu-517.7.21/iokit/bsddev/IOKitBSDInit.cpp
+++ xnu/xnu-344.21.74/iokit/bsddev/IOKitBSDInit.cpp
@@ -3,19 +3,22 @@
*
* @APPLE_LICENSE_HEADER_START@
*
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License"). You may not use this file except in compliance with the
- * License. Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
*
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
@@ -42,6 +45,8 @@
kern_return_t
IOKitBSDInit( void )
{
+ IOLog("IOKitBSDInit\n");
+
IOService::publishResource("IOBSD");
return( kIOReturnSuccess );
@@ -75,26 +80,26 @@
return( 0 );
}
-OSDictionary * IOCDMatching( void )
+OSDictionary * IOCDMatching( const char * name )
{
OSDictionary * dict;
const OSSymbol * str;
-
- dict = IOService::serviceMatching( "IOMedia" );
- if( dict == 0 ) {
- IOLog("Unable to find IOMedia\n");
- return 0;
- }
-
- str = OSSymbol::withCString( "CD_ROM_Mode_1" );
- if( str == 0 ) {
- dict->release();
- return 0;
- }
-
- dict->setObject( "Content Hint", (OSObject *)str );
- str->release();
- return( dict );
+
+ dict = IOService::serviceMatching( "IOMedia" );
+ if( dict == 0 ) {
+ IOLog("Unable to find IOMedia\n");
+ return 0;
+ }
+
+ str = OSSymbol::withCString( "CD_ROM_Mode_1" );
+ if( str == 0 ) {
+ dict->release();
+ return 0;
+ }
+
+ dict->setObject( "Content", (OSObject *)str );
+ str->release();
+ return( dict );
}
OSDictionary * IONetworkMatching( const char * path,
@@ -253,42 +258,23 @@
char * comp;
long unit = -1;
long partition = -1;
- long lun = -1;
char c;
- const char * partitionSep = NULL;
// scan the tail of the path for "@unit:partition"
do {
// Have to get the full path to the controller - an alias may
// tell us next to nothing, like "hd:8"
alias = IORegistryEntry::dealiasPath( &path, gIODTPlane );
-
+
look = path + strlen( path);
c = ':';
while( look != path) {
if( *(--look) == c) {
if( c == ':') {
partition = strtol( look + 1, 0, 0 );
- partitionSep = look;
c = '@';
} else if( c == '@') {
- int diff = -1;
-
unit = strtol( look + 1, 0, 16 );
-
- diff = (int)partitionSep - (int)look;
- if ( diff > 0 ) {
-
- for ( ; diff > 0; diff-- )
- {
- if( look[diff] == ',' )
- {
- lun = strtol ( &look[diff + 1], 0, 16 );
- break;
- }
- }
- }
-
c = '/';
} else if( c == '/') {
c = 0;
@@ -304,36 +290,29 @@
}
if( c || unit == -1 || partition == -1)
continue;
-
+
maxLen -= strlen( "{" kIOPathMatchKey "='" kIODeviceTreePlane ":" );
maxLen -= ( alias ? strlen( alias ) : 0 ) + (look - path);
- maxLen -= strlen( "/@hhhhhhhh,hhhhhhhh:dddddddddd';}" );
+ maxLen -= strlen( "/@hhhhhhhh:dddddddddd';}" );
if( maxLen > 0) {
sprintf( buf, "{" kIOPathMatchKey "='" kIODeviceTreePlane ":" );
comp = buf + strlen( buf );
-
+
if( alias) {
strcpy( comp, alias );
comp += strlen( alias );
}
-
+
if ( (look - path)) {
strncpy( comp, path, look - path);
comp += look - path;
}
-
- if ( lun != -1 )
- {
- sprintf ( comp, "/@%lx,%lx:%ld';}", unit, lun, partition );
- }
- else
- {
- sprintf( comp, "/@%lx:%ld';}", unit, partition );
- }
+
+ sprintf( comp, "/@%lx:%ld';}", unit, partition );
} else
continue;
-
+
return( OSDynamicCast(OSDictionary, OSUnserialize( buf, 0 )) );
} while( false );
@@ -348,42 +327,6 @@
return( IODiskMatching( path, buf, maxLen ));
-}
-
-IOService * IOFindMatchingChild( IOService * service )
-{
- // find a matching child service
- IOService * child = 0;
- OSIterator * iter = service->getClientIterator();
- if ( iter ) {
- while( ( child = (IOService *) iter->getNextObject() ) ) {
- OSDictionary * dict = OSDictionary::withCapacity( 1 );
- if( dict == 0 ) {
- iter->release();
- return 0;
- }
- const OSSymbol * str = OSSymbol::withCString( "Apple_HFS" );
- if( str == 0 ) {
- dict->release();
- iter->release();
- return 0;
- }
- dict->setObject( "Content", (OSObject *)str );
- str->release();
- if ( child->compareProperty( dict, "Content" ) ) {
- dict->release();
- break;
- }
- dict->release();
- IOService * subchild = IOFindMatchingChild( child );
- if ( subchild ) {
- child = subchild;
- break;
- }
- }
- iter->release();
- }
- return child;
}
static int didRam = 0;
@@ -402,7 +345,6 @@
UInt32 flags = 0;
int minor, major;
- bool findHFSChild = false;
char * rdBootVar;
enum { kMaxPathBuf = 512, kMaxBootVar = 128 };
char * str;
@@ -414,7 +356,7 @@
static int mountAttempts = 0;
int xchar, dchar;
-
+
if( mountAttempts++)
IOSleep( 5 * 1000 );
@@ -524,9 +466,8 @@
if ( strncmp( look, "en", strlen( "en" )) == 0 ) {
matching = IONetworkNamePrefixMatching( "en" );
- } else if ( strncmp( look, "cdrom", strlen( "cdrom" )) == 0 ) {
- matching = IOCDMatching();
- findHFSChild = true;
+ } else if ( strncmp( look, "cdrom", strlen( "cdrom" )) == 0 ) {
+ matching = IOCDMatching( look );
} else {
matching = IOBSDNameMatching( look );
}
@@ -534,9 +475,9 @@
if( !matching) {
OSString * astring;
- // any HFS
+ // any UFS
matching = IOService::serviceMatching( "IOMedia" );
- astring = OSString::withCStringNoCopy("Apple_HFS");
+ astring = OSString::withCStringNoCopy("Apple_UFS");
if ( astring ) {
matching->setObject("Content", astring);
astring->release();
@@ -578,23 +519,6 @@
} while( !service);
matching->release();
- if ( service && findHFSChild ) {
- bool waiting = true;
- // wait for children services to finish registering
- while ( waiting ) {
- t.tv_sec = ROOTDEVICETIMEOUT;
- t.tv_nsec = 0;
- if ( service->waitQuiet( &t ) == kIOReturnSuccess ) {
- waiting = false;
- } else {
- IOLog( "Waiting for child registration\n" );
- }
- }
- // look for a subservice with an Apple_HFS child
- IOService * subservice = IOFindMatchingChild( service );
- if ( subservice ) service = subservice;
- }
-
major = 0;
minor = 0;