]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/IOCatalogue.h
xnu-3247.1.106.tar.gz
[apple/xnu.git] / iokit / IOKit / IOCatalogue.h
index 1b72688f477f7d24e253bede353d7ea266f83e57..693e0ef7e2f77abc79f4d6d18f95fa4631f69c00 100644 (file)
@@ -1,26 +1,32 @@
 /*
 /*
- * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1998-2012 Apple Inc. All rights reserved.
  *
  *
- * @APPLE_LICENSE_HEADER_START@
+ * @APPLE_OSREFERENCE_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.
+ * 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. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
  * 
  * 
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * 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,
  * 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@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 /*
  */
 /*
- * Copyright (c) 1998 Apple Computer, Inc.  All rights reserved. 
+ * Copyright (c) 1998 Apple Inc.  All rights reserved. 
  *
  * HISTORY
  *
  *
  * HISTORY
  *
@@ -51,10 +57,11 @@ class IOCatalogue : public OSObject
     OSDeclareDefaultStructors(IOCatalogue)
     
 private:
     OSDeclareDefaultStructors(IOCatalogue)
     
 private:
-    OSCollectionIterator   * kernelTables;
-    OSArray                * array;
-    IOLock *                 lock;
+    IORWLock *               lock;
     SInt32                   generation;
     SInt32                   generation;
+    OSDictionary           * personalities;
+    OSArray * arrayForPersonality(OSDictionary * dict);
+    void addPersonality(OSDictionary * dict);
 
 public:
     /*!
 
 public:
     /*!
@@ -74,7 +81,7 @@ public:
         @function free
         @abstract Cleans up the database and deallocates memory allocated at initialization.  This is never called in normal operation of the system.
     */
         @function free
         @abstract Cleans up the database and deallocates memory allocated at initialization.  This is never called in normal operation of the system.
     */
-    void free( void );
+    void free( void ) APPLE_KEXT_OVERRIDE;
     
     /*!
         @function findDrivers
     
     /*!
         @function findDrivers
@@ -159,7 +166,7 @@ public:
     /*!
         @function terminateDrivers
         @abstract Terminates all instances of a driver which match the contents of the matching dictionary. Does not unload module.
     /*!
         @function terminateDrivers
         @abstract Terminates all instances of a driver which match the contents of the matching dictionary. Does not unload module.
-        @param matching Dictionary containing the matching criteria.
+        @param matching  A dictionary whose keys and values are used for matching personalities in the database.  For example, a matching dictionary containing a 'IOProviderClass' key with the value 'IOPCIDevice' will cause termination for all instances whose personalities have the key 'IOProviderClass' equal to 'IOPCIDevice'.
      */
     IOReturn terminateDrivers( OSDictionary * matching );
 
      */
     IOReturn terminateDrivers( OSDictionary * matching );
 
@@ -182,59 +189,39 @@ public:
     /*!
         @function startMatching
         @abstract Starts an IOService matching thread where matching keys and values are provided by the matching dictionary.
     /*!
         @function startMatching
         @abstract Starts an IOService matching thread where matching keys and values are provided by the matching dictionary.
-        @param matching A dictionary containing keys and values to match against.
+        @param matching  A dictionary whose keys and values are used for matching personalities in the database.  For example, a matching dictionary containing a 'IOProviderClass' key with the value 'IOPCIDevice' will start matching for all personalities which have the key 'IOProviderClass' equal to 'IOPCIDevice'.
      */
     bool startMatching( OSDictionary * matching );
 
     /*!
         @function reset
         @abstract Return the Catalogue to its initial state.
      */
     bool startMatching( OSDictionary * matching );
 
     /*!
         @function reset
         @abstract Return the Catalogue to its initial state.
+        @discussion
+        Should only be used by kextd just before it sends all kext personalities down during a rescan.
     */
     void reset(void);
 
     */
     void reset(void);
 
+    /*!
+        @function resetAndAddDrivers
+        @abstract Replace personalities in IOCatalog with those provided.
+        @discussion
+        Resets the catalogue with a new set of drivers, preserving matching originals to keep wired memory usage down.
+    */
+    bool resetAndAddDrivers(OSArray * drivers, bool doNubMatching = true);
+
     /*!
         @function serialize
         @abstract Serializes the catalog for transport to the user.
         @param s The serializer object.
         @result Returns false if unable to serialize database, most likely due to memory shortage.
      */
     /*!
         @function serialize
         @abstract Serializes the catalog for transport to the user.
         @param s The serializer object.
         @result Returns false if unable to serialize database, most likely due to memory shortage.
      */
-    virtual bool serialize(OSSerialize * s) const;
-
-
-    /*!
-        @function recordStartupExtensions
-        @abstract Records extensions made available by the primary booter.
-            <p>
-            This function is for internal use by the kernel startup linker.
-            Kernel extensions should never call it.
-        @result Returns true if startup extensions were successfully recorded,
-            false if not.
-    */
-    virtual bool recordStartupExtensions(void);
-
-    /*!
-        @function addExtensionsFromArchive()
-        @abstract Records an archive of extensions, as from device ROM.
-            <p>
-            This function is currently for internal use.
-            Kernel extensions should never call it.
-        @param mkext An OSData object containing a multikext archive.
-        @result Returns true if mkext was properly unserialized and its
-                contents recorded, false if not.
-    */
-    virtual bool addExtensionsFromArchive(OSData * mkext);
+    virtual bool serialize(OSSerialize * s) const APPLE_KEXT_OVERRIDE;
 
 
+    bool serializeData(IOOptionBits kind, OSSerialize * s) const;
 
 
-    /*!
-        @function removeKernelLinker
-        @abstract Removes from memory all code and data related to
-            boot-time loading of kernel extensions. kextd triggers
-            this when it first starts in order to pass responsibility
-            for loading extensions from the kernel itself to kextd.
-        @result Returns KERN_SUCCESS if the kernel linker is successfully
-            removed or wasn't present, KERN_FAILURE otherwise.
-    */
-    virtual kern_return_t removeKernelLinker(void);
+/* This stuff is no longer used at all we keep it around for i386
+ * binary compatibility only. Symbols are no longer exported.
+ */
 
 private:
 
 
 private:
 
@@ -245,24 +232,12 @@ private:
      */
     IOReturn unloadModule( OSString * moduleName ) const;
 
      */
     IOReturn unloadModule( OSString * moduleName ) const;
 
-
+    IOReturn _removeDrivers(OSDictionary * matching);
+    IOReturn _terminateDrivers(OSDictionary * matching);
 };
 
 };
 
-__BEGIN_DECLS
-/*!
-    @function IOKitRelocStart
-    @abstract Deprecated API.
-*/
-kmod_start_func_t IOKitRelocStart;
-/*!
-    @function IOKitRelocStop
-    @abstract Deprecated API.
-*/
-kmod_stop_func_t IOKitRelocStop;
-__END_DECLS
-
-extern const OSSymbol *                gIOClassKey;
-extern const OSSymbol *                gIOProbeScoreKey;
-extern IOCatalogue *            gIOCatalogue;
+extern const OSSymbol * gIOClassKey;
+extern const OSSymbol * gIOProbeScoreKey;
+extern IOCatalogue    * gIOCatalogue;
 
 #endif /* ! _IOKIT_IOCATALOGUE_H */
 
 #endif /* ! _IOKIT_IOCATALOGUE_H */