/*
- * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1998-2012 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
* @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);
-
- 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:
@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 */