mirror of
https://github.com/elliotnunn/sys7.1-doc-wip.git
synced 2024-12-12 04:29:09 +00:00
572 lines
25 KiB
Plaintext
572 lines
25 KiB
Plaintext
;
|
||
; File: SCSIPriv.a
|
||
;
|
||
; Contains: SCSI Mgr-specific variable and constant definitions
|
||
;
|
||
; Written by: Jerry Katzung
|
||
;
|
||
; Copyright: © 1989-1992 by Apple Computer, Inc. All rights reserved.
|
||
;
|
||
; Change History (most recent first):
|
||
;
|
||
; <SM7> 11/20/92 SWC Rolled in changes from Horror.
|
||
; <H4> 6/10/92 BG Added global sdmStack for DB Lite SCSI Disk Mode. Added global
|
||
; for DREQ bit position within DREQ access location. Added tail
|
||
; bytes to SCSIGlobals for expansion and updated file from Reality
|
||
; SCSIPriv.a .
|
||
; <H3> 2/28/92 SWC Removed temporary DBLite equates.
|
||
; <H2> 2/10/92 SWC jab/Added base address storage for external c80 in DB Lite.
|
||
; <SM6> 7/28/92 PW Added Cousin Itt stuff: xptGlobals (ptr) and RecorderPtr (for
|
||
; debugging).
|
||
; <SM5> 7/7/92 CSS Updated from Reality:
|
||
; <17> 5/22/92 DTY #1029009 <jab>: Added global for DREQ bit position within DREQ
|
||
; access location.
|
||
; <SM4> 5/17/92 kc Remove conditionals.
|
||
; <SM3> 5/1/92 JSM Roll-in changes from Reality:
|
||
; <16> 5/1/92 JSM We need to define Max020030BusErrs because it's sometimes wrong
|
||
; to use MaxBusErr since CPU is set to 00 for System builds.
|
||
; <15> 4/7/92 pvh Fill in vectors jvUnused10-jvUnused 16 for the SCSI Manager
|
||
; (these are what were added to HORROR's SCSIPriv.a) Per James
|
||
; Blair.
|
||
; <SM2> 3/3/92 kc Add TransactionFlag, and FreeHookPending to SCSIGlobals.
|
||
; <14> 12/26/91 RB Include PowerPrivEqu.a for Power Manager definitions.
|
||
; <13> 12/21/91 RB Need to add definition for scsiNewSCSIMax for the ROM to build.
|
||
; <12> 11/25/91 DTY Added bit flags for transaction table.
|
||
; <11> 10/28/91 SAM/KSM Rolled in Regatta file.
|
||
; (pdw) Added all of the lo-mem SCSI Globals that were defined in
|
||
; the TERROR version of this file. Also added several others that
|
||
; are unique to the Regatta version of the c96 SCSIMgr.
|
||
; <10> 8/22/91 JSM Clean up header.
|
||
; <9> 6/12/91 LN added #include 'InternalOnlyEqu.a'
|
||
; <8> 1/30/91 gbm sab, #38: Change the ‘already including this file’ variable to
|
||
; all uppercase (for security reasons)
|
||
; <7> 12/14/90 dnf Add dispatch selector and macro for _SCSIBusy
|
||
; <6> 9/14/90 MSH Added to conditional list that extends the local storage to
|
||
; accomodate spinning down the hard disk.
|
||
; <4> 2/21/90 CCH Removed Max040BusErrs from conditional.
|
||
; <3> 2/20/90 BG Added 040 BusErr retry constant.
|
||
; <2> 1/18/90 JWK Needed for Zone5 - Added equates for SCSIStat fix and new
|
||
; watchdog timeout value.
|
||
; <1.4> 12/10/89 jwk NEEDED FOR F19 - Additional locals to DMA in old SCSI Mgr
|
||
; <1.3> 9/11/89 jwk NEEDED FOR F19 - Added Bus Dev Rst, support for SE and Plus
|
||
; <1.2> 7/15/89 jwk NEEDED FOR AURORA - Minor changes for intr handling
|
||
; <1.1> 6/29/89 jwk NEEDED FOR AURORA - Added equates to help with System patch
|
||
; builds
|
||
; <1.0> 6/13/89 jwk Reorganizing SCSI sources to be Universal-ROM friendly
|
||
;
|
||
|
||
IF &TYPE('__INCLUDINGSCSIPRIV__') = 'UNDEFINED' THEN
|
||
__INCLUDINGSCSIPRIV__ SET 1
|
||
|
||
; This is the SCSIPriv.a file
|
||
; <start>
|
||
|
||
BLANKS ON
|
||
STRING ASIS
|
||
|
||
INCLUDE 'InternalOnlyEqu.a'
|
||
INCLUDE 'PowerPrivEqu.a' ; <14> rb
|
||
|
||
IF Cpu ≥ 020 THEN
|
||
MACHINE MC68020 ; for '020 instructions <C846>
|
||
ENDIF
|
||
|
||
scsiNewSCSIMax EQU 2 ; <13> rb, maximum selector supported in motherboard
|
||
|
||
;
|
||
; Stack frame definitions (frame allocated in StdEntry)
|
||
;
|
||
|
||
OldBusErrVct EQU -4 ; long <C789>
|
||
BusErrCount EQU -6 ; word <C846>
|
||
LocalSize EQU -6 ; total <C789>
|
||
|
||
IF Cpu ≥ 020 THEN
|
||
MaxBusErr EQU 5
|
||
ELSE
|
||
MaxBusErr EQU 2
|
||
ENDIF
|
||
|
||
Max020030BusErrs EQU 5 ; same as MaxBusErr when Cpu ≥ 020 <16>
|
||
Max040BusErrs EQU 1 ; only once because of Instruction Restart <3><4>
|
||
|
||
;
|
||
; Additional stack frame definitions for SCSI DMA chip support in the old SCSI Mgr <v1.4>
|
||
; <start>
|
||
AddLocalSize EQU 20 ; 5 longs
|
||
vAddr EQU 0 ; virtual address
|
||
vCount EQU 4 ; virtual buffer length
|
||
pAddr EQU 8 ; physical address <end>
|
||
pCount EQU 12 ; physical buffer length <v1.4>
|
||
|
||
;=======================================================================================
|
||
; Private Old SCSI Manager Related Stuff
|
||
|
||
scsiBusy Equ 14 ; SCSIBusy routine selector <7> djw
|
||
|
||
macro ; check if SCSI mgr is busy or free <7> djw
|
||
_SCSIBusy
|
||
move.w #scsiBusy,-(sp)
|
||
_SCSIDispatch
|
||
endm
|
||
|
||
; Bit flags for transaction table
|
||
|
||
fDoFreeHook equ 0 ; set = execute "jSCSIFreeHook"
|
||
fSetTransFlag equ 1 ; set = set "TransactionFlag"
|
||
fClearTransFlag equ 2 ; set = clear "TransactionFlag" unconditionally
|
||
fClearTransErr equ 3 ; set = clear "TransactionFlag" if function error
|
||
|
||
;
|
||
; Trap number for the new SCSI Manager trap
|
||
;
|
||
TrapNum EQU $A089 ; _NewSCSI
|
||
_NewSCSI OPWORD $A089 ; the exciting, powerful, new SCSI Mgr traps
|
||
;
|
||
; These are the private fields in the parameter block
|
||
;
|
||
scsiPrivPB RECORD 0, INCREMENT
|
||
scsiPrivLink DS.L 1 ; link to next SCSI Mgr private record
|
||
scsiFlags DS.B 1 ; SCSI Mgr operation flag bits
|
||
scsiState DS.B 1 ; SCSI Message Out state machine
|
||
scsiFlag1 DS.B 1 ; flag expansion
|
||
scsiFlag2 DS.B 1 ; flag expansion
|
||
scsiTime DS.L 1 ; timeout time
|
||
scsiCmdOffs DS.L 1 ; value of command buffer ptr between interrupts
|
||
scsiTempErr DS.W 1 ; current error message <v1.2>
|
||
scsiFiller DS.W 1 ; future expansion <v1.2>
|
||
scsiDCSaved DS.L 1 ; part of Saved Data Pointer
|
||
scsiDCOffs DS.L 1 ; value of data pointer between interrupts
|
||
scsiMoveOffs DS.L 1 ; partial "dcMove" count between interrupts
|
||
scsiVAddr DS.L 1 ; virtual address for Logical/Physical translation
|
||
scsiVCount DS.L 1 ; virtual count for Logical/Physical translation
|
||
scsiPAddr DS.L 1 ; physical address from Logical/Physical translation
|
||
scsiPCount DS.L 1 ; physical count from Logical/Physical translation
|
||
scsiPrivPBSize EQU *-scsiPrivPB ; size of SCSI Mgr private storage (per active request)
|
||
ENDR
|
||
;
|
||
; Version number of the SCSI Mgr
|
||
;
|
||
mgrVersion EQU 1 ; brand new SCSI Mgr 2
|
||
;
|
||
; Valid ID and LUN values are from 0-7 inclusive.
|
||
;
|
||
LUNMask EQU 7 ; mask for valid logical unit numbers (0-7)
|
||
;
|
||
; SCSI protocol equates
|
||
;
|
||
minSnsLen EQU 4 ; minimum sense buffer length
|
||
allocLen EQU 4 ; offset to alloc length byte in auto Req Sense cmd
|
||
;
|
||
; These bits are used to indicate information in the "state1" global variable
|
||
;
|
||
dtEnqueued EQU 7 ; Deferred Task already enqueued
|
||
dataSem EQU 3 ; SCSI Mgr data structures inconsistent
|
||
doingDMA EQU 1 ; SCSIDMA chip is DMAing (don't let SCSIStat touch it) <2>
|
||
waitingForIRQ EQU 0 ; waiting for an intr - DMA in progress, <v1.3>
|
||
; or waiting for Loss of BSY <v1.3>
|
||
;
|
||
; This constant is used to set up the watchdog timer to timeout after 250ms.
|
||
; This value was chosen as the timeout value since 250ms is much more lenient than
|
||
; the current 16us on the MacII-class machines. It is equal to the Mac SE timeout,
|
||
; and is much greater than the effective 20us timeout of the Mac Plus.
|
||
;
|
||
sc250msTicks EQU 2500000 ; 250ms * 10000 watchdog timer ticks/ms <2>
|
||
;
|
||
; interrupt level of the SCSI chip -- will be moved to HardwareEqu.a (???)
|
||
;
|
||
scsiIntMask EQU $0200 ; on Rom32 machines
|
||
;
|
||
; Currently the watchdog timer goes off every five seconds.
|
||
;
|
||
WDTO EQU 5000 ; watchdog timeout value in milliseconds (word)
|
||
|
||
bDBP EQU 0 ; bit test for *DBP - add to xHardwareEqu.a
|
||
|
||
; Location of Mac Plus SCSIGlobals ptr <v1.1>
|
||
SCSIDispVct EQU $000c54 ; address of _SCSIDispatch vector in trap dispatch table
|
||
SCSIPtr EQU -4 ; offset from _SCSIDispatch code to SCSI Mgr globals ptr
|
||
|
||
;
|
||
; Base addresses for the Mac Plus. The Mac Plus doesn't actually have
|
||
; hardware-handshaking circuitry, but using the pseudo-DMA base address
|
||
; in place of the hhsk base address makes the data transfer code simpler.
|
||
;
|
||
plusSCSIBase EQU $580000 ; read base address of Mac Plus SCSI chip <v1.2>
|
||
plusSCSIDMA EQU $580200 ; pseudo-DMA read base address of Mac Plus SCSI chip <v1.2>
|
||
plusSCSIHsk EQU $580200 ; fake "hardware-handshake" read base address <v1.2>
|
||
|
||
macPlusSCSIDB EQU $00db ; trial-and-error value for Mac Plus <v1.2><v1.3>
|
||
macSeSCSIDB EQU $00fc ; trial-and-error value for Mac SE <v1.2><v1.3>
|
||
|
||
OldTimeSCSIDB EQU $da6 ; SCSI DBRA's per millisecond on all machines
|
||
|
||
scsiOldSCSIErr EQU -1 ; old SCSI Mgr called ClearState <v1.2>
|
||
|
||
;
|
||
; SCSI Mgr flags:
|
||
;
|
||
scsiFInUse EQU $01 ; SCSI Mgr private storage record is in use
|
||
scsiFAutoSns EQU $02 ; parameter block for automatic Request Sense
|
||
scsiFComp EQU $10 ; Perform a read-compare (old requests only)
|
||
scsiFStatus EQU $20 ; Device has gone through Status phase
|
||
scsiFPtyErr EQU $40 ; a parity error has occurred
|
||
scsiFTagged EQU $80 ; request is in danger of timing out
|
||
; SCSI Mgr bits:
|
||
scsiBInUse EQU 0 ; SCSI Mgr private storage record is in use
|
||
scsiBAutoSns EQU 1 ; parameter block for automatic Request Sense
|
||
scsiBComp EQU 4 ; Perform a read-compare (old requests only)
|
||
scsiBStatus EQU 5 ; Device has gone through Status phase
|
||
scsiBPtyErr EQU 6 ; a parity error has occurred
|
||
scsiBTagged EQU 7 ; request is in danger of timing out
|
||
;
|
||
; Message Out state machine state variable values
|
||
;
|
||
scsiMOID EQU $00 ; "ID" state - normal Identify sequence
|
||
scsiMOMR EQU $01 ; "MR" state - Message Reject sequence
|
||
scsiMOInvalid EQU $02 ; "Invalid" state - bad state machine sequence
|
||
scsiMOKIO EQU $03 ; "KIO" state - Kill I/O sequence
|
||
scsiMONOP EQU $04 ; "NOP" state - unexpected Message Out, send No Op's
|
||
scsiMOBDR EQU $05 ; "Bus Device Reset" state - send a BDR message <v1.3>
|
||
|
||
;
|
||
; Messages - used as an index into a jump table of message-handler routines
|
||
;
|
||
scsiCmdComplete EQU $00 ; Command Complete
|
||
scsiExtendedMsg EQU $01 ; Extended Message
|
||
scsiSaveDataPtr EQU $02 ; Save Data Pointer
|
||
scsiRestorePtrs EQU $03 ; Restore Pointers
|
||
scsiDisconnect EQU $04 ; Disconnect
|
||
scsiIDetectErr EQU $05 ; Initiator Detected Error
|
||
scsiAbort EQU $06 ; Abort
|
||
scsiMsgReject EQU $07 ; Message Reject
|
||
scsiNoOperation EQU $08 ; No Operation
|
||
scsiMsgParityErr EQU $09 ; Message Parity Error
|
||
scsiLnkCmdCpl EQU $0A ; Linked Command Complete
|
||
scsiLnkCmdCplFlg EQU $0B ; Linked Command Complete (with flag)
|
||
scsiBusDevReset EQU $0C ; Bus Device Reset
|
||
scsiIdentFlg EQU $80 ; Identify flag
|
||
scsiIdentBit EQU 7 ; Identify bit
|
||
scsiReselFlg EQU $40 ; "Initiator supports Reselection" flag
|
||
scsiReselBit EQU 6 ; "Initiator supports Reselection" bit
|
||
scsiIdentifyIn EQU $0D ; vector number for Identify message (pseudo-message)
|
||
scsiMsgRejectOut EQU $0E ; vector number for an invalid message (pseudo-message)
|
||
|
||
;
|
||
; declaration of SCSI Manager globals
|
||
;
|
||
scsiGlobalRecord RECORD 0, INCREMENT
|
||
;
|
||
; SCSI Manager "G_State" flags
|
||
;
|
||
;sBusy EQU 1 ; used for G_State field -- SCSI Mgr is busy (non-zero)
|
||
;sFree EQU 0 ; used for G_State field -- SCSI Mgr is free
|
||
scPending EQU 7 ; bit in G_State -- an old request is spinning in SCSIGet
|
||
scBusy EQU 0 ; bit in G_State -- an old request is pending/in progress
|
||
;
|
||
; old SCSI Manager globals
|
||
;
|
||
numVectors EQU 24 ; 24 4-byte jump table vectors
|
||
numSCSIVect EQU numVectors ; number of SCSI Mgr vectors
|
||
jmpTblSize EQU numVectors*4 ; 24 4-byte jump table vectors
|
||
G_JmpTbl ; 24 4-byte jump table vectors
|
||
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"
|
||
scsiQHdr ; 10-byte OS queue header - SCSI request queue
|
||
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_CompTicks ; when request finished (unpatched SE only) <v1.1>
|
||
G_Reserved0 DS.L 1 ; box number in high byte. HW flags in low bytes <v1.1>
|
||
pageFault ; ptr to page fault SCSI PB <v1.1>
|
||
G_Reserved1 DS.L 1 ; used for storing timer value <?> pdw
|
||
G_Reserved2 DS.L 1 ; machine-specific storage <v1.1>
|
||
RecorderPtr DS.L 1 ; debugging event recorder pointer $70 <SM6> pdw
|
||
;G_ExtPtr DS.L 1 ; unused (saved for future expansion)
|
||
;
|
||
; extended SCSI manager globals
|
||
;
|
||
numExtVec EQU 96 ; 96 new vectors
|
||
discLUN DS.B 8 ; bitmaps of disconnected LUN's by SCSI ID
|
||
discID DS.B 1 ; bitmap of disconnected SCSI ID's
|
||
state1 DS.B 1 ; dTask enqueued, data structures inconsistent, DMA in progress
|
||
state2 DS.B 1 ; SCSI Mgr interface level
|
||
state3 DS.B 1 ; SCSI DMA ?
|
||
busTO DS.L 1 ; byte-to-byte timing in microseconds
|
||
phaseTable ; 8-entry jump table for phase handler routines
|
||
jvDataOut DS.L 1 ; Data Out phase handler
|
||
jvDataIn DS.L 1 ; Data In phase handler
|
||
jvCommand DS.L 1 ; Command phase handler
|
||
jvStatus DS.L 1 ; Status phase handler
|
||
jvIllegal1 DS.L 1 ; Illegal phase - reset the bus
|
||
jvIllegal2 DS.L 1 ; Illegal phase - reset the bus
|
||
jvMsgOut DS.L 1 ; Message Out phase handler
|
||
jvMsgIn DS.L 1 ; Message In phase handler
|
||
dataTable ; 16-entry jump table for data-transfer routines
|
||
jvVSR DS.L 1 ; virtual slow reads
|
||
jvVSW DS.L 1 ; virtual slow writes
|
||
jvVFR DS.L 1 ; virtual fast reads
|
||
jvVFW DS.L 1 ; virtual fast writes
|
||
jvUnused1 DS.L 1 ; unused (illegal)
|
||
jvUnused2 DS.L 1 ; unused (illegal)
|
||
jvPFR DS.L 1 ; physical fast reads (DMA)
|
||
jvPFW DS.L 1 ; physical fast writes (DMA)
|
||
jvVSRO DS.L 1 ; virtual slow reads
|
||
jvVSWO DS.L 1 ; virtual slow writes
|
||
jvVFRO DS.L 1 ; virtual fast reads (hhsk)
|
||
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
|
||
scsiReadSlow EQU jvVSRO - jvVSR ; offset to old slow read routine <v1.2>
|
||
scsiWriteSlow EQU jvVSWO - jvVSR ; offset to old slow write routine <v1.2>
|
||
scsiReadFast EQU jvVFRO - jvVSR ; offset to old slow read routine <v1.2>
|
||
scsiWriteFast EQU jvVFWO - jvVSR ; offset to old slow write routine <v1.2>
|
||
scsiCompBit EQU scsiBPhysical ; bit to select old SCSI Mgr "scComp" operation
|
||
;
|
||
msgTable ; 32-entry jump table for different messages
|
||
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
|
||
|
||
; Base addresses for dual c80 SCSI Bus
|
||
sdmStack DS.L 1 ; SCSIDiskMode stack global for DB Lite <H5> jab
|
||
base5380_1 DS.L 1 ; SCSI read base address (internal) <H2>
|
||
pdma5380_1 DS.L 1 ; SCSI pseudo-DMA read base addr (internal) <H2>
|
||
hhsk5380_1 DS.L 1 ; SCSI hardware-handshaked read base addr (internal)<H2>
|
||
base5380_2 DS.L 1 ; SCSI read base address (external) <H2>
|
||
pdma5380_2 DS.L 1 ; SCSI pseudo-DMA read base addr (external) <H2>
|
||
hhsk5380_2 DS.L 1 ; SCSI hardware-handshaked read base addr (external)<H2>
|
||
|
||
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>
|
||
|
||
; SUPPORT FOR 5396 (13C bytes from the base) <T3>
|
||
; (These used to be jvUnused23-30) <T3>
|
||
G_SCSIDREQ DS.L 1 ; SCSI DREQ base address <T3><T4>
|
||
G_TargetID DS.L 1 ; Target ID <T3>
|
||
G_FakeStat DS.L 1 ; Fake state <T3>
|
||
G_OldTrapAdrs DS.L 1 ; contains the old SCSIMgr address <T3>
|
||
G_OldIntHnd DS.L 1 ; contains old intrp level 2 handler <T3>
|
||
G_IntrpCount DS.L 1 ; counts total # of intrps <T3>
|
||
G_IntrpStat DS.L 1 ; Status read by Intrp routine <T3>
|
||
G_State96 DS.L 1 ; Bits to make c96 backwards compatible <T10> pdw
|
||
|
||
BootCfgFlags DS.L 1 ; copy of d2 passed to InitHW_SCSI96 at boot (used by jvInitHW) <T10> pdw
|
||
G_bitDREQ DS.B 1 ; Bit position at DREQ location <17> jab
|
||
jvUnused32 DS.B 1 ; Future expansion <17> jab
|
||
jvUnused33 DS.W 1 ; Future expansion <17> jab
|
||
; <?> from prev <?>
|
||
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 <v1.2>
|
||
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 <v1.2>
|
||
xptGlobals DS.L 1 ; pointer to Cousin Itt's XPT globals $1b4 <SM6> pdw
|
||
; <?> thru next <?>
|
||
; More Space for the new SCSI96 Manager(1B8 bytes from the base) <T3>
|
||
; (these used to be jvUnused 47-53) <T3>
|
||
blindBusTO DS.L 1 ; number of ticks to wait for blind transfer bytes (after 1st byte)
|
||
transferType DS.W 1 ; Type of data transfer to perform (used in Transfer_96, BusError)
|
||
lastINTread DS.B 1 ; Value of rINT at last valid interrupt read
|
||
lastSTAread DS.B 1 ; Value of rSTA at last valid interrupt read
|
||
yeOldeBusErrVct DS.L 1 ; 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.L 1 ; SCSI Device Map for the Internal SCSI Bus <T3>
|
||
G_SCSIDevMap1 DS.L 1 ; SCSI Device Map for the External SCSI Bus <T3>
|
||
|
||
jvErr DS.L 1 ; SCSI96 Error, used to be jUnused 54 <T6> <T6>
|
||
jvEscLoop DS.L 1 ; SCSI Escape Loop Vector <T7>
|
||
jvCyclePhase DS.L 1 ; Bitbuckets or fills bytes to get target to Status phase (was jvUnused49)
|
||
jvInitSCSIHW DS.L 1 ; init SCSI chip (was jvUnused57) <T10> pdw
|
||
; <?> from prev <?>
|
||
;
|
||
newSCSIDisp
|
||
jvSCSIRequestIO DS.L 1 ; SCSIRequestIO
|
||
jvSCSIKillIO DS.L 1 ; SCSIKillIO
|
||
jvSCSIBusInfo DS.L 1 ; SCSIBusInfo
|
||
|
||
newSCSI96Disp ; used to be jvUnused63-jvUnused66 <?> thru next <?>
|
||
jvSCSIBusy DS.L 1 ; SCSIBusy vector, selector 14
|
||
jvSel15 DS.L 1 ; SCSI vector for selector 15
|
||
jvSel16 DS.L 1 ; SCSI vector for selector 16
|
||
jvSel17 DS.L 1 ; SCSI vector for selector 17
|
||
jvAltBusCall DS.L 1 ; Call to alternate SCSI bus <?> from prev <?>
|
||
;
|
||
numMsgVct EQU 36 ; number of message routing vectors
|
||
msgInTbl DS.B numMsgVct ; dispatch table for Messages 00H-23H (Msg In)
|
||
msgOutTbl DS.B numMsgVct ; dispatch table for Messages 00H-23H (Msg Out)
|
||
;
|
||
dtQElSize EQU 20 ; temporary
|
||
dTask DS.B dtQElSize ; Deferred Task Mgr task record
|
||
;
|
||
tmQSize EQU 14 ; Time Mgr task record size
|
||
timer DS.B tmQSize ; Time Mgr task record for request timing
|
||
;
|
||
RSCmd DS.B 6 ; Request Sense command buffer
|
||
RSDC DS.L 12 ; data-chaining block for Request Sense command
|
||
;
|
||
dummy DS scsiPB ; dummy parameter block
|
||
;
|
||
dummyPriv DS scsiPrivPB ; dummy private storage
|
||
faultPriv DS scsiPrivPB ; private storage for page-fault handling
|
||
firstPriv DS scsiPrivPB ; private storage for request processing
|
||
DS scsiPrivPB ; private storage for request processing
|
||
DS scsiPrivPB ; private storage for request processing
|
||
DS scsiPrivPB ; private storage (machine-specific storage follows)
|
||
TransactionFlag DS.L 1 ; location to store SCSI transaction flag <2> kc
|
||
FreeHookPending DS.L 1 ; location of pending free-hook flag <2> kc
|
||
|
||
GlobalSize EQU *-scsiGlobalRecord ; size of SCSI Mgr globals
|
||
ENDR
|
||
|
||
;
|
||
; Machine-specific structure
|
||
;
|
||
machSpecRecord RECORD 0, INCREMENT
|
||
|
||
IF tmQSize > SleepqRec.SleepqSize THEN ; use the larger of the two data structures <14> rb
|
||
sleep ; 12-byte sleep queue element (onHcMac) OR
|
||
timer2 DS.B tmQSize ; 14-byte intr polling timer (onMac) <v1.1>
|
||
ELSE
|
||
sleep ; 12-byte sleep queue element (onHcMac) OR
|
||
timer2 DS.B SleepqSize ; 14-byte intr polling timer (onMac) <v1.1>
|
||
ENDIF
|
||
machSpecSize EQU *-machSpecRecord ; size of machine-specific record
|
||
ENDR
|
||
|
||
;
|
||
; Find selector (passed in d0.l)
|
||
;
|
||
findAny EQU -1 ; find first non-disconnected request
|
||
findAnyFlag EQU 31 ; find first non-disconnected request flag (bit 31)
|
||
|
||
;
|
||
; EnDequeue selector (passed in d0.l)
|
||
;
|
||
enqNormal EQU -1 ; enqueue at end of queue
|
||
enqFront EQU -2 ; enqueue at front of queue ("immediate" function, page fault)
|
||
deqNormal EQU 1 ; dequeue one request (linked commands are elevated)
|
||
deqLinked EQU 2 ; remove a series of linked commands (to cleanly kill linked cmds)
|
||
enqueueFlag EQU 31 ; enqueue/dequeue selection flag (bit 31)
|
||
|
||
;
|
||
; Masks for the interrupt handler. They are used to determine the interrupt type.
|
||
; These masks are the concatenation of the Bus and Status Register with the
|
||
; Current SCSI Bus Status Register. The BSR is the most-significant byte.
|
||
;
|
||
mReselect EQU $F5E2 ; mask to clear don't cares for Reselect interrupt
|
||
iReselect EQU $1002 ; bit image for a Reselect intr. with don't care bits reset
|
||
scResel EQU 7 ; bit in "dtParm" for Reselect interrupts
|
||
mEOP EQU $F6C2 ; mask to clear don't cares for EOP intr (PM is don't care) <v1.2>
|
||
iEOP EQU $9040 ; bit image for EOP intr. with don't care bits cleared
|
||
scEOP EQU 6 ; bit in "dtParm" for Reselect interrupts
|
||
mPhaseMm EQU $BDE2 ; mask to clear don't cares for Phase Mismatch Error intr.
|
||
iPhaseMm EQU $1060 ; bit image for Phase Mismatch Error without don't care's
|
||
scPhaseMm EQU 5 ; bit in "dtParm" for Reselect interrupts
|
||
mLossBsy EQU $F7FF ; mask to clear don't cares for Loss of BSY interrupts
|
||
iLossBsy EQU $1400 ; bit image for Loss of BSY intr. without don't care's
|
||
scLossBsy EQU 4 ; bit in "dtParm" for Reselect interrupts
|
||
mBusReset EQU $F77F ; mask to clear don't cares for SCSI Bus Reset interrupt
|
||
iBusReset EQU $1000 ; bit image for SCSI Bus Reset intr. with don't care's reset
|
||
scBusReset EQU 3 ; bit in "dtParm" for Reselect interrupts
|
||
mParity EQU $BCC2 ; mask to clear don't cares for Parity Error interrupt
|
||
iParity EQU $3840 ; bit image for Parity Error intr. with don't care's reset
|
||
scParity EQU 2 ; bit in "dtParm" for Reselect interrupts
|
||
scNewRequest EQU 1 ; bit in "dtParm" indicating a new request to process
|
||
|
||
;
|
||
; Register saving convention
|
||
;
|
||
scsiRegs REG a0-a5/d1-d7 ; standard register saving convention (result in d0)
|
||
intrRegs REG a0-a5/d0-d7 ; interrupt handler register saving convention
|
||
zeroReg EQU d7 ; quick source of zeroes (CLR won't work on SCSI chip)
|
||
|
||
;
|
||
; Old SCSI Mgr equates -- temporary, since SCSIEqu.a has the public portion of the PB
|
||
;
|
||
|
||
maxOpcode EQU 8 ; highest numbered TIB opcode (from PatchIIROM.a)
|
||
|
||
; <v1.6>
|
||
; <end>
|
||
;
|
||
; Here we redefined the Universal ROM's hardware feature bits to serve our own twisted
|
||
; purposes. If we're building for a System Disk, then these bits in the "G_Reserved0"
|
||
; variable in the globals reflect the low memory data structures defined for the ROM's. <v1.1>
|
||
; <start>
|
||
; NOTE that these are also defined in SCSIMgrFlags.a, so if you change 'em here....
|
||
;
|
||
sHWCbPwrMgr equ 0 ; see if we have a Power Mgr
|
||
sOSSExists equ 1 ; do we have an OSS ?
|
||
sRBVExists equ 2 ; do we have an RBV ?
|
||
sVIA2Exists equ 3 ; do we have a second VIA ?
|
||
sSCSIDMAExists equ 4 ; do we have a SCSI DMA chip ?
|
||
isMacPlus equ 5 ; are we on a Mac Plus ?
|
||
is68000 equ 6 ; are we on a 68000 ? <v1.1>
|
||
sDeferUserFn equ 7 ; is _DeferUserFn defined ? <end>
|
||
;sSCSI96_1 equ 8 ; do we have 1st SCSI96 chip <T3>
|
||
;sSCSI96_2 equ 9 ; do we have 2nd SCSI96 chip? <T3>
|
||
;sSCSI96_1 equ 8 ; do we have 1st SCSI96 chip <T3>
|
||
;sSCSI96_2 equ 9 ; do we have 2nd SCSI96 chip? <T3>
|
||
|
||
|
||
numSelectorsDB equ 2 ; we only patch three SCSI Mgr routines <H2>
|
||
|
||
cTargSetup equ $40 ; setup target mode for DBLite's dual bus DiskMode <H2>
|
||
|
||
|
||
ENDIF ; ...already included
|