X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/8f6c56a50524aa785f7e596d52dddfb331e18961..3e170ce000f1506b7b5d2c5c7faec85ceabb573d:/iokit/IOKit/IOCatalogue.h diff --git a/iokit/IOKit/IOCatalogue.h b/iokit/IOKit/IOCatalogue.h index f666bf426..693e0ef7e 100644 --- a/iokit/IOKit/IOCatalogue.h +++ b/iokit/IOKit/IOCatalogue.h @@ -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. -

- 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. -

- 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 */