/*
- * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1998-2012 Apple Inc. All rights reserved.
*
- * @APPLE_LICENSE_HEADER_START@
- *
- * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
* 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. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
+ * 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.
+ *
+ * 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
* 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
*
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:
/*!
@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 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);
+/* This stuff is no longer used at all we keep it around for i386
+ * binary compatibility only. Symbols are no longer exported.
+ */
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 */