;========================================================================== ; ; File: SIMCoreEqu.a ; ; Contains: Asm equiv. of SIMCore.h ; ; Written by: Paul Wolf ; ; Copyright: © 1990-1993 by Apple Computer, Inc., all rights reserved. ; ; Change History (most recent first): ; ; 12/15/93 pdw Filled out HALinfo field. ; 12/19/93 DCB Added hsdshkRemainder. This is to help solve the handshake ; across scatter gather boundries problem. ; 11/22/93 pdw Rolling in from . ; 11/8/93 pdw Added error condition for kHALselectedAsTargetFld. ; 10/29/93 DCB roll-in. ; 10/28/93 pdw States used in target mode. ; 10/14/93 pdw roll-in. ; 10/12/93 pdw Added support for Synchronous data transfers, rewrote State ; Machine, message handling etc. ; 9/9/93 pdw Lots of little changes. Name changes, temporary cache_bug ; stuff. ; 7/17/93 pdw Lots of little things. ; 5/5/93 PW Converted names to meanies-friendly names. Updated with latest ; from Ludwig stuff. ; 4/30/93 DCB Getting rid of the HalInfo HalAction vector. It is getting its ; own entry point into the HAL to prevent deadlocks. ; 4/29/93 DCB Fixing Build - Sorry bout that. ; 4/14/93 DCB Added SetParity action and the full set of ioEvents from ; SIMCore.h ; 3/1/93 DCB Removed scConnTimer field since it isn't needed yet. ; 2/17/93 PW Added savedResidLen field and kbBitBucketed flag needed to fix ; dataResidLen and bitbucketing bugs. ; 1/31/93 PW Update from the latest of Ludwig. Also changes required for PDM ; (will update Ludwig with these as needed myself). ; 1/27/93 PW Added dataRoutine and xferRoutine fields to SIM_IO. ; 1/6/93 DCB Added kbUseDblBuffer bit to the SIMprivFlags field to fix SCSI ; into NuBus bug. Radar Bug #1059322 ; 11/20/92 DCB Fields for async operation of non-io parameter blocks ; 10/30/92 DCB Adding HAL privates to the SIM_IO structure ; 10/8/92 PW Added stuff needed for variable-sized SCSI_IO support. ; 8/30/92 PW Added kAssertATN to HALactions record. ; 8/20/92 DCB Fixed SCSI Bus Reset ; ;========================================================================== IF &TYPE('__INCLUDING_SIMCoreEqu__') = 'UNDEFINED' THEN __INCLUDING_SIMCoreEqu__ SET 1 ;************************************************* HALactionPB RECORD 0, INCREMENT ;-- The first two fields remain constant throughout the connection HALstaticPtr ds.l 1 ; uchar * -> alloc. ptr to the HAL's static vars ioPtr ds.l 1 ; SCSI_IO * -> primarily for Initiate action ds.w 1 ; HALactions -> what to do result ds.w 1 ; <- error selectorID ds.w 1 ; <- ID of device selecting/reselecting us unused ds.w 1 ; sendCDB ds.b 1 ; -> flag = send CDB during initiate phase ds.b 1 ; <- current phase msgInLen ds.b 1 ; <> number of msg in bytes msgOutLen ds.b 1 ; <> number of msg out bytes msg ds.b 8 ; <> msg bytes ENDR ;HALactionPB ;---- Bit equates for flags in HALactionPB flags field kbMsgInValid equ 2 kmMsgInValid equ (1<<2) ; 0000,0100b ;******** HALactions ********** HALactions RECORD 0, INCREMENT ; must correspond to G_JmpTbl record in HALc96Equ.a (or other HAL's) kInitiate ds.b 1 ; 0 kBitBucket ds.b 1 kDataIn ds.b 1 kDataOut ds.b 1 kAcceptMsg ds.b 1 ; 4 kUnusedHALaction ds.b 1 kunusedMI ds.b 1 kSendMsgOut ds.b 1 kStatus ds.b 1 ; 8 kComplete ds.b 1 kSaveDataPointer ds.b 1 kModifyDataPointer ds.b 1 kRestorePointers ds.b 1 ; c kGetReconnectInfo ds.b 1 kGetSelectInfo ds.b 1 kSelect ds.b 1 kunused ds.b 1 ; 10 kCommand ds.b 1 kSetParity ds.b 1 ; kHandleSelected ds.b 1 kNumHALaction ds.b 1 ; make sure you modify dispatch table above too ENDR ; a list of unusual events which could affect the interpretation of errors in CompleteIO kAborted equ $0001 ; PB was aborted by an AbortCommand kTerminated equ $0002 ; Hasta la Vista Baby! kBDRSent equ $0004 ; Bus Device Reset was sent to the target kTimedOut equ $0008 ; timed out kMsgSent equ $0010 ; message was delivered to the target kMsgRejected equ $0020 ; message rejected by target kBadParity equ $0040 ; bad parity detected by initiator kAutoSense equ $0080 ; Autosense has been executed SIMprivFlagsRecord RECORD 0, INCREMENT kbDataDone ds.b 1 ; 0: scatter/gather list has been exhausted kbSetupComplete ds.b 1 ; 1: set to indicate we setup this iopb for DMA kbUseDblBuffer ds.b 1 ; 2: Set to indicate that the buffer was not lockable/DMAable (NuBus Space) kbBitBucketed ds.b 1 ; 3: we were forced to bit bucket kbUseDirectDMA ds.b 1 ; 4: use direct DMA during data transfer ENDR HALresult RECORD 0, INCREMENT kHALnoErr ds.b 1 ; all requests kHALselectFld ds.b 1 ; initiate kHALreselected ds.b 1 ; we were reselected (maybe during an initiate) kHALselectedAsTarget ds.b 1 ; we were selected (maybe during an initiate) kHALselectedAsTargetFld ds.b 1 ; curio bug - they tried to select us and we hung kHALnoCommand ds.b 1 ; initiate kHALpartialCommand ds.b 1 ; initiate kHALpartialMsgIn ds.b 1 ; MsgIn kHALmsgInDisconnected ds.b 1 ; MsgIn kHALpartialDataIn ds.b 1 ; DataIn kHALpartialDataOut ds.b 1 ; DataOut kHALpartialMsgOut ds.b 1 ; MsgOut kHALmsgOutDisconnected ds.b 1 ; MsgOut kHALreselectBogus ds.b 1 ; GetReconnectInfo kNumHALresult ds.b 1 ENDR ;// SIM layer privates SIM_IO RECORD 0, INCREMENT SCSI_IO_Macro SIMglobals ds.l 1 ; ptr to SIM globals scTimer ds.l 1 ; -> CAM Timeout value (in seconds) hdshkRemainder ds.w 1 ; Leftover handshake from previous SG element hdshkIndex ds.b 1 ; The handshake element that the above remainder refers to rsrvd6 ds.b 1 ; reserved ioStat ds.w 1 ; <- intermed. status of this guy ioEvent ds.w 1 ; additional status to explain misc asynchronous events firstError ds.b 1 ; first error detected (saved for later use by CompleteIO) SIMprivFlags ds.b 1 ; SIM private flags (for this PB) rsrvd7 ds.w 1 ; reserved pendingMsgPB ds.l 1 ; ParameterBlock for an Async operation to be undertaken ASAP currentSGptr ds.l 1 ; current ptr (to SG entry) currentSGcount ds.l 1 ; current count (within SG entry) savedSGptr ds.l 1 ; saved ptr (to SG entry) savedSGcount ds.l 1 ; saved count (within SG entry) ioQueue ds.l 1 ; the queue that this PB has been enqueued in savedResult ds.w 1 ; final status of the PB (placed in scStatus only after autosense) rsrvd8 ds.w 1 transLogStart ds.l 1 ; logical address (for DMA) transLogCount ds.l 1 ; logical count transPhyStart ds.l 1 ; physical address transPhyCount ds.l 1 ; physical count dataRoutine ds.l 1 ; ptr to data desc interp. routine to use for this I/O xferRoutine ds.l 1 ; ptr to data transfer routine to use for this I/O savedResidLen ds.l 1 ; saved (not current) residual length SIMextras ds.b 4 ; for a total of 64 bytes ENDR HALinitInfo RECORD 0, INCREMENT HALstaticPtr ds.l 1 ; <- alloc. ptr to the HAL's static vars staticSize ds.l 1 ; -> num bytes HAL needs for static vars HALinit ds.l 1 ; -> pointer to the HAL init routine HALaction ds.l 1 ; -> pointer to the HAL action routine HAL_ISR ds.l 1 ; -> pointer to the HAL ISR routine HALIntPoll ds.l 1 ; -> pointer to the HAL interrupt poll routine HALBusInquiry ds.l 1 ; -> pointer to the HAL Info routine HALResetBus ds.l 1 ; -> pointer to the HAL ResetBus routine HALAssertATN ds.l 1 ; -> pointer to the HAL AssertATN routine HALTeardownIO ds.l 1 ; -> pointer to the HAL TeardownIO routine HALSyncConfig ds.l 1 ; -> pointer to the HALSyncConfig routine unusedV ds.l 1 ; -> pointer to the syncRAoffset ds.b 1 ; -> REQ/ACK offset to use for sync negotiation minPeriodFactor ds.b 1 ; -> min transfer period to request in SDTR HBAisSync ds.b 1 ; -> HBAisFast ds.b 1 ; -> oldCallCapable ds.b 1 ; -> true if this HAL can handle old-API calls usesThreshold8 ds.b 1 ; -> busID ds.w 1 ; <- bus number for the registered bus ReconnectISR ds.l 1 ; <- to make ReconnectISR call XPT_ISR ds.l 1 ; <- ptr to the XPT ISR SIMstaticPtr ds.l 1 ; <- so SSM callback has its globals hwDescPtr ds.l 1 ; -- for use by HAL only supported_scFlags ds.l 1 ; supported_scIOFlags ds.w 1 ; supported_scDataTypes ds.w 1 ; ENDR SIMglobals RECORD 0, INCREMENT HALinfo ds HALinitInfo ; copy of HALinitInfo, made after registration ENDR ENDIF ; already included...