sys7.1-doc-wip/OS/SCSIMgr4pt3/XPTEqu.a
2019-07-27 22:37:48 +08:00

408 lines
14 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;________________________________________________________________________
;
; File: XPT.h
;
; Contains: header stuff for XPT
;
; Entry points:
;
; Written by: Paul Wolf
;
; Copyright: © 1992-1994 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <SM21> 1/31/94 DCB Added a second version number field for the SCSI Busy patch
; <SM20> 1/25/94 DCB Added space in the C0C globals for our own private deferred task
; queue.
; <SM19> 1/14/94 chp Remove SCSIGlobals equate again. It is defined in SysEqu.a. (See
; <SM15>.) Fix “include once” SET variable naming conventions.
; <ML3> 1/9/94 pdw Added busyPatchVers field.
; <ML2> 1/5/94 pdw Added SCSIBusy selector and required fields in SCSIGlobals.
; <MC4> 11/5/93 pdw Series of attempts and re-attempts to fix various VM/FileShare
; problems.
; <SM17> 12/19/93 DCB Added SCSIBusy constant
; <SM16> 11/22/93 pdw Rolling in from <MCxx>.
; <SM15> 9/22/93 chp Remove SCSIGlobals equate. It is defined elsewhere.
; <SM14> 10/29/93 DCB <MC> roll-in.
; <MC3> 10/28/93 pdw Got rid of some unused fields. Changed the way Recorder works.
; <SM13> 10/14/93 pdw <MC> roll-in.
; <MC2> 10/12/93 pdw Added support for Synchronous data transfers, rewrote State
; Machine, message handling etc.
; <SM12> 9/9/93 pdw Lots of little changes. Name changes, temporary cache_bug
; stuff.
; <SM11> 7/17/93 pdw Moved jvSelected to HALg.
; <SM10> 7/8/93 pdw Added locations for counting interrupts (not used) and other
; comment changes.
; <SM9> 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. Changed
; Record_Event trigger to use a couple of values in SCSIGlobals.
; <SM8> 5/29/93 PW Adding comment about globals stolen.
; <SM7> 5/25/93 DCB Update from Ludwig (the three items below this one)
; <LW7> 5/21/93 mal Changing GetXPTg to use simple indirection instead of [] stuff.
; <LW6> 5/20/93 DCB Adding two fields to the XPT globals to support turning off
; deferred completion routines from inside debuggers.
; <LW5> 5/20/93 PW Added SCSIGlobalsRec from SCSIPriv and into these, I added jump
; vector for target mode.
; <SM6> 5/5/93 PW Converted names to meanies-friendly names. Updated with latest
; from Ludwig stuff.
; <SM5> 4/8/93 DCB Added a copy of the C0C SCSI Globals which have been modified
; for use by the new SCSI Manager.
; <SM4> 1/31/93 PW Update from the latest of Ludwig. Also changes required for PDM
; (will update Ludwig with these as needed myself).
; <LW3> 1/27/93 PW Changed bogus to syncUnsafeCount.
; <LW2> 12/18/92 PW Added syncReqEnabled counter (bogus field right now).
; <SM3> 11/20/92 PW Removed Includes. Made MaxBuses 16. Removed XPTgs not used in
; asm files.
; <SM2> 10/30/92 DCB Misc equates to support multiple ISR routines.
;========================================================================
STRING ASIS
IF &TYPE('__INCLUDINGXPTEQU__') = 'UNDEFINED' THEN
__INCLUDINGXPTEQU__ SET 1
IF &TYPE('__INCLUDINGACAM__') = 'UNDEFINED' THEN
INCLUDE 'ACAM.a'
ENDIF
;******** Old Call Enumerators ********
OldSCSICalls RECORD 0, INCREMENT
kSCSIReset ds.b 1 ; 0
kSCSIGet ds.b 1
kSCSISelect ds.b 1
kSCSICmd ds.b 1
kSCSIComplete ds.b 1 ; 4
kSCSIRead ds.b 1
kSCSIWrite ds.b 1
kSCSIunused ds.b 1
kSCSIRBlind ds.b 1 ; 8
kSCSIWBlind ds.b 1
kSCSIStat ds.b 1
kSCSISelAtn ds.b 1
kSCSIMsgIn ds.b 1 ; C
kSCSIMsgOut ds.b 1
kSCSIBusy ds.b 1
kNumOldSCSICalls ds.b 1 ; F (15)
ENDR
;******** Old Call States ********
OldCallStates RECORD 0, INCREMENT
kNotConnected ds.b 1 ; 0
kGotGet ds.b 1
kSelectInProgress ds.b 1
kConnected ds.b 1
kNumOldCallStates ds.b 1
ENDR
;***** Max number of buses supported *****
kMaxBuses EQU 16
;******** QHdr ********
QHdr RECORD 0, INCREMENT
qFlags ds.w 1
qHead ds.l 1
qTail ds.l 1
ENDR
;******** BusInfo ********
BusInfo RECORD 0, INCREMENT
initInfo ds SIMinitInfo
ENDR
;******** RefInfo ********
RefInfo RECORD 0, INCREMENT
DrvrCnt ds.l 1
RefInfo ds.l 1 ;!!!
ENDR
;******** DrvrList ********
DrvrList RECORD 0, INCREMENT
DevID ds.l 1
DRefNum ds.w 1
unused ds.w 1
ENDR
;******** DevInfo ********
DevInfo RECORD 0, INCREMENT
DevIdent ds DeviceIdent ;
ioPB ds.l 1 ; ptr to ioPB
IdentMsg ds.b 1 ; Boolean
ENDR
;******** BootInfo ********
BootInfo RECORD 0, INCREMENT
startPRAM ds.l 1 ; long word
BusCount ds.w 1 ;
defltDrvrRefNum ds.w 1 ; ref num of driver for default boot device
IDmasks ds.l kMaxBuses
ENDR
;****** XPT Globals *********
; partial list only because only not all is needed from asm
XPTglobals RECORD 0, INCREMENT
BusInfoPtrs ds.l kMaxBuses ;// pointers to BusInfos (handles 99.9965% of cases)
OldSyncWait ds.l 1
numBuses ds.w 1
syncUnsafeCount ds.w 1 ;
flags ds.b 1
unusedC2 ds.b 1
unusedC0 ds.b 1
unusedC1 ds.b 1
debugPatch ds.l 1 ; address of our _DebugUtil Patch
oldIDBusNumber ds.w 8 ; one for each SCSI ID
oldAPIstate ds.w 1 ; OldCallStates
latestOldCallPhase ds.w 1 ; SCSIphase
unusedX ds.w 1 ;
nextInterleave ds.w 1 ;
xptIOptr ds.l 1 ;
xptIOpbSize ds.w 1 ; size of currently allocated SCSI_IO (for old API)
maxIOpbSize ds.w 1 ; size of largest required SCSI_IO (for all SIMs)
Drivers ds.l 1 ; Ptr to DrvrList
BootStorage ds.l 1 ; Ptr to BootInfo
ENDR
;***** For XPTprivateFlags field *******
kbTIB equ 0
;****** For XPTg.flags field ********
kbOldAPIBusy equ 0
kbInOldCall equ 1
;******** SCSIStat word bit equates ********
kmStatATN equ $0200
kmStatACK equ $0100
kmStatRST equ $0080
kmStatBSY equ $0040
kmStatREQ equ $0020
kmStatMSG equ $0010
kmStatC_D equ $0008
kmStatI_O equ $0004
kmStatSEL equ $0002
kmStatDBP equ $0001
;******** Old SCSI Manager globals ********
;
; we're kind of living off some of the C0C^ globals here
;
SCSIGlobalsRec RECORD 0, INCREMENT ;{
;
; ——— OLD (& NEW emulation of old) ———
jvReset DS.L 1 ; SCSIReset vector
jvGet DS.L 1 ; SCSIGet vector
jvSelect DS.L 1 ; SCSISelect vector
jvCmd DS.L 1 ; SCSICmd vector
jvComplete DS.L 1 ; SCSIComplete vector
jvRead DS.L 1 ; SCSIRead vector
jvWrite DS.L 1 ; SCSIWrite vector
jvInstall DS.L 1 ; SCSI installation vector (for debugging purposes)
jvRBlind DS.L 1 ; SCSIRBlind vector
jvWBlind DS.L 1 ; SCSIWBlind vector
jvStat DS.L 1 ; SCSIStat vector
jvSelAtn DS.L 1 ; SCSISelAtn vector
jvSMsgIn DS.L 1 ; SCSIMsgIn vector
jvSMsgOut DS.L 1 ; SCSIMsgOut vector
firstPrivate DS.L 1 ; ptr to SCSI Mgr private storage record circularly linked list
nextPrivate DS.L 1 ; ptr to next available SCSI Mgr private storage record
base5380 DS.L 1 ; SCSI read base address
pdma5380 DS.L 1 ; SCSI pseudo-DMA read base addr
hhsk5380 DS.L 1 ; SCSI hardware-handshaked read base addr
wrOffset DS.W 1 ; write offset relative to "base5380"
scsiQFlags DS.W 1 ; flags for SCSI request queue
scsiQHead DS.L 1 ; ptr to head of SCSI request queue
scsiQTail DS.L 1 ; ptr to tail of SCSI request queue
activeReq DS.L 1 ; ptr to currently active SCSI request
timeout DS.L 1 ; next timeout should occur at this time
G_ID DS.B 1 ; initiator's SCSI ID mask
G_State DS.B 1 ; SCSI Mgr state (free/busy)
G_Async DS.W 1 ; unused - $62
G_Reserved0 DS.L 1 ; box number in high byte. HW flags in low bytes <v1.1>
G_Reserved1 DS.L 1 ; used for storing timer value <?> pdw
G_Reserved2 DS.L 1 ; machine-specific storage <v1.1>
;
;** Cool stuff for the new SCSI Manager
; The following variables in SCSIGlobals were stolen by the Async SCSI Manager
;
; ——— NEW ———
unused0 DS.L 1 ; 70:
berr_halg0 DS.L 1 ; 74: Saved HAL globals for internal bus (used by the Bus Error Handler)
berr_halg1 DS.L 1 ; 78: Ditto for external bus. (I know, its a hack but justifiable because
; we are the only ones with xfer routines that cause bus errors.)
jvUnusedXL1 DS.L 1 ; 7c: jv called when we're selected as target
numBEHs DS.B 1 ; 80: Number of Bus Error Handlers installed
inDebugger DS.B 1 ; 81: count of debugger entries+/exits-
unused1 DS.B 2 ; 82:
tempXPTGGlobals DS.L 1 ; 84: Used for "transitioning" from one XPT to another <SM8>
tempXPTGInUse DS.L 1 ; 88: Set to 'xptg' if we have two XPTs active <SM8>
unused2 DS.L 1 ; 8c:
recordBreak0 DS.L 1 ; 90: gets checked for match against all events recorded
recordBreak4 DS.L 1 ; 94:
busyPatch DS.L 1 ; 98: addr of SCSI busy patch
ciBusyPending DS.B 1 ; 9c: Used by the ciSCSIBusy patch to keep track of deferred jvSCSIFreeHook Calls
ciWasBusy DS.B 1 ; 9d: Set if we returned "Busy" to somebody.
busyPatchVers DS.W 1 ; 9e: version of SCSI busy patch installed
recCurrent DS.L 1 ; a0: debugging event recorder - current pointer
recSize DS.L 1 ; a4: debugging event recorder - size of buffer
recStartLog DS.L 1 ; a8: logical start of buffer
recStartPhys DS.L 1 ; ac: physical start of buffer
unusedW1 ds.w 1 ; b0:
completionQHdr ds.w 1 ; b2: high byte = flag indicating deferred task is enqd
completionQHead ds.l 1 ; b4: Q used to call completion routines from our
completionQTail ds.l 1 ; b8: deferred task (XPT.a).
unusedW2 ds.w 1 ;
privDTQueue
privDTQFlags ds.w 1 ; used for the private deferred task manager
privDTQHead ds.l 1 ; ditto
privDTQTail ds.l 1 ; ditto
oldjDisptch ds.l 1 ; the old jDisptch vector we patched out
ci_jDisptchVers ds.l 1 ; version tag for our patch
; ——— OLD ———
jvVFWO DS.L 1 ; virtual fast writes (hhsk)
jvCSO DS.L 1 ; virtual slow compare ("p" bit redefined to mean "compare")
jvUnused3 DS.L 1 ; unused
jvCFO DS.L 1 ; virtual fast compare ("p" bit redefined to mean "compare")
jvUnused4 DS.L 1 ; unused
jvInvalidIn DS.L 1 ; Invalid Message In
jvIdentifyIn DS.L 1 ; Identify Message In
jvCmdComplete DS.L 1 ; Command Complete
jvExtendedMsg DS.L 1 ; Extended Message
jvSaveDataPtr DS.L 1 ; Save Data Pointer
jvRestorePtrs DS.L 1 ; Restore Pointers
jvDisconnect DS.L 1 ; Disconnect
jvMsgRejIn DS.L 1 ; Message Reject In
jvLCCF DS.L 1 ; Linked Command Complete with (or without) flag
sdmStack DS.L 1 ; SCSIDiskMode stack global for DB Lite
base5380_1 DS.L 1 ; SCSI read base address (internal)
pdma5380_1 DS.L 1 ; SCSI pseudo-DMA read base addr (internal)
hhsk5380_1 DS.L 1 ; SCSI hardware-handshaked read base addr (internal)
base5380_2 DS.L 1 ; SCSI read base address (external)
pdma5380_2 DS.L 1 ; SCSI pseudo-DMA read base addr (external)
hhsk5380_2 DS.L 1 ; SCSI hardware-handshaked read base addr (external)
jvIdentifyOut DS.L 1 ; Identify Message Out
jvMsgRejOut DS.L 1 ; Message Reject Out
jvInvalidOut DS.L 1 ; Invalid Message Out
jvKillIO DS.L 1 ; Kill I/O
jvNoOp DS.L 1 ; No Operation
jvBusDevRstOut DS.L 1 ; Bus Device Reset Out <v1.3>
G_SCSIDREQ DS.L 1 ; SCSI DREQ base address
G_TargetID DS.L 1 ; Target ID
G_FakeStat DS.L 1 ; Fake state
G_OldTrapAdrs DS.L 1 ; contains the old SCSIMgr address
G_OldIntHnd DS.L 1 ; contains old intrp level 2 handler
G_IntrpCount DS.L 1 ; counts total # of intrps
G_IntrpStat DS.L 1 ; Status read by Intrp routine
GxState96 DS.L 1 ; Bits to make c96 backwards compatible
BootCfgFlags DS.L 1 ; copy of d2 passed to InitHW_SCSI96 at boot (used by jvInitHW)
G_bitDREQ DS.B 1 ; Bit position at DREQ location
jvUnused32 DS.B 1 ; Future expansion
jvUnused33 DS.W 1 ; Future expansion
jvIntHnd DS.L 1 ; 24-entry jump table -- interrupt handler
jvMessage DS.L 1 ; Send a message to the deferred task
jvClearIRQ DS.L 1 ; Clear the SCSI interrupt (and VIA, if necessary)
jvDisEnable DS.L 1 ; Enable/disable interrupts routine
jvLogError DS.L 1 ; Record error for the PB
jvSCSIDT DS.L 1 ; Deferred Task for all other interrupts
jvFind DS.L 1 ; Find a request to process
jvSetup DS.L 1 ; Setup active request
jvPreflight DS.L 1 ; Preflight the parameter block
jvEnDequeue DS.L 1 ; Enqueue/dequeue a parameter block
jvArb DS.L 1 ; Arbitrate for the SCSI bus
jvSel DS.L 1 ; Select a SCSI device
jvDelay22 DS.L 1 ; Delay 2.2 microseconds
jvClearState DS.L 1 ; Remove the current request
jvTransfer DS.L 1 ; Transfer data using the primitive routines
jvSetTimer DS.L 1 ; Set the timer
jvResetBus DS.L 1 ; Reset SCSI bus and kill all requests
jvClearBus DS.L 1 ; Clear the SCSI bus
jvBusErr DS.L 1 ; Bus error handler
jvDataDMA DS.L 1 ; DMA-related data-chaining interpreter
; ——— NEW ———
xptGlobals DS.L 1 ; 1b4- pointer to Cousin Itt's XPT globals
; ——— OLD ———
blindBusTO DS.L 1 ; 1b8- number of ticks to wait for blind transfer bytes (after 1st byte)
transferType DS.W 1 ; 1bc- Type of data transfer to perform (used in Transfer_96, BusError)
lastINTread DS.B 1 ; 1be- Value of rINT at last valid interrupt read
lastSTAread DS.B 1 ; 1bf- Value of rSTA at last valid interrupt read
; ——— NEW and OLD ———
yeOldeBusErrVct DS.L 1 ; 1c0- temp storage while we insert our buserr handler <T10> pdw
base539x0 DS.L 1 ; SCSI 539x base address, bus0 <T3><T4>
base539x1 DS.L 1 ; SCSI 539x base address, bus1 <T3><T4>
G_SCSIDevMap0 DS.B 1 ; SCSI Device Map for the Internal SCSI Bus
fill1 DS.B 3
G_SCSIDevMap1 DS.B 1 ; SCSI Device Map for the External SCSI Bus <T3>
fill2 DS.B 3
ENDR ;}
maxOpcode EQU 8 ; highest numbered TIB opcode (from PatchIIROM.a)
MACRO
GetXPTg
move.l SCSIGlobals, A5
move.l SCSIGlobalsRec.xptGlobals(A5), A5
ENDM
ENDIF ; already included