X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/6601e61aa18bf4f09af135ff61fc7f4771d23b06..143464d58d2bd6378e74eec636961ceb0d32fb91:/iokit/IOKit/IOCatalogue.h diff --git a/iokit/IOKit/IOCatalogue.h b/iokit/IOKit/IOCatalogue.h index 4f1bfa07c..63781fc75 100644 --- a/iokit/IOKit/IOCatalogue.h +++ b/iokit/IOKit/IOCatalogue.h @@ -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, - * 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 * @@ -51,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: /*! @@ -191,9 +196,19 @@ 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. @@ -204,42 +219,9 @@ public: 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: @@ -249,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 */