supermario/bin/MPW-3.2.3/Interfaces/AIncludes/SCSIEqu.a
2019-06-29 22:17:03 +08:00

396 lines
13 KiB
Plaintext

; Version: 3.19
; Created: Friday, October 20, 1989 at 9:50:00 PM
;
; File: SCSIEqu.a
;
; Assembler Interface to the Macintosh Libraries
; Copyright Apple Computer, Inc. 1986-1990
; All Rights Reserved
;
; Equates for SCSI boot, mgr routines
; SCSI Traps
;________________________________________________________________________________
IF &TYPE('__IncludingSCSIEqu__') = 'UNDEFINED' THEN
__IncludingSCSIEqu__ SET 1
; misc SCSI driver equates
scMacID EQU $80 ; SCSI ID for Macintosh Plus (bit 7)
SCSIDrvrs EQU $B2E ; (word) bitmap for loaded SCSI drivers
; SCSI error codes
scCommErr EQU 2 ; communications error (operation timeout)
scArbNBErr EQU 3 ; arbitration timeout waiting for not BSY
scBadparmsErr EQU 4 ; bad parameter or TIB opcode
scPhaseErr EQU 5 ; SCSI bus not in correct phase for attempted operation
scCompareErr EQU 6 ; data compare error
scMgrBusyErr EQU 7 ; SCSI Manager busy with another operation
; when SCSIGet was called
scSequenceErr EQU 8 ; attempted operation is out of sequence;
; e.g., calling SCSISelect before doing
; SCSIGet. Incorrectly written drivers
; can cause this error.
scBusTOErr EQU 9 ; CPU bus timeout when attempting read or
; write in pseudo-DMA mode -- indicates
; that the data wasn't ready within the
; 'bus timeout' period. (Mac SE & Mac II only)
scComplPhaseErr EQU 10 ; SCSI bus wasn't in Status phase when
; SCSIComplete was called -- the SCSI
; Manager may have had to throw away data
; (or write 'filler' bytes) in order to
; reach the Status phase. Indicates that
; the driver didn't handle SCSI bus phase
; changes correctly.
; misc SCSI driver equates
scDefaultID EQU 7 ; default CPU SCSI id
;---------------------------------------------------
;
; the information pertaining to the read/write
; command block interpreter.
;
; SCSI command block equates.
;
scOpcode EQU 0 ; offsets into command "line" for data xfer
scParam1 EQU 2
scParam2 EQU 6
scSize EQU 10 ; size of a command line
scInc EQU 1 ; xfer with address increment
scNoInc EQU 2 ; xfer without address increment
scAdd EQU 3 ; add count to address
scMove EQU 4 ; MOVE data from addr1 to addr2
scLoop EQU 5 ; decrement loop counter and branch
scNop EQU 6 ; do very little
scStop EQU 7 ; then stop doing even that
scComp EQU 8 ; compare bytes with address increment
;
; The layout of block 0 of a bootable SCSI device.
;
sbSigWord EQU $4552 ; block 0 validator
sbSig EQU 0 ; signature word
sbBlkSize EQU 2 ; block size of device
sbBlkCount EQU 4 ; # blocks on device
sbDevType EQU 8 ; device type code
sbDevID EQU 10
sbData EQU 12 ; start of data section
sbDrvCount EQU 16 ; # drivers following
sbDrvrs EQU 18 ; start of driver descriptors
; Driver descriptors
ddBlock EQU 0 ; physical block of driver
ddSize EQU 4 ; block count of driver
ddType EQU 6 ; Processor type of driver
ddLen EQU 8
sbMac EQU 1 ; Macintosh driver type
;
; Partition Descriptors
;
pdSigWord EQU $5453 ; block 1 validator
pmSig EQU 0 ; unique value for map entry blk
pmSigPad EQU 2 ; currently unused
pmMapBlkCnt EQU 4 ; # of blks in partition map
pmPyPartStart EQU 8 ; first physical block of partition
pmPartBlkCnt EQU 12 ; number of blocks in partition
pmPartName EQU 16 ; ASCII partition name
pmParType EQU 48 ; ASCII partition type
pmLgDataStart EQU 80 ; log. # of partition's 1st data blk
pmDataCnt EQU 84 ; # of blks in partition's data area
pmPartStatus EQU 88 ; bit field for partition status
pmLgBootStart EQU 92 ; logical blk of partition's boot code
pmBootSize EQU 96 ; number of bytes in boot code
pmBootAddr EQU 100 ; memory load address of boot code
pmBootAddr2 EQU 104 ; currently unused
pmBootEntry EQU 108 ; entry point of boot code
pmBootEntry2 EQU 112 ; currently unused
pmBootCksum EQU 116 ; checksum of boot code
pmProcessor EQU 120 ; ASCII for the processor type
pmPad EQU 124 ; 512 bytes long, currently unused
hfsID EQU 'TFS1' ; The HFS filesystem ID
;Routine Selectors
scsiReset EQU 0
scsiGet EQU 1
scsiSelect EQU 2
scsiCmd EQU 3
scsiComplete EQU 4
scsiRead EQU 5
scsiWrite EQU 6
scsiInstall EQU 7
scsiRBlind EQU 8
scsiWBlind EQU 9
scsiStat EQU 10
scsiSelAtn EQU 11
scsiMsgIn EQU 12
scsiMsgOut EQU 13
numSelectors EQU 14
MACRO
_SCSIReset
MOVE #scsiReset,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSIGet
MOVE #scsiGet,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSISelect
MOVE #scsiSelect,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSICmd
MOVE #scsiCmd,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSIComplete
MOVE #scsiComplete,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSIRead
MOVE #scsiRead,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSIWrite
MOVE #scsiWrite,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSIInstall
MOVE #scsiInstall,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSIRBlind
MOVE #scsiRBlind,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSIWBlind
MOVE #scsiWBlind,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSIStat
MOVE #scsiStat,-(sp)
_SCSIDispatch
ENDM
MACRO
_scsiSelAtn
MOVE #scsiSelAtn,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSIMsgIn
MOVE #scsiMsgIn,-(sp)
_SCSIDispatch
ENDM
MACRO
_SCSIMsgOut
MOVE #scsiMsgOut,-(sp)
_SCSIDispatch
ENDM
;
; New SCSI Manager
;
; SCSI request parameter block
;
scsiPB RECORD 0, INCREMENT
scsiQLink DS.L 1 ; --- link to next request block
scsiPrivate DS.L 1 ; --- SCSI Mgr private storage
scsiVersion DS.W 1 ; --> version of the parameter block
scsiBus DS.W 1 ; --> SCSI bus number
scsiReqID DS.B 1 ; --> SCSI ID
scsiReqLUN DS.B 1 ; --> logical unit number
scsiResult DS.W 1 ; <-- return code from SCSI Manager
scsiCompletion DS.L 1 ; --> address of completion routine
scsiUsrData DS.L 1 ; --> pointer to user's storage
scsiReqTO DS.L 1 ; --> in ms
scsiUsrFlags DS.W 1 ; --> user's operation flag bits
scsiSelTO DS.W 1 ; --> in ms
scsiMgrFlags DS.L 1 ; --> SCSI operation flags
scsiLinkCmd DS.L 1 ; --> ptr to next linked command
scsiSnsBuf DS.L 1 ; --> sense buffer pointer
scsiSnsLen DS.B 1 ; --> length of sense buffer ( at least 4 bytes )
scsiSnsXfer DS.B 1 ; <-- actual sense bytes transferred
scsiStatus DS.B 1 ; --> SCSI status byte
scsiCmdLen DS.B 1 ; --> length of the command buffer
scsiCmdBuf DS.L 1 ; --> command buffer pointer
scsiDCInstr DS.L 1 ; --> ptr to array of data-chaining instructions
scsiDataLen DS.L 1 ; --> requested data transfer length
scsiDataXfer DS.L 1 ; <-- actual data bytes transferred
scsiPBSize EQU *-scsiPB ; size of SCSI request parameter block
ENDR
;
; flags
;
; SCSI Mgr flags:
;
scsiFParity EQU $00000001 ; Enable parity checking
scsiFNoDisc EQU $00000002 ; Disconnection not allowed for this request
scsiFWrite EQU $00000004 ; output data to the SCSI bus
scsiFFast EQU $00000008 ; Transfer data in the "fast" mode
scsiFPhysical EQU $00000010 ; physical addresses are used (enables DMA)
scsiFAsync EQU $00000020 ; asynchronous request
scsiFBusDevRst EQU $00000040 ; attempt to send a Bus Device Reset message
scsiFImmed EQU $00000080 ; Immediate ("page fault") service requested
; SCSI Mgr bits:
scsiBParity EQU 0 ; enable parity checking
scsiBNoDisc EQU 1 ; disconnection not allowed for this request
scsiBWrite EQU 2 ; output data to the SCSI bus
scsiBFast EQU 3 ; transfer data in the "fast" mode
scsiBPhysical EQU 4 ; physical addresses are used (enables DMA)
scsiBAsync EQU 5 ; asynchronous request
scsiBBusDevRst EQU 6 ; attempt to send a Bus Device Reset message
scsiBImmed EQU 7 ; Immediate ("page fault") service requested
;
; Data-chaining related equates
;
dcLoop EQU -1 ; loop opcode (dcLoop,count,offset,store)
dcStop EQU 0 ; stop opcode (dcStop,-----,------,-----)
; ; move opcode ( addr ,count,offset,store)
dcInstr RECORD 0, INCREMENT
dcAddr DS.L 1 ; buffer start address (0,-1,other)
dcCount DS.L 1 ; generic count
dcOffset DS.L 1 ; generic "offset"
dcStore DS.L 1 ; used to create "Saved Data Pointer"
dcSize EQU *-dcInstr ; size of one data-chaining instruction
ENDR
;
; Status byte equates
;
statusInitial EQU $FF ; initial "invalid" status byte value
statusByteCode EQU $9E ; mask to clear vendor-unique bits in status byte
statusRsrvBit EQU 7 ; reserved bit in status byte (must be zero for autosense)
statusGood EQU $00 ; status byte values with VU and reserved bits masked
statusChkCond EQU $02
statusCondMetGood EQU $04
statusBusy EQU $08
statusIntGood EQU $10
statusIntCMGood EQU $14
statusRsrvConflict EQU $18
;
; error codes on the original call
;
scsiBadPBErr EQU -470 ; invalid field(s) in the parameter block
;
; error codes in the "scsiResult" field
;
scsiOverrunErr EQU -471 ; attempted to transfer too many bytes
scsiTransferErr EQU -472 ; write flag conflicts with data transfer phase
scsiBusTOErr EQU -473 ; bus error during transfer
scsiSelectTOErr EQU -474 ; scsiSelTO exceeded (selection failed)
scsiTimeOutErr EQU -475 ; scsiReqTO exceeded
scsiBusResetErr EQU -476 ; the bus was reset, so your request was aborted
scsiBadStatus EQU -477 ; non-zero (not "Good") status returned
scsiNoStatusErr EQU -478 ; device did not go through a status phase
scsiLinkFailErr EQU -479 ; linked command never executed
scsiUnimpVctErr EQU -489 ; unimplemented routine was called
;
; "in progress" codes in the "scsiResult" field
;
scsiEnqueued EQU $0001 ; enqueued, waiting to start
scsiArbitrated EQU $0002 ; arbitration in progress, or attempted
scsiSelection EQU $0003 ; selection in progress, or target selected
scsiDisc EQU $0004 ; disconnected
scsiDataOut EQU $0010 ; Data Out phase
scsiDataIn EQU $0011 ; Data In phase
scsiCommand EQU $0012 ; Command phase
scsiStatus EQU $0013 ; Status phase
scsiIllegal1 EQU $0014 ; Unknown (illegal) phase
scsiIllegal2 EQU $0015 ; Unknown (illegal) phase
scsiMessageOut EQU $0016 ; Message Out phase
scsiMessageIn EQU $0017 ; Message In phase
;
; SCSIBusInfo information selectors
;
scsiIntfLvl EQU 0 ; SCSI Mgr interface level (1-n)
scsiBusTO EQU 1 ; byte-to-byte time limit (in us, 0=no timeout)
scsiBusDMA EQU 2 ; bus has a dedicated DMA channel (1=has DMA)
;
; New SCSI Manager (_NewSCSI) routine selectors
;
scsiRequestIO EQU 0 ; SCSIRequestIO trap
scsiKillIO EQU 1 ; SCSIKillIO trap
scsiBusInfo EQU 2 ; SCSIBusInfo trap
scsiNewSCSIMax EQU 2 ; highest legal selector value
scsiLogStart EQU 64 ; SCSILogStart trap
scsiLogStop EQU 65 ; SCSILogStop trap
MACRO
_SCSIRequestIO
MOVEQ.L #scsiRequestIO,d0
_NewSCSI
ENDM
MACRO
_SCSIKillIO
MOVEQ.L #scsiKillIO,d0
_NewSCSI
ENDM
MACRO
_SCSIBusInfo
MOVEQ.L #scsiBusInfo,d0
_NewSCSI
ENDM
MACRO
_SCSILogStart
MOVEQ.L #scsiLogStart,d0
_NewSCSI
ENDM
MACRO
_SCSILogStop
MOVEQ.L #scsiLogStop,d0
_NewSCSI
ENDM
ENDIF ; ...already included