Update Sources To IOStorageFamily-260.100.1
@ -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;
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ struct applelabel
|
||||
* Class
|
||||
*/
|
||||
|
||||
class IOAppleLabelScheme : public IOFilterScheme
|
||||
class __exported IOAppleLabelScheme : public IOFilterScheme
|
||||
{
|
||||
OSDeclareDefaultStructors(IOAppleLabelScheme);
|
||||
|
||||
|
@ -132,7 +132,7 @@ typedef struct Block0
|
||||
* Class
|
||||
*/
|
||||
|
||||
class IOApplePartitionScheme : public IOPartitionScheme
|
||||
class __exported IOApplePartitionScheme : public IOPartitionScheme
|
||||
{
|
||||
OSDeclareDefaultStructors(IOApplePartitionScheme);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
41
IOBlockStoragePerfControlExports.h
Normal 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 */
|
@ -115,7 +115,7 @@ struct disk_blk0
|
||||
* Class
|
||||
*/
|
||||
|
||||
class IOFDiskPartitionScheme : public IOPartitionScheme
|
||||
class __exported IOFDiskPartitionScheme : public IOPartitionScheme
|
||||
{
|
||||
OSDeclareDefaultStructors(IOFDiskPartitionScheme);
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -67,7 +67,7 @@
|
||||
* and writes.
|
||||
*/
|
||||
|
||||
class IOFilterScheme : public IOStorage
|
||||
class __exported IOFilterScheme : public IOStorage
|
||||
{
|
||||
OSDeclareDefaultStructors(IOFilterScheme);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
211
IOMedia.cpp
@ -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 */
|
||||
|
51
IOMedia.h
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
47
IOStorage.h
@ -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 */
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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 = (
|
||||
|
@ -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
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 17 KiB |
BIN
IconResources/External_128x128@2x.png
Normal file → Executable file
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 66 KiB |
BIN
IconResources/External_16x16.png
Normal file → Executable file
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 709 B |
BIN
IconResources/External_16x16@2x.png
Normal file → Executable file
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
IconResources/External_256x256.png
Normal file → Executable file
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 66 KiB |
BIN
IconResources/External_256x256@2x.png
Normal file → Executable file
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 263 KiB |
BIN
IconResources/External_32x32.png
Normal file → Executable file
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
IconResources/External_32x32@2x.png
Normal file → Executable file
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 5.6 KiB |
BIN
IconResources/External_512x512.png
Normal file → Executable file
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 263 KiB |
BIN
IconResources/External_512x512@2x.png
Normal file → Executable file
Before Width: | Height: | Size: 761 KiB After Width: | Height: | Size: 1.0 MiB |
BIN
IconResources/Internal_128x128.png
Normal file → Executable file
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 19 KiB |
BIN
IconResources/Internal_128x128@2x.png
Normal file → Executable file
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 62 KiB |
BIN
IconResources/Internal_16x16.png
Normal file → Executable file
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 758 B |
BIN
IconResources/Internal_16x16@2x.png
Normal file → Executable file
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 2.2 KiB |
BIN
IconResources/Internal_256x256.png
Normal file → Executable file
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 62 KiB |
BIN
IconResources/Internal_256x256@2x.png
Normal file → Executable file
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 235 KiB |
BIN
IconResources/Internal_32x32.png
Normal file → Executable file
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 2.2 KiB |
BIN
IconResources/Internal_32x32@2x.png
Normal file → Executable file
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 5.7 KiB |
BIN
IconResources/Internal_512x512.png
Normal file → Executable file
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 235 KiB |
BIN
IconResources/Internal_512x512@2x.png
Normal file → Executable file
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 957 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 672 B |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 224 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 224 KiB |
Before Width: | Height: | Size: 721 KiB After Width: | Height: | Size: 1020 KiB |
@ -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>
|
||||
|
713
config/IOStorageFamily.exports
Normal 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
|
50
config/generate-symbols-plist.sh
Executable 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
@ -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)
|