mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2025-01-01 11:29:27 +00:00
0ba83392d4
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included. The Tools directory, containing mostly junk, is also excluded.
792 lines
32 KiB
C
792 lines
32 KiB
C
/*******************************************************************************
|
|
|
|
File: ACAM.h
|
|
|
|
Contains:
|
|
This file contains constants and data structures that will be used by
|
|
drivers to interface with the SCSI Manager 4.3.
|
|
|
|
Written by:
|
|
Jonathan Abilay Blue I/O
|
|
Paul Wolf MHD/Drivers NT
|
|
Henry Kannapell ARIOSO Dude
|
|
Clinton Bauder MHD/Drivers NT
|
|
Matthew Nelson RISC
|
|
|
|
Copyright: © 1992-1994 by Apple Computer, Inc., all rights reserved.
|
|
|
|
Change History (most recent first):
|
|
|
|
<SM22> 2/2/94 DCB Adding another bit to SCSIWeirdStuff - this time to indicate a
|
|
need for scsiHandshaking.
|
|
<SM21> 2/1/94 DCB Added scsiBusErrorsUnsafe constant for the scsiWeirdStuff field.
|
|
<SM20> 11/22/93 pdw Rolling in from <MCxx>.
|
|
<MC4> 11/11/93 pdw Added scsiWeirdStuff field to BusInquiry along with its bits.
|
|
<MC3> 11/9/93 pdw Added scsiIdentifyMessageRejected error code.
|
|
<SMG2> 9/29/93 chp Standardized conditional inclusion and removed redundancies with
|
|
Types.h, which is included.
|
|
<SM18> 10/14/93 pdw Added scsiWrongDirection and scsibXXX flag enums.
|
|
<SM17> 7/17/93 pdw IMPORTANT!!! Changed the SCM to SIM in the comment about
|
|
ReleaseQ (i.e. SIM Q vs. SCM Q).
|
|
<SM16> 6/29/93 pdw Massive checkins: Change asynchronicity mechanism to CallMachine
|
|
stack switching mechanism. Adding support for Cold Fusion.
|
|
Rearranging HW/SW Init code. Some code optimizations.
|
|
<SM15> 5/5/93 PW Converted names to meanies-friendly names. Updated with latest
|
|
from Ludwig stuff.
|
|
<LW11> 5/1/93 PW Realigning tabs that got screwed up during massive name changes
|
|
(on previous checkin). Changing xxxResidualLength to
|
|
xxxResidual.
|
|
<LW9> 4/14/93 DCB Fixed the glue for register bus and re-register bus. Also added
|
|
syncRenegotiateSense flags for third party SIMs.
|
|
<SM14> 3/23/93 PW Added scsiInitiateWide bit and reserved some async callback
|
|
flags for 3rd-parties.
|
|
<LW8> 3/26/93 PW Making scsiDriver field a signed short instead of unsigned short.
|
|
Changed busOldAPICapable to scsiBusOldCallCapable.
|
|
<SM13> 3/20/93 PW Rolled in Ludwig changes.
|
|
<LW7> 3/1/93 DCB Changed scsiConnectionTimeout to reserved since it isn't needed anymore.
|
|
<LW6> 3/1/93 PW Added LoadDrivers function code and removed some unnecessary
|
|
flags from scsiScanFlags byte.
|
|
<LW5> 2/17/93 PW Added scsiBusNotFree bit to scsiResultFlags field.
|
|
<SM12> 2/1/93 PW Update from the latest of Ludwig. Also changes required for PDM
|
|
(will update Ludwig with these as needed myself).
|
|
<LW4> 1/27/93 PW Adding a couple of fields to Bus Inquiry.
|
|
<LW3> 1/27/93 PW Added temporary hack to keep people's A10 drivers working.
|
|
<LW2> 1/27/93 PW Removed enums on flags and added enum to A089 selectors. Added
|
|
a spare long to header and added scsiDataTypes field.
|
|
<SM11> 12/9/92 PW Rearranged error codes - broke them up into 3 ranges: execution
|
|
failed, could not start and parameter error. Removed
|
|
scsiDoVirtualMap flag.
|
|
<SM10> 12/5/92 PW Changed VUflags to IOflags and changed RefNum function names.
|
|
<SM9> 11/20/92 DCB Adding support for interleaving, changed some #defines to enums
|
|
and removed recorder stuff.
|
|
<SM8> 10/30/92 DCB Moved completion routine to header
|
|
<SM7> 10/30/92 DCB Various changes in to reflect the results of the SCSI Sync
|
|
meeting
|
|
<SM6> 10/8/92 PW Whole loads of name changes (fields, flags and errors). Some
|
|
realignment and some new fields.
|
|
<SM5> 9/17/92 PW Slight changes to some names. Removed much unused garbage.
|
|
<SM4> 8/31/92 DCB Added ioQ Field to the SCSI_IO parameter block to simplify Q
|
|
management.
|
|
<SM3> 8/30/92 DCB Added pending IO field to SCSI_IO, also changed the names for
|
|
Terminate, Abort and Reset Device.
|
|
<SM2> 8/20/92 DCB Added Select w/o Atn flag
|
|
|
|
--------------------------------- SCSI Manager Header File
|
|
--- S C S I M A N A G E R --- Version 4.3
|
|
---------------------------------
|
|
|
|
*******************************************************************************/
|
|
|
|
#ifndef __ACAM__
|
|
#define __ACAM__
|
|
|
|
#ifndef __TYPES__
|
|
#include <Types.h>
|
|
#endif
|
|
|
|
#ifndef __TRAPS__
|
|
#include <Traps.h>
|
|
#endif
|
|
|
|
|
|
#define scsiVERSION 43
|
|
|
|
/********************************************************************/
|
|
// Defines for the SCSIMgr function codes
|
|
/********************************************************************/
|
|
|
|
enum // <SM9> changed to enums as per design review
|
|
{
|
|
//------------ Common Functions ------------
|
|
|
|
SCSINop = 0x00, // Execute nothing
|
|
SCSIExecIO = 0x01, // Execute the specified IO
|
|
SCSIBusInquiry = 0x03, // Get parameters for entire path of HBAs
|
|
SCSIReleaseQ = 0x04, // Release the frozen SIM queue for particular LUN
|
|
SCSISetAsyncCallback = 0x05, // Set async event call back
|
|
|
|
//------------ Control Functions ------------
|
|
|
|
SCSIAbortCommand = 0x10, // Abort the selected Control Block
|
|
SCSIResetBus = 0x11, // Reset the SCSI bus
|
|
SCSIResetDevice = 0x12, // Reset the SCSI device
|
|
SCSITerminateIO = 0x13, // Terminate any pending IO
|
|
|
|
//------------ Target Mode Functions ------------
|
|
|
|
SCSIEnableLUN = 0x30, // Enable LUN, Target mode support
|
|
SCSITargetIO = 0x31, // Execute the target IO request
|
|
|
|
//------------ Apple Added ------------
|
|
|
|
SCSIGetVirtualIDInfo = 0x80, // Find out which bus old ID is on
|
|
SCSIGenerateInterleaveID = 0x81, // Generate a new interleave factor <SM9> pdw
|
|
SCSILoadDriver = 0x82, // Load a driver for a device ident. <LW6> DCB
|
|
SCSIOldCall = 0x84, // XPT->SIM private call for old-API
|
|
SCSICreateRefNumXref = 0x85, // Register a DeviceIdent to drvr RefNum xref
|
|
SCSILookupRefNumXref = 0x86, // Get DeviceIdent to drvr RefNum xref
|
|
SCSIRemoveRefNumXref = 0x87, // Remove a DeviceIdent to drvr RefNum xref
|
|
SCSIRegisterWithNewXPT = 0x88 // XPT has changed - SIM needs to re-register itself
|
|
|
|
//------------ 3rd-party Vendor Unique ------------
|
|
|
|
// 0xC0 thru 0xFF
|
|
};
|
|
|
|
|
|
/********************************************************************/
|
|
/* SCSI Parameter Block Elements */
|
|
/********************************************************************/
|
|
|
|
typedef pascal void (*CallbackProc) (void * ioPtr); // <SM6> pdw
|
|
|
|
|
|
//ÑÑÑÑÑ Allocation length defines for some of the fields ÑÑÑÑÑ <SM9>
|
|
|
|
#define handshakeDataLength 8 // Handshake data length
|
|
#define maxCDBLength 16 // Space for the CDB bytes/pointer
|
|
#define vendorIDLength 16 // ASCII string len for Vendor ID
|
|
|
|
|
|
//ÑÑÑÑÑ Define DeviceIdent structure ÑÑÑÑÑ
|
|
|
|
typedef struct DeviceIdent
|
|
{
|
|
uchar diReserved; // reserved
|
|
uchar bus; // SCSI - Bus #
|
|
uchar targetID; // SCSI - Target SCSI ID
|
|
uchar LUN; // SCSI - LUN
|
|
} DeviceIdent;
|
|
|
|
|
|
//ÑÑÑÑÑ Command Descriptor Block structure ÑÑÑÑÑ
|
|
|
|
typedef union CDB
|
|
{
|
|
uchar * cdbPtr; // ptr to the CDB bytes to send, orÉ
|
|
uchar cdbBytes[ maxCDBLength ]; // actual CDB to send <SM6> pdw
|
|
} CDB, *CDBPtr;
|
|
|
|
|
|
//ÑÑÑÑÑ Scatter/gather list element ÑÑÑÑÑ
|
|
|
|
typedef struct SGRecord
|
|
{
|
|
Ptr SGAddr;
|
|
ulong SGCount;
|
|
} SGRecord;
|
|
|
|
|
|
|
|
|
|
/********************************************************************/
|
|
/* SCSI Parameter Block Definitions */
|
|
/********************************************************************/
|
|
|
|
//====== Common SCSI PB header fields macro ======
|
|
|
|
#define SCSIPBHdr \
|
|
struct SCSIHdr * qLink; /* (internal) Q link to next PB */ \
|
|
short scsiReserved1; /* -> reserved for input */ \
|
|
ushort scsiPBLength; /* -> Length of the entire PB */ \
|
|
uchar scsiFunctionCode; /* -> function selector */ \
|
|
uchar scsiReserved2; /* <- reserved for output */ \
|
|
OSErr scsiResult; /* <- Returned result */ \
|
|
DeviceIdent scsiDevice; /* -> Device Identifier (bus+target+lun)*/ \
|
|
CallbackProc scsiCompletion; /* -> Callback on completion function */ \
|
|
ulong scsiFlags; /* -> assorted flags */ \
|
|
uchar * scsiDriverStorage; /* <> Ptr for driver private use */ \
|
|
Ptr scsiXPTprivate; /* private field for use in XPT */ \
|
|
long scsiReserved3; /* reserved */
|
|
// end of SCSIPBHdr
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ SCSI PB Header ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
typedef struct SCSIHdr
|
|
{
|
|
SCSIPBHdr
|
|
} SCSIHdr;
|
|
|
|
typedef struct SCSI_PB
|
|
{
|
|
SCSIPBHdr
|
|
} SCSI_PB;
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ SCSI I/O Request PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ <SM6> pdw from prev <SM6>
|
|
|
|
#define SCSI_IO_Macro \
|
|
SCSIPBHdr /* Header information fields */ \
|
|
ushort scsiResultFlags; /* <- Flags which modify the scsiResult field */ \
|
|
ushort scsiInterleaveID; /* -> used to designate interleavability of request */ \
|
|
uchar * scsiDataPtr; /* -> Pointer to the data buffer or the S/G list */ \
|
|
ulong scsiDataLength; /* -> Data transfer length */ \
|
|
uchar * scsiSensePtr; /* -> Ptr to autosense data buffer */ \
|
|
uchar scsiSenseLength; /* -> size of the autosense buffer */ \
|
|
uchar scsiCDBLength; /* -> Number of bytes for the CDB */ \
|
|
ushort scsiSGListCount; /* -> num of scatter gather list entries */ \
|
|
ulong scsiReserved4; /* <- reserved for output */ \
|
|
uchar scsiSCSIstatus; /* <- Returned scsi device status */ \
|
|
char scsiSenseResidual; /* <- Autosense residual length */ \
|
|
ushort scsiReserved5; /* <- reserved for output */ \
|
|
long scsiDataResidual; /* <- Returned Transfer residual length */ \
|
|
CDB scsiCDB; /* -> Actual CDB or pointer to CDB */ \
|
|
long scsiTimeout; /* -> Timeout value (Time Mgr format) (CAM timeout) */ \
|
|
uchar * scsiMessagePtr; /* -> Pointer to the message buffer -target md only */ \
|
|
ushort scsiMessageLen; /* -> Num of bytes in the msg bfr -target md only */ \
|
|
ushort scsiIOFlags; /* -> additional I/O flags */ \
|
|
uchar scsiTagAction; /* -> What to do for tag queuing */ \
|
|
uchar scsiReserved6; /* -> reserved for input */ \
|
|
ushort scsiReserved7; /* -> reserved for input */ \
|
|
ushort scsiSelectTimeout; /* -> Select timeout value */ \
|
|
uchar scsiDataType; /* -> Data description type (i.e. buffer, TIB, S/G) */ \
|
|
uchar scsiTransferType; /* -> Transfer type (i.e. Blind vs Polled) */ \
|
|
ulong scsiReserved8; /* -> reserved for input */ \
|
|
ulong scsiReserved9; /* -> reserved for input */ \
|
|
ushort scsiHandshake[handshakeDataLength]; /* -> handshaking points (null term'd) */ \
|
|
ulong scsiReserved10; /* -> reserved for input */ \
|
|
ulong scsiReserved11; /* -> reserved for input */ \
|
|
struct SCSI_IO *scsiCommandLink; /* -> Ptr to the next PB in linked cmd chain */ \
|
|
\
|
|
uchar scsiSIMpublics[8]; /* -> reserved for input to 3rd-party SIMs */ \
|
|
uchar scsiAppleReserved6[8]; /* -> reserved for input */ \
|
|
\
|
|
/* XPT layer privates (for old-API emulation) */ \
|
|
\
|
|
ushort scsiCurrentPhase; /* <- phase upon completing old call */ \
|
|
short scsiSelector; /* -> selector specified in old calls */ \
|
|
OSErr scsiOldCallResult; /* <- result of old call */ \
|
|
uchar scsiSCSImessage; /* <- Returned scsi device message (for SCSIComplete)*/ \
|
|
uchar XPTprivateFlags; /* <> various flags */ \
|
|
uchar XPTextras[12]; /* */
|
|
|
|
// end of SCSI_IO_Macro
|
|
|
|
|
|
typedef struct SCSI_IO
|
|
{
|
|
SCSI_IO_Macro
|
|
} SCSI_IO;
|
|
// <SM6> pdw from prev <SM6>
|
|
#define SCSIExecIOPB SCSI_IO
|
|
|
|
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ Bus inquiry PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
typedef struct SCSIBusInquiryPB
|
|
{
|
|
SCSIPBHdr // Header information fields
|
|
ushort scsiEngineCount; // <- Number of engines on HBA
|
|
ushort scsiMaxTransferType; // <- Number of transfer types for this HBA
|
|
|
|
ulong scsiDataTypes; // <- which data types are supported by this SIM
|
|
|
|
ushort scsiIOpbSize; // <- Size of SCSI_IO PB for this SIM/HBA <SM6> pdw
|
|
ushort scsiMaxIOpbSize; // <- Size of max SCSI_IO PB for all SIM/HBAs <SM6> pdw
|
|
|
|
ulong scsiFeatureFlags; // <- Supported features flags field
|
|
|
|
uchar scsiVersionNumber; // <- Version number for the SIM/HBA
|
|
uchar scsiHBAInquiry; // <- Mimic of INQ byte 7 for the HBA
|
|
uchar scsiTargetModeFlags; // <- Flags for target mode support
|
|
uchar scsiScanFlags; // <- Scan related feature flags
|
|
|
|
ulong scsiSIMPrivatesPtr; // <- Ptr to SIM private data area
|
|
ulong scsiSIMPrivatesSize; // <- Size of SIM private data area
|
|
ulong scsiAsyncFlags; // <- Event cap. for Async Callback
|
|
|
|
uchar scsiHiBusID; // <- Highest path ID in the subsystem
|
|
uchar scsiInitiatorID; // <- ID of the HBA on the SCSI bus
|
|
ushort scsiBIReserved0;
|
|
|
|
ulong scsiBIReserved1; // <-
|
|
ulong scsiFlagsSupported; // <- which scsiFlags are supported
|
|
|
|
ushort scsiIOFlagsSupported; // <- which scsiIOFlags are supported
|
|
ushort scsiWeirdStuff; // <-
|
|
ushort scsiMaxTarget; // <- maximum Target number supported
|
|
ushort scsiMaxLUN; // <- maximum Logical Unit number supported
|
|
|
|
char scsiSIMVendor[ vendorIDLength ]; // <- Vendor ID of SIM (or XPT if bus<FF) <SM6> pdw
|
|
char scsiHBAVendor[ vendorIDLength ]; // <- Vendor ID of the HBA <SM6> pdw
|
|
char scsiControllerFamily[ vendorIDLength ]; // <- Family of SCSI Controller
|
|
char scsiControllerType[ vendorIDLength ]; // <- Specific Model of SCSI Controller used
|
|
|
|
char scsiXPTversion[4]; // <- version number of XPT
|
|
char scsiSIMversion[4]; // <- version number of SIM
|
|
char scsiHBAversion[4]; // <- version number of HBA
|
|
|
|
uchar scsiHBAslotType; // <- type of "slot" that this HBA is in
|
|
uchar scsiHBAslotNumber; // <- slot number of this HBA
|
|
ushort scsiSIMsRsrcID; // <- resource ID of this SIM
|
|
|
|
ushort scsiBIReserved3; // <-
|
|
ushort scsiAdditionalLength; // <- additional BusInquiry PB len
|
|
} SCSIBusInquiryPB;
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ Abort SIM Request PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
typedef struct SCSIAbortCommandPB
|
|
{
|
|
SCSIPBHdr // Header information fields
|
|
SCSI_IO * scsiIOptr; // Pointer to the PB to abort
|
|
} SCSIAbortCommandPB; // <SM3>
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ Terminate I/O Process Request PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
typedef struct SCSITerminateIOPB
|
|
{
|
|
SCSIPBHdr // Header information fields
|
|
SCSI_IO * scsiIOptr; // Pointer to the PB to terminate
|
|
} SCSITerminateIOPB; // <SM3>
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ Reset SCSI Bus PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
typedef struct SCSIResetBusPB
|
|
{
|
|
SCSIPBHdr // Header information fields
|
|
} SCSIResetBusPB; // <SM3>
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ Reset SCSI Device PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
typedef struct SCSIResetDevicePB
|
|
{
|
|
SCSIPBHdr // Header information fields
|
|
} SCSIResetDevicePB; // <SM3>
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ Release SIM Queue PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
typedef struct SCSIReleaseQPB
|
|
{
|
|
SCSIPBHdr // Header information fields
|
|
} SCSIReleaseQPB;
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ Set Async Event Callback PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
typedef struct SCSISetAsyncCallbackPB
|
|
{
|
|
SCSIPBHdr // Header information fields
|
|
ulong scsiEventFlags; // -> events to be notified of
|
|
void (*scsiEventCallback)(); // -> routine to call when event occurs
|
|
uchar * scsiEventInfoPtr; // -> ptr to buffer for additional info
|
|
uchar scsiEventInfoLen; // -> length of buffer
|
|
uchar scsiReserved11; //
|
|
ushort scsiReserved12; //
|
|
} SCSISetAsyncCallbackPB;
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ SCSI Get Virtual ID Info PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ <SM6> pdw
|
|
typedef struct SCSIGetVirtualIDInfoPB
|
|
{
|
|
SCSIPBHdr // Header information fields
|
|
ushort scsiOldCallID; // -> SCSI ID of device in question
|
|
Boolean scsiExists; // <- true if device exists
|
|
} SCSIGetVirtualIDInfoPB;
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ SCSI Generate Interleave ID PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ <SM6> pdw
|
|
typedef struct SCSIGenerateInterleaveIDPB
|
|
{
|
|
SCSIPBHdr // Header information fields
|
|
ushort scsiInterleaveID; // <- SCSI ID of device in question
|
|
ushort scsiReserved13; //
|
|
} SCSIGenerateInterleaveIDPB;
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ Create/Lookup/Remove RefNum for Device PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
typedef struct SCSI_Driver_PB
|
|
{
|
|
SCSIPBHdr // Header information fields
|
|
short scsiDriver; // -> DriverRefNum, For SetDriver
|
|
// <- For GetNextDriver
|
|
ushort scsiDriverFlags; // <> Details of driver/device
|
|
DeviceIdent scsiNextDevice; // <- DeviceIdent of the NEXT Item in the list
|
|
} SCSI_Driver_PB;
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ Load Driver PB ÑÑÑÑÑÑÑÑÑÑÑÑÑÑ <LW6> DCB
|
|
typedef struct SCSILoadDriverPB
|
|
{
|
|
SCSIPBHdr // Header information fields
|
|
short scsiLoadedRefNum; // <- SIM returns refnum of driver
|
|
Boolean scsiDiskLoadFailed; // -> if true, indicates call after failure to load
|
|
} SCSILoadDriverPB; //
|
|
|
|
//======================================================================
|
|
|
|
/******************************************************************************/
|
|
// Values for the fields in SCSI PBs
|
|
/******************************************************************************/
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// Defines for the scsiTransferType field
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
enum {
|
|
scsiTransferBlind = 0,
|
|
scsiTransferPolled
|
|
};
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// Defines for the scsiDataType field
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
enum {
|
|
scsiDataBuffer = 0, // single contiguous buffer supplied
|
|
scsiDataTIB = 1, // TIB supplied (ptr in scsiDataPtr)
|
|
scsiDataSG = 2 // scatter/gather list supplied
|
|
};
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// Defines for the SCSIMgr scsiResult field in the PB header.
|
|
// $E100 thru E1FF
|
|
// -$1EFF thru -1E00
|
|
// -#7935 thru -7681
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
#define scsiErrorBase -7936 // = 0xE100
|
|
|
|
enum { // <SM9> changed to enums
|
|
scsiRequestInProgress = 1, // 1 = PB request is in progress
|
|
|
|
// Execution failed 00-2F
|
|
scsiRequestAborted = (scsiErrorBase+0x02), // -7934 = PB request aborted by the host
|
|
scsiUnableToAbort = (scsiErrorBase+0x03), // -7933 = Unable to Abort PB request
|
|
scsiNonZeroStatus = (scsiErrorBase+0x04), // -7932 = PB request completed with an err
|
|
scsiUnused05 = (scsiErrorBase+0x05), // -7931 =
|
|
scsiUnused06 = (scsiErrorBase+0x06), // -7930 =
|
|
scsiUnused07 = (scsiErrorBase+0x07), // -7929 =
|
|
scsiUnused08 = (scsiErrorBase+0x08), // -7928 =
|
|
scsiUnableToTerminate = (scsiErrorBase+0x09), // -7927 = Unable to Terminate I/O PB req
|
|
scsiSelectTimeout = (scsiErrorBase+0x0A), // -7926 = Target selection timeout
|
|
scsiCommandTimeout = (scsiErrorBase+0x0B), // -7925 = Command timeout
|
|
scsiIdentifyMessageRejected = (scsiErrorBase+0x0C), // -7924 =
|
|
scsiMessageRejectReceived = (scsiErrorBase+0x0D), // -7923 = Message reject received
|
|
scsiSCSIBusReset = (scsiErrorBase+0x0E), // -7922 = SCSI bus reset sent/received
|
|
scsiParityError = (scsiErrorBase+0x0F), // -7921 = Uncorrectable parity error occured
|
|
scsiAutosenseFailed = (scsiErrorBase+0x10), // -7920 = Autosense: Request sense cmd fail
|
|
scsiUnused11 = (scsiErrorBase+0x11), // -7919 =
|
|
scsiDataRunError = (scsiErrorBase+0x12), // -7918 = Data overrun/underrun error
|
|
scsiUnexpectedBusFree = (scsiErrorBase+0x13), // -7917 = Unexpected BUS free
|
|
scsiSequenceFailed = (scsiErrorBase+0x14), // -7916 = Target bus phase sequence failure
|
|
scsiWrongDirection = (scsiErrorBase+0x15), // -7915 = Data phase was in unexpected direction
|
|
scsiUnused16 = (scsiErrorBase+0x16), // -7914 =
|
|
scsiBDRsent = (scsiErrorBase+0x17), // -7913 = A SCSI BDR msg was sent to target
|
|
scsiTerminated = (scsiErrorBase+0x18), // -7912 = PB request terminated by the host
|
|
scsiNoNexus = (scsiErrorBase+0x19), // -7911 = Nexus is not established
|
|
scsiCDBReceived = (scsiErrorBase+0x1A), // -7910 = The SCSI CDB has been received
|
|
|
|
// Couldn't begin execution 30-3F
|
|
scsiTooManyBuses = (scsiErrorBase+0x30), // -7888 = Register failed because we're full
|
|
scsiBusy = (scsiErrorBase+0x31), // -7887 = SCSI subsystem is busy
|
|
scsiProvideFail = (scsiErrorBase+0x32), // -7886 = Unable to provide requ. capability
|
|
scsiDeviceNotThere = (scsiErrorBase+0x33), // -7885 = SCSI device not installed/there
|
|
scsiNoHBA = (scsiErrorBase+0x34), // -7884 = No HBA detected Error
|
|
scsiDeviceConflict = (scsiErrorBase+0x35), // -7883 = sorry, max 1 refNum per DeviceIdent
|
|
scsiNoSuchXref = (scsiErrorBase+0x36), // -7882 = no such RefNum xref
|
|
scsiQLinkInvalid = (scsiErrorBase+0x37), // -7881 = pre-linked PBs not supported // <LW14> pdw F§
|
|
|
|
// Parameter errors 40-7F
|
|
scsiPBLengthError = (scsiErrorBase+0x40), // -7872 = length (scsiPBLength) is insuf'ct/invalid
|
|
scsiFunctionNotAvailable = (scsiErrorBase+0x41), // -7871 = The requ. func is not available
|
|
scsiRequestInvalid = (scsiErrorBase+0x42), // -7970 = PB request is invalid
|
|
scsiBusInvalid = (scsiErrorBase+0x43), // -7969 = Bus ID supplied is invalid
|
|
scsiTIDInvalid = (scsiErrorBase+0x44), // -7868 = Target ID supplied is invalid
|
|
scsiLUNInvalid = (scsiErrorBase+0x45), // -7867 = LUN supplied is invalid
|
|
scsiIIDInvalid = (scsiErrorBase+0x46), // -7866 = The initiator ID is invalid
|
|
scsiDataTypeInvalid = (scsiErrorBase+0x47), // -7865 = scsiDataType requested is not supported
|
|
scsiTransferTypeInvalid = (scsiErrorBase+0x48), // -7864 = scsiTransferType field is too high
|
|
scsiCDBLengthInvalid = (scsiErrorBase+0x49) // -7863 = scsiCDBLength field is too big
|
|
};
|
|
|
|
#define scsiExecutionErrors scsiErrorBase
|
|
#define scsiNotExecutedErrors scsiTooManyBuses
|
|
#define scsiParameterErrors scsiPBLengthError
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// Defines for the scsiResultFlags field
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
#define scsiSIMQFrozen 0x0001 // The SIM queue is frozen w/this err
|
|
#define scsiAutosenseValid 0x0002 // Autosense data valid for target
|
|
#define scsiBusNotFree 0x0004 // At time of callback, SCSI bus is not free
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// Defines for the scsiFlags field in the PB header for the SCSIExecIO function
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
enum
|
|
{
|
|
// 1st Byte
|
|
|
|
scsibDisableAutosense = 29, // Disable auto sense feature
|
|
scsibFlagReservedA = 28, //
|
|
|
|
scsibFlagReserved0 = 27, //
|
|
scsibCDBLinked = 26, // The PB contains a linked CDB
|
|
scsibQEnable = 25, // Target queue actions are enabled
|
|
scsibCDBIsPointer = 24, // The CDB field contains a pointer
|
|
|
|
// 2nd Byte
|
|
|
|
scsibFlagReserved1 = 23, //
|
|
scsibInitiateSyncData = 22, // Attempt Sync data xfer and SDTR
|
|
scsibDisableSyncData = 21, // Disable sync, go to async
|
|
scsibSIMQHead = 20, // Place PB at the head of SIM Q
|
|
|
|
scsibSIMQFreeze = 19, // Return the SIM Q to frozen state
|
|
scsibSIMQNoFreeze = 18, // Disallow SIM Q freezing
|
|
scsibDoDisconnect = 17, // Definitely do disconnect
|
|
scsibDontDisconnect = 16, // Definitely don't disconnect
|
|
|
|
// 3rd Byte
|
|
|
|
scsibFlagReserved3 = 15, //
|
|
scsibDataDMAready = 14, // Data buffer(s) are ready for DMA
|
|
scsibDataPhysical = 13, // SG/Buffer data ptrs are physical
|
|
scsibSensePhysical = 12, // Autosense buffer ptr is physical
|
|
|
|
scsibFlagReserved5 = 11, //
|
|
scsibFlagReserved6 = 10, //
|
|
scsibFlagReserved7 = 9, //
|
|
scsibFlagReserved8 = 8, //
|
|
|
|
// 4th Byte - Target Mode Flags
|
|
|
|
scsibDataBufferValid = 7, // Data buffer valid
|
|
scsibStatusBufferValid = 6, // Status buffer valid
|
|
scsibMessageBufferValid = 5, // Message buffer valid
|
|
scsibFlagReserved9 = 4, //
|
|
|
|
scsibTargetPhaseMode = 3, // The SIM will run in phase mode
|
|
scsibTargetPBAvail = 2, // Target PB available
|
|
scsibDisableAutoDisconnect = 1, // Disable autodisconnect
|
|
scsibDisableAutoSaveRestore = 0 // Disable autosave/restore ptrs
|
|
};
|
|
|
|
|
|
// 1st Byte
|
|
|
|
#define scsiDirectionMask 0xC0000000 // Data direction mask
|
|
|
|
#define scsiDirectionNone 0xC0000000 // Data direction (11: no data)
|
|
#define scsiDirectionReserved 0x00000000 // Data direction (00: reserved)
|
|
#define scsiDirectionOut 0x80000000 // Data direction (10: DATA OUT)
|
|
#define scsiDirectionIn 0x40000000 // Data direction (01: DATA IN)
|
|
#define scsiDisableAutosense 0x20000000 // Disable auto sense feature
|
|
#define scsiFlagReservedA 0x10000000 //
|
|
|
|
#define scsiFlagReserved0 0x08000000 //
|
|
#define scsiCDBLinked 0x04000000 // The PB contains a linked CDB
|
|
#define scsiQEnable 0x02000000 // Target queue actions are enabled
|
|
#define scsiCDBIsPointer 0x01000000 // The CDB field contains a pointer
|
|
|
|
// 2nd Byte
|
|
|
|
#define scsiFlagReserved1 0x00800000 //
|
|
#define scsiInitiateSyncData 0x00400000 // Attempt Sync data xfer and SDTR
|
|
#define scsiDisableSyncData 0x00200000 // Disable sync, go to async
|
|
#define scsiSIMQHead 0x00100000 // Place PB at the head of SIM Q
|
|
|
|
#define scsiSIMQFreeze 0x00080000 // Return the SIM Q to frozen state
|
|
#define scsiSIMQNoFreeze 0x00040000 // Disallow SIM Q freezing
|
|
#define scsiDoDisconnect 0x00020000 // Definitely do disconnect
|
|
#define scsiDontDisconnect 0x00010000 // Definitely don't disconnect
|
|
|
|
// 3rd Byte
|
|
|
|
#define scsiFlagReserved3 0x00008000 //
|
|
#define scsiDataDMAready 0x00004000 // Data buffer(s) are ready for DMA
|
|
#define scsiDataPhysical 0x00002000 // SG/Buffer data ptrs are physical
|
|
#define scsiSensePhysical 0x00001000 // Autosense buffer ptr is physical
|
|
|
|
#define scsiFlagReserved5 0x00000800 //
|
|
#define scsiFlagReserved6 0x00000400 //
|
|
#define scsiFlagReserved7 0x00000200 //
|
|
#define scsiFlagReserved8 0x00000100 //
|
|
|
|
// 4th Byte - Target Mode Flags
|
|
|
|
#define scsiDataBufferValid 0x00000080 // Data buffer valid
|
|
#define scsiStatusBufferValid 0x00000040 // Status buffer valid
|
|
#define scsiMessageBufferValid 0x00000020 // Message buffer valid
|
|
#define scsiFlagReserved9 0x00000010 //
|
|
|
|
#define scsiTargetPhaseMode 0x00000008 // The SIM will run in phase mode
|
|
#define scsiTargetPBAvail 0x00000004 // Target PB available
|
|
#define scsiDisableAutoDisconnect 0x00000002 // Disable autodisconnect
|
|
#define scsiDisableAutoSaveRestore 0x00000001 // Disable autosave/restore ptrs
|
|
|
|
#define scsiTargetModeFlagsMask 0x000000FF // all of the target mode bits
|
|
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// scsiIOFlags
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
#define scsiNoParityCheck 0x0002 // disable parity checking
|
|
#define scsiDisableSelectWAtn 0x0004 // disable select w/Atn
|
|
#define scsiSavePtrOnDisconnect 0x0008 // do SaveDataPointer upon Disconnect msg
|
|
#define scsiNoBucketIn 0x0010 // donÕt bit bucket in during this I/O
|
|
#define scsiNoBucketOut 0x0020 // donÕt bit bucket out during this I/O
|
|
#define scsiDisableWide 0x0040 // disable wide transfer negotiation
|
|
#define scsiInitiateWide 0x0080 // initiate wide transfer negotiation
|
|
#define scsiRenegotiateSense 0x0100 // renegotiate sync/wide before issuing autosense
|
|
|
|
#define scsiIOFlagReserved0080 0x0080 //
|
|
#define scsiIOFlagReserved8000 0x8000 //
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// Defines for the SIM/HBA queue actions. These values are used in the
|
|
// SCSIExecIOPB, for the queue action field. [These values should match the
|
|
// defines from some other include file for the SCSI message phases. We may
|
|
// not need these definitions here. ]
|
|
|
|
enum {
|
|
scsiSimpleQTag = 0x20, // Tag for a simple queue
|
|
scsiHeadQTag = 0x21, // Tag for head of queue
|
|
scsiOrderedQTag = 0x22 // Tag for ordered queue
|
|
};
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// Defines for the Bus Inquiry PB fields.
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
// scsiHBAInquiry field bits
|
|
|
|
#define scsiBusMDP 0x80 // Supports Modify Data Pointer message
|
|
#define scsiBusWide32 0x40 // Supports 32 bit wide SCSI
|
|
#define scsiBusWide16 0x20 // Supports 16 bit wide SCSI
|
|
#define scsiBusSDTR 0x10 // Supports Sync Data Transfer Req message
|
|
#define scsiBusLinkedCDB 0x08 // Supports linked CDBs
|
|
#define scsiBusTagQ 0x02 // Supports tag queue message
|
|
#define scsiBusSoftReset 0x01 // Supports soft reset
|
|
|
|
|
|
// scsiDataTypes field bits
|
|
// bits 0->15 Apple-defined, 16->30 3rd-party unique, 31 = reserved
|
|
|
|
#define scsiBusDataTIB (1<<scsiDataTIB) // TIB supplied (ptr in scsiDataPtr)
|
|
#define scsiBusDataBuffer (1<<scsiDataBuffer) // single contiguous buffer supplied
|
|
#define scsiBusDataSG (1<<scsiDataSG) // scatter/gather list supplied
|
|
|
|
#define scsiBusDataReserved 0x80000000 //
|
|
|
|
|
|
// scsiTargetModeFlags field bits
|
|
|
|
#define scsiBusTargetMdProcessor 0x80 // Target mode processor mode
|
|
#define scsiBusTargetMdPhase 0x40 // Target mode phase cog. mode
|
|
|
|
|
|
// scsiScanFlags field bits
|
|
|
|
#define scsiBusScansDevices 0x80 // Bus scans for and maintains device list
|
|
#define scsiBusScansOnInit 0x40 // Bus scans performed at power-up/reboot
|
|
#define scsiBusLoadsROMDrivers 0x20 // may load ROM drivers to support targets
|
|
|
|
|
|
// scsiFeatureFlags field bits
|
|
|
|
#define scsiBusInternalExternalMask 0x000000C0 // bus internal/external mask
|
|
#define scsiBusInternalExternalUnknown 0x00000000 // not known whether bus is inside or outside
|
|
#define scsiBusInternalExternal 0x000000C0 // bus goes inside and outside the box
|
|
#define scsiBusInternal 0x00000080 // bus goes inside the box
|
|
#define scsiBusExternal 0x00000040 // bus goes outside the box
|
|
|
|
#define scsiBusCacheCoherentDMA 0x00000020 // DMA is cache coherent
|
|
#define scsiBusOldCallCapable 0x00000010 // SIM is old call capable
|
|
|
|
#define scsiBusDifferential 0x00000004 // Single Ended (0) or Differential (1)
|
|
#define scsiBusFastSCSI 0x00000002 // HBA supports fast SCSI
|
|
#define scsiBusDMAavailable 0x00000001 // DMA is available
|
|
|
|
|
|
// scsiWeirdStuff field bits
|
|
|
|
#define scsiOddDisconnectUnsafeRead1 0x0001 //
|
|
#define scsiOddDisconnectUnsafeWrite1 0x0002 //
|
|
#define scsiBusErrorsUnsafe 0x0004 //
|
|
#define scsiRequiresHandshake 0x0008 //
|
|
#define scsiTargetDrivenSDTRSafe 0x0010 //
|
|
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// Defines for the scsiDriverFlags field (in SCSI_Driver_PB)
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
#define scsiDeviceSensitive 0x0001 // Only driver should access this device
|
|
#define scsiDeviceNoOldCallAccess 0x0002 // no old call access to this device
|
|
|
|
|
|
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
// SIMinitInfo
|
|
//ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
|
|
typedef struct { // directions are for SCSIRegisterBus call ( -> parm, <- result)
|
|
uchar * SIMstaticPtr; // <- alloc. ptr to the SIM's static vars
|
|
long staticSize; // -> num bytes SIM needs for static vars
|
|
OSErr (*SIMinit)(); // -> pointer to the SIM init routine
|
|
void (*SIMaction)(); // -> pointer to the SIM action routine
|
|
long (*SIM_ISR)(); // -> pointer to the SIM ISR routine
|
|
long (*SIMInterruptPoll)(); // -> pointer to the SIM interrupt poll routine
|
|
void (*NewOldCall)(); // -> pointer to the SIM NewOldCall routine
|
|
ushort ioPBSize; // -> size of SCSI_IO_PBs required for this SIM <SM6> pdw
|
|
Boolean oldCallCapable; // -> true if this SIM can handle old-API calls
|
|
uchar simInfoUnused1; // ->
|
|
long simInternalUse; // xx not affected or viewed by XPT
|
|
void (*XPT_ISR)(); // <- ptr to the XPT ISR
|
|
void (*EnteringSIM)(); // <- ptr to the EnteringSIM routine
|
|
void (*ExitingSIM)(); // <- ptr to the ExitingSIM routine
|
|
void (*MakeCallback)(); // <- pointer to the XPT layerÕs MakeCallback routine
|
|
ushort busID; // <- bus number for the registered bus
|
|
ushort simInfoUnused3; // <-
|
|
long simInfoUnused4; // <-
|
|
} SIMinitInfo;
|
|
|
|
|
|
|
|
/********* Glue between SCSI calls and SCSITrap format ***********/
|
|
|
|
enum {
|
|
xptSCSIAction = 0x0001,
|
|
xptSCSIRegisterBus = 0x0002,
|
|
xptSCSIDeregisterBus = 0x0003,
|
|
xptSCSIReregisterBus = 0x0004,
|
|
xptSCSIKillXPT = 0x0005 // kills Mini-XPT after transition
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#pragma parameter __D0 SCSIAction(__A0) /* moveq #kSCSIx, D0; _SCSIAtomic */
|
|
OSErr SCSIAction(SCSI_PB *) = {0x7001, _SCSIAtomic};
|
|
|
|
#pragma parameter __D0 SCSIRegisterBus(__A0)
|
|
OSErr SCSIRegisterBus(SIMinitInfo *) = {0x7002, _SCSIAtomic};
|
|
|
|
#pragma parameter __D0 SCSIDeregisterBus(__A0)
|
|
OSErr SCSIDeregisterBus(SIMinitInfo *) = {0x7003, _SCSIAtomic};
|
|
|
|
#pragma parameter __D0 SCSIReRegisterBus(__A0)
|
|
OSErr SCSIReRegisterBus(SIMinitInfo *) = {0x7004, _SCSIAtomic};
|
|
|
|
#pragma parameter __D0 SCSIKillXPT(__A0)
|
|
OSErr SCSIKillXPT(SIMinitInfo *) = {0x7005, _SCSIAtomic};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
#endif __ACAM__
|