131 lines
3.2 KiB
C
131 lines
3.2 KiB
C
/*
|
|
* 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 <SCSI.h>
|
|
#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 signed char SInt8;
|
|
typedef signed short SInt16;
|
|
typedef signed long SInt32;
|
|
typedef unsigned char UInt8;
|
|
typedef unsigned short UInt16;
|
|
typedef unsigned long UInt32;
|
|
typedef unsigned long ItemCount;
|
|
typedef unsigned long 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__ */
|