]> 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 d63943e6a91ab5267730252e65a3d8aeae89e000..693e0ef7e2f77abc79f4d6d18f95fa4631f69c00 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998-2000 Apple Inc. All rights reserved.
+ * Copyright (c) 1998-2012 Apple Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
@@ -57,17 +57,11 @@ class IOCatalogue : public OSObject
     OSDeclareDefaultStructors(IOCatalogue)
     
 private:
-    OSCollectionIterator   * kernelTables;
-    OSArray                * array;
-    IOLock *                 lock;
+    IORWLock *               lock;
     SInt32                   generation;
-
-/* This stuff is no longer used at all but was exported in prior
- * releases, so we keep it around for PPC/i386 only.
- */
-#if __ppc__ || __i386__
-    IOLock *                 kld_lock;
-#endif /* __ppc__ || __i386__ */
+    OSDictionary           * personalities;
+    OSArray * arrayForPersonality(OSDictionary * dict);
+    void addPersonality(OSDictionary * dict);
 
 public:
     /*!
@@ -87,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.
     */
-    void free( void );
+    void free( void ) APPLE_KEXT_OVERRIDE;
     
     /*!
         @function findDrivers
@@ -202,66 +196,32 @@ public:
     /*!
         @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);
 
+    /*!
+        @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.
      */
-    virtual bool serialize(OSSerialize * s) const;
+    virtual bool serialize(OSSerialize * s) const APPLE_KEXT_OVERRIDE;
 
     bool serializeData(IOOptionBits kind, OSSerialize * s) const;
-    
-    /*!
-        @function removePersonalities
-        @abstract Remove exact personalities from the database.
-        @param personalitiesArray  An array of personalities to remove.
-        @result Returns true if all personalities are removed successfully. Failure is due to a memory allocation failure.
-    */
-    bool removePersonalities(OSArray * personalitiesArray);
 
-/* This stuff is no longer used at all we keep it around for PPC/i386
+/* This stuff is no longer used at all we keep it around for i386
  * binary compatibility only. Symbols are no longer exported.
  */
-#if __ppc__ || __i386__
-    /*!
-        @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);
-
-
-    /*!
-        @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);
-#endif /* __ppc__ || __i386__ */
 
 private:
 
@@ -271,6 +231,9 @@ private:
         @param moduleName An OSString containing the name of the module to unload.
      */
     IOReturn unloadModule( OSString * moduleName ) const;
+
+    IOReturn _removeDrivers(OSDictionary * matching);
+    IOReturn _terminateDrivers(OSDictionary * matching);
 };
 
 extern const OSSymbol * gIOClassKey;