/* * DoScsiCommand.h - * * Modifed by Eryk Vershen * from an original by Martin Minow */ /* * Copyright 1993-1998 by Apple Computer, Inc. * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appears in all copies and * that both the copyright notice and this permission notice appear in * supporting documentation. * * APPLE COMPUTER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE. * * IN NO EVENT SHALL APPLE COMPUTER BE LIABLE FOR ANY SPECIAL, INDIRECT, OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef __DoScsiCommand__ #define __DoScsiCommand__ #include #include "MacSCSICommand.h" /* * Defines */ #ifndef EXTERN #define EXTERN extern #endif #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif #ifndef NULL #define NULL 0 #endif #define kOriginalSCSIBusAdaptor (0xFF) #define SameSCSIDevice(a, b) ((*((UInt32 *) &a)) == (*((UInt32 *) &b))) /* * Cheap 'n dirty memory clear routine. */ #define CLEAR(dst) clear_memory((void *) &dst, sizeof dst) /* * Types */ #if !defined(__NewTypesDefined__) #define __NewTypesDefined__ typedef int8_t SInt8; typedef int16_t SInt16; typedef int32_t SInt32; typedef uint8_t UInt8; typedef uint16_t UInt16; typedef uint32_t UInt32; typedef uint32_t ItemCount; typedef uint32_t ByteCount; #endif /* * Global Constants */ enum { bit0 = (1 << 0), bit1 = (1 << 1), bit2 = (1 << 2), bit3 = (1 << 3), bit4 = (1 << 4), bit5 = (1 << 5), bit6 = (1 << 6), bit7 = (1 << 7) }; /* * Global Variables */ EXTERN int gSCSIHiBusID; EXTERN SCSIExecIOPB *gSCSIExecIOPBPtr; EXTERN UInt32 gSCSIExecIOPBPtrLen; /* * Forward declarations */ void AllocatePB(); Boolean IsIllegalRequest(OSErr scsiStatus, const SCSI_Sense_Data *senseDataPtr); Boolean IsNoMedia(OSErr scsiStatus, const SCSI_Sense_Data *senseDataPtr); /* * All SCSI Commands come here. * if scsiDevice.busID == kOriginalSCSIBusAdaptor, IM-IV SCSI will be called. * scsiFlags should be scsiDirectionNone, scsiDirectionIn, or scsiDirectionOut * actualTransferCount may be NULL if you don't care. * Both old and new SCSI return SCSI Manager 4.3 errors. * * DoSCSICommand throws really serious errors, but returns SCSI errors such * as dataRunError and scsiDeviceNotThere. */ OSErr DoSCSICommand( DeviceIdent scsiDevice, ConstStr255Param currentAction, const SCSI_CommandPtr callerSCSICommand, Ptr dataBuffer, ByteCount dataLength, UInt32 scsiFlags, ByteCount *actualTransferCount, SCSI_Sense_Data *sensePtr, StringPtr senseMessage ); #endif /* __DoScsiCommand__ */