]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/Families/IOSCSIParallel/IOSCSIParallelCommand.cpp
xnu-344.tar.gz
[apple/xnu.git] / iokit / Families / IOSCSIParallel / IOSCSIParallelCommand.cpp
diff --git a/iokit/Families/IOSCSIParallel/IOSCSIParallelCommand.cpp b/iokit/Families/IOSCSIParallel/IOSCSIParallelCommand.cpp
deleted file mode 100644 (file)
index 1a7d18c..0000000
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License").  You may not use this file except in compliance with the
- * License.  Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
- * 
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*
- *
- * IOSCSIParallelCommand.cpp
- *
- */
-
-#include <IOKit/IOSyncer.h>
-#include <IOKit/scsi/IOSCSIParallelInterface.h>
-#include <libkern/OSAtomic.h>
-
-#undef super
-#define super IOSCSICommand
-
-OSDefineMetaClassAndStructors( IOSCSIParallelCommand, IOSCSICommand )
-OSDefineMetaClassAndAbstractStructors( IOSCSICommand, IOCDBCommand )
-OSDefineMetaClassAndAbstractStructors( IOCDBCommand, IOCommand )
-
-static struct adapterReturnCodes
-{
-    SCSIAdapterStatus          adapterStatus;
-    IOReturn                   ioReturnCode;
-} 
-adapterReturnCodes[] =
-{
-   { kSCSIAdapterStatusSuccess,                        kIOReturnSuccess        },
-   { kSCSIAdapterStatusProtocolError,          kIOReturnDeviceError    },
-   { kSCSIAdapterStatusSelectionTimeout,       kIOReturnNotResponding  },
-   { kSCSIAdapterStatusMsgReject,              kIOReturnUnsupported    },
-   { kSCSIAdapterStatusParityError,            kIOReturnIOError        },
-   { kSCSIAdapterStatusOverrun,                        kIOReturnOverrun        }
-};
-
-#define kNumAdapterReturnCodes         (sizeof(adapterReturnCodes)/sizeof(adapterReturnCodes[0]))
-
-static struct statusReturnCodes
-{
-    UInt32                     scsiStatus;
-    IOReturn                   ioReturnCode;
-} 
-statusReturnCodes[] =
-{
-   { kSCSIStatusGood,                          kIOReturnSuccess        },
-   { kSCSIStatusCheckCondition,                        kIOReturnIOError        },
-   { kSCSIStatusConditionMet,                  kIOReturnSuccess        },
-   { kSCSIStatusBusy,                          kIOReturnBusy           },
-   { kSCSIStatusIntermediate,                  kIOReturnSuccess        },
-   { kSCSIStatusIntermediateMet,               kIOReturnSuccess        },
-   { kSCSIStatusReservationConfict,            kIOReturnAborted        },
-   { kSCSIStatusCommandTerminated,             kIOReturnAborted        },
-   { kSCSIStatusQueueFull,                     kIOReturnIOError        }
-};
-
-#define kNumStatusReturnCodes          (sizeof(statusReturnCodes)/sizeof(statusReturnCodes[0]))
-
-
-IOSCSIDevice *IOSCSIParallelCommand::getDevice(IOSCSIDevice *)
-{
-    return (IOSCSIDevice *)getDevice(kIOSCSIParallelDevice);
-}
-
-IOSCSIParallelDevice *IOSCSIParallelCommand::getDevice(IOSCSIParallelDevice *)
-{
-    return device;
-}
-
-
-void *IOSCSIParallelCommand::getClientData()
-{
-    return clientData;
-}
-
-void *IOSCSIParallelCommand::getCommandData()
-{
-    return commandPrivateData;
-}
-
-UInt32 IOSCSIParallelCommand::getCmdType()
-{
-    return cmdType;
-}
-
-IOSCSIParallelCommand *IOSCSIParallelCommand::getOriginalCmd()
-{
-    return origCommand;
-}
-
-UInt32 IOSCSIParallelCommand::getSequenceNumber()
-{
-    return sequenceNumber;
-}
-
-void IOSCSIParallelCommand::getTargetLun( SCSITargetLun *forTargetLun )
-{
-    if ( device )
-    {
-        *forTargetLun = device->targetLun;
-    }
-    else
-    {
-        bzero( forTargetLun, sizeof( SCSITargetLun ) );
-    }
-}
-
-
-
-void IOSCSIParallelCommand::setTimeout( UInt32 timeoutMS )
-{
-    timeout = timeoutMS;
-}
-
-UInt32 IOSCSIParallelCommand::getTimeout()
-{
-    return timeout;
-}
-
-void IOSCSIParallelCommand::setResults( SCSIResults *srcResults )
-{
-    setResults( srcResults, (SCSINegotiationResults *)0 );
-}
-
-void IOSCSIParallelCommand::setResults( SCSIResults *srcResults, SCSINegotiationResults *negotiationResult )
-{
-    SCSICommandType    cmdType;
-
-    if ( srcResults != 0 )
-    {
-        results   = *srcResults;
-
-        cmdType = (SCSICommandType) getCmdType();
-
-        while ( results.returnCode == kIOReturnSuccess )
-        {
-            switch ( cmdType )
-            {
-                case kSCSICommandExecute:
-                case kSCSICommandReqSense:
-                case kSCSICommandAbort:
-                case kSCSICommandAbortAll:
-                case kSCSICommandDeviceReset:
-                    if ( results.adapterStatus != kSCSIAdapterStatusSuccess )
-                    {
-                        results.returnCode = adapterStatusToIOReturnCode( results.adapterStatus );
-                    }
-                    break;
-
-                default: 
-                    ;
-            }  
-
-            if ( results.returnCode != kIOReturnSuccess ) break;
-
-            switch ( cmdType )
-            {
-                case kSCSICommandExecute:
-                case kSCSICommandReqSense:
-                    results.returnCode = scsiStatusToIOReturnCode( results.scsiStatus );
-
-                    if ( results.returnCode != kIOReturnSuccess ) break;
-
-                    if ( results.bytesTransferred < xferCount )
-                    {
-                        results.returnCode = kIOReturnUnderrun;
-                    }
-                    break;
-
-                default: 
-                    ;
-            }
-
-            break;
-        }
-    }
-
-    if ( negotiationResult != 0 )
-    {
-        device->target->negotiationResult = *negotiationResult;
-    }
-}
-
-IOReturn IOSCSIParallelCommand::adapterStatusToIOReturnCode( SCSIAdapterStatus adapterStatus )
-{
-    UInt32             i;
-
-    for ( i=0; i < kNumAdapterReturnCodes; i++ )
-    {
-        if ( adapterReturnCodes[i].adapterStatus == adapterStatus )
-        {
-            return adapterReturnCodes[i].ioReturnCode;
-        }
-    }
-    return kIOReturnError;
-}
-
-IOReturn IOSCSIParallelCommand::scsiStatusToIOReturnCode( UInt8 scsiStatus )
-{
-    UInt32             i;
-
-    for ( i=0; i < kNumStatusReturnCodes; i++ )
-    {
-        if ( statusReturnCodes[i].scsiStatus == scsiStatus )
-        {
-            return statusReturnCodes[i].ioReturnCode;
-        }
-    }
-    return kIOReturnError;
-}
-
-IOReturn IOSCSIParallelCommand::getResults( SCSIResults *dstResults )
-{
-    if ( dstResults != 0 )
-    {
-        *dstResults = results;
-    }
-
-    return results.returnCode;
-}
-
-void IOSCSIParallelCommand::setQueueInfo( UInt32 forQueueType, UInt32 forQueuePosition )
-{
-    queueType     = forQueueType;
-    queuePosition = forQueuePosition;
-}
-
-void IOSCSIParallelCommand::getQueueInfo( UInt32 *forQueueType, UInt32 *forQueuePosition = 0 )
-{
-    if ( forQueueType != 0 )      *forQueueType     = queueType;
-    if ( forQueuePosition != 0 )  *forQueuePosition = queuePosition;
-}
-
-void IOSCSIParallelCommand::setPointers(  IOMemoryDescriptor *clientDesc, UInt32 transferCount, bool isWrite, bool isSense = false  )
-{
-    if ( isSense == false )
-    {
-        xferDesc       = clientDesc;
-        xferCount      = transferCount;
-        xferDirection  = isWrite;
-    }
-    else
-    {
-        senseData      = clientDesc;
-        senseLength    = transferCount;
-    } 
-}
-
-void IOSCSIParallelCommand::getPointers(  IOMemoryDescriptor **clientDesc, UInt32 *transferCount, bool *isWrite, bool isSense = false  )
-{
-    if ( clientDesc != NULL )
-    {
-        *clientDesc = (isSense == false) ? xferDesc : senseData;
-    }
-    
-    if ( transferCount != NULL )
-    {
-        *transferCount = (isSense == false) ? xferCount : senseLength;
-    }
-    if ( isWrite != NULL )
-    {
-        *isWrite       = (isSense == false) ? xferDirection : false;
-    }
-}
-
-void IOSCSIParallelCommand::setCDB( SCSICDBInfo *clientSCSICmd  )      
-{
-    scsiCmd    = *clientSCSICmd;
-}
-
-void IOSCSIParallelCommand::getCDB( SCSICDBInfo *clientSCSICmd )       
-{
-    *clientSCSICmd = scsiCmd;
-}
-
-void IOSCSIParallelCommand::setCallback( void *clientTarget, CallbackFn clientSCSIDoneFn, void *clientRefcon )
-{
-    completionInfo.async.target     = clientTarget;
-    completionInfo.async.callback   = clientSCSIDoneFn;
-    completionInfo.async.refcon     = clientRefcon;
-}
-
-bool IOSCSIParallelCommand::execute( UInt32 *cmdSequenceNumber )
-{
-    bool               isSync;
-
-    do
-    {
-        sequenceNumber = OSIncrementAtomic( (SInt32 *)&controller->sequenceNumber );
-    }
-    while ( sequenceNumber == 0 );
-
-    if ( cmdSequenceNumber != 0 )
-    {
-        *cmdSequenceNumber = sequenceNumber;
-    }
-
-    list = (queue_head_t *)device->deviceGate;
-
-    isSync = (completionInfo.async.callback == 0);
-
-    if ( isSync )
-    {
-        completionInfo.sync.lock = IOSyncer::create();
-    }
-
-    device->submitCommand( kSCSICommandExecute, this );
-
-    if ( isSync )
-    {
-        completionInfo.sync.lock->wait();
-    }
-
-    return true;
-
-}
-
-void IOSCSIParallelCommand::abort( UInt32 sequenceNumber )
-{
-    device->submitCommand( kSCSICommandAbort, this, sequenceNumber );
-}
-
-void IOSCSIParallelCommand::complete()
-{
-    if ( device )
-    {
-        device->completeCommand( this );
-    }
-    else
-    {
-        controller->completeCommand( this );
-    }
-}
-
-/*------------------- Generic CDB Interface -----------------------------------------------*/
-
-void IOSCSIParallelCommand::getCDB( CDBInfo *cdbInfo )
-{
-    SCSICDBInfo                scsiCDBInfo;
-
-    bzero( cdbInfo, sizeof(CDBInfo) );
-
-    getCDB( &scsiCDBInfo );
-    cdbInfo->cdb       = scsiCDBInfo.cdb;
-    cdbInfo->cdbLength = scsiCDBInfo.cdbLength;
-}
-
-void IOSCSIParallelCommand::setCDB( CDBInfo *cdbInfo )
-{
-    SCSICDBInfo                scsiCDBInfo;
-
-    bzero( &scsiCDBInfo, sizeof(SCSICDBInfo) );
-
-    scsiCDBInfo.cdbLength = cdbInfo->cdbLength;
-    scsiCDBInfo.cdb       = cdbInfo->cdb;
-    setCDB( &scsiCDBInfo );    
-}
-
-IOReturn IOSCSIParallelCommand::getResults( CDBResults *cdbResults )
-{
-    SCSIResults                scsiResults;
-    IOReturn           rc;
-
-    rc = getResults( &scsiResults );
-
-    if ( cdbResults != 0 )
-    {
-        bzero( cdbResults, sizeof(CDBResults) );
-
-        cdbResults->returnCode         = scsiResults.returnCode;
-        cdbResults->bytesTransferred   = scsiResults.bytesTransferred;
-        cdbResults->requestSenseDone   = scsiResults.requestSenseDone;
-        cdbResults->requestSenseLength = scsiResults.requestSenseLength;
-    }
-
-    return rc;
-}
-
-
-IOCDBDevice *IOSCSIParallelCommand::getDevice( IOCDBDevice * )
-{
-    return (IOCDBDevice *)device;
-}
-
-
-void IOSCSIParallelCommand::zeroCommand()
-{
-    cmdType = kSCSICommandNone;
-//  controller = <same-as-before>;
-//  device = <same-as-before>;
-    list = 0;
-    bzero(&nextCommand, sizeof(nextCommand));
-    bzero(&scsiCmd, sizeof(scsiCmd));
-    bzero(&results, sizeof(results));
-    timeout = 0;
-    timer = 0;
-    queueType = 0;
-    queuePosition = 0;
-    xferDesc = 0;
-    xferCount = 0;
-    xferDirection = 0;
-    senseLength = 0;
-    senseData = 0;
-    origCommand = 0;
-    bzero(&completionInfo, sizeof(completionInfo));
-//    if (dataArea && dataSize)
-//        bzero( dataArea, dataSize );
-//  commandPrivateData = <same-as-before>;
-//  clientData = <same-as-before>;
-    sequenceNumber = 0;
-}