]> 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 f666bf4265aaf4deeb2680227a9e5c3aa3191414..693e0ef7e2f77abc79f4d6d18f95fa4631f69c00 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1998-2012 Apple Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
@@ -26,7 +26,7 @@
  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 /*
- * Copyright (c) 1998 Apple Computer, Inc.  All rights reserved. 
+ * Copyright (c) 1998 Apple Inc.  All rights reserved. 
  *
  * HISTORY
  *
@@ -57,12 +57,11 @@ class IOCatalogue : public OSObject
     OSDeclareDefaultStructors(IOCatalogue)
     
 private:
-    OSCollectionIterator   * kernelTables;
-    OSArray                * array;
-    IOLock *                 lock;
+    IORWLock *               lock;
     SInt32                   generation;
-
-    IOLock *                 kld_lock;
+    OSDictionary           * personalities;
+    OSArray * arrayForPersonality(OSDictionary * dict);
+    void addPersonality(OSDictionary * dict);
 
 public:
     /*!
@@ -82,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
@@ -197,55 +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 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);
-
-    static void disableExternalLinker(void);
+/* This stuff is no longer used at all we keep it around for i386
+ * binary compatibility only. Symbols are no longer exported.
+ */
 
 private:
 
@@ -255,23 +231,13 @@ private:
         @param moduleName An OSString containing the name of the module to unload.
      */
     IOReturn unloadModule( OSString * moduleName ) const;
-};
 
-__BEGIN_DECLS
-/*!
-    @function IOKitRelocStart
-    @abstract Deprecated API.
-*/
-kmod_start_func_t IOKitRelocStart;
-/*!
-    @function IOKitRelocStop
-    @abstract Deprecated API.
-*/
-kmod_stop_func_t IOKitRelocStop;
-__END_DECLS
+    IOReturn _removeDrivers(OSDictionary * matching);
+    IOReturn _terminateDrivers(OSDictionary * matching);
+};
 
-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 */