Update Sources To IOStorageFamily-260.100.1

This commit is contained in:
Thomas A 2022-12-03 19:04:00 -08:00
parent 0a895dc038
commit c5c1aeb0ee
59 changed files with 1992 additions and 296 deletions

View File

@ -27,6 +27,7 @@
#include <IOKit/IOLib.h>
#include <IOKit/storage/IOAppleLabelScheme.h>
#include <libkern/OSByteOrder.h>
#include <os/overflow.h>
#define super IOFilterScheme
OSDefineMetaClassAndStructors(IOAppleLabelScheme, IOFilterScheme);
@ -211,6 +212,11 @@ IOMedia * IOAppleLabelScheme::scan(SInt32 * score)
// Allocate a buffer large enough to hold one map, rounded to a media block.
// Ensure that the end of the label, rounded up to the mediaBlockSize,
// will not overflow the integer type of bufferSize
if ( os_add3_overflow(labelBase, labelSize, mediaBlockSize, &bufferSize ) != 0) goto scanErr;
buffer->release();
bufferBase = IOTrunc(labelBase, mediaBlockSize);
@ -240,9 +246,9 @@ IOMedia * IOAppleLabelScheme::scan(SInt32 * score)
// Obtain the properties.
properties = (OSDictionary *) OSUnserializeXML(labelMap, labelSize);
properties = OSDynamicCast(OSDictionary, OSUnserializeXML(labelMap, labelSize));
if ( OSDynamicCast(OSDictionary, properties) == 0 )
if ( properties == 0 )
{
goto scanErr;
}

View File

@ -83,7 +83,7 @@ struct applelabel
* Class
*/
class IOAppleLabelScheme : public IOFilterScheme
class __exported IOAppleLabelScheme : public IOFilterScheme
{
OSDeclareDefaultStructors(IOAppleLabelScheme);

View File

@ -132,7 +132,7 @@ typedef struct Block0
* Class
*/
class IOApplePartitionScheme : public IOPartitionScheme
class __exported IOApplePartitionScheme : public IOPartitionScheme
{
OSDeclareDefaultStructors(IOApplePartitionScheme);

View File

@ -124,7 +124,7 @@ IOBlockStorageDevice::setWriteCacheState(bool enabled)
return(kIOReturnUnsupported);
}
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
IOReturn
IOBlockStorageDevice::doLockUnlockMedia(bool doLock)
{
@ -143,7 +143,7 @@ IOBlockStorageDevice::reportPollRequirements(bool *pollRequired,
{
return(kIOReturnUnsupported);
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
IOReturn
IOBlockStorageDevice::requestIdle(void)
@ -151,20 +151,20 @@ IOBlockStorageDevice::requestIdle(void)
return(kIOReturnUnsupported);
}
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
IOReturn
IOBlockStorageDevice::doDiscard(UInt64 block, UInt64 nblks)
{
return(kIOReturnUnsupported);
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
IOReturn
IOBlockStorageDevice::doUnmap(IOBlockStorageDeviceExtent * extents,
UInt32 extentsCount,
IOStorageUnmapOptions options)
{
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
if (options) {
return(kIOReturnUnsupported);
} else {
@ -181,9 +181,9 @@ IOBlockStorageDevice::doUnmap(IOBlockStorageDeviceExtent * extents,
}
return(kIOReturnSuccess);
#else /* !TARGET_OS_OSX || !defined(__x86_64__) */
#else /* !TARGET_OS_OSX */
return(kIOReturnUnsupported);
#endif /* !TARGET_OS_OSX || !defined(__x86_64__) */
#endif /* !TARGET_OS_OSX */
}
IOReturn

View File

@ -93,7 +93,12 @@
* @abstract A character string used for nub matching.
*/
#define kIOBlockStorageDeviceTypeGeneric "Generic"
/*!
* @defined kIOBlockStorageDeviceTDMLocked
* @abstract A boolean property to tell if device is connected through TDM, and not
* authenticated yet
*/
#define kIOBlockStorageDeviceTDMLocked "AppleTDMLocked"
/*!
* @struct IOBlockStorageDeviceExtent
* @abstract
@ -155,7 +160,7 @@ struct IOBlockStorageProvisionDeviceExtent
* is responsible for instantiating the Nub.
*/
class IOBlockStorageDevice : public IOService {
class __exported IOBlockStorageDevice : public IOService {
OSDeclareAbstractStructors(IOBlockStorageDevice)
@ -222,9 +227,9 @@ public:
virtual UInt32 doGetFormatCapacities(UInt64 * capacities,
UInt32 capacitiesMaxCount) const = 0;
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual IOReturn doLockUnlockMedia(bool doLock) __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
virtual IOReturn doSynchronizeCache(void) __attribute__ ((deprecated));
@ -285,9 +290,9 @@ public:
*/
virtual IOReturn reportEjectability(bool *isEjectable) = 0;
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual IOReturn reportLockability(bool *isLockable) __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*!
* @function reportMaxValidBlock
@ -316,10 +321,10 @@ public:
*/
virtual IOReturn reportMediaState(bool *mediaPresent,bool *changedState = 0) = 0;
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual IOReturn reportPollRequirements(bool *pollRequired,
bool *pollIsExpensive) __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*!
* @function reportRemovability
@ -404,9 +409,9 @@ public:
*/
virtual IOReturn requestIdle(void);
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual IOReturn doDiscard(UInt64 block, UInt64 nblks) __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*!
* @function doUnmap

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998-2015 Apple Inc. All rights reserved.
* Copyright (c) 1998-2019 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
@ -32,6 +32,7 @@
#include <IOKit/storage/IOBlockStorageDevice.h>
#include <IOKit/storage/IOBlockStorageDriver.h>
#include <IOKit/storage/IOMedia.h>
#include <IOKit/storage/IOBlockStoragePerfControlExports.h>
#include <kern/energy_perf.h>
#include <kern/thread_call.h>
@ -123,6 +124,7 @@ bool IOBlockStorageDriver::init(OSDictionary * properties)
_contextsLock = IOSimpleLockAlloc();
_contextsCount = 0;
_contextsMaxCount = 32;
_perfControlClient = NULL;
if (_contextsLock == 0)
return false;
@ -227,14 +229,14 @@ bool IOBlockStorageDriver::didTerminate(IOService * provider,
return super::didTerminate(provider, options, defer);
}
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
bool IOBlockStorageDriver::yield(IOService * provider,
IOOptionBits options,
void * argument)
{
return false;
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
void IOBlockStorageDriver::free()
{
@ -249,6 +251,9 @@ void IOBlockStorageDriver::free()
_contexts = context->next;
_contextsCount--;
if (context->perfControlContext)
context->perfControlContext->release();
IODelete(context, Context, 1);
}
@ -260,6 +265,12 @@ void IOBlockStorageDriver::free()
for (unsigned index = 0; index < kStatisticsCount; index++)
if (_statistics[index]) _statistics[index]->release();
if (_perfControlClient) {
_perfControlClient->unregisterDevice(this, this);
_perfControlClient->release();
_perfControlClient = NULL;
}
if (_expansionData) IODelete(_expansionData, ExpansionData, 1);
super::free();
@ -557,11 +568,21 @@ IOBlockStorageDriver::Context * IOBlockStorageDriver::allocateContext()
if (context == 0)
{
context = IONew(Context, 1);
if (context)
{
bzero(context, sizeof(Context));
if (_perfControlClient) {
context->perfControlContext = _perfControlClient->copyWorkContext();
}
}
}
if (context)
else
{
auto perfControlContext = context->perfControlContext;
bzero(context, sizeof(Context));
if (perfControlContext) {
context->perfControlContext = perfControlContext;
}
}
return context;
@ -590,6 +611,9 @@ void IOBlockStorageDriver::deleteContext(
if (context)
{
if (context->perfControlContext)
context->perfControlContext->release();
IODelete(context, Context, 1);
}
}
@ -626,6 +650,15 @@ void IOBlockStorageDriver::prepareRequestCompletion(void * target,
// Update the total number of bytes transferred and the total transfer time.
clock_get_uptime(&time);
auto perfControlClient = driver->_perfControlClient;
if (perfControlClient && context->perfControlContext) {
IOPerfControlClient::WorkEndArgs end_args;
end_args.end_time = time;
perfControlClient->workEndWithContext(driver, context->perfControlContext, &end_args);
}
SUB_ABSOLUTETIME(&time, &context->timeStart);
absolutetime_to_nanoseconds(time, &timeInNanoseconds);
@ -647,9 +680,11 @@ void IOBlockStorageDriver::prepareRequestCompletion(void * target,
context->request.buffer->release();
driver->deleteContext(context);
driver->release();
}
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
void IOBlockStorageDriver::schedulePoller()
{
@ -659,7 +694,7 @@ void IOBlockStorageDriver::unschedulePoller()
{
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
IOReturn IOBlockStorageDriver::message(UInt32 type,
IOService * provider,
@ -925,7 +960,7 @@ IOBlockStorageDriver::mediaStateHasChanged(IOMediaState state)
}
}
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
UInt64
IOBlockStorageDriver::constrainByteCount(UInt64 /* requestedCount */ ,bool isWrite)
{
@ -935,7 +970,7 @@ IOBlockStorageDriver::constrainByteCount(UInt64 /* requestedCount */ ,bool isWri
return(_maxReadByteTransfer);
}
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/* Decommission a piece of media that has become unavailable either due to
* ejection or some outside force (e.g. the Giant Hand of the User).
@ -1073,14 +1108,13 @@ IOBlockStorageDriver::executeRequest(UInt64 byteStart,
io_rate_update(flags, 0, 1, 0, buffer->getLength());
}
#if TARGET_OS_EMBEDDED
// This is where we adjust the offset for this access to the nand layer.
// We already maintain this buffer's file offset in attributes.fileOffset
if (!attributes) {
attributes = &context->request.attributes;
}
attributes->adjustedOffset = ((SInt64)byteStart - (SInt64)context->request.byteStart);
#endif /* TARGET_OS_EMBEDDED */
result = getProvider()->doAsyncReadWrite(buffer,block,nblks,attributes,completion);
if (result != kIOReturnSuccess) { /* it failed to start */
@ -1347,7 +1381,19 @@ IOBlockStorageDriver::handleStart(IOService * provider)
object->release();
}
/* Check for the device being ready with media inserted: */
/* Set up perfcontrol client to track IO */
_perfControlClient = IOPerfControlClient::copyClient(this, 0);
if (_perfControlClient ) {
IOReturn ret = _perfControlClient->registerDevice(this, this);
if ( ret != kIOReturnSuccess ) {
_perfControlClient->release();
_perfControlClient = NULL;
}
}
/* Check for the device being ready with media inserted:
* This will likely initiate IO if the device is found.
*/
result = checkForMedia();
@ -1369,7 +1415,7 @@ IOBlockStorageDriver::handleStart(IOService * provider)
return(true);
}
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
bool
IOBlockStorageDriver::handleYield(IOService * provider,
IOOptionBits options,
@ -1377,7 +1423,7 @@ IOBlockStorageDriver::handleYield(IOService * provider,
{
return false;
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
void
IOBlockStorageDriver::initMediaState(void)
@ -1483,7 +1529,7 @@ IOBlockStorageDriver::isMediaRemovable(void) const
return(_removable);
}
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
bool
IOBlockStorageDriver::isMediaPollExpensive(void) const
{
@ -1495,7 +1541,7 @@ IOBlockStorageDriver::isMediaPollRequired(void) const
{
return(false);
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
bool
IOBlockStorageDriver::isMediaWritable(void) const
@ -1503,7 +1549,7 @@ IOBlockStorageDriver::isMediaWritable(void) const
return(!_writeProtected);
}
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
IOReturn
IOBlockStorageDriver::lockMedia(bool locked)
{
@ -1515,7 +1561,7 @@ IOBlockStorageDriver::pollMedia(void)
{
return(kIOReturnUnsupported);
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
IOReturn
IOBlockStorageDriver::recordMediaParameters(void)
@ -1567,6 +1613,12 @@ IOBlockStorageDriver::stop(IOService * provider)
_powerEventNotifier = NULL;
release();
}
if (_perfControlClient) {
_perfControlClient->unregisterDevice(this, this);
_perfControlClient->release();
_perfControlClient = NULL;
}
super::stop(provider);
}
@ -1579,7 +1631,7 @@ IOBlockStorageDriver::synchronize(IOService * client,
UInt64 blockStart;
UInt64 blockCount;
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
if ( _respondsTo_synchronizeCache )
{
if ( options == _kIOStorageSynchronizeOption_super__synchronizeCache )
@ -1591,7 +1643,7 @@ IOBlockStorageDriver::synchronize(IOService * client,
return IOStorage::synchronize( client, byteStart, byteCount, options );
}
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
if ( ( options & kIOStorageSynchronizeOptionReserved ) )
{
@ -1791,7 +1843,50 @@ IOBlockStorageDriver::setPriority(IOService * client,
bool
IOBlockStorageDriver::validateNewMedia(void)
{
return(true);
int boot_arg_value = 0;
bool boot_arg_found = PE_parse_boot_argn("disable_external_storage", &boot_arg_value, sizeof(boot_arg_value));
if (!boot_arg_found)
{
return(true);
}
if (boot_arg_value == 0)
{
return(true);
}
OSDictionary *protocol_characteristics_dictionary = OSDynamicCast(OSDictionary, getProvider()->getProperty(kIOPropertyProtocolCharacteristicsKey));
if (protocol_characteristics_dictionary)
{
OSString *interconnect_type_string = OSDynamicCast(
OSString,
protocol_characteristics_dictionary->getObject(kIOPropertyPhysicalInterconnectTypeKey));
if (interconnect_type_string)
{
if ( interconnect_type_string->isEqualTo(kIOPropertyPhysicalInterconnectTypeVirtual) )
{
return(true);
}
}
OSString *interconnect_location_string = OSDynamicCast(
OSString,
protocol_characteristics_dictionary->getObject(kIOPropertyPhysicalInterconnectLocationKey));
if (interconnect_location_string)
{
if (interconnect_location_string->isEqualTo(kIOPropertyInternalExternalKey) ||
interconnect_location_string->isEqualTo(kIOPropertyExternalKey))
{
return(false);
}
}
}
return(true);
}
// -----------------------------------------------------------------------------
@ -1799,7 +1894,7 @@ IOBlockStorageDriver::validateNewMedia(void)
#include <IOKit/IOBufferMemoryDescriptor.h>
class IODeblocker : public IOMemoryDescriptor
class __exported IODeblocker : public IOMemoryDescriptor
{
OSDeclareDefaultStructors(IODeblocker);
@ -1840,12 +1935,12 @@ protected:
kStageDone
} _stage;
virtual void free();
virtual uint64_t getPreparationID( void );
virtual void free() APPLE_KEXT_OVERRIDE;
virtual uint64_t getPreparationID( void ) APPLE_KEXT_OVERRIDE;
public:
static IODeblocker * withBlockSize(
static IODeblocker * withBlockSize(
UInt64 blockSize,
UInt64 withRequestStart,
IOMemoryDescriptor * withRequestBuffer,
@ -1853,7 +1948,7 @@ public:
IOStorageCompletion * withRequestCompletion,
void * withRequestContext );
virtual bool initWithBlockSize(
virtual bool initWithBlockSize(
UInt64 blockSize,
UInt64 withRequestStart,
IOMemoryDescriptor * withRequestBuffer,
@ -1863,11 +1958,11 @@ public:
virtual addr64_t getPhysicalSegment( IOByteCount offset,
IOByteCount * length,
IOOptionBits options = 0 );
IOOptionBits options = 0 ) APPLE_KEXT_OVERRIDE;
virtual IOReturn prepare(IODirection forDirection = kIODirectionNone);
virtual IOReturn prepare(IODirection forDirection = kIODirectionNone) APPLE_KEXT_OVERRIDE;
virtual IOReturn complete(IODirection forDirection = kIODirectionNone);
virtual IOReturn complete(IODirection forDirection = kIODirectionNone) APPLE_KEXT_OVERRIDE;
virtual bool getNextStage();
@ -2514,7 +2609,6 @@ void IOBlockStorageDriver::deblockRequestCompletion( void * target,
callback = deblocker->getThreadCallback();
#if !TARGET_OS_EMBEDDED
if ( callback == 0 )
{
if ( deblocker->setThreadCallback(deblockRequestExecute) == false )
@ -2522,7 +2616,6 @@ void IOBlockStorageDriver::deblockRequestCompletion( void * target,
status = kIOReturnNoMemory;
}
}
#endif /* !TARGET_OS_EMBEDDED */
// Determine whether an error occurred or whether there are no more stages.
@ -2607,7 +2700,7 @@ void IOBlockStorageDriver::deblockRequestExecute(void * parameter, void * target
// -----------------------------------------------------------------------------
// Breaker Implementation
class IOBreaker : public IOSubMemoryDescriptor
class __exported IOBreaker : public IOSubMemoryDescriptor
{
OSDeclareDefaultStructors(IOBreaker);
@ -2634,7 +2727,7 @@ protected:
thread_call_t _threadCallback;
virtual void free();
virtual void free() APPLE_KEXT_OVERRIDE;
public:
@ -2780,7 +2873,7 @@ UInt64 IOBreaker::getBreakSize(
segmentCount++;
}
else if ( chunk + chunkSize == segment )
else if ( chunk + chunkSize == segment )
{
breakSize += segmentSize;
chunkSize += segmentSize;
@ -3238,7 +3331,6 @@ void IOBlockStorageDriver::breakUpRequestCompletion( void * target,
callback = breaker->getThreadCallback();
#if !TARGET_OS_EMBEDDED
if ( callback == 0 )
{
if ( breaker->setThreadCallback(breakUpRequestExecute) == false )
@ -3246,7 +3338,6 @@ void IOBlockStorageDriver::breakUpRequestCompletion( void * target,
status = kIOReturnNoMemory;
}
}
#endif /* !TARGET_OS_EMBEDDED */
// Determine whether an error occurred or whether there are no more stages.
@ -3346,7 +3437,7 @@ void IOBlockStorageDriver::prepareRequest(UInt64 byteStart,
return;
}
if (attributes->reserved0032 || attributes->reserved0064 || attributes->reserved0128)
if (attributes->reserved0032 || attributes->reserved0064)
{
complete(completion, kIOReturnBadArgument);
return;
@ -3377,10 +3468,27 @@ void IOBlockStorageDriver::prepareRequest(UInt64 byteStart,
clock_get_uptime(&context->timeStart);
retain();
completionOut.target = this;
completionOut.action = prepareRequestCompletion;
completionOut.parameter = context;
if (_perfControlClient && context->perfControlContext) {
IOPerfControlClient::WorkSubmitArgs submitArgs;
submitArgs.submit_time = context->timeStart;
IOBlockStorageWorkFlags flags;
flags.isRead = (buffer->getDirection() == kIODirectionIn);
if (attributes)
flags.isLowPriority = (attributes->priority > kIOStoragePriorityDefault);
flags.ioSize = buffer->getLength();
submitArgs.driver_data = reinterpret_cast<void*>(&flags);
_perfControlClient->workSubmitAndBeginWithContext(this, context->perfControlContext, &submitArgs, nullptr);
}
// Deblock the transfer.
deblockRequest(byteStart, buffer, attributes, &completionOut, context);
@ -3425,9 +3533,9 @@ OSMetaClassDefineReservedUnused(IOBlockStorageDriver, 29);
OSMetaClassDefineReservedUnused(IOBlockStorageDriver, 30);
OSMetaClassDefineReservedUnused(IOBlockStorageDriver, 31);
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
extern "C" void _ZN20IOBlockStorageDriver16synchronizeCacheEP9IOService( IOBlockStorageDriver * driver, IOService * client )
{
driver->synchronize( client, 0, 0 );
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998-2014 Apple Inc. All rights reserved.
* Copyright (c) 1998-2019 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
@ -249,6 +249,8 @@ typedef UInt32 IOMediaState;
* Kernel
*/
class IOPerfControlClient;
#include <IOKit/storage/IOBlockStorageDevice.h>
#include <IOKit/storage/IOMedia.h>
#include <IOKit/storage/IOStorage.h>
@ -292,7 +294,7 @@ typedef UInt32 IOMediaState;
* a subclass of IOBlockStorageDriver, adding CD functions.
*/
class IOBlockStorageDriver : public IOStorage
class __exported IOBlockStorageDriver : public IOStorage
{
OSDeclareDefaultStructors(IOBlockStorageDriver);
@ -358,6 +360,7 @@ protected:
IOSimpleLock * contextsLock;
UInt32 contextsCount;
UInt32 contextsMaxCount;
IOPerfControlClient * perfControlClient;
};
ExpansionData * _expansionData;
@ -389,6 +392,8 @@ protected:
IOBlockStorageDriver::_expansionData->contextsCount
#define _contextsMaxCount \
IOBlockStorageDriver::_expansionData->contextsMaxCount
#define _perfControlClient \
IOBlockStorageDriver::_expansionData->perfControlClient
OSSet * _openClients;
OSNumber * _statistics[kStatisticsCount];
@ -438,7 +443,7 @@ protected:
AbsoluteTime timeStart;
UInt64 reserved0704;
OSObject * perfControlContext;
UInt64 reserved0768;
UInt64 reserved0832;
UInt64 reserved0896;
@ -679,11 +684,11 @@ protected:
virtual bool handleStart(IOService * provider);
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual bool handleYield(IOService * provider,
IOOptionBits options = 0,
void * argument = 0) __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*!
* @function getMediaBlockSize
@ -729,11 +734,11 @@ public:
IOOptionBits options,
bool * defer) APPLE_KEXT_OVERRIDE;
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual bool yield(IOService * provider,
IOOptionBits options = 0,
void * argument = 0) __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*!
* @function read
@ -974,11 +979,11 @@ public:
virtual IOReturn formatMedia(UInt64 byteCapacity);
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual IOReturn lockMedia(bool lock) __attribute__ ((deprecated));
virtual IOReturn pollMedia() __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*!
* @function isMediaEjectable
@ -1000,11 +1005,11 @@ public:
virtual bool isMediaRemovable() const;
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual bool isMediaPollExpensive() const __attribute__ ((deprecated));
virtual bool isMediaPollRequired() const __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*!
* @function isMediaWritable
@ -1145,11 +1150,11 @@ protected:
IOReturn status,
UInt64 actualByteCount);
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual void schedulePoller() __attribute__ ((deprecated));
virtual void unschedulePoller() __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*
* This method is the power event handler for restarts and shutdowns.
@ -1246,9 +1251,9 @@ protected:
*/
virtual IOReturn acceptNewMedia(void);
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual UInt64 constrainByteCount(UInt64 requestedCount,bool isWrite) __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*!
* @function decommissionMedia

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 1998-2019 Apple Inc. All rights reserved.
*
* @APPLE_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.
*
* 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, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#ifndef IOBlockStoragePerfControlExports_h
#define IOBlockStoragePerfControlExports_h
#include <IOKit/perfcontrol/IOPerfControl.h>
struct IOBlockStorageWorkFlags
{
/* isRead is True for read op */
bool isRead{};
/* isLowPriority is True for low priority IOs */
bool isLowPriority{};
/* Size of the I/O in bytes */
uint64_t ioSize{};
};
#endif /* IOBlockStoragePerfControlExports_h */

View File

@ -115,7 +115,7 @@ struct disk_blk0
* Class
*/
class IOFDiskPartitionScheme : public IOPartitionScheme
class __exported IOFDiskPartitionScheme : public IOPartitionScheme
{
OSDeclareDefaultStructors(IOFDiskPartitionScheme);

View File

@ -142,7 +142,7 @@ IOReturn IOFilterScheme::synchronize(IOService * client,
// Flush the cached data in the storage object, if any.
//
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
if ( _respondsTo_synchronizeCache )
{
if ( options == _kIOStorageSynchronizeOption_super__synchronizeCache )
@ -154,7 +154,7 @@ IOReturn IOFilterScheme::synchronize(IOService * client,
return IOStorage::synchronize( client, byteStart, byteCount, options );
}
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
return getProvider( )->synchronize( this, byteStart, byteCount, options );
}
@ -260,9 +260,9 @@ OSMetaClassDefineReservedUnused(IOFilterScheme, 29);
OSMetaClassDefineReservedUnused(IOFilterScheme, 30);
OSMetaClassDefineReservedUnused(IOFilterScheme, 31);
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
extern "C" void _ZN14IOFilterScheme16synchronizeCacheEP9IOService( IOFilterScheme * scheme, IOService * client )
{
scheme->synchronize( client, 0, 0 );
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */

View File

@ -67,7 +67,7 @@
* and writes.
*/
class IOFilterScheme : public IOStorage
class __exported IOFilterScheme : public IOStorage
{
OSDeclareDefaultStructors(IOFilterScheme);

View File

@ -28,6 +28,7 @@
#include <IOKit/storage/IOGUIDPartitionScheme.h>
#include <libkern/OSByteOrder.h>
#include <sys/utfconv.h>
#include <IOKit/storage/IOBlockStorageDevice.h>
#define super IOPartitionScheme
OSDefineMetaClassAndStructors(IOGUIDPartitionScheme, IOPartitionScheme);
@ -101,6 +102,25 @@ void IOGUIDPartitionScheme::free()
super::free();
}
void IOGUIDPartitionScheme::handleClose(IOService * client, IOOptionBits options)
{
super::handleClose(client, options);
// if the client has been already removed from the partition table
// Now is the time to terminate the IOMedia object:
OSObject* obj = client->getProperty(kIOMediaLiveKey);
if (obj && OSDynamicCast(OSBoolean, obj))
{
// if kIOMediaLiveKey is 0 and kIOMediaPartitionIDKey is removed
// then it means that this partition has been removed from partition table.
if (0 == ((OSBoolean *) obj)->getValue() && NULL == client->getProperty(kIOMediaPartitionIDKey))
{
client->terminate();
detachMediaObjectFromDeviceTree(OSDynamicCast(IOMedia, client));
}
}
}
IOService * IOGUIDPartitionScheme::probe(IOService * provider, SInt32 * score)
{
//
@ -381,6 +401,14 @@ OSSet * IOGUIDPartitionScheme::scan(SInt32 * score)
goto scanErr;
}
// publish the GPT disk GUID as an OSString
{
uuid_string_t uuid;
uuid_unswap( headerMap->hdr_uuid );
uuid_unparse( headerMap->hdr_uuid, uuid );
setProperty( kIOGUIDPartitionSchemeUUIDKey, uuid );
}
// Allocate a buffer large enough to hold one map, rounded to a media block.
buffer->release();
@ -596,6 +624,9 @@ IOMedia * IOGUIDPartitionScheme::instantiateMediaObject( gpt_ent * partition,
uuid_string_t uuid;
uuid_unparse(partition->ent_uuid, uuid);
newMedia->setProperty(kIOMediaUUIDKey, uuid);
UInt64 gptAttributes = OSSwapLittleToHostInt64( partition->ent_attr );
newMedia->setProperty(kIOMediaGPTPartitionAttributesKey, gptAttributes, 64);
}
else
{
@ -618,6 +649,56 @@ IOMedia * IOGUIDPartitionScheme::instantiateDesiredMediaObject(
return new IOMedia;
}
IOReturn IOGUIDPartitionScheme::message(UInt32 type,
IOService * provider,
void * argument)
{
//
// Generic entry point for calls from the provider. A return value of
// kIOReturnSuccess indicates that the message was received, and where
// applicable, that it was successful.
//
switch (type)
{
case kIOMessageMediaParametersHaveChanged:
{
OSIterator * partitionIterator;
partitionIterator = OSCollectionIterator::withCollection(_partitions);
if ( partitionIterator )
{
IOMedia * media = getProvider();
IOMedia * partition;
while ( (partition = (IOMedia *) partitionIterator->getNextObject()) )
{
lockForArbitration();
partition->init( partition->getBase(),
partition->getSize(),
media->getPreferredBlockSize(),
media->getAttributes(),
partition->isWhole(),
media->isWritable(),
partition->getContentHint() );
unlockForArbitration();
}
partitionIterator->release();
}
return kIOReturnSuccess;
}
default:
{
return super::message(type, provider, argument);
}
}
}
OSMetaClassDefineReservedUnused(IOGUIDPartitionScheme, 0);
OSMetaClassDefineReservedUnused(IOGUIDPartitionScheme, 1);
OSMetaClassDefineReservedUnused(IOGUIDPartitionScheme, 2);

View File

@ -89,6 +89,26 @@ struct gpt_ent
#define GPT_ENT_ATTR_PLATFORM 0x00000001
/*!
* @defined kIOGUIDPartitionSchemeUUIDKey
* @abstract
* A property of IOGUIDPartitionSchemeGUID objects
* @discussion
* The kIOGUIDPartitionSchemeUUIDKey property has an OSString value and contains
* a persistent GUID for the disk define in GPT header
*/
#define kIOGUIDPartitionSchemeUUIDKey "UUID"
/*!
* @defined kIOMediaGPTPartitionAttributesKey
* @abstrat
* A property of IOMedia objects for GPT partitions
* @discussion
* The kIOMediaGPTPartitionAttributesKey property has an OSNumber value of 64bit
* GPT partition attributes
*/
#define kIOMediaGPTPartitionAttributesKey "GPT Attributes"
#pragma pack(pop) /* (reset to default struct packing) */
#ifdef KERNEL
@ -104,7 +124,7 @@ struct gpt_ent
* Class
*/
class IOGUIDPartitionScheme : public IOPartitionScheme
class __exported IOGUIDPartitionScheme : public IOPartitionScheme
{
OSDeclareDefaultStructors(IOGUIDPartitionScheme);
@ -121,6 +141,20 @@ protected:
virtual void free(void) APPLE_KEXT_OVERRIDE;
/*!
* @function handleClose
* @discussion
* The handleClose method closes the client's access to this object.
*
* This implementation replaces the IOService definition of handleClose().
* @param client
* Client requesting the close.
* @param options
* Options for the close. Set to zero.
*/
virtual void handleClose(IOService * client, IOOptionBits options) APPLE_KEXT_OVERRIDE;
/*
* Scan the provider media for a GUID partition map. Returns the set
* of media objects representing each of the partitions (the retain for
@ -201,6 +235,14 @@ public:
virtual IOReturn requestProbe(IOOptionBits options) APPLE_KEXT_OVERRIDE;
/*
* Generic entry point for calls from the provider. A return value of
* kIOReturnSuccess indicates that the message was received, and where
* applicable, that it was successful.
*/
virtual IOReturn message(UInt32 type, IOService * provider, void * argument) APPLE_KEXT_OVERRIDE;
OSMetaClassDeclareReservedUnused(IOGUIDPartitionScheme, 0);
OSMetaClassDeclareReservedUnused(IOGUIDPartitionScheme, 1);
OSMetaClassDeclareReservedUnused(IOGUIDPartitionScheme, 2);

View File

@ -24,17 +24,12 @@
#include <IOKit/IODeviceTreeSupport.h> // (gIODTPlane, ...)
#include <IOKit/IOLib.h> // (IONew, ...)
#include <IOKit/storage/IOMedia.h>
#include <IOKit/storage/IOBlockStorageDevice.h>
#include <sys/proc.h>
#define super IOStorage
OSDefineMetaClassAndStructors(IOMedia, IOStorage)
enum
{
kIOStorageAccessWriter = 0x00000002,
kIOStorageAccessInvalid = 0x0000000D,
kIOStorageAccessReserved = 0xFFFFFFF0
};
static UInt8 gIOMediaAccessTable[8][8] =
{ /* Rea, Wri, R|S, W|S, R|E, W|E, Inv, Non */
/* Rea */ { 000, 001, 002, 003, 006, 006, 006, 000 },
@ -137,6 +132,13 @@ void IOMedia::free(void)
// Free all of this object's outstanding resources.
//
if (_expansionData)
{
IOLockFree(mediaManagementLock);
mediaProbeList->release();
IODelete(_expansionData, ExpansionData, 1);
}
if (_openClients) _openClients->release();
super::free();
@ -382,7 +384,7 @@ bool IOMedia::handleOpen(IOService * client,
goto handleOpenErr;
}
if ( driver->terminate( kIOServiceSynchronous ) == false )
if ( driver->terminate( ) == false )
{
goto handleOpenErr;
}
@ -627,12 +629,12 @@ void IOMedia::handleClose(IOService * client, IOOptionBits options)
{
if ( driver != client )
{
driver->requestProbe( 0 );
scheduleProbe ( driver );
}
}
else
{
registerService( kIOServiceAsynchronous );
scheduleRegisterService( );
}
}
}
@ -649,6 +651,54 @@ handleCloseErr:
}
}
void IOMedia::scheduleProbe ( IOService * driver )
{
IOLockLock(mediaManagementLock);
mediaProbeList->setObject( driver );
IOLockUnlock(mediaManagementLock);
}
void IOMedia::scheduleRegisterService( )
{
IOLockLock(mediaManagementLock);
mediaNeedRegisterService = true;
IOLockUnlock(mediaManagementLock);
}
void IOMedia::close(IOService * client,
IOOptionBits options)
{
super::close( client, options );
while (mediaProbeList->getCount())
{
IOService * driver;
IOLockLock(mediaManagementLock);
driver = OSDynamicCast( IOService, mediaProbeList->getObject( 0 ) );
if ( driver )
{
driver->retain();
mediaNeedRegisterService = false;
}
mediaProbeList->removeObject( 0 );
IOLockUnlock(mediaManagementLock);
if ( driver )
{
if ( isInactive( ) == false )
{
driver->requestProbe(0);
}
driver->release();
}
}
if (mediaNeedRegisterService) {
mediaNeedRegisterService = false;
registerService( kIOServiceAsynchronous );
}
}
void IOMedia::read(IOService * client,
UInt64 byteStart,
IOMemoryDescriptor * buffer,
@ -741,10 +791,10 @@ void IOMedia::write(IOService * client,
if (_openLevel == kIOStorageAccessReader) // (instantaneous value, no lock)
{
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
complete(completion, kIOReturnNotPrivileged);
return;
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
}
if (_isWritable == 0)
@ -796,7 +846,7 @@ IOReturn IOMedia::synchronize(IOService * client,
// Flush the cached data in the storage object, if any.
//
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
if (_respondsTo_synchronizeCache)
{
if (options == _kIOStorageSynchronizeOption_super__synchronizeCache)
@ -808,7 +858,7 @@ IOReturn IOMedia::synchronize(IOService * client,
return IOStorage::synchronize(client, byteStart, byteCount, options);
}
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
if (isInactive())
{
@ -822,9 +872,9 @@ IOReturn IOMedia::synchronize(IOService * client,
if (_openLevel == kIOStorageAccessReader) // (instantaneous value, no lock)
{
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
return kIOReturnNotPrivileged;
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
}
if (_isWritable == 0)
@ -870,9 +920,9 @@ IOReturn IOMedia::unmap(IOService * client,
if (_openLevel == kIOStorageAccessReader) // (instantaneous value, no lock)
{
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
return kIOReturnNotPrivileged;
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
}
if (_isWritable == 0)
@ -1212,6 +1262,25 @@ bool IOMedia::init(UInt64 base,
bool isEjectable;
bool isRemovable;
bool mediaParametersHaveChanged = false;
// Initialize _expansionData
if (_expansionData == 0)
{
_expansionData = IONew(ExpansionData, 1);
if (_expansionData == 0) goto error_exit;
bzero( _expansionData, sizeof( ExpansionData ) );
mediaManagementLock = IOLockAlloc();
if (mediaManagementLock == NULL) goto error_exit;
mediaProbeList = OSArray::withCapacity( 1 );
if (mediaProbeList == NULL) goto error_exit;
mediaNeedRegisterService = false;
}
// Ask our superclass' opinion.
@ -1219,6 +1288,16 @@ bool IOMedia::init(UInt64 base,
{
if (super::init(properties) == false) return false;
}
else
{
if ( ( _mediaBase != base) ||
( _mediaSize != size ) ||
( _preferredBlockSize != preferredBlockSize ) ||
( _isWritable != isWritable ) )
{
mediaParametersHaveChanged = true;
}
}
// Initialize our state.
@ -1293,7 +1372,99 @@ bool IOMedia::init(UInt64 base,
setProperty(kIOMediaWholeKey, isWhole);
setProperty(kIOMediaWritableKey, isWritable);
///w:start
if ( mediaParametersHaveChanged == true )
{
IOService * driver = 0;
OSObject * object;
bool needTeardown = false;
bool needRegisterService = false;
//bool needRequestProbe = false;
bool needMessageClients = false;
object = ( OSObject * ) OSSymbol::withCString( kIOStorageCategory );
if ( object == 0 )
{
goto handleParametersHaveChanged;
}
driver = copyClientWithCategory( ( OSSymbol * ) object );
object->release( );
handleParametersHaveChanged:
lockForArbitration();
if ( !isInactive() )
{
if ( driver )
{
if ( _openLevel == kIOStorageAccessNone )
{
needTeardown = true;
needRegisterService = true;
}
else
{
//needRequestProbe = true;
needMessageClients = true;
}
}
else
{
needRegisterService = true;
needMessageClients = true;
}
}
unlockForArbitration();
if ( needTeardown )
{
if ( driver->terminate( ) == false )
{
needRegisterService = false;
}
}
//if ( needRequestProbe )
//{
// driver->requestProbe( 0 );
//}
if ( needRegisterService )
{
registerService( kIOServiceAsynchronous );
}
if ( needMessageClients )
{
messageClients(kIOMessageMediaParametersHaveChanged);
}
if ( driver )
{
driver->release( );
}
}
///w:stop
return true;
error_exit:
if (_openClients) {
_openClients->release();
_openClients = NULL;
}
if (_expansionData) {
if (mediaManagementLock) IOLockFree(mediaManagementLock);
if (mediaProbeList) mediaProbeList->release();
IODelete(_expansionData, ExpansionData, 1);
}
return false;
}
IOMediaAttributeMask IOMedia::getAttributes() const
@ -1322,9 +1493,9 @@ OSMetaClassDefineReservedUnused(IOMedia, 13);
OSMetaClassDefineReservedUnused(IOMedia, 14);
OSMetaClassDefineReservedUnused(IOMedia, 15);
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
extern "C" void _ZN7IOMedia16synchronizeCacheEP9IOService( IOMedia * media, IOService * client )
{
media->synchronize( client, 0, 0 );
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */

View File

@ -207,6 +207,17 @@
#define kIOMediaIconKey "IOMediaIcon"
/*!
* @defined kIOMediaInvalidStartupDiskKey
* @abstract
* A property of IOMedia objects.
* @discussion
* The kIOMediaInvalidStartupDiskKey property has an OSBoolean
* value and describes whether the media cannot be used as a startup disk
*/
#define kIOMediaInvalidStartupDiskKey "Invalid Startup Disk"
/*!
* @enum IOMediaAttributeMask
* @discussion
@ -259,13 +270,25 @@ typedef UInt32 IOMediaAttributeMask;
* before the read or write is passed to the provider object.
*/
class IOMedia : public IOStorage
class __exported IOMedia : public IOStorage
{
OSDeclareDefaultStructors(IOMedia)
protected:
#ifdef KERNEL_PRIVATE
struct ExpansionData {
IOLock * _lock;
OSArray * _probeList;
bool _needRegisterService;
};
#define mediaManagementLock ( IOMedia::_expansionData->_lock )
#define mediaProbeList ( IOMedia::_expansionData->_probeList )
#define mediaNeedRegisterService ( IOMedia::_expansionData->_needRegisterService )
#else /* KERNEL_PRIVATE */
struct ExpansionData { /* */ };
#endif /* KERNEL_PRIVATE */
ExpansionData * _expansionData;
UInt32 _attributes;
@ -349,6 +372,32 @@ protected:
virtual void handleClose(IOService * client, IOOptionBits options) APPLE_KEXT_OVERRIDE;
#ifdef KERNEL_PRIVATE
private:
void scheduleProbe ( IOService * driver );
void scheduleRegisterService( void );
public:
/*!
* @function close
* @abstract Releases active access to a provider.
* @discussion IOService provides generic open and close semantics to track
* clients of a provider that have established an active datapath. The use
* of open and close, and rules regarding * ownership are family defined,
* and defined by the handleOpen and handleClose methods in the provider.
* @param client Designates the client of the provider requesting the
* close.
* @param options Options available for the close. The provider family may
* implement options for close; IOService defines none.
*/
virtual void close( IOService * client,
IOOptionBits options = 0 ) APPLE_KEXT_OVERRIDE;
#endif /* KERNEL_PRIVATE */
public:
using IOStorage::read;

View File

@ -31,6 +31,7 @@
#include <sys/stat.h> // (S_ISBLK, ...)
#include <sys/systm.h> // (DEV_BSIZE, ...)
#include <sys/kdebug.h> // (FSDBG_CODE, ...)
#include <libkern/OSMalloc.h>
#include <IOKit/assert.h>
#include <IOKit/IOBSD.h>
#include <IOKit/IODeviceTreeSupport.h>
@ -44,9 +45,9 @@
#include <IOKit/storage/IOMedia.h>
#include <IOKit/storage/IOMediaBSDClient.h>
///w:start
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
#include <IOKit/pwr_mgt/RootDomain.h>
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
///w:stop
#define super IOService
@ -65,6 +66,7 @@ const UInt32 kAnchorsMaxCount = kMinorsMaxCount;
#define kMsgNoLocation "%s: No location is found for media \"%s\".\n", getName()
#define MAX_PROVISION_EXTENTS_COUNT (PAGE_SIZE/sizeof(IOStorageProvisionExtent))
#define MAX_UNMAP_EXTENTS_COUNT 8
extern "C"
{
@ -183,12 +185,12 @@ struct MinorSlot
void * cdevNode; // (character device's devfs node)
UInt32 cdevOpen; // (character device's open count)
IOStorageAccess cdevOpenLevel; // (character device's open level)
#if TARGET_OS_EMBEDDED
#if !TARGET_OS_OSX
IOStorageOptions cdevOptions;
#endif /* TARGET_OS_EMBEDDED */
#endif /* !TARGET_OS_OSX */
};
class MinorTable
class __exported MinorTable
{
protected:
class
@ -243,12 +245,13 @@ protected:
IOLock * _openLock; // (lock for opens, closes)
IOLock * _stateLock; // (lock for state, tables)
///w:start
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
thread_call_t _assertionCall;
IOPMDriverAssertionID _assertionID;
IOLock * _assertionLock;
AbsoluteTime _assertionTime;
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
OSMallocTag _iostorageMallocTag;
///w:stop
public:
@ -269,7 +272,7 @@ public:
void lockState();
void unlockState();
///w:start
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
thread_call_t getAssertionCall();
IOPMDriverAssertionID getAssertionID();
@ -280,7 +283,8 @@ public:
void lockAssertion();
void unlockAssertion();
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
OSMallocTag getIOStorageMallocTag();
///w:stop
};
@ -323,7 +327,12 @@ bool IOMediaBSDClient::start(IOService * provider)
// This method is called once we have been attached to the provider object.
//
IOMedia * media = (IOMedia *) provider;
IOMedia * media = (IOMedia *) OSDynamicCast(IOMedia, provider);
//
// validate provider is IOMedia
//
if ( media == NULL ) return false;
// Ask our superclass' opinion.
@ -948,6 +957,8 @@ int dkopen(dev_t dev, int flags, int devtype, proc_t /* proc */)
error = 0;
media = 0;
minor = gIOMediaBSDClientGlobals.getMinor(getminor(dev));
level = kIOStorageAccessInvalid;
levelOut = kIOStorageAccessInvalid;
//
// Process the open.
@ -1102,9 +1113,9 @@ int dkclose(dev_t dev, int /* flags */, int devtype, proc_t /* proc */)
{
minor->cdevOpen = 0;
minor->cdevOpenLevel = kIOStorageAccessNone;
#if TARGET_OS_EMBEDDED
#if !TARGET_OS_OSX
minor->cdevOptions = 0;
#endif /* TARGET_OS_EMBEDDED */
#endif /* !TARGET_OS_OSX */
}
levelOut = DK_ADD_ACCESS(minor->bdevOpenLevel, minor->cdevOpenLevel);
@ -1273,7 +1284,7 @@ int dkioctl(dev_t dev, u_long cmd, caddr_t data, int flags, proc_t proc)
*(uint64_t *)data = 0;
} break;
case DKIOCGETMAXBLOCKCOUNTREAD: // (uint64_t *)
{
//
@ -1839,11 +1850,19 @@ int dkioctl(dev_t dev, u_long cmd, caddr_t data, int flags, proc_t proc)
// This ioctl asks that the media object delete unused data.
//
// Dynamic allocation
IOStorageExtent * extents;
// Stack allocation
IOStorageExtent extentsArray [ MAX_UNMAP_EXTENTS_COUNT ];
uint32_t extentsNumBytesTotal = 0;
uint32_t extentsNumBytesLoop = 0;
dk_unmap_64_t request;
dk_unmap_32_t * request32;
dk_unmap_64_t * request64;
IOReturn status;
OSMallocTag iostorageTag = gIOMediaBSDClientGlobals.getIOStorageMallocTag();
assert(sizeof(dk_extent_t) == sizeof(IOStorageExtent));
@ -1868,47 +1887,112 @@ int dkioctl(dev_t dev, u_long cmd, caddr_t data, int flags, proc_t proc)
// Delete unused data from the media.
if ( request.extents == 0 ) { error = EINVAL; break; }
extents = IONew(IOStorageExtent, request.extentsCount);
if ( extents == 0 ) { error = ENOMEM; break; }
if ( proc == kernproc )
// Calculate number of bytes to allocate.
// Check unsigned wraparound
if ( request.extentsCount > UINT32_MAX / ( uint32_t ) sizeof ( IOStorageExtent ) )
{
bcopy( /* src */ (void *) request.extents,
/* dst */ extents,
/* n */ request.extentsCount * sizeof(IOStorageExtent) );
error = EOVERFLOW;
break;
}
else
{
error = copyin( /* uaddr */ request.extents,
/* kaddr */ extents,
/* len */ request.extentsCount * sizeof(IOStorageExtent) );
extentsNumBytesTotal = ( uint32_t ) ( request.extentsCount * sizeof ( IOStorageExtent ) );
}
// Set extents to the stack allocated array initially.
extents = extentsArray;
extentsNumBytesLoop = extentsNumBytesTotal;
if ( error == 0 )
if ( request.extentsCount > MAX_UNMAP_EXTENTS_COUNT )
{
// Attempt to allocate the extents.
extents = ( IOStorageExtent * ) OSMalloc_noblock ( extentsNumBytesTotal, iostorageTag );
if ( kdebug_enable )
if ( extents == 0 )
{
uint32_t i;
for ( i = 0; i < request.extentsCount; i++ )
{
KERNEL_DEBUG_CONSTANT(FSDBG_CODE(DBG_IOCTL, 1) | DBG_FUNC_NONE, dev,
extents[i].byteStart / minor->bdevBlockSize, extents[i].byteCount, 0, 0);
}
// Set back to the stack allocated array. We will send multiple unmaps
// down to the device driver. We set the "loop bytes" to be equal to the
// size of our stack allocated array (or the size of the extents passed in).
extents = extentsArray;
extentsNumBytesLoop = MAX_UNMAP_EXTENTS_COUNT * sizeof ( IOStorageExtent );
}
status = minor->media->unmap( /* client */ minor->client,
/* extents */ extents,
/* extentsCount */ request.extentsCount,
/* options */ request.options );
}
while ( extentsNumBytesTotal > 0 )
{
uint32_t extentsCount = extentsNumBytesLoop / sizeof ( IOStorageExtent );
// bzero the trim extents for good measure.
bzero ( extents, extentsNumBytesLoop );
if ( proc == kernproc )
{
bcopy( /* src */ (void *) request.extents,
/* dst */ extents,
/* n */ extentsNumBytesLoop );
}
else
{
error = copyin( /* uaddr */ request.extents,
/* kaddr */ extents,
/* len */ extentsNumBytesLoop );
}
if ( error == 0 )
{
if ( kdebug_enable )
{
uint32_t i;
for ( i = 0; i < extentsCount; i++ )
{
KERNEL_DEBUG_CONSTANT(FSDBG_CODE(DBG_IOCTL, 1) | DBG_FUNC_NONE, dev,
extents[i].byteStart / minor->bdevBlockSize, extents[i].byteCount, 0, 0);
}
}
status = minor->media->unmap( /* client */ minor->client,
/* extents */ extents,
/* extentsCount */ extentsCount,
/* options */ request.options );
error = minor->media->errnoFromReturn(status);
if ( error )
{
break;
}
}
else
{
// Couldn't copyin.
break;
}
error = minor->media->errnoFromReturn(status);
// Recalculate total extents left
extentsNumBytesTotal -= extentsNumBytesLoop;
// Increment extents pointer by "processed" extents
request.extents += extentsNumBytesLoop;
// Set loop counter to correct value for next iteration
extentsNumBytesLoop = min ( extentsNumBytesLoop, extentsNumBytesTotal );
}
IODelete(extents, IOStorageExtent, request.extentsCount);
if ( extents != extentsArray )
{
OSFree ( ( void * ) extents, request.extentsCount * sizeof ( IOStorageExtent ), iostorageTag );
}
} break;
@ -2026,6 +2110,31 @@ int dkioctl(dev_t dev, u_long cmd, caddr_t data, int flags, proc_t proc)
} break;
case DKIOCGETERRORDESCRIPTION: // (dk_error_description_t *)
{
//
// This ioctl returns a string describing errors
//
#define kNVMeFatalErrorCodeKey "Fatal Error Code"
#define kIOSATAQueueManagerTerminateReasonKey "Terminate Reason"
size_t l = ((dk_error_description_t *)data)->description_size;
char * p = ((dk_error_description_t *)data)->description;
OSObject * obj;
OSString * str;
obj = minor->media->copyProperty(kNVMeFatalErrorCodeKey, gIOServicePlane);
if (!obj)
obj = minor->media->copyProperty(kIOSATAQueueManagerTerminateReasonKey, gIOServicePlane);
if ((str = OSDynamicCast(OSString, obj)))
strlcpy(p, str->getCStringNoCopy(), l);
else
error = EINVAL;
OSSafeReleaseNULL(obj);
} break;
case DKIOCISSOLIDSTATE: // (uint32_t *)
{
//
@ -2214,6 +2323,90 @@ int dkioctl(dev_t dev, u_long cmd, caddr_t data, int flags, proc_t proc)
*(uint32_t *)data = 0;
} break;
case DKIOCGETLOCATION: // (uint64_t *)
{
//
// This ioctl returns the physical location of the device ( internal / external ).
//
// This ioctl was added to help the kernel differentiate between I/O to/from internal
// and external storage in an effort to better monitor NAND usage. This ioctl is reliant
// upon storage controller drivers providing information that is accurate. Therefore the
// result of this ioctl should be considered a "best effort" and should NOT be relied
// upon for making critical decisions.
// We default to the storage being considered internal.
*(uint64_t *)data = 0;
// First we look for a Protocol Characteristics dictionary. First party storage controller
// drivers should publish one.
OSDictionary * dictionary = OSDynamicCast(
/* class */ OSDictionary,
/* object */ minor->media->getProperty(
/* key */ kIOPropertyProtocolCharacteristicsKey,
/* plane */ gIOServicePlane ) );
if ( dictionary )
{
// We have a Protocol Characteristics dictionary. Check for the Physical Interconnect
// Location property.
OSString * string = OSDynamicCast(
/* class */ OSString,
/* object */ dictionary->getObject(
/* key */ kIOPropertyPhysicalInterconnectLocationKey ) );
if ( string && string->isEqualTo(kIOPropertyExternalKey) )
{
*(uint64_t *)data = DK_LOCATION_EXTERNAL;
}
}
else
{
// We couldn't find a Protocol Characteristics dictionary. Look for a Physical Interconnect
// Location property.
OSString * string = OSDynamicCast(
/* class */ OSString,
/* object */ minor->media->getProperty(
/* key */ kIOPropertyPhysicalInterconnectLocationKey,
/* plane */ gIOServicePlane ) );
if ( string && string->isEqualTo(kIOPropertyExternalKey) )
{
*(uint64_t *)data = DK_LOCATION_EXTERNAL;
}
}
} break;
///w:start
#if defined(DKIOCGETMAXSWAPWRITE) && defined(kIOMaximumSwapWriteKey)
///w:stop
case DKIOCGETMAXSWAPWRITE: // (uint64_t *)
{
//
// get maximum swap file write per day in bytes
//
OSNumber * number = OSDynamicCast(
/* class */ OSNumber,
/* object */ minor->media->getProperty(
/* key */ kIOMaximumSwapWriteKey,
/* plane */ gIOServicePlane ) );
if ( number )
*(uint64_t *)data = number->unsigned64BitValue();
else
*(uint64_t *)data = 0;
} break;
///w:start
#endif //DKIOCGETMAXSWAPWRITE
///w:stop
default:
{
@ -2460,13 +2653,13 @@ int dkioctl_cdev(dev_t dev, u_long cmd, caddr_t data, int flags, proc_t proc)
switch ( cmd )
{
#if TARGET_OS_EMBEDDED
#if !TARGET_OS_OSX
case _DKIOCSETSTATIC: // (void)
{
minor->cdevOptions |= kIOStorageOptionIsStatic;
} break;
#endif /* TARGET_OS_EMBEDDED */
#endif /* !TARGET_OS_OSX */
default:
{
@ -2578,16 +2771,13 @@ inline void DKR_SET_BYTE_COUNT(dkr_t dkr, dkrtype_t dkrtype, UInt64 bcount)
uio_setresid(((dio_t)dkr)->uio, uio_resid(((dio_t)dkr)->uio) - bcount);
}
inline void DKR_RUN_COMPLETION(dkr_t dkr, dkrtype_t dkrtype, IOReturn status)
inline void DKR_RUN_COMPLETION(dkr_t dkr, dkrtype_t dkrtype, int error)
{
if (dkrtype == DKRTYPE_BUF)
{
buf_t bp = (buf_t)dkr;
MinorSlot * minor;
minor = gIOMediaBSDClientGlobals.getMinor(getminor(buf_device(bp)));
buf_seterror(bp, minor->media->errnoFromReturn(status)); // (error?)
buf_seterror(bp, error); // (error?)
buf_biodone(bp); // (complete request)
}
}
@ -2673,7 +2863,7 @@ inline IOStorageAttributes DKR_GET_ATTRIBUTES(dkr_t dkr, dkrtype_t dkrtype)
attributes.priority = DK_TIER_TO_PRIORITY(bufattr_throttled(attributes.bufattr));
}
#if TARGET_OS_EMBEDDED
#if !TARGET_OS_OSX
else
{
dev_t dev = ((dio_t)dkr)->dev;
@ -2683,19 +2873,19 @@ inline IOStorageAttributes DKR_GET_ATTRIBUTES(dkr_t dkr, dkrtype_t dkrtype)
attributes.options |= minor->cdevOptions;
}
#endif /* TARGET_OS_EMBEDDED */
#endif /* !TARGET_OS_OSX */
return attributes;
}
///w:start
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
inline bool DKR_DELAY_IDLE_SLEEP(dkr_t dkr, dkrtype_t dkrtype)
{
return (dkrtype == DKRTYPE_BUF)
? bufattr_delayidlesleep(buf_attr((buf_t)dkr))
: false;
}
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
///w:stop
int dkreadwrite(dkr_t dkr, dkrtype_t dkrtype)
@ -2718,8 +2908,8 @@ int dkreadwrite(dkr_t dkr, dkrtype_t dkrtype)
if ( ( minor == NULL ) || ( minor->isOrphaned ) ) // (is minor in flux?)
{
status = kIOReturnNoMedia;
goto dkreadwriteErr;
DKR_RUN_COMPLETION(dkr, dkrtype, ENXIO); // DKR_RUN_COMPLETION is a NO-OP on synchronous IO
return ENXIO;
}
if ( minor->media->isFormatted() == false ) // (is media unformatted?)
@ -2822,7 +3012,7 @@ int dkreadwrite(dkr_t dkr, dkrtype_t dkrtype)
DKR_SET_DRIVER_DATA(dkr, dkrtype, buffer);
///w:start
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
if ( DKR_DELAY_IDLE_SLEEP(dkr, dkrtype) )
{
IOPMDriverAssertionID assertionID;
@ -2856,7 +3046,7 @@ int dkreadwrite(dkr_t dkr, dkrtype_t dkrtype)
gIOMediaBSDClientGlobals.unlockAssertion();
}
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
///w:stop
if ( DKR_IS_ASYNCHRONOUS(dkr, dkrtype) ) // (an asynchronous request?)
{
@ -2945,14 +3135,22 @@ void dkreadwritecompletion( void * target,
{
if ( status != kIOReturnNotPermitted )
{
IOLog("%s: %s.\n", minor->name, minor->media->stringFromReturn(status));
if ( minor != NULL )
{
IOLog("%s: %s.\n", minor->name, minor->media->stringFromReturn(status));
}
else
{
IOLog("minor not available for device %x: %x.\n", dev, status);
}
}
}
if ( DKR_IS_ASYNCHRONOUS(dkr, dkrtype) ) // (an asynchronous request?)
{
DKR_SET_BYTE_COUNT(dkr, dkrtype, actualByteCount); // (set byte count)
DKR_RUN_COMPLETION(dkr, dkrtype, status); // (run completion)
DKR_RUN_COMPLETION(dkr, dkrtype,
((minor != NULL) ? minor->media->errnoFromReturn(status) : ENXIO)); // (run completion)
}
else
{
@ -2960,7 +3158,7 @@ void dkreadwritecompletion( void * target,
}
}
///w:start
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
void dkreadwriteassertion(thread_call_param_t param0, thread_call_param_t param1)
{
AbsoluteTime assertionTime;
@ -2988,7 +3186,7 @@ void dkreadwriteassertion(thread_call_param_t param0, thread_call_param_t param1
gIOMediaBSDClientGlobals.unlockAssertion();
}
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
///w:stop
// =============================================================================
@ -3353,20 +3551,30 @@ UInt32 MinorTable::insert( IOMedia * media,
// Create a block and character device node in BSD for this media.
const char *owner_keys[3] = {"owner-uid", "owner-gid", "owner-mode"};
int owner_id_mode[3] = {UID_ROOT, GID_OPERATOR, 0640};
int i;
for (i=0; i<3; i++)
{
OSNumber *_num = OSDynamicCast(OSNumber, media->getProperty(owner_keys[i], gIOServicePlane));
if (_num) owner_id_mode[i] = _num->unsigned32BitValue();
}
bdevNode = devfs_make_node( /* dev */ makedev(majorID, minorID),
/* type */ DEVFS_BLOCK,
/* owner */ UID_ROOT,
/* group */ GID_OPERATOR,
/* permission */ 0640,
/* owner */ owner_id_mode[0],
/* group */ owner_id_mode[1],
/* permission */ owner_id_mode[2],
/* name (fmt) */ "disk%d%s",
/* name (arg) */ anchorID,
/* name (arg) */ slicePath );
cdevNode = devfs_make_node( /* dev */ makedev(majorID, minorID),
/* type */ DEVFS_CHAR,
/* owner */ UID_ROOT,
/* group */ GID_OPERATOR,
/* permission */ 0640,
/* owner */ owner_id_mode[0],
/* group */ owner_id_mode[1],
/* permission */ owner_id_mode[2],
/* name (fmt) */ "rdisk%d%s",
/* name (arg) */ anchorID,
/* name (arg) */ slicePath );
@ -3403,9 +3611,9 @@ UInt32 MinorTable::insert( IOMedia * media,
_table[minorID].cdevNode = cdevNode;
_table[minorID].cdevOpen = 0;
_table[minorID].cdevOpenLevel = kIOStorageAccessNone;
#if TARGET_OS_EMBEDDED
#if !TARGET_OS_OSX
_table[minorID].cdevOptions = 0;
#endif /* TARGET_OS_EMBEDDED */
#endif /* !TARGET_OS_OSX */
_table[minorID].client->retain(); // (retain client)
_table[minorID].media->retain(); // (retain media)
@ -3703,11 +3911,13 @@ IOMediaBSDClientGlobals::IOMediaBSDClientGlobals()
_openLock = IOLockAlloc();
_stateLock = IOLockAlloc();
///w:start
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
_assertionCall = thread_call_allocate(dkreadwriteassertion, NULL);
_assertionID = kIOPMUndefinedDriverAssertionID;
_assertionLock = IOLockAlloc();
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
// Alloc tag before bdevsw and cdevsw hook-ups.
_iostorageMallocTag = OSMalloc_Tagalloc ( "com.apple.iokit.iostoragefamily", 0 );
///w:stop
}
@ -3718,10 +3928,10 @@ IOMediaBSDClientGlobals::~IOMediaBSDClientGlobals()
//
///w:start
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
if ( _assertionCall ) thread_call_free(_assertionCall);
if ( _assertionLock ) IOLockFree(_assertionLock);
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
///w:stop
if ( _openLock ) IOLockFree(_openLock);
if ( _stateLock ) IOLockFree(_stateLock);
@ -3730,6 +3940,8 @@ IOMediaBSDClientGlobals::~IOMediaBSDClientGlobals()
if ( _minors ) delete _minors;
if ( _anchors ) delete _anchors;
if ( _iostorageMallocTag ) OSMalloc_Tagfree(_iostorageMallocTag);
_iostorageMallocTag = NULL;
}
AnchorTable * IOMediaBSDClientGlobals::getAnchors()
@ -3778,13 +3990,14 @@ bool IOMediaBSDClientGlobals::isValid()
( _minors ) &&
( _majorID != kInvalidMajorID ) &&
///w:start
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
( _assertionCall ) &&
( _assertionLock ) &&
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
///w:stop
( _openLock ) &&
( _stateLock );
( _stateLock ) &&
( _iostorageMallocTag );
}
void IOMediaBSDClientGlobals::lockOpen()
@ -3822,8 +4035,13 @@ void IOMediaBSDClientGlobals::unlockState()
IOLockUnlock(_stateLock);
}
OSMallocTag IOMediaBSDClientGlobals::getIOStorageMallocTag()
{
return _iostorageMallocTag;
}
///w:start
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
thread_call_t IOMediaBSDClientGlobals::getAssertionCall()
{
return _assertionCall;
@ -3858,5 +4076,5 @@ void IOMediaBSDClientGlobals::unlockAssertion()
{
IOLockUnlock(_assertionLock);
}
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
///w:stop

View File

@ -40,13 +40,13 @@ class AnchorTable;
class MinorTable;
struct MinorSlot;
UInt64 _IOMediaBSDClientGetThrottleMask(IOMedia * media);
__exported UInt64 _IOMediaBSDClientGetThrottleMask(IOMedia * media);
/*
* Class
*/
class IOMediaBSDClient : public IOService
class __exported IOMediaBSDClient : public IOService
{
OSDeclareDefaultStructors(IOMediaBSDClient)

View File

@ -39,19 +39,6 @@ static SInt32 partitionComparison( const OSMetaClassBase * object1,
UInt64 base1 = ( ( IOMedia * ) object1 )->getBase( );
UInt64 base2 = ( ( IOMedia * ) object2 )->getBase( );
#if TARGET_OS_EMBEDDED
OSString * uuid1 = OSDynamicCast( OSString, ( ( IOMedia * ) object1 )->getProperty( kIOMediaUUIDKey ) );
OSString * uuid2 = OSDynamicCast( OSString, ( ( IOMedia * ) object2 )->getProperty( kIOMediaUUIDKey ) );
if ( uuid1 || uuid2 )
{
if ( uuid1 == 0 ) return -1;
if ( uuid2 == 0 ) return 1;
return strcmp( uuid2->getCStringNoCopy( ), uuid1->getCStringNoCopy( ) );
}
#endif /* TARGET_OS_EMBEDDED */
if ( base1 < base2 ) return 1;
if ( base1 > base2 ) return -1;
@ -331,7 +318,7 @@ IOReturn IOPartitionScheme::synchronize(IOService * client,
// Flush the cached data in the storage object, if any.
//
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
if ( _respondsTo_synchronizeCache )
{
if ( options == _kIOStorageSynchronizeOption_super__synchronizeCache )
@ -343,7 +330,7 @@ IOReturn IOPartitionScheme::synchronize(IOService * client,
return IOStorage::synchronize( client, byteStart, byteCount, options );
}
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
return getProvider( )->synchronize( this, byteStart, byteCount, options );
}
@ -556,48 +543,6 @@ OSSet * IOPartitionScheme::juxtaposeMediaObjects(OSSet * partitionsOld,
base1 = partition1 ? partition1->getBase( ) : UINT64_MAX;
base2 = partition2 ? partition2->getBase( ) : UINT64_MAX;
#if TARGET_OS_EMBEDDED
if ( partition1 && partition2 )
{
OSString * uuid1;
OSString * uuid2;
uuid1 = OSDynamicCast( OSString, partition1->getProperty( kIOMediaUUIDKey ) );
uuid2 = OSDynamicCast( OSString, partition2->getProperty( kIOMediaUUIDKey ) );
if ( uuid1 || uuid2 )
{
if ( uuid1 == 0 )
{
base1 = UINT64_MAX;
}
else if ( uuid2 == 0 )
{
base2 = UINT64_MAX;
}
else
{
int compare;
compare = strcmp( uuid1->getCStringNoCopy( ), uuid2->getCStringNoCopy( ) );
if ( compare > 0 )
{
base1 = UINT64_MAX;
}
else if ( compare < 0 )
{
base2 = UINT64_MAX;
}
else
{
base1 = base2;
}
}
}
}
#endif /* TARGET_OS_EMBEDDED */
if ( base1 > base2 )
{
// A partition was added.
@ -649,7 +594,7 @@ OSSet * IOPartitionScheme::juxtaposeMediaObjects(OSSet * partitionsOld,
if ( handleIsOpen( partition1 ) == false )
{
partition1->terminate( kIOServiceSynchronous );
partition1->terminate( );
detachMediaObjectFromDeviceTree( partition1 );
}
@ -838,9 +783,9 @@ OSMetaClassDefineReservedUnused(IOPartitionScheme, 29);
OSMetaClassDefineReservedUnused(IOPartitionScheme, 30);
OSMetaClassDefineReservedUnused(IOPartitionScheme, 31);
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
extern "C" void _ZN17IOPartitionScheme16synchronizeCacheEP9IOService( IOPartitionScheme * scheme, IOService * client )
{
scheme->synchronize( client, 0, 0 );
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */

View File

@ -106,7 +106,7 @@
* such as RAID will want to do extra processing for reads and writes.
*/
class IOPartitionScheme : public IOStorage
class __exported IOPartitionScheme : public IOStorage
{
OSDeclareDefaultStructors(IOPartitionScheme);

View File

@ -21,70 +21,88 @@
* @APPLE_LICENSE_HEADER_END@
*/
#define IOLOCKS_INLINE
#include <IOKit/assert.h>
#include <IOKit/IOLib.h>
#include <IOKit/storage/IOStorage.h>
#include <IOKit/IOLocks.h>
#define super IOService
OSDefineMetaClassAndAbstractStructors(IOStorage, IOService)
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
#define kIOStorageSynchronizeOptionsUnsupported ( ( IOStorage::ExpansionData * ) 1 )
#if defined(__x86_64__) || defined(__i386__)
extern "C" void _ZN9IOStorage16synchronizeCacheEP9IOService( IOStorage *, IOService * );
extern "C" void _ZN9IOStorage11synchronizeEP9IOServiceyyj( IOStorage *, IOService *, UInt64, UInt64, IOStorageSynchronizeOptions );
#define storageSynchronizeOptions( storage ) ( ( OSMemberFunctionCast( void *, storage, ( void ( IOStorage::* )( IOService * ) ) &IOStorage::synchronizeCache ) == _ZN9IOStorage16synchronizeCacheEP9IOService ) && \
( OSMemberFunctionCast( void *, storage, ( void ( IOStorage::* )( IOService *, UInt64, UInt64, IOStorageSynchronizeOptions ) ) &IOStorage::synchronize ) != _ZN9IOStorage11synchronizeEP9IOServiceyyj ) )
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#define storageSynchronizeOptions( storage ) ( ( OSMemberFunctionCast( void *, storage, &IOStorage::synchronizeCache ) == _ZN9IOStorage16synchronizeCacheEP9IOService ) && \
( OSMemberFunctionCast( void *, storage, &IOStorage::synchronize ) != _ZN9IOStorage11synchronizeEP9IOServiceyyj ) )
#else
#define storageSynchronizeOptions( storage ) (1)
#endif
#endif /* TARGET_OS_OSX */
class IOStorageSyncerLock
{
protected:
IOLock * _lock;
IOSimpleLock _lock;
public:
inline IOStorageSyncerLock( )
{
_lock = IOLockAlloc( );
IOSimpleLockInit( &_lock );
}
inline ~IOStorageSyncerLock( )
{
if ( _lock ) IOLockFree( _lock );
IOSimpleLockDestroy( &_lock );
}
inline void lock( )
{
IOLockLock( _lock );
IOSimpleLockLock( &_lock );
}
inline void unlock( )
{
IOLockUnlock( _lock );
IOSimpleLockUnlock( &_lock );
}
inline void sleep( void * event )
{
IOLockSleep( _lock, event, THREAD_UNINT );
wait_result_t ret = assert_wait( ( event_t ) event, false );
unlock( );
if( ret == THREAD_WAITING )
{
thread_block( THREAD_CONTINUE_NULL );
}
lock( );
}
inline void wakeup( void * event )
{
IOLockWakeup( _lock, event, false );
thread_wakeup( event );
}
};
static IOStorageSyncerLock gIOStorageSyncerLock;
class IOStorageSyncer
{
protected:
IOReturn _status;
bool _wakeup;
IOReturn _status;
bool _wakeup;
IOStorageSyncerLock _syncerLock;
public:
@ -95,14 +113,14 @@ public:
IOReturn wait( )
{
gIOStorageSyncerLock.lock( );
_syncerLock.lock( );
while ( _wakeup == false )
{
gIOStorageSyncerLock.sleep( this );
_syncerLock.sleep( ( void * )this );
}
gIOStorageSyncerLock.unlock( );
_syncerLock.unlock( );
return _status;
}
@ -111,13 +129,13 @@ public:
{
_status = status;
gIOStorageSyncerLock.lock( );
_syncerLock.lock( );
_wakeup = true;
gIOStorageSyncerLock.wakeup( this );
gIOStorageSyncerLock.unlock( );
_syncerLock.unlock( );
_syncerLock.wakeup( ( void * )this );
}
};
@ -134,7 +152,7 @@ static void storageCompletion(void * target,
((IOStorageSyncer *)target)->signal(status);
}
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
bool IOStorage::attach(IOService * provider)
{
if ( super::attach( provider ) == false )
@ -170,7 +188,7 @@ bool IOStorage::attach(IOService * provider)
return true;
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
void IOStorage::complete(IOStorageCompletion * completion,
IOReturn status,
@ -260,7 +278,7 @@ IOReturn IOStorage::write(IOService * client,
return syncer.wait();
}
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
IOReturn IOStorage::discard(IOService * client,
UInt64 byteStart,
UInt64 byteCount)
@ -283,7 +301,7 @@ IOReturn IOStorage::unmap(IOService * client,
return kIOReturnUnsupported;
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
IOReturn
IOStorage::getProvisionStatus(IOService * client,
@ -342,7 +360,7 @@ IOReturn IOStorage::setPriority(IOService * client,
return kIOReturnUnsupported;
}
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
IOReturn IOStorage::synchronizeCache(IOService * client)
{
//
@ -371,7 +389,7 @@ IOReturn IOStorage::synchronize(IOService * client,
/* default the barrier synchronize to full flush */
return synchronizeCache( client );
}
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
OSMetaClassDefineReservedUsed(IOStorage, 0);
OSMetaClassDefineReservedUsed(IOStorage, 1);

View File

@ -140,21 +140,30 @@
* No access is requested; should not be passed to open().
* @constant kIOStorageAccessReader
* Read-only access is requested.
* @constant kIOStorageAccessWriter
* write-only access is requested.
* @constant kIOStorageAccessReaderWriter
* Read and write access is requested.
* @constant kIOStorageAccessSharedLock
* Shared access is requested.
* @constant kIOStorageAccessExclusiveLock
* Exclusive access is requested.
* @constant kIOStorageAccessInvalid
* Invalid access is requested.
* @constant kIOStorageAccessReserved
* Reserved Access.
*/
enum
{
kIOStorageAccessNone = 0x00,
kIOStorageAccessReader = 0x01,
kIOStorageAccessWriter = 0x02,
kIOStorageAccessReaderWriter = 0x03,
kIOStorageAccessSharedLock = 0x04,
kIOStorageAccessExclusiveLock = 0x08
kIOStorageAccessExclusiveLock = 0x08,
kIOStorageAccessInvalid = 0x0D,
kIOStorageAccessReserved = 0xFFFFFFF0
};
typedef UInt32 IOStorageAccess;
@ -259,11 +268,8 @@ struct IOStorageAttributes
UInt8 reserved0024;
UInt32 reserved0032;
UInt64 reserved0064;
UInt64 reserved0128;
bufattr_t bufattr;
#if TARGET_OS_EMBEDDED
UInt64 adjustedOffset;
#endif /* TARGET_OS_EMBEDDED */
bufattr_t bufattr;
};
/*!
@ -371,7 +377,7 @@ struct IOStorageCompletion
* versions implemented in the subclass.
*/
class IOStorage : public IOService
class __exported IOStorage : public IOService
{
OSDeclareAbstractStructors(IOStorage);
@ -436,9 +442,9 @@ protected:
public:
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual bool attach(IOService * provider) APPLE_KEXT_OVERRIDE;
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*!
* @function complete
@ -535,9 +541,9 @@ public:
IOStorageAttributes * attributes = 0,
UInt64 * actualByteCount = 0);
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual IOReturn synchronizeCache(IOService * client) __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*!
* @function read
@ -601,11 +607,11 @@ public:
IOStorageAttributes * attributes,
IOStorageCompletion * completion) = 0;
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual IOReturn discard(IOService * client,
UInt64 byteStart,
UInt64 byteCount) __attribute__ ((deprecated));
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
/*!
* @function unmap
@ -624,17 +630,17 @@ public:
* Returns the status of the operation.
*/
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual IOReturn unmap(IOService * client,
IOStorageExtent * extents,
UInt32 extentsCount,
IOStorageUnmapOptions options = 0); /* 10.6.6 */
#else /* !TARGET_OS_OSX || !defined(__x86_64__) */
#else /* !TARGET_OS_OSX */
virtual IOReturn unmap(IOService * client,
IOStorageExtent * extents,
UInt32 extentsCount,
IOStorageUnmapOptions options = 0) = 0;
#endif /* !TARGET_OS_OSX || !defined(__x86_64__) */
#endif /* !TARGET_OS_OSX */
/*!
* @function lockPhysicalExtents
@ -721,17 +727,17 @@ public:
* Returns the status of the synchronization.
*/
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
virtual IOReturn synchronize(IOService * client,
UInt64 byteStart,
UInt64 byteCount,
IOStorageSynchronizeOptions options = 0); /* 10.11.0 */
#else /* !TARGET_OS_OSX || !defined(__x86_64__) */
#else /* !TARGET_OS_OSX */
virtual IOReturn synchronize(IOService * client,
UInt64 byteStart,
UInt64 byteCount,
IOStorageSynchronizeOptions options = 0) = 0;
#endif /* !TARGET_OS_OSX || !defined(__x86_64__) */
#endif /* !TARGET_OS_OSX */
/*!
* @function getProvisionStatus
@ -779,12 +785,13 @@ public:
OSMetaClassDeclareReservedUnused(IOStorage, 15);
};
#if TARGET_OS_OSX && defined(__x86_64__)
#if TARGET_OS_OSX
#ifdef KERNEL_PRIVATE
#define _kIOStorageSynchronizeOption_super__synchronizeCache 0xFFFFFFFF
#define _respondsTo_synchronizeCache ( IOStorage::_expansionData )
#endif /* KERNEL_PRIVATE */
#endif /* TARGET_OS_OSX && defined(__x86_64__) */
#endif /* TARGET_OS_OSX */
#endif /* __cplusplus */
#endif /* KERNEL */

View File

@ -24,6 +24,7 @@
#ifndef _IOKIT_IO_STORAGE_CONTROLLER_CHARACTERISTICS_H_
#define _IOKIT_IO_STORAGE_CONTROLLER_CHARACTERISTICS_H_
#include <TargetConditionals.h>
/*
* Controller Characteristics - Characteristics defined for controllers.

View File

@ -24,7 +24,13 @@
#ifndef _IOKIT_IO_STORAGE_DEVICE_CHARACTERISTICS_H_
#define _IOKIT_IO_STORAGE_DEVICE_CHARACTERISTICS_H_
#include <TargetConditionals.h>
#if TARGET_OS_DRIVERKIT
#include <DriverKit/storage/IOStorageProtocolCharacteristics.h>
#else
#include <IOKit/storage/IOStorageProtocolCharacteristics.h>
#endif
/*
* Device Characteristics - Characteristics defined for devices.
@ -544,6 +550,34 @@ Example:
#define kIOPropertyTargetDiskModeKey "Target Disk Mode"
/*!
@defined kIOPropertyInvalidStartupDiskKey
@discussion This key is used to denote devices when cannot be used as a startup disk.
Requirement: Optional.
Example:
<pre>
@textblock
<dict>
<key>Device Characteristics</key>
<dict>
<key>Vendor Name</key>
<string>APPLE</string>
<key>Product Name</key>
<string>Target Disk Mode</string>
<key>Product Revision Level</key>
<string>0000</string>
<key>Invalid Startup Disk</key>
<true/>
</dict>
</dict>
@/textblock
</pre>
*/
#define kIOPropertyInvalidStartupDiskKey "Invalid Startup Disk"
/*!
@defined kIOPropertyMediumTypeKey
@discussion This key is used to indicate the medium type of the device.

View File

@ -46,9 +46,22 @@
name = "IOStorageFamily Headers";
productName = "IOStorageFamily Headers";
};
723761472447C3BA000AFEA7 /* IOStorageFamily Headers_DriverKit */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 7237616A2447C3BA000AFEA7 /* Build configuration list for PBXAggregateTarget "IOStorageFamily Headers_DriverKit" */;
buildPhases = (
723761482447C3BA000AFEA7 /* CopyFiles */,
);
dependencies = (
);
name = "IOStorageFamily Headers_DriverKit";
productName = "IOStorageFamily Headers";
};
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
3D67B4DD242C80D400EFB54D /* IOBlockStoragePerfControlExports.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 728B62EF237A310B00FCA69D /* IOBlockStoragePerfControlExports.h */; };
3D67B4DE242C80DE00EFB54D /* IOBlockStoragePerfControlExports.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 728B62EF237A310B00FCA69D /* IOBlockStoragePerfControlExports.h */; };
3F9C5E661644E23600FC6152 /* IOBlockStorageDevice.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0560FFAA008B961F11CA2AA4 /* IOBlockStorageDevice.h */; };
3F9C5E671644E23600FC6152 /* IOBlockStorageDriver.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0560FFAB008B961F11CA2AA4 /* IOBlockStorageDriver.h */; };
3F9C5E681644E23600FC6152 /* IOFDiskPartitionScheme.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0560FFAC008B961F11CA2AA4 /* IOFDiskPartitionScheme.h */; };
@ -172,6 +185,11 @@
60FD687E0D402C95000D088D /* IOMediaBSDClient.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0560FFAE008B961F11CA2AA4 /* IOMediaBSDClient.h */; };
60FD687F0D402C95000D088D /* IOPartitionScheme.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0560FFB0008B961F11CA2AA4 /* IOPartitionScheme.h */; };
60FD68800D402C95000D088D /* IOStorage.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0560FFB1008B961F11CA2AA4 /* IOStorage.h */; };
723761562447C3BA000AFEA7 /* IOStorageControllerCharacteristics.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 603C2B8918E9D0BF00FD7A03 /* IOStorageControllerCharacteristics.h */; };
723761572447C3BA000AFEA7 /* IOStorageDeviceCharacteristics.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 60AA59530D64D57400A955B0 /* IOStorageDeviceCharacteristics.h */; };
723761582447C3BA000AFEA7 /* IOStorageProtocolCharacteristics.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 60AA59540D64D57400A955B0 /* IOStorageProtocolCharacteristics.h */; };
72873203237B58270043F718 /* IOBlockStoragePerfControlExports.h in Headers */ = {isa = PBXBuildFile; fileRef = 728B62EF237A310B00FCA69D /* IOBlockStoragePerfControlExports.h */; };
728B62F0237A310B00FCA69D /* IOBlockStoragePerfControlExports.h in Headers */ = {isa = PBXBuildFile; fileRef = 728B62EF237A310B00FCA69D /* IOBlockStoragePerfControlExports.h */; };
C1E55B070D32D158002875AA /* IOBlockStorageDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 0560FFAA008B961F11CA2AA4 /* IOBlockStorageDevice.h */; };
C1E55B080D32D158002875AA /* IOBlockStorageDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 0560FFAB008B961F11CA2AA4 /* IOBlockStorageDriver.h */; };
C1E55B090D32D158002875AA /* IOFDiskPartitionScheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0560FFAC008B961F11CA2AA4 /* IOFDiskPartitionScheme.h */; };
@ -258,6 +276,7 @@
dstPath = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework/Versions/A/Headers/IOKit/storage";
dstSubfolderSpec = 0;
files = (
3D67B4DE242C80DE00EFB54D /* IOBlockStoragePerfControlExports.h in CopyFiles */,
606006711746B81000B4220D /* IOApplePartitionScheme.h in CopyFiles */,
606B78B60D4A564A00A2EB99 /* IOBlockStorageDevice.h in CopyFiles */,
606B78B70D4A564B00A2EB99 /* IOBlockStorageDriver.h in CopyFiles */,
@ -304,6 +323,7 @@
dstPath = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework/Versions/A/Headers/IOKit/storage";
dstSubfolderSpec = 0;
files = (
3D67B4DD242C80D400EFB54D /* IOBlockStoragePerfControlExports.h in CopyFiles */,
60FD686B0D402C82000D088D /* IOAppleLabelScheme.h in CopyFiles */,
60FD686C0D402C82000D088D /* IOApplePartitionScheme.h in CopyFiles */,
60FD686D0D402C82000D088D /* IOBlockStorageDevice.h in CopyFiles */,
@ -346,6 +366,18 @@
);
runOnlyForDeploymentPostprocessing = 1;
};
723761482447C3BA000AFEA7 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
dstPath = "System/DriverKit$(SYSTEM_LIBRARY_DIR)/Frameworks/DriverKit.framework/Headers/storage";
dstSubfolderSpec = 0;
files = (
723761562447C3BA000AFEA7 /* IOStorageControllerCharacteristics.h in CopyFiles */,
723761572447C3BA000AFEA7 /* IOStorageDeviceCharacteristics.h in CopyFiles */,
723761582447C3BA000AFEA7 /* IOStorageProtocolCharacteristics.h in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 1;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
@ -379,6 +411,8 @@
60DDA51B07382C6A00FAB8B3 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
60DDA51C07382C6A00FAB8B3 /* IOStorageFamily.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IOStorageFamily.kext; sourceTree = BUILT_PRODUCTS_DIR; };
60DDA54307382D0000FAB8B3 /* Kernel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kernel.framework; path = /System/Library/Frameworks/Kernel.framework; sourceTree = "<absolute>"; };
722F152A1F16D2F4005ADD98 /* kext.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = kext.xcconfig; sourceTree = "<group>"; };
728B62EF237A310B00FCA69D /* IOBlockStoragePerfControlExports.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IOBlockStoragePerfControlExports.h; sourceTree = "<group>"; };
C1E55B250D32D158002875AA /* IOStorageFamily.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IOStorageFamily.kext; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
@ -397,6 +431,7 @@
089C167CFE841241C02AAC07 /* Resources */ = {
isa = PBXGroup;
children = (
722F152A1F16D2F4005ADD98 /* kext.xcconfig */,
60DDA51B07382C6A00FAB8B3 /* Info.plist */,
089C167DFE841241C02AAC07 /* InfoPlist.strings */,
);
@ -430,6 +465,7 @@
6008184605C5671B00B652A2 /* IOGUIDPartitionScheme.cpp */,
6008184505C5671B00B652A2 /* IOGUIDPartitionScheme.h */,
0560FF9A008B94F111CA2AA4 /* IOMedia.cpp */,
728B62EF237A310B00FCA69D /* IOBlockStoragePerfControlExports.h */,
0560FFAD008B961F11CA2AA4 /* IOMedia.h */,
0560FF9B008B94F111CA2AA4 /* IOMediaBSDClient.cpp */,
0560FFAE008B961F11CA2AA4 /* IOMediaBSDClient.h */,
@ -460,6 +496,7 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
728B62F0237A310B00FCA69D /* IOBlockStoragePerfControlExports.h in Headers */,
60DDA4FA07382C6A00FAB8B3 /* IOAppleLabelScheme.h in Headers */,
60DDA4FB07382C6A00FAB8B3 /* IOApplePartitionScheme.h in Headers */,
60DDA4FC07382C6A00FAB8B3 /* IOBlockStorageDevice.h in Headers */,
@ -482,6 +519,7 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
72873203237B58270043F718 /* IOBlockStoragePerfControlExports.h in Headers */,
6060066F1746B7CA00B4220D /* IOApplePartitionScheme.h in Headers */,
C1E55B070D32D158002875AA /* IOBlockStorageDevice.h in Headers */,
C1E55B080D32D158002875AA /* IOBlockStorageDriver.h in Headers */,
@ -509,6 +547,7 @@
60DDA4F907382C6A00FAB8B3 /* Headers */,
60DDA50607382C6A00FAB8B3 /* Resources */,
60284E141517B57C00FDF55B /* ShellScript */,
956C6B5C24B91DA40044FE12 /* ShellScript */,
60DDA50B07382C6A00FAB8B3 /* Sources */,
);
buildRules = (
@ -553,6 +592,7 @@
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
en,
);
mainGroup = 089C166AFE841209C02AAC07 /* IOStorageFamily */;
@ -564,6 +604,7 @@
60FD685C0D402C4E000D088D /* IOStorageFamily Headers */,
606B789F0D4A556B00A2EB99 /* IOStorageFamily Headers_Embedded */,
3F9C5E641644E23600FC6152 /* IOStorageFamily_Sim */,
723761472447C3BA000AFEA7 /* IOStorageFamily Headers_DriverKit */,
);
};
/* End PBXProject section */
@ -591,7 +632,7 @@
);
runOnlyForDeploymentPostprocessing = 1;
shellPath = /bin/sh;
shellScript = "headers=\"${DSTROOT}${INSTALL_PATH_PREFIX}${SYSTEM_LIBRARY_DIR}/Frameworks/IOKit.framework/Versions/A/Headers/storage/*.h\";\nfor header in ${headers}; do\n unifdef -UKERNEL \"${header}\" > \"${header}.unifdef\"\n mv \"${header}.unifdef\" \"${header}\"\ndone";
shellScript = "headers=\"${DSTROOT}${INSTALL_PATH_PREFIX}${SYSTEM_LIBRARY_DIR}/Frameworks/IOKit.framework/Versions/A/Headers/storage/*.h\";\nfor header in ${headers}; do\n unifdef -UKERNEL \"${header}\" > \"${header}.unifdef\"\n mv \"${header}.unifdef\" \"${header}\"\ndone\n";
};
60284E141517B57C00FDF55B /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
@ -604,7 +645,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/usr/local/bin/iconcompiler -i \"External\" -r \"$PROJECT_DIR/IconResources\" -o \"$BUILT_PRODUCTS_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH\" || exit 1\n/usr/local/bin/iconcompiler -i \"Internal\" -r \"$PROJECT_DIR/IconResources\" -o \"$BUILT_PRODUCTS_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH\" || exit 1\n/usr/local/bin/iconcompiler -i \"Removable\" -r \"$PROJECT_DIR/IconResources\" -o \"$BUILT_PRODUCTS_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH\" || exit 1";
shellScript = "/usr/local/bin/iconcompiler -i \"External\" -r \"$PROJECT_DIR/IconResources\" -o \"$BUILT_PRODUCTS_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH\" || exit 1\n/usr/local/bin/iconcompiler -i \"Internal\" -r \"$PROJECT_DIR/IconResources\" -o \"$BUILT_PRODUCTS_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH\" || exit 1\n/usr/local/bin/iconcompiler -i \"Removable\" -r \"$PROJECT_DIR/IconResources\" -o \"$BUILT_PRODUCTS_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH\" || exit 1\n";
};
606B78B30D4A562200A2EB99 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
@ -617,7 +658,7 @@
);
runOnlyForDeploymentPostprocessing = 1;
shellPath = /bin/sh;
shellScript = "headers=\"${DSTROOT}${SYSTEM_LIBRARY_DIR}/Frameworks/IOKit.framework/Versions/A/Headers/storage/*.h\";\nfor header in ${headers}; do\n unifdef -UKERNEL \"${header}\" > \"${header}.unifdef\"\n mv \"${header}.unifdef\" \"${header}\"\ndone";
shellScript = "headers=\"${DSTROOT}${SYSTEM_LIBRARY_DIR}/Frameworks/IOKit.framework/Versions/A/Headers/storage/*.h\";\nfor header in ${headers}; do\n unifdef -UKERNEL \"${header}\" > \"${header}.unifdef\"\n mv \"${header}.unifdef\" \"${header}\"\ndone\n";
};
60FD686A0D402C6A000D088D /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
@ -630,7 +671,24 @@
);
runOnlyForDeploymentPostprocessing = 1;
shellPath = /bin/sh;
shellScript = "headers=\"${DSTROOT}${SYSTEM_LIBRARY_DIR}/Frameworks/IOKit.framework/Versions/A/Headers/storage/*.h\";\nfor header in ${headers}; do\n unifdef -UKERNEL \"${header}\" > \"${header}.unifdef\"\n mv \"${header}.unifdef\" \"${header}\"\ndone";
shellScript = "headers=\"${DSTROOT}${SYSTEM_LIBRARY_DIR}/Frameworks/IOKit.framework/Versions/A/Headers/storage/*.h\";\nfor header in ${headers}; do\n unifdef -UKERNEL \"${header}\" > \"${header}.unifdef\"\n mv \"${header}.unifdef\" \"${header}\"\ndone\n";
};
956C6B5C24B91DA40044FE12 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "script=\"${SRCROOT}/config/generate-symbols-plist.sh\";\nif [ -x \"$script\" ]; then\n . \"$script\" ${SYMROOT}/symbolsets.plist ${SRCROOT}/Info.plist ${SRCROOT}/config/IOStorageFamily.exports\nfi\n\n";
};
/* End PBXShellScriptBuildPhase section */
@ -700,12 +758,16 @@
305CA1DB1AD49B7700E8FE14 /* DebugCoverage */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
OTHER_LDFLAGS = "";
};
name = DebugCoverage;
};
305CA1DC1AD49B7700E8FE14 /* DebugCoverage */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
INFOPLIST_FILE = Info.plist;
INFOPLIST_PREFIX_HEADER = "$(SDKROOT)/usr/include/TargetConditionals.h";
INFOPLIST_PREPROCESS = YES;
@ -714,6 +776,10 @@
"-fcoverage-mapping",
);
OTHER_LDFLAGS = "";
"OTHER_LDFLAGS[sdk=macosx*]" = (
"-Wl,-sectcreate,__LINKINFO,__symbolsets,$(SYMROOT)/symbolsets.plist",
"-Wl,-segprot,__LINKINFO,r--,r--",
);
PRODUCT_NAME = IOStorageFamily;
WARNING_CFLAGS = "-Wall";
WRAPPER_EXTENSION = kext;
@ -767,12 +833,16 @@
305CA1E11AD49B7F00E8FE14 /* ReleaseCoverage */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
OTHER_LDFLAGS = "";
};
name = ReleaseCoverage;
};
305CA1E21AD49B7F00E8FE14 /* ReleaseCoverage */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
INFOPLIST_FILE = Info.plist;
INFOPLIST_PREFIX_HEADER = "$(SDKROOT)/usr/include/TargetConditionals.h";
INFOPLIST_PREPROCESS = YES;
@ -781,6 +851,10 @@
"-fcoverage-mapping",
);
OTHER_LDFLAGS = "";
"OTHER_LDFLAGS[sdk=macosx*]" = (
"-Wl,-sectcreate,__LINKINFO,__symbolsets,$(SYMROOT)/symbolsets.plist",
"-Wl,-segprot,__LINKINFO,r--,r--",
);
PRODUCT_NAME = IOStorageFamily;
WARNING_CFLAGS = "-Wall";
WRAPPER_EXTENSION = kext;
@ -869,10 +943,17 @@
};
60CD8A3408A7E7F300DC31BD /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 722F152A1F16D2F4005ADD98 /* kext.xcconfig */;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
INFOPLIST_FILE = Info.plist;
INFOPLIST_PREFIX_HEADER = "$(SDKROOT)/usr/include/TargetConditionals.h";
INFOPLIST_PREPROCESS = YES;
OTHER_LDFLAGS = "";
"OTHER_LDFLAGS[sdk=macosx*]" = (
"-Wl,-sectcreate,__LINKINFO,__symbolsets,$(SYMROOT)/symbolsets.plist",
"-Wl,-segprot,__LINKINFO,r--,r--",
);
PRODUCT_NAME = IOStorageFamily;
WARNING_CFLAGS = "-Wall";
WRAPPER_EXTENSION = kext;
@ -881,10 +962,17 @@
};
60CD8A3508A7E7F300DC31BD /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 722F152A1F16D2F4005ADD98 /* kext.xcconfig */;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
INFOPLIST_FILE = Info.plist;
INFOPLIST_PREFIX_HEADER = "$(SDKROOT)/usr/include/TargetConditionals.h";
INFOPLIST_PREPROCESS = YES;
OTHER_LDFLAGS = "";
"OTHER_LDFLAGS[sdk=macosx*]" = (
"-Wl,-sectcreate,__LINKINFO,__symbolsets,$(SYMROOT)/symbolsets.plist",
"-Wl,-segprot,__LINKINFO,r--,r--",
);
PRODUCT_NAME = IOStorageFamily;
WARNING_CFLAGS = "-Wall";
WRAPPER_EXTENSION = kext;
@ -894,12 +982,18 @@
60CD8A3808A7E7F300DC31BD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
OTHER_LDFLAGS = "";
};
name = Debug;
};
60CD8A3908A7E7F300DC31BD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
OTHER_LDFLAGS = "";
};
name = Release;
};
@ -921,8 +1015,49 @@
};
name = Release;
};
7237616B2447C3BA000AFEA7 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
INSTALLHDRS_COPY_PHASE = YES;
INSTALLHDRS_SCRIPT_PHASE = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = driverkit.internal;
};
name = Debug;
};
7237616C2447C3BA000AFEA7 /* DebugCoverage */ = {
isa = XCBuildConfiguration;
buildSettings = {
INSTALLHDRS_COPY_PHASE = YES;
INSTALLHDRS_SCRIPT_PHASE = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = driverkit.internal;
};
name = DebugCoverage;
};
7237616D2447C3BA000AFEA7 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
INSTALLHDRS_COPY_PHASE = YES;
INSTALLHDRS_SCRIPT_PHASE = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = driverkit.internal;
};
name = Release;
};
7237616E2447C3BA000AFEA7 /* ReleaseCoverage */ = {
isa = XCBuildConfiguration;
buildSettings = {
INSTALLHDRS_COPY_PHASE = YES;
INSTALLHDRS_SCRIPT_PHASE = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = driverkit.internal;
};
name = ReleaseCoverage;
};
C1E55B220D32D158002875AA /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 722F152A1F16D2F4005ADD98 /* kext.xcconfig */;
buildSettings = {
INFOPLIST_FILE = Info.plist;
INFOPLIST_PREFIX_HEADER = "$(SDKROOT)/usr/include/TargetConditionals.h";
@ -935,6 +1070,7 @@
};
C1E55B230D32D158002875AA /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 722F152A1F16D2F4005ADD98 /* kext.xcconfig */;
buildSettings = {
INFOPLIST_FILE = Info.plist;
INFOPLIST_PREFIX_HEADER = "$(SDKROOT)/usr/include/TargetConditionals.h";
@ -1003,6 +1139,17 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
7237616A2447C3BA000AFEA7 /* Build configuration list for PBXAggregateTarget "IOStorageFamily Headers_DriverKit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
7237616B2447C3BA000AFEA7 /* Debug */,
7237616C2447C3BA000AFEA7 /* DebugCoverage */,
7237616D2447C3BA000AFEA7 /* Release */,
7237616E2447C3BA000AFEA7 /* ReleaseCoverage */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C1E55B210D32D158002875AA /* Build configuration list for PBXNativeTarget "IOStorageFamily_Embedded" */ = {
isa = XCConfigurationList;
buildConfigurations = (

View File

@ -24,7 +24,13 @@
#ifndef _IOKIT_IO_STORAGE_PROTOCOL_CHARACTERISTICS_H_
#define _IOKIT_IO_STORAGE_PROTOCOL_CHARACTERISTICS_H_
#include <TargetConditionals.h>
#if TARGET_OS_DRIVERKIT
#include <DriverKit/storage/IOStorageControllerCharacteristics.h>
#else
#include <IOKit/storage/IOStorageControllerCharacteristics.h>
#endif
/*
* Protocol Characteristics - Characteristics defined for protocols.
@ -641,5 +647,50 @@ Example:
*/
#define kIOPropertyPhysicalInterconnectTypePCI "PCI"
/*!
@defined kIOPropertyPhysicalInterconnectTypePCIExpress
@discussion This key defines the value of PCI-Express for the key
kIOPropertyPhysicalInterconnectTypePCIExpress. If the device is connected
via PCI-Express, this key should be set.
Example:
<pre>
@textblock
<dict>
<key>Protocol Characteristics</key>
<dict>
<key>Physical Interconnect</key>
<string>PCI-Express</string>
<key>Physical Interconnect Location</key>
<string>Internal</string>
</dict>
</dict>
@/textblock
</pre>
*/
#define kIOPropertyPhysicalInterconnectTypePCIExpress "PCI-Express"
/*!
@defined kIOPropertyPhysicalInterconnectTypeAppleFabric
@discussion This key defines the value of Apple Fabric for the key
kIOPropertyPhysicalInterconnectTypeAppleFabric. If the device is connected
via Apple Fabric, this key should be set.
Example:
<pre>
@textblock
<dict>
<key>Protocol Characteristics</key>
<dict>
<key>Physical Interconnect</key>
<string>Apple Fabric</string>
<key>Physical Interconnect Location</key>
<string>Internal</string>
</dict>
</dict>
@/textblock
</pre>
*/
#define kIOPropertyPhysicalInterconnectTypeAppleFabric "Apple Fabric"
#endif /* _IOKIT_IO_STORAGE_PROTOCOL_CHARACTERISTICS_H_ */

BIN
IconResources/External_128x128.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 17 KiB

BIN
IconResources/External_128x128@2x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 66 KiB

BIN
IconResources/External_16x16.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 709 B

BIN
IconResources/External_16x16@2x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
IconResources/External_256x256.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 66 KiB

BIN
IconResources/External_256x256@2x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

After

Width:  |  Height:  |  Size: 263 KiB

BIN
IconResources/External_32x32.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
IconResources/External_32x32@2x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
IconResources/External_512x512.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

After

Width:  |  Height:  |  Size: 263 KiB

BIN
IconResources/External_512x512@2x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 761 KiB

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
IconResources/Internal_128x128.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 19 KiB

BIN
IconResources/Internal_128x128@2x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 62 KiB

BIN
IconResources/Internal_16x16.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 758 B

BIN
IconResources/Internal_16x16@2x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
IconResources/Internal_256x256.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 62 KiB

BIN
IconResources/Internal_256x256@2x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

After

Width:  |  Height:  |  Size: 235 KiB

BIN
IconResources/Internal_32x32.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
IconResources/Internal_32x32@2x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
IconResources/Internal_512x512.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 235 KiB

BIN
IconResources/Internal_512x512@2x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 957 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 672 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 KiB

After

Width:  |  Height:  |  Size: 1020 KiB

View File

@ -22,7 +22,7 @@
<string>2.1</string>
<key>IOKitPersonalities</key>
<dict>
#if !TARGET_OS_EMBEDDED
#if TARGET_OS_OSX
<key>IOAppleLabelScheme</key>
<dict>
<key>Content Mask</key>
@ -47,7 +47,7 @@
<key>IOProviderClass</key>
<string>IOMedia</string>
</dict>
#endif /* !TARGET_OS_EMBEDDED */
#endif /* TARGET_OS_OSX */
<key>IOApplePartitionScheme</key>
<dict>
<key>Content Mask</key>

View File

@ -0,0 +1,713 @@
__Z32_IOMediaBSDClientGetThrottleMaskP7IOMedia
__ZN10MinorTable10isObsoleteEj
__ZN10MinorTable23getOpenCountForAnchorIDEj
__ZN10MinorTable23hasReferencesToAnchorIDEjb
__ZN10MinorTable6insertEP7IOMediajP16IOMediaBSDClientPc
__ZN10MinorTable6locateEP7IOMedia
__ZN10MinorTable6removeEj
__ZN10MinorTable6updateEP7IOMediajP16IOMediaBSDClientPc
__ZN10MinorTable8getMinorEj
__ZN10MinorTable8obsoleteEj
__ZN10MinorTableC1Ev
__ZN10MinorTableC2Ev
__ZN10MinorTableD1Ev
__ZN10MinorTableD2Ev
__ZN11IODeblocker10gMetaClassE
__ZN11IODeblocker10superClassE
__ZN11IODeblocker12getByteStartEv
__ZN11IODeblocker12getNextStageEv
__ZN11IODeblocker13withBlockSizeEyyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletionPv
__ZN11IODeblocker16getPreparationIDEv
__ZN11IODeblocker16getRequestBufferEv
__ZN11IODeblocker17getRequestContextEv
__ZN11IODeblocker17getThreadCallbackEv
__ZN11IODeblocker17initWithBlockSizeEyyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletionPv
__ZN11IODeblocker17setThreadCallbackEPFvPvS0_E
__ZN11IODeblocker18getPhysicalSegmentEyPyj
__ZN11IODeblocker20getRequestAttributesEv
__ZN11IODeblocker20getRequestCompletionEPy
__ZN11IODeblocker4freeEv
__ZN11IODeblocker7prepareEj
__ZN11IODeblocker8completeEj
__ZN11IODeblocker9MetaClassC1Ev
__ZN11IODeblocker9MetaClassC2Ev
__ZN11IODeblocker9metaClassE
__ZN11IODeblockerC1EPK11OSMetaClass
__ZN11IODeblockerC1Ev
__ZN11IODeblockerC2EPK11OSMetaClass
__ZN11IODeblockerC2Ev
__ZN11IODeblockerD0Ev
__ZN11IODeblockerD1Ev
__ZN11IODeblockerD2Ev
__ZN11IODeblockerdlEPvm
__ZN11IODeblockernwEm
__ZN14IOFilterScheme10gMetaClassE
__ZN14IOFilterScheme10handleOpenEP9IOServicejPv
__ZN14IOFilterScheme10superClassE
__ZN14IOFilterScheme11handleCloseEP9IOServicej
__ZN14IOFilterScheme11setPriorityEP9IOServiceP15IOStorageExtentjh
__ZN14IOFilterScheme11synchronizeEP9IOServiceyyj
__ZN14IOFilterScheme18copyPhysicalExtentEP9IOServicePyS2_
__ZN14IOFilterScheme18getProvisionStatusEP9IOServiceyyPjP24IOStorageProvisionExtenty
__ZN14IOFilterScheme19lockPhysicalExtentsEP9IOService
__ZN14IOFilterScheme21unlockPhysicalExtentsEP9IOService
__ZN14IOFilterScheme24_RESERVEDIOFilterScheme0Ev
__ZN14IOFilterScheme24_RESERVEDIOFilterScheme1Ev
__ZN14IOFilterScheme24_RESERVEDIOFilterScheme2Ev
__ZN14IOFilterScheme24_RESERVEDIOFilterScheme3Ev
__ZN14IOFilterScheme24_RESERVEDIOFilterScheme4Ev
__ZN14IOFilterScheme24_RESERVEDIOFilterScheme5Ev
__ZN14IOFilterScheme24_RESERVEDIOFilterScheme6Ev
__ZN14IOFilterScheme24_RESERVEDIOFilterScheme7Ev
__ZN14IOFilterScheme24_RESERVEDIOFilterScheme8Ev
__ZN14IOFilterScheme24_RESERVEDIOFilterScheme9Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme10Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme11Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme12Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme13Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme14Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme15Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme16Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme17Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme18Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme19Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme20Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme21Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme22Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme23Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme24Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme25Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme26Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme27Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme28Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme29Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme30Ev
__ZN14IOFilterScheme25_RESERVEDIOFilterScheme31Ev
__ZN14IOFilterScheme4readEP9IOServiceyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletion
__ZN14IOFilterScheme5unmapEP9IOServiceP15IOStorageExtentjj
__ZN14IOFilterScheme5writeEP9IOServiceyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletion
__ZN14IOFilterScheme9MetaClassC1Ev
__ZN14IOFilterScheme9MetaClassC2Ev
__ZN14IOFilterScheme9metaClassE
__ZN14IOFilterSchemeC1EPK11OSMetaClass
__ZN14IOFilterSchemeC1Ev
__ZN14IOFilterSchemeC2EPK11OSMetaClass
__ZN14IOFilterSchemeC2Ev
__ZN14IOFilterSchemeD0Ev
__ZN14IOFilterSchemeD1Ev
__ZN14IOFilterSchemeD2Ev
__ZN14IOFilterSchemedlEPvm
__ZN14IOFilterSchemenwEm
__ZN16IOMediaBSDClient10gMetaClassE
__ZN16IOMediaBSDClient10superClassE
__ZN16IOMediaBSDClient11createNodesEP7IOMedia
__ZN16IOMediaBSDClient13getWholeMediaEP7IOMediaPjPc
__ZN16IOMediaBSDClient26_RESERVEDIOMediaBSDClient0Ev
__ZN16IOMediaBSDClient26_RESERVEDIOMediaBSDClient1Ev
__ZN16IOMediaBSDClient26_RESERVEDIOMediaBSDClient2Ev
__ZN16IOMediaBSDClient26_RESERVEDIOMediaBSDClient3Ev
__ZN16IOMediaBSDClient26_RESERVEDIOMediaBSDClient4Ev
__ZN16IOMediaBSDClient26_RESERVEDIOMediaBSDClient5Ev
__ZN16IOMediaBSDClient26_RESERVEDIOMediaBSDClient6Ev
__ZN16IOMediaBSDClient26_RESERVEDIOMediaBSDClient7Ev
__ZN16IOMediaBSDClient26_RESERVEDIOMediaBSDClient8Ev
__ZN16IOMediaBSDClient26_RESERVEDIOMediaBSDClient9Ev
__ZN16IOMediaBSDClient27_RESERVEDIOMediaBSDClient10Ev
__ZN16IOMediaBSDClient27_RESERVEDIOMediaBSDClient11Ev
__ZN16IOMediaBSDClient27_RESERVEDIOMediaBSDClient12Ev
__ZN16IOMediaBSDClient27_RESERVEDIOMediaBSDClient13Ev
__ZN16IOMediaBSDClient27_RESERVEDIOMediaBSDClient14Ev
__ZN16IOMediaBSDClient27_RESERVEDIOMediaBSDClient15Ev
__ZN16IOMediaBSDClient4freeEv
__ZN16IOMediaBSDClient4initEP12OSDictionary
__ZN16IOMediaBSDClient5ioctlEimPciP4proc
__ZN16IOMediaBSDClient5startEP9IOService
__ZN16IOMediaBSDClient9MetaClassC1Ev
__ZN16IOMediaBSDClient9MetaClassC2Ev
__ZN16IOMediaBSDClient9metaClassE
__ZN16IOMediaBSDClient9terminateEj
__ZN16IOMediaBSDClientC1EPK11OSMetaClass
__ZN16IOMediaBSDClientC1Ev
__ZN16IOMediaBSDClientC2EPK11OSMetaClass
__ZN16IOMediaBSDClientC2Ev
__ZN16IOMediaBSDClientD0Ev
__ZN16IOMediaBSDClientD1Ev
__ZN16IOMediaBSDClientD2Ev
__ZN16IOMediaBSDClientdlEPvm
__ZN16IOMediaBSDClientnwEm
__ZN17IOPartitionScheme10gMetaClassE
__ZN17IOPartitionScheme10handleOpenEP9IOServicejPv
__ZN17IOPartitionScheme10superClassE
__ZN17IOPartitionScheme11handleCloseEP9IOServicej
__ZN17IOPartitionScheme11setPriorityEP9IOServiceP15IOStorageExtentjh
__ZN17IOPartitionScheme11synchronizeEP9IOServiceyyj
__ZN17IOPartitionScheme18copyPhysicalExtentEP9IOServicePyS2_
__ZN17IOPartitionScheme18getProvisionStatusEP9IOServiceyyPjP24IOStorageProvisionExtenty
__ZN17IOPartitionScheme19lockPhysicalExtentsEP9IOService
__ZN17IOPartitionScheme21juxtaposeMediaObjectsEP5OSSetS1_
__ZN17IOPartitionScheme21unlockPhysicalExtentsEP9IOService
__ZN17IOPartitionScheme27_RESERVEDIOPartitionScheme0Ev
__ZN17IOPartitionScheme27_RESERVEDIOPartitionScheme1Ev
__ZN17IOPartitionScheme27_RESERVEDIOPartitionScheme2Ev
__ZN17IOPartitionScheme27_RESERVEDIOPartitionScheme3Ev
__ZN17IOPartitionScheme27_RESERVEDIOPartitionScheme4Ev
__ZN17IOPartitionScheme27_RESERVEDIOPartitionScheme5Ev
__ZN17IOPartitionScheme27_RESERVEDIOPartitionScheme6Ev
__ZN17IOPartitionScheme27_RESERVEDIOPartitionScheme7Ev
__ZN17IOPartitionScheme27_RESERVEDIOPartitionScheme8Ev
__ZN17IOPartitionScheme27_RESERVEDIOPartitionScheme9Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme10Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme11Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme12Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme13Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme14Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme15Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme16Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme17Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme18Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme19Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme20Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme21Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme22Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme23Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme24Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme25Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme26Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme27Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme28Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme29Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme30Ev
__ZN17IOPartitionScheme28_RESERVEDIOPartitionScheme31Ev
__ZN17IOPartitionScheme29attachMediaObjectToDeviceTreeEP7IOMedia
__ZN17IOPartitionScheme31detachMediaObjectFromDeviceTreeEP7IOMedia
__ZN17IOPartitionScheme4freeEv
__ZN17IOPartitionScheme4initEP12OSDictionary
__ZN17IOPartitionScheme4readEP9IOServiceyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletion
__ZN17IOPartitionScheme5unmapEP9IOServiceP15IOStorageExtentjj
__ZN17IOPartitionScheme5writeEP9IOServiceyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletion
__ZN17IOPartitionScheme9MetaClassC1Ev
__ZN17IOPartitionScheme9MetaClassC2Ev
__ZN17IOPartitionScheme9metaClassE
__ZN17IOPartitionSchemeC1EPK11OSMetaClass
__ZN17IOPartitionSchemeC1Ev
__ZN17IOPartitionSchemeC2EPK11OSMetaClass
__ZN17IOPartitionSchemeC2Ev
__ZN17IOPartitionSchemeD0Ev
__ZN17IOPartitionSchemeD1Ev
__ZN17IOPartitionSchemeD2Ev
__ZN17IOPartitionSchemedlEPvm
__ZN17IOPartitionSchemenwEm
__ZN18IOAppleLabelScheme10gMetaClassE
__ZN18IOAppleLabelScheme10superClassE
__ZN18IOAppleLabelScheme16isContentCorruptEP12OSDictionary
__ZN18IOAppleLabelScheme16isContentInvalidEP12OSDictionary
__ZN18IOAppleLabelScheme22instantiateMediaObjectEP12OSDictionary
__ZN18IOAppleLabelScheme28_RESERVEDIOAppleLabelScheme0Ev
__ZN18IOAppleLabelScheme28_RESERVEDIOAppleLabelScheme1Ev
__ZN18IOAppleLabelScheme28_RESERVEDIOAppleLabelScheme2Ev
__ZN18IOAppleLabelScheme28_RESERVEDIOAppleLabelScheme3Ev
__ZN18IOAppleLabelScheme28_RESERVEDIOAppleLabelScheme4Ev
__ZN18IOAppleLabelScheme28_RESERVEDIOAppleLabelScheme5Ev
__ZN18IOAppleLabelScheme28_RESERVEDIOAppleLabelScheme6Ev
__ZN18IOAppleLabelScheme28_RESERVEDIOAppleLabelScheme7Ev
__ZN18IOAppleLabelScheme28_RESERVEDIOAppleLabelScheme8Ev
__ZN18IOAppleLabelScheme28_RESERVEDIOAppleLabelScheme9Ev
__ZN18IOAppleLabelScheme29_RESERVEDIOAppleLabelScheme10Ev
__ZN18IOAppleLabelScheme29_RESERVEDIOAppleLabelScheme11Ev
__ZN18IOAppleLabelScheme29_RESERVEDIOAppleLabelScheme12Ev
__ZN18IOAppleLabelScheme29_RESERVEDIOAppleLabelScheme13Ev
__ZN18IOAppleLabelScheme29_RESERVEDIOAppleLabelScheme14Ev
__ZN18IOAppleLabelScheme29_RESERVEDIOAppleLabelScheme15Ev
__ZN18IOAppleLabelScheme29attachMediaObjectToDeviceTreeEP7IOMedia
__ZN18IOAppleLabelScheme29instantiateDesiredMediaObjectEP12OSDictionary
__ZN18IOAppleLabelScheme31detachMediaObjectFromDeviceTreeEP7IOMedia
__ZN18IOAppleLabelScheme4freeEv
__ZN18IOAppleLabelScheme4initEP12OSDictionary
__ZN18IOAppleLabelScheme4scanEPi
__ZN18IOAppleLabelScheme4stopEP9IOService
__ZN18IOAppleLabelScheme5probeEP9IOServicePi
__ZN18IOAppleLabelScheme5startEP9IOService
__ZN18IOAppleLabelScheme9MetaClassC1Ev
__ZN18IOAppleLabelScheme9MetaClassC2Ev
__ZN18IOAppleLabelScheme9metaClassE
__ZN18IOAppleLabelSchemeC1EPK11OSMetaClass
__ZN18IOAppleLabelSchemeC1Ev
__ZN18IOAppleLabelSchemeC2EPK11OSMetaClass
__ZN18IOAppleLabelSchemeC2Ev
__ZN18IOAppleLabelSchemeD0Ev
__ZN18IOAppleLabelSchemeD1Ev
__ZN18IOAppleLabelSchemeD2Ev
__ZN18IOAppleLabelSchemedlEPvm
__ZN18IOAppleLabelSchemenwEm
__ZN20IOBlockStorageDevice10gMetaClassE
__ZN20IOBlockStorageDevice10superClassE
__ZN20IOBlockStorageDevice11requestIdleEv
__ZN20IOBlockStorageDevice13doSetPriorityEP26IOBlockStorageDeviceExtentjh
__ZN20IOBlockStorageDevice13doSynchronizeEyyj
__ZN20IOBlockStorageDevice13setPropertiesEP8OSObject
__ZN20IOBlockStorageDevice17doLockUnlockMediaEb
__ZN20IOBlockStorageDevice17reportLockabilityEPb
__ZN20IOBlockStorageDevice18doSynchronizeCacheEv
__ZN20IOBlockStorageDevice18getWriteCacheStateEPb
__ZN20IOBlockStorageDevice18setWriteCacheStateEb
__ZN20IOBlockStorageDevice20doGetProvisionStatusEyyPjP35IOBlockStorageProvisionDeviceExtenty
__ZN20IOBlockStorageDevice22reportPollRequirementsEPbS0_
__ZN20IOBlockStorageDevice30_RESERVEDIOBlockStorageDevice4Ev
__ZN20IOBlockStorageDevice30_RESERVEDIOBlockStorageDevice5Ev
__ZN20IOBlockStorageDevice30_RESERVEDIOBlockStorageDevice6Ev
__ZN20IOBlockStorageDevice30_RESERVEDIOBlockStorageDevice7Ev
__ZN20IOBlockStorageDevice30_RESERVEDIOBlockStorageDevice8Ev
__ZN20IOBlockStorageDevice30_RESERVEDIOBlockStorageDevice9Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice10Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice11Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice12Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice13Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice14Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice15Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice16Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice17Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice18Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice19Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice20Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice21Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice22Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice23Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice24Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice25Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice26Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice27Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice28Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice29Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice30Ev
__ZN20IOBlockStorageDevice31_RESERVEDIOBlockStorageDevice31Ev
__ZN20IOBlockStorageDevice4initEP12OSDictionary
__ZN20IOBlockStorageDevice7doUnmapEP26IOBlockStorageDeviceExtentjj
__ZN20IOBlockStorageDevice9MetaClassC1Ev
__ZN20IOBlockStorageDevice9MetaClassC2Ev
__ZN20IOBlockStorageDevice9doDiscardEyy
__ZN20IOBlockStorageDevice9metaClassE
__ZN20IOBlockStorageDeviceC2EPK11OSMetaClass
__ZN20IOBlockStorageDeviceD0Ev
__ZN20IOBlockStorageDeviceD1Ev
__ZN20IOBlockStorageDeviceD2Ev
__ZN20IOBlockStorageDevicedlEPvm
__ZN20IOBlockStorageDevicenwEm
__ZN20IOBlockStorageDriver10ejectMediaEv
__ZN20IOBlockStorageDriver10gMetaClassE
__ZN20IOBlockStorageDriver10handleOpenEP9IOServicejPv
__ZN20IOBlockStorageDriver10superClassE
__ZN20IOBlockStorageDriver11formatMediaEy
__ZN20IOBlockStorageDriver11handleCloseEP9IOServicej
__ZN20IOBlockStorageDriver11handleStartEP9IOService
__ZN20IOBlockStorageDriver11handleYieldEP9IOServicejPv
__ZN20IOBlockStorageDriver11rejectMediaEv
__ZN20IOBlockStorageDriver11requestIdleEv
__ZN20IOBlockStorageDriver11setPriorityEP9IOServiceP15IOStorageExtentjh
__ZN20IOBlockStorageDriver11synchronizeEP9IOServiceyyj
__ZN20IOBlockStorageDriver12didTerminateEP9IOServicejPb
__ZN20IOBlockStorageDriver13checkForMediaEv
__ZN20IOBlockStorageDriver13deleteContextEPNS_7ContextE
__ZN20IOBlockStorageDriver14acceptNewMediaEv
__ZN20IOBlockStorageDriver14breakUpRequestEyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletionPNS_7ContextE
__ZN20IOBlockStorageDriver14deblockRequestEyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletionPNS_7ContextE
__ZN20IOBlockStorageDriver14executeRequestEyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletionPNS_7ContextE
__ZN20IOBlockStorageDriver14initMediaStateEv
__ZN20IOBlockStorageDriver14prepareRequestEyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletion
__ZN20IOBlockStorageDriver14schedulePollerEv
__ZN20IOBlockStorageDriver15allocateContextEv
__ZN20IOBlockStorageDriver15incrementErrorsEb
__ZN20IOBlockStorageDriver16handlePowerEventEPvS0_jP9IOServiceS0_m
__ZN20IOBlockStorageDriver16incrementRetriesEb
__ZN20IOBlockStorageDriver16unschedulePollerEv
__ZN20IOBlockStorageDriver16validateNewMediaEv
__ZN20IOBlockStorageDriver17decommissionMediaEb
__ZN20IOBlockStorageDriver17getDeviceTypeNameEv
__ZN20IOBlockStorageDriver18constrainByteCountEyb
__ZN20IOBlockStorageDriver18copyPhysicalExtentEP9IOServicePyS2_
__ZN20IOBlockStorageDriver18getProvisionStatusEP9IOServiceyyPjP24IOStorageProvisionExtenty
__ZN20IOBlockStorageDriver19lockPhysicalExtentsEP9IOService
__ZN20IOBlockStorageDriver20mediaStateHasChangedEj
__ZN20IOBlockStorageDriver21addToBytesTransferredEyyyb
__ZN20IOBlockStorageDriver21breakUpRequestExecuteEPvS0_
__ZN20IOBlockStorageDriver21deblockRequestExecuteEPvS0_
__ZN20IOBlockStorageDriver21recordMediaParametersEv
__ZN20IOBlockStorageDriver21unlockPhysicalExtentsEP9IOService
__ZN20IOBlockStorageDriver22instantiateMediaObjectEyyjPc
__ZN20IOBlockStorageDriver24breakUpRequestCompletionEPvS0_iy
__ZN20IOBlockStorageDriver24deblockRequestCompletionEPvS0_iy
__ZN20IOBlockStorageDriver24prepareRequestCompletionEPvS0_iy
__ZN20IOBlockStorageDriver29instantiateDesiredMediaObjectEv
__ZN20IOBlockStorageDriver30_RESERVEDIOBlockStorageDriver0Ev
__ZN20IOBlockStorageDriver30_RESERVEDIOBlockStorageDriver1Ev
__ZN20IOBlockStorageDriver30_RESERVEDIOBlockStorageDriver2Ev
__ZN20IOBlockStorageDriver30_RESERVEDIOBlockStorageDriver3Ev
__ZN20IOBlockStorageDriver30_RESERVEDIOBlockStorageDriver4Ev
__ZN20IOBlockStorageDriver30_RESERVEDIOBlockStorageDriver5Ev
__ZN20IOBlockStorageDriver30_RESERVEDIOBlockStorageDriver6Ev
__ZN20IOBlockStorageDriver30_RESERVEDIOBlockStorageDriver7Ev
__ZN20IOBlockStorageDriver30_RESERVEDIOBlockStorageDriver8Ev
__ZN20IOBlockStorageDriver30_RESERVEDIOBlockStorageDriver9Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver10Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver11Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver12Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver13Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver14Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver15Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver16Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver17Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver18Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver19Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver20Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver21Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver22Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver23Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver24Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver25Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver26Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver27Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver28Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver29Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver30Ev
__ZN20IOBlockStorageDriver31_RESERVEDIOBlockStorageDriver31Ev
__ZN20IOBlockStorageDriver4freeEv
__ZN20IOBlockStorageDriver4initEP12OSDictionary
__ZN20IOBlockStorageDriver4readEP9IOServiceyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletion
__ZN20IOBlockStorageDriver4stopEP9IOService
__ZN20IOBlockStorageDriver5startEP9IOService
__ZN20IOBlockStorageDriver5unmapEP9IOServiceP15IOStorageExtentjj
__ZN20IOBlockStorageDriver5writeEP9IOServiceyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletion
__ZN20IOBlockStorageDriver5yieldEP9IOServicejPv
__ZN20IOBlockStorageDriver7messageEjP9IOServicePv
__ZN20IOBlockStorageDriver9MetaClassC1Ev
__ZN20IOBlockStorageDriver9MetaClassC2Ev
__ZN20IOBlockStorageDriver9lockMediaEb
__ZN20IOBlockStorageDriver9metaClassE
__ZN20IOBlockStorageDriver9pollMediaEv
__ZN20IOBlockStorageDriverC1EPK11OSMetaClass
__ZN20IOBlockStorageDriverC1Ev
__ZN20IOBlockStorageDriverC2EPK11OSMetaClass
__ZN20IOBlockStorageDriverC2Ev
__ZN20IOBlockStorageDriverD0Ev
__ZN20IOBlockStorageDriverD1Ev
__ZN20IOBlockStorageDriverD2Ev
__ZN20IOBlockStorageDriverdlEPvm
__ZN20IOBlockStorageDrivernwEm
__ZN21IOGUIDPartitionScheme10gMetaClassE
__ZN21IOGUIDPartitionScheme10superClassE
__ZN21IOGUIDPartitionScheme11handleCloseEP9IOServicej
__ZN21IOGUIDPartitionScheme12requestProbeEj
__ZN21IOGUIDPartitionScheme15isPartitionUsedEP7gpt_ent
__ZN21IOGUIDPartitionScheme18isPartitionCorruptEP7gpt_entj
__ZN21IOGUIDPartitionScheme18isPartitionInvalidEP7gpt_entj
__ZN21IOGUIDPartitionScheme22instantiateMediaObjectEP7gpt_entj
__ZN21IOGUIDPartitionScheme29instantiateDesiredMediaObjectEP7gpt_entj
__ZN21IOGUIDPartitionScheme31_RESERVEDIOGUIDPartitionScheme0Ev
__ZN21IOGUIDPartitionScheme31_RESERVEDIOGUIDPartitionScheme1Ev
__ZN21IOGUIDPartitionScheme31_RESERVEDIOGUIDPartitionScheme2Ev
__ZN21IOGUIDPartitionScheme31_RESERVEDIOGUIDPartitionScheme3Ev
__ZN21IOGUIDPartitionScheme31_RESERVEDIOGUIDPartitionScheme4Ev
__ZN21IOGUIDPartitionScheme31_RESERVEDIOGUIDPartitionScheme5Ev
__ZN21IOGUIDPartitionScheme31_RESERVEDIOGUIDPartitionScheme6Ev
__ZN21IOGUIDPartitionScheme31_RESERVEDIOGUIDPartitionScheme7Ev
__ZN21IOGUIDPartitionScheme31_RESERVEDIOGUIDPartitionScheme8Ev
__ZN21IOGUIDPartitionScheme31_RESERVEDIOGUIDPartitionScheme9Ev
__ZN21IOGUIDPartitionScheme32_RESERVEDIOGUIDPartitionScheme10Ev
__ZN21IOGUIDPartitionScheme32_RESERVEDIOGUIDPartitionScheme11Ev
__ZN21IOGUIDPartitionScheme32_RESERVEDIOGUIDPartitionScheme12Ev
__ZN21IOGUIDPartitionScheme32_RESERVEDIOGUIDPartitionScheme13Ev
__ZN21IOGUIDPartitionScheme32_RESERVEDIOGUIDPartitionScheme14Ev
__ZN21IOGUIDPartitionScheme32_RESERVEDIOGUIDPartitionScheme15Ev
__ZN21IOGUIDPartitionScheme4freeEv
__ZN21IOGUIDPartitionScheme4initEP12OSDictionary
__ZN21IOGUIDPartitionScheme4scanEPi
__ZN21IOGUIDPartitionScheme4stopEP9IOService
__ZN21IOGUIDPartitionScheme5probeEP9IOServicePi
__ZN21IOGUIDPartitionScheme5startEP9IOService
__ZN21IOGUIDPartitionScheme7messageEjP9IOServicePv
__ZN21IOGUIDPartitionScheme9MetaClassC1Ev
__ZN21IOGUIDPartitionScheme9MetaClassC2Ev
__ZN21IOGUIDPartitionScheme9metaClassE
__ZN21IOGUIDPartitionSchemeC1EPK11OSMetaClass
__ZN21IOGUIDPartitionSchemeC1Ev
__ZN21IOGUIDPartitionSchemeC2EPK11OSMetaClass
__ZN21IOGUIDPartitionSchemeC2Ev
__ZN21IOGUIDPartitionSchemeD0Ev
__ZN21IOGUIDPartitionSchemeD1Ev
__ZN21IOGUIDPartitionSchemeD2Ev
__ZN21IOGUIDPartitionSchemedlEPvm
__ZN21IOGUIDPartitionSchemenwEm
__ZN22IOApplePartitionScheme10gMetaClassE
__ZN22IOApplePartitionScheme10superClassE
__ZN22IOApplePartitionScheme12requestProbeEj
__ZN22IOApplePartitionScheme18isPartitionCorruptEP4dpmejj
__ZN22IOApplePartitionScheme18isPartitionInvalidEP4dpmejj
__ZN22IOApplePartitionScheme22instantiateMediaObjectEP4dpmejj
__ZN22IOApplePartitionScheme29instantiateDesiredMediaObjectEP4dpmejj
__ZN22IOApplePartitionScheme32_RESERVEDIOApplePartitionScheme0Ev
__ZN22IOApplePartitionScheme32_RESERVEDIOApplePartitionScheme1Ev
__ZN22IOApplePartitionScheme32_RESERVEDIOApplePartitionScheme2Ev
__ZN22IOApplePartitionScheme32_RESERVEDIOApplePartitionScheme3Ev
__ZN22IOApplePartitionScheme32_RESERVEDIOApplePartitionScheme4Ev
__ZN22IOApplePartitionScheme32_RESERVEDIOApplePartitionScheme5Ev
__ZN22IOApplePartitionScheme32_RESERVEDIOApplePartitionScheme6Ev
__ZN22IOApplePartitionScheme32_RESERVEDIOApplePartitionScheme7Ev
__ZN22IOApplePartitionScheme32_RESERVEDIOApplePartitionScheme8Ev
__ZN22IOApplePartitionScheme32_RESERVEDIOApplePartitionScheme9Ev
__ZN22IOApplePartitionScheme33_RESERVEDIOApplePartitionScheme10Ev
__ZN22IOApplePartitionScheme33_RESERVEDIOApplePartitionScheme11Ev
__ZN22IOApplePartitionScheme33_RESERVEDIOApplePartitionScheme12Ev
__ZN22IOApplePartitionScheme33_RESERVEDIOApplePartitionScheme13Ev
__ZN22IOApplePartitionScheme33_RESERVEDIOApplePartitionScheme14Ev
__ZN22IOApplePartitionScheme33_RESERVEDIOApplePartitionScheme15Ev
__ZN22IOApplePartitionScheme4freeEv
__ZN22IOApplePartitionScheme4initEP12OSDictionary
__ZN22IOApplePartitionScheme4scanEPi
__ZN22IOApplePartitionScheme4stopEP9IOService
__ZN22IOApplePartitionScheme5probeEP9IOServicePi
__ZN22IOApplePartitionScheme5startEP9IOService
__ZN22IOApplePartitionScheme9MetaClassC1Ev
__ZN22IOApplePartitionScheme9MetaClassC2Ev
__ZN22IOApplePartitionScheme9metaClassE
__ZN22IOApplePartitionSchemeC1EPK11OSMetaClass
__ZN22IOApplePartitionSchemeC1Ev
__ZN22IOApplePartitionSchemeC2EPK11OSMetaClass
__ZN22IOApplePartitionSchemeC2Ev
__ZN22IOApplePartitionSchemeD0Ev
__ZN22IOApplePartitionSchemeD1Ev
__ZN22IOApplePartitionSchemeD2Ev
__ZN22IOApplePartitionSchemedlEPvm
__ZN22IOApplePartitionSchemenwEm
__ZN22IOFDiskPartitionScheme10gMetaClassE
__ZN22IOFDiskPartitionScheme10superClassE
__ZN22IOFDiskPartitionScheme12requestProbeEj
__ZN22IOFDiskPartitionScheme15isPartitionUsedEP10fdisk_part
__ZN22IOFDiskPartitionScheme18isPartitionCorruptEP10fdisk_partjj
__ZN22IOFDiskPartitionScheme18isPartitionInvalidEP10fdisk_partjj
__ZN22IOFDiskPartitionScheme19isPartitionExtendedEP10fdisk_part
__ZN22IOFDiskPartitionScheme22instantiateMediaObjectEP10fdisk_partjj
__ZN22IOFDiskPartitionScheme29instantiateDesiredMediaObjectEP10fdisk_partjj
__ZN22IOFDiskPartitionScheme32_RESERVEDIOFDiskPartitionScheme0Ev
__ZN22IOFDiskPartitionScheme32_RESERVEDIOFDiskPartitionScheme1Ev
__ZN22IOFDiskPartitionScheme32_RESERVEDIOFDiskPartitionScheme2Ev
__ZN22IOFDiskPartitionScheme32_RESERVEDIOFDiskPartitionScheme3Ev
__ZN22IOFDiskPartitionScheme32_RESERVEDIOFDiskPartitionScheme4Ev
__ZN22IOFDiskPartitionScheme32_RESERVEDIOFDiskPartitionScheme5Ev
__ZN22IOFDiskPartitionScheme32_RESERVEDIOFDiskPartitionScheme6Ev
__ZN22IOFDiskPartitionScheme32_RESERVEDIOFDiskPartitionScheme7Ev
__ZN22IOFDiskPartitionScheme32_RESERVEDIOFDiskPartitionScheme8Ev
__ZN22IOFDiskPartitionScheme32_RESERVEDIOFDiskPartitionScheme9Ev
__ZN22IOFDiskPartitionScheme33_RESERVEDIOFDiskPartitionScheme10Ev
__ZN22IOFDiskPartitionScheme33_RESERVEDIOFDiskPartitionScheme11Ev
__ZN22IOFDiskPartitionScheme33_RESERVEDIOFDiskPartitionScheme12Ev
__ZN22IOFDiskPartitionScheme33_RESERVEDIOFDiskPartitionScheme13Ev
__ZN22IOFDiskPartitionScheme33_RESERVEDIOFDiskPartitionScheme14Ev
__ZN22IOFDiskPartitionScheme33_RESERVEDIOFDiskPartitionScheme15Ev
__ZN22IOFDiskPartitionScheme4freeEv
__ZN22IOFDiskPartitionScheme4initEP12OSDictionary
__ZN22IOFDiskPartitionScheme4scanEPi
__ZN22IOFDiskPartitionScheme4stopEP9IOService
__ZN22IOFDiskPartitionScheme5probeEP9IOServicePi
__ZN22IOFDiskPartitionScheme5startEP9IOService
__ZN22IOFDiskPartitionScheme9MetaClassC1Ev
__ZN22IOFDiskPartitionScheme9MetaClassC2Ev
__ZN22IOFDiskPartitionScheme9metaClassE
__ZN22IOFDiskPartitionSchemeC1EPK11OSMetaClass
__ZN22IOFDiskPartitionSchemeC1Ev
__ZN22IOFDiskPartitionSchemeC2EPK11OSMetaClass
__ZN22IOFDiskPartitionSchemeC2Ev
__ZN22IOFDiskPartitionSchemeD0Ev
__ZN22IOFDiskPartitionSchemeD1Ev
__ZN22IOFDiskPartitionSchemeD2Ev
__ZN22IOFDiskPartitionSchemedlEPvm
__ZN22IOFDiskPartitionSchemenwEm
__ZN7IOMedia10gMetaClassE
__ZN7IOMedia10handleOpenEP9IOServicejPv
__ZN7IOMedia10superClassE
__ZN7IOMedia11handleCloseEP9IOServicej
__ZN7IOMedia11setPriorityEP9IOServiceP15IOStorageExtentjh
__ZN7IOMedia11synchronizeEP9IOServiceyyj
__ZN7IOMedia13attachToChildEP15IORegistryEntryPK15IORegistryPlane
__ZN7IOMedia13scheduleProbeEP9IOService
__ZN7IOMedia15detachFromChildEP15IORegistryEntryPK15IORegistryPlane
__ZN7IOMedia17_RESERVEDIOMedia0Ev
__ZN7IOMedia17_RESERVEDIOMedia1Ev
__ZN7IOMedia17_RESERVEDIOMedia2Ev
__ZN7IOMedia17_RESERVEDIOMedia3Ev
__ZN7IOMedia17_RESERVEDIOMedia4Ev
__ZN7IOMedia17_RESERVEDIOMedia5Ev
__ZN7IOMedia17_RESERVEDIOMedia6Ev
__ZN7IOMedia17_RESERVEDIOMedia7Ev
__ZN7IOMedia17_RESERVEDIOMedia8Ev
__ZN7IOMedia17_RESERVEDIOMedia9Ev
__ZN7IOMedia18_RESERVEDIOMedia10Ev
__ZN7IOMedia18_RESERVEDIOMedia11Ev
__ZN7IOMedia18_RESERVEDIOMedia12Ev
__ZN7IOMedia18_RESERVEDIOMedia13Ev
__ZN7IOMedia18_RESERVEDIOMedia14Ev
__ZN7IOMedia18_RESERVEDIOMedia15Ev
__ZN7IOMedia18copyPhysicalExtentEP9IOServicePyS2_
__ZN7IOMedia18getProvisionStatusEP9IOServiceyyPjP24IOStorageProvisionExtenty
__ZN7IOMedia18matchPropertyTableEP12OSDictionaryPi
__ZN7IOMedia19lockPhysicalExtentsEP9IOService
__ZN7IOMedia21unlockPhysicalExtentsEP9IOService
__ZN7IOMedia23scheduleRegisterServiceEv
__ZN7IOMedia4freeEv
__ZN7IOMedia4initEyyyjbbPKcP12OSDictionary
__ZN7IOMedia4readEP9IOServiceyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletion
__ZN7IOMedia5closeEP9IOServicej
__ZN7IOMedia5unmapEP9IOServiceP15IOStorageExtentjj
__ZN7IOMedia5writeEP9IOServiceyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletion
__ZN7IOMedia9MetaClassC1Ev
__ZN7IOMedia9MetaClassC2Ev
__ZN7IOMedia9metaClassE
__ZN7IOMediaC1EPK11OSMetaClass
__ZN7IOMediaC1Ev
__ZN7IOMediaC2EPK11OSMetaClass
__ZN7IOMediaC2Ev
__ZN7IOMediaD0Ev
__ZN7IOMediaD1Ev
__ZN7IOMediaD2Ev
__ZN7IOMediadlEPvm
__ZN7IOMedianwEm
__ZN9IOBreaker10gMetaClassE
__ZN9IOBreaker10superClassE
__ZN9IOBreaker12getBreakSizeEyyyyyyyP18IOMemoryDescriptory
__ZN9IOBreaker12getByteStartEv
__ZN9IOBreaker12getNextStageEv
__ZN9IOBreaker13withBreakSizeEyyyyyyyyyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletionPv
__ZN9IOBreaker16getRequestBufferEv
__ZN9IOBreaker17getRequestContextEv
__ZN9IOBreaker17getThreadCallbackEv
__ZN9IOBreaker17initWithBreakSizeEyyyyyyyyyP18IOMemoryDescriptorP19IOStorageAttributesP19IOStorageCompletionPv
__ZN9IOBreaker17setThreadCallbackEPFvPvS0_E
__ZN9IOBreaker20getRequestAttributesEv
__ZN9IOBreaker20getRequestCompletionEPy
__ZN9IOBreaker4freeEv
__ZN9IOBreaker9MetaClassC1Ev
__ZN9IOBreaker9MetaClassC2Ev
__ZN9IOBreaker9metaClassE
__ZN9IOBreakerC1EPK11OSMetaClass
__ZN9IOBreakerC1Ev
__ZN9IOBreakerC2EPK11OSMetaClass
__ZN9IOBreakerC2Ev
__ZN9IOBreakerD0Ev
__ZN9IOBreakerD1Ev
__ZN9IOBreakerD2Ev
__ZN9IOBreakerdlEPvm
__ZN9IOBreakernwEm
__ZN9IOStorage10gMetaClassE
__ZN9IOStorage10superClassE
__ZN9IOStorage11setPriorityEP9IOServiceP15IOStorageExtentjh
__ZN9IOStorage11synchronizeEP9IOServiceyyj
__ZN9IOStorage16synchronizeCacheEP9IOService
__ZN9IOStorage18copyPhysicalExtentEP9IOServicePyS2_
__ZN9IOStorage18getProvisionStatusEP9IOServiceyyPjP24IOStorageProvisionExtenty
__ZN9IOStorage19_RESERVEDIOStorage7Ev
__ZN9IOStorage19_RESERVEDIOStorage8Ev
__ZN9IOStorage19_RESERVEDIOStorage9Ev
__ZN9IOStorage19lockPhysicalExtentsEP9IOService
__ZN9IOStorage20_RESERVEDIOStorage10Ev
__ZN9IOStorage20_RESERVEDIOStorage11Ev
__ZN9IOStorage20_RESERVEDIOStorage12Ev
__ZN9IOStorage20_RESERVEDIOStorage13Ev
__ZN9IOStorage20_RESERVEDIOStorage14Ev
__ZN9IOStorage20_RESERVEDIOStorage15Ev
__ZN9IOStorage21unlockPhysicalExtentsEP9IOService
__ZN9IOStorage4openEP9IOServicejj
__ZN9IOStorage4readEP9IOServiceyP18IOMemoryDescriptorP19IOStorageAttributesPy
__ZN9IOStorage5unmapEP9IOServiceP15IOStorageExtentjj
__ZN9IOStorage5writeEP9IOServiceyP18IOMemoryDescriptorP19IOStorageAttributesPy
__ZN9IOStorage6attachEP9IOService
__ZN9IOStorage7discardEP9IOServiceyy
__ZN9IOStorage8completeEP19IOStorageCompletioniy
__ZN9IOStorage9MetaClassC1Ev
__ZN9IOStorage9MetaClassC2Ev
__ZN9IOStorage9metaClassE
__ZN9IOStorageC2EPK11OSMetaClass
__ZN9IOStorageD0Ev
__ZN9IOStorageD1Ev
__ZN9IOStorageD2Ev
__ZN9IOStoragedlEPvm
__ZN9IOStoragenwEm
__ZNK11IODeblocker12getMetaClassEv
__ZNK11IODeblocker9MetaClass5allocEv
__ZNK14IOFilterScheme11getProviderEv
__ZNK14IOFilterScheme12getMetaClassEv
__ZNK14IOFilterScheme12handleIsOpenEPK9IOService
__ZNK14IOFilterScheme9MetaClass5allocEv
__ZNK16IOMediaBSDClient11getProviderEv
__ZNK16IOMediaBSDClient12getMetaClassEv
__ZNK16IOMediaBSDClient9MetaClass5allocEv
__ZNK17IOPartitionScheme11getProviderEv
__ZNK17IOPartitionScheme12getMetaClassEv
__ZNK17IOPartitionScheme12handleIsOpenEPK9IOService
__ZNK17IOPartitionScheme9MetaClass5allocEv
__ZNK18IOAppleLabelScheme12getMetaClassEv
__ZNK18IOAppleLabelScheme9MetaClass5allocEv
__ZNK20IOBlockStorageDevice11getPropertyEPK8OSSymbol
__ZNK20IOBlockStorageDevice12getMetaClassEv
__ZNK20IOBlockStorageDevice9MetaClass5allocEv
__ZNK20IOBlockStorageDriver11getProviderEv
__ZNK20IOBlockStorageDriver12getMetaClassEv
__ZNK20IOBlockStorageDriver12getStatisticENS_10StatisticsE
__ZNK20IOBlockStorageDriver12handleIsOpenEPK9IOService
__ZNK20IOBlockStorageDriver13getMediaStateEv
__ZNK20IOBlockStorageDriver13getStatisticsEPyj
__ZNK20IOBlockStorageDriver15isMediaWritableEv
__ZNK20IOBlockStorageDriver16isMediaEjectableEv
__ZNK20IOBlockStorageDriver16isMediaRemovableEv
__ZNK20IOBlockStorageDriver17getMediaBlockSizeEv
__ZNK20IOBlockStorageDriver19getFormatCapacitiesEPyj
__ZNK20IOBlockStorageDriver19isMediaPollRequiredEv
__ZNK20IOBlockStorageDriver20isMediaPollExpensiveEv
__ZNK20IOBlockStorageDriver9MetaClass5allocEv
__ZNK21IOGUIDPartitionScheme12getMetaClassEv
__ZNK21IOGUIDPartitionScheme9MetaClass5allocEv
__ZNK22IOApplePartitionScheme12getMetaClassEv
__ZNK22IOApplePartitionScheme9MetaClass5allocEv
__ZNK22IOFDiskPartitionScheme12getMetaClassEv
__ZNK22IOFDiskPartitionScheme9MetaClass5allocEv
__ZNK7IOMedia10getContentEv
__ZNK7IOMedia10isWritableEv
__ZNK7IOMedia11getProviderEv
__ZNK7IOMedia11isEjectableEv
__ZNK7IOMedia11isFormattedEv
__ZNK7IOMedia12getMetaClassEv
__ZNK7IOMedia12handleIsOpenEPK9IOService
__ZNK7IOMedia13getAttributesEv
__ZNK7IOMedia14getContentHintEv
__ZNK7IOMedia21getPreferredBlockSizeEv
__ZNK7IOMedia7getBaseEv
__ZNK7IOMedia7getSizeEv
__ZNK7IOMedia7isWholeEv
__ZNK7IOMedia9MetaClass5allocEv
__ZNK9IOBreaker12getMetaClassEv
__ZNK9IOBreaker9MetaClass5allocEv
__ZNK9IOStorage12getMetaClassEv
__ZNK9IOStorage9MetaClass5allocEv
__ZTV11IODeblocker
__ZTV14IOFilterScheme
__ZTV16IOMediaBSDClient
__ZTV17IOPartitionScheme
__ZTV18IOAppleLabelScheme
__ZTV20IOBlockStorageDevice
__ZTV20IOBlockStorageDriver
__ZTV21IOGUIDPartitionScheme
__ZTV22IOApplePartitionScheme
__ZTV22IOFDiskPartitionScheme
__ZTV7IOMedia
__ZTV9IOBreaker
__ZTV9IOStorage
__ZTVN11IODeblocker9MetaClassE
__ZTVN14IOFilterScheme9MetaClassE
__ZTVN16IOMediaBSDClient9MetaClassE
__ZTVN17IOPartitionScheme9MetaClassE
__ZTVN18IOAppleLabelScheme9MetaClassE
__ZTVN20IOBlockStorageDevice9MetaClassE
__ZTVN20IOBlockStorageDriver9MetaClassE
__ZTVN21IOGUIDPartitionScheme9MetaClassE
__ZTVN22IOApplePartitionScheme9MetaClassE
__ZTVN22IOFDiskPartitionScheme9MetaClassE
__ZTVN7IOMedia9MetaClassE
__ZTVN9IOBreaker9MetaClassE
__ZTVN9IOStorage9MetaClassE

View File

@ -0,0 +1,50 @@
#!/bin/sh
set -e
if [ $# -ne 3 ]; then
echo "Usage: $0 output.plist Info.plist input1.exports" 1>&2
exit 1
fi
OUTPUT="$1"
PLIST="$2"
EXPORTS="$3"
if [ "${OUTPUT##*.}" != "plist" -o "${PLIST##*.}" != "plist" ]; then
echo "Usage: $0 output.plist Info.plist input1.exports" 1>&2
exit 1
fi
printf \
'<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
' > "$OUTPUT"
awk '
/CFBundleIdentifier|OSBundleCompatibleVersion|CFBundleVersion/ {
print; getline; print
}
' $PLIST >> "$OUTPUT"
sort -u "$EXPORTS" | awk -F: '
BEGIN {
print " <key>Symbols</key>"
print " <array>"
}
$1 ~ /^_/ {
print " <string>"$1"</string>"
next
}
END {
print " </array>"
}
' >> "$OUTPUT"
printf \
'</dict>
</plist>
' >> "$OUTPUT"
exit 0

4
kext.xcconfig Normal file
View File

@ -0,0 +1,4 @@
BUILD_VARIANTS[sdk=macosx*] = normal kasan
BUILD_VARIANTS[sdk=iphoneos*] = normal kasan
CODE_SIGN_IDENTITY = -
OTHER_CFLAGS_kasan = $(KASAN_DEFAULT_CFLAGS)