.TITLE CDPREF ; ; PREFIX FILE FOR THE CDDRIVER ; ; CONTAINS MACROS, OFFSETS, STATE AND STATUS VALUES AND BIT ; DEFINITIONS AS WELL AS CONDITIONAL ASSEMBLY PARAMETERS ; ; VERSION 1.X ; ; CREATED: JULY 22 1982 VICKY WHITE ; MODIFIED: ; OCT1882 VW - MULTIPLE CONTROLLER - TAKE OUT CONDITIONALS INTO CDC.MAC ; ; ; ;----------------------------------------------------------------------- ; ; DR11W HARDWARE REGISTERS ; ------------------------ ; .ASECT ;DEFINE REGISTER OFFSETS FROM CSR . = 177774 ;(-4^D) CDWORD: .BLKW 1 ;OFFSET FROM CSR FOR WORD COUNT REGISTER CDBUFA: .BLKW 1 ;OFFSET FROM CSR FOR BUFFER ADDRESS REGISTER CDCSR: .BLKW 1 ;CSR OFFSET ZERO CDDATA: .BLKW 1 ;OFFSET FROM CSR FOR DATA BUFFER REGISTER .PSECT ; ; FUNCTION BIT MASKS FOR THE CSR BITS ; ------------------------------------ ; ; GO = 1 ;GO BIT FNCT1 = 2 ;FUNCTION 1 BIT FNCT2 = 4 ;INTERRUPT PARTNER FNCT3 = 10 ;IF SET CAUSES ONE DMA CYCLE IE = 100 ;INTERRUPT ENABLE CYCLE = 400 ;CYCLE BIT STATA = 4000 ;STATUS A BIT (MAPS PARTNERS FNCT3) STATB = 2000 ;STATUS B BIT (MAPS PARTNERS FNCT2) STATC = 1000 ;STATUS C BIT (MAPS PARTNERS FNCT1) MAINT = 10000 ;MAINTENANCE MODE BIT ATTN = 20000 ;ATTENTION BIT ERROR = 100000 ;ERROR BIT ; ;----------------------------------------------------------------------- ; ; DRIVER STATE CODES (U.CW2) ; -------------------------- ; ; IDLE = 1 ;DRIVER IDLE, NO OPERATION IN PROGRESS ASTQUE = 2 ;AST QUEUED, RECEIVED PACKET AWAITING DELIVERY RECPEN = 4 ;RECEIVE PENDING, PACKET DELIVERY IN PROGRESS WTLACK = 10 ;LINK BID INITIATED. WAIT-LINK-ACKNOWLEDGE DISCON = 20 ;DISCONNECTED, DRIVER ASLEEP WTPTC = 40 ;HAVE ACKNOWLEDGED LINK. WAIT-PACKET-TYPETNER ;CODE WTPTAK = 100 ;HAVE SENT PACKET TYPE CODE. WAIT-PTC-ACK. WTSGAK = 200 ;HAVE SENT SIGNAL. WAIT-SIGNAL-ACK. WTRCWC = 400 ;HAVE SENT WORD COUNT. WAIT-RECEIVERS-WC TRANSF = 1000 ;TRANSFER IN PROGRESS WTXMWC = 2000 ;HAVE SENT PTC ACK. WAIT-TRANSMITTERS-WC DOWN = 4000 ;LINK DOWN STWAIT = 10000 ;WAITING FOR START ACKNOWLEDGE WAITEM = 40000 ;END OF DMA INTERRUPT PROCESSED, WAITING FOR ; END OF MESSAGE STATUS. FORKED = 60000 ;WAITING TO EXECUTE OR EXECUTING FORK ;LEVEL CODE, AFTER AN INTERRUPT NONE = 0 ;NO STATE - FOR DISPATCH TABLES ;- NO STATE WILL SATISFY ;BIT TEST CONDITIONS ANY = 177777 ;ANY STATE - FOR DISPATCH OF I/O FN ;AND INTERRUPT LEVEL DISPATCHING ; ;--------------------------------------------------------------------- ; ; DEFINE PTC DESCRIPTOR BLOCK (PDB) ; ; NOTE: THIS BLOCK IS NOT USED AS AN AST BLOCK! THE AST BLOCK IS ; ALLOCATED OUT OF POOL AS NEEDED. ; .ASECT . = 0 PT.LNK: .BLKW 1 ;LINK TO NEXT PDB PT.PTC: .BLKW 1 ;PACKET TYPE CODE PT.TCB: .BLKW 1 ;TCB OF OWNER PT.AST: .BLKW 1 ;AST TRAP ADDRESS PT.IOQ: .BLKW 2 ;PDB RECEIVE I/O QUEUE LISTHEAD PT.LEN: .BLKW 1 ;LENGTH OF ALLOCATED POOL BLOCK PTLENG = . .PSECT ;--------------------------------------------------------------------- ; ; ; TIME-OUT CONSTANTS: ; .IF NDF DBUG XMTTMO = 3. ;THREE SECOND TRANSMIT TIMER RCVTMO = 2. ;TWO SECOND RECEIVE TIMER DELTIM = 6 ;DELAY .1 SEC FOR EOM DELAY STKWAI = 6 ;DELAY .1 SEC FOR START ACK TIMER DELMSK = 177400 ;MASK FOR RANDOM DELAY TIMER .IFF XMTTMO = 300 RCVTMO = 200 DELTIM = 600 STKWAI = 60. DELMSK = 170000 .ENDC ;------------------------------------------------------------------------ ; ; ; LINK FUNCTION CODES - SENT TO PARTNER MACHINE IN OUTPUT DATA REGISTER ; ; FUNCTION CODE CONTROL BIT MASKS: ; NOTWC = 100000 ;IF CLEAR DATA WORD IS A WORD COUNT PTC = 40000 ;IF SET, DATA BYTE IS A PACKET TYPE CODE ACK = 20000 ;IF SET, DATA BYTE IS AN ACK OR NACK OF A ; PTC,SIGNAL, WC, OR LINK REQUEST. EOM = 10000 ;IF SET, DATA BYTE IS AN EOM STATUS REQLK = 4000 ;IF SET, SENDER IS REQUESTING THE LINK START = 2000 ;IF SET, SENDERIS REQUESTING TO START OR ; RE-START THE PROTOCOL SIGNAL = 1000 ;IF SET, DATA BYTE IS A SIGNAL DELAY = 400 ;PLEASE DELAY BEFORE INITIATING LINK BID, ; REQUESTING UNIT HAS WORK QUEUED. ; ; FUNCTION CODES: ; ACKNCD = NOTWC!ACK!5 ;LINK ACKNOWLEDGE CODE RECLCD = NOTWC!REQLK ;REQUEST LINK CODE (GLOBAL) PTCACD = NOTWC!ACK!1 ;PTC ACKNOWLEDGE CODE PTCNCD = NOTWC!ACK!2 ;PTC NACK CODE SIGACD = NOTWC!EOM!EM.SUC ;SIGNAL ACKNOWLEDGE CODE WCNACD = NOTWC!ACK!4 ;WORD COUNT NACK CODE (TRANSFER REJECTED) STRTCD = NOTWC!START ;PROTOCOL START CODE STAKCD = NOTWC!ACK!3 ;PROTOCOL START ACKNOWLEDGE EOMSCD = NOTWC!EOM ;END OF MESSAGE STATUS CODE MASK EM.SUC = 32. ;SUCCESSFUL END OF MESSAGE SUBFUNCTION EM.ABO = 9. ;I/O KILLED WHILE IN PROGRESS EM.FHE = 8. ;FATAL HARDWARE ERROR SUBFUNCTION PTCDCD = NOTWC!PTC ;PACKET TYPE CODE MASK SIGNCD = NOTWC!SIGNAL ;SIGNAL MASK ; ;------------------------------------------------------------------------ ; ; LINK OWNERSHIP CODES: ; FREE = 0 ;NEITHER MASTER NOR SLAVE MASTER = 1 ;UNIT IS LINK MASTER SLAVE = 2 ;UNIT IS LINK SLAVE ; ;------------------------------------------------------------------------ ; ; FORK REASON CODE MASKS(U.FFL) ; IODONE = 1 ;FORKING FOR I/O CLEANUP ASTQ = 10 ;FORKING TO QUE AST ; ;------------------------------------------------------------------- ; ; ; UCB OFFSETS USED BY THIS DRIVER ; U.STA = U.CW2 ;DRIVER STATUS U.SCT = U.CW3 ;COUNT OF NUMBER OF RE-STARTS U.PTC = U.VCB+2 ;LISTHEAD FOR CHAIN OF PDB'S U.CPT = U.VCB+4 ;CURRENT PDB WHEN READ IN PROGRESS U.ITB = U.VCB+6 ;ADDRESS OF INTERRUPT TRANSFER BLOCK U.MSS = U.VCB+10 ;LINK MASTER/SLAVE FLAG U.IDR = U.VCB+12 ;IDR CONTENTS AT LAST INTERRUPT U.IOS = U.VCB+14 ;I/O STATUS OF CURRENT TRANSFER QIO U.PRW = U.VCB+16 ;PREVIOUS EOM STATUS OR'D WITH ;REQUEST LINK OR DELAY POSSIBLY U.WDC = U.VCB+20 ;WORD COUNT FOR LAST TRANSFER QIO U.FLG = U.VCB+22 ;FLAG SET IF REQUEST LINK IS WAITING ;TO BE PROCESSED U.IO2 = U.VCB+24 ;2ND WORD OF THE I/O STATUS OF ;THE LAST TRANSFER QIO U.DAT = U.VCB+26 ;LAST WORD RECEIVED ON DMA U.FFL = U.VCB+30 ;FORK REASONS BIT MASK U.FST = U.VCB+32 ;STATE TO GO INTO AT END OF FORK CODE U.TIM = U.VCB+34 ;ADDRESS OF TIMER CLOCK QUEUE PACKET U.PKT = U.VCB+36 ;ADDRESS OF PENDING WRITE I/O PACKET U.ACK = U.VCB+40 ;FLAG FOR PENDING LINK ACKNOWLEDGE U.ERR = U.VCB+42 ;TO SAVE ERROR REGISTER U.QWC = U.VCB+44 ;TO SAVE CURRENT PACKET WC ; ; ;------------------------------------------------------------------- ; ; QIO FUNCTION CODES AND ERROR STATUS CODES ; ----------------------------------------- ; ; IS.MAS = 2. ;MASTER STATUS RETURN ON SLEEP IS.SLV = 4. ;SLAVE STATUS RETURN ON SLEEP IE.DNE = -103. ;PTC DOES NOT EXIST IE.NDS = -89. ;UNIT NOT DISCONNECTED IE.NEX = -102. ;NON-EXISTANT STATE IE.NRP = -104. ;NO READ PENDING IE.PTO = -100. ;PACKET TYPE OWNED IE.SNA = -93. ;SIGNAL NOT ACKNOWLEDGED IE.VIU = -94. ;VECTOR IN USE ON AWAKE IE.IOQ = -95. ;I/O STILL QUEUED TO PDB ON IO.CLN OR IO.RPA IE.LDN = -101. ;LINK DOWN, AND RESOURCE WAIT NOT SPECIFIED IE.EME = -110. ;END OF MESSAGE ERROR CODE IE.BUG = -111. ;CD DRIVER BUG CHECK IE.IPT = -112. ;ILLEGAL PTC VALUE (MUST BE 0-255) IO.SPA = 25.*^O400 ;SET PACKET TYPE CODE AFFINITY IO.RPA = 26.*^O400 ;REMOVE PACKET TYPE CODE IO.AWA = 29.*^O400 ;AWAKE DRIVER IO.SIG = 30.*^O400 ;SEND SIGNAL IO.REJ = 31.*^O400 ;REJECT MESSAGE IO.STU = 24.*^O400 ;RETURN DRIVER STATUS SF.SLP = 1 ;SLEEP SUBFUNCTION SF.RSW = 2 ;QUEUE PACKET EVEN IF RESOURCE UNAVAILABLE SF.RDQ = 4 ;QUEUE READ EVEN IF NO READ PENDING ; ----------------------------------------------------------------------- ; ; ; DEFINE OFFSETS FOR TRACE FEATURE ; TR.SIZ=8. ;SIZE OF EACH TRACE TABLE ENTRY .IIF LT .ERROR ;TRACE SIZE MUST BE AT LEAST 4 BYTES .ASECT .=140000 ;MAP TO TRACE PARTITION WITH APR6 TRCSIZ: .BLKW 1 ;SIZE OF EACH ENTRY TRCNUM: .BLKW 1 ;NUMBER OF ENTRIES IN THE COMMON TRCPTR: .BLKW 1 ;POINTER TO NEXT ENTRY TRCFLG: .BLKW 1 ;IF NONZERO, DISABLE TRACE .BLKW ;FILLER TO 8-WORD ALIGN TRACE BLOCKS TRCTAB: .BLKW ;TRACE TABLE .PSECT ; ; ;---------------------------------------------------------------------- ; ; OFFSETS FOR INTERRRUPT LEVEL DISPATCH TABLE ENTRIES ; .ASECT .=0 I.STA: .BLKW ;DRIVER STATE I.MUSC: .BLKW ;MASK OF COMPLEMENT OF BITS WHICH MUST ;BE SET IN VALID CODE ARRIVING IN THIS STATE I.MUS: .BLKW ;MASK OF BITS WHICH MUST BE SET IN VALID ;CODE ARRIVING IN THIS STATE I.MAYC: .BLKW ;MASK OF COMPLEMENT OF BITS WHICH ARE PERMITTED ;TO BE SET IN ANY CODE ARRIVING IN THIS STATE I.JMP: .BLKW ;CODE TO JUMP TO IF CODE IS VALID ;ELSE IF ARRIVING CODE DOES NOT PASS TESTS FOR ;VALIDITY IT IS TREATED AS GARBAGE AND A JMP ;TO LOCATION GARBGE IS MADE ; I.SIZ=. ;SIZE OF INT DISPATCH TABLE IN BYTES .PSECT ; ;----------------------------------------------------------------------- ; ; ; OFFSETS FOR I/O FUNCTION DISPATCH TABLE ENTRIES ; ---------------------------------- .ASECT .=0 D.FN: .BLKB ;IO FUNCTION CODE POSITION D.ACT: .BLKB ;MASK OF ERROR ACTION BITS D.STA: .BLKW ;ALLOWED STATES D.IOS: .BLKW ;IE ERROR CODE FOR IOFIN D.JMP: .BLKW ;ADDRESS OF SERVICE CODE ; D.SIZ=. ;SIZE OF EACH DISPATCH TABLE ENTRY .PSECT ; ; POSSIBLE ERROR ACTIONS ; ---------------------- IOQ.D=1 ;QUEUE PACKET ON NORMAL IO QUEUE PTQ.D=2 ;QUEUE PACKET ON PDB PRIVATE IO QUEUE FIN.D=4 ;DO IOFIN ON PACKET USING ERROR CODE IN TABLE ; .PAGE ;========================================================================= ; ; ; MACROS FOR CDDRIVER ; ------------------- ; ; ; MACRO TO SAVE LIST OF ITEMS ON STACK ; PUSH .MACRO PUSH ARGUMS .IRP ARGUS, MOV ARGUS,-(SP) .ENDM .ENDM PUSH ; MACRO TO RESTORE LIST OF ITEMS FROM STACK ; POP .MACRO POP ARGUMS .IRP ARGUS, MOV (SP)+,ARGUS .ENDM .ENDM POP ; ; -------------------------------------------------------------------- ; ; MACRO DSABL - SET PROCESSOR PRIORITY TO PR ; ; .MACRO DSABL,PR .IF GT D$$11W ;CODE FOR DR11W DEVICE MFPS -(SP) ;SAVE CURRENT PS MTPS #PR ;SET TO PRIORITY SPECIFIED .ENDC ;DUMMY FOR IC DRIVER .ENDM ; ;----------------------------------------------------------------------- ; ; MACRO ENABL - LOWER PROCESSOR PRIORITY BACK TO SAVED PS ON STACK ; .MACRO ENABL .IF GT D$$11W ;CODE FOR DR11W DEVICE MTPS (SP)+ .ENDC ;DUMMY FOR IC DRIVER .ENDM ;---------------------------------------------------------------------- ; ; MACROS FOR CDDRV TRACE ; .MACRO TRACE,ARGS,?A .IF DF TRCE TST TRC ;TRACE ENABLED? BEQ A ;IF EQ, NO, SKIP DSABL PR7 OFF=0 .IRP ARG, MOV ARG,TRCDAT+OFF OFF=OFF +2 .ENDM CALL TRACE ;ENTER NEW TRACE CODE ENTRY ENABL A: .ENDC .ENDM TRACE ; ------------------------------------------------------------------ ; ; MACRO TO DEFINE INTERRUPT LEVEL DISPATCHER STATE/CODE TABLE ; ; .MACRO INTTBL,STATE,MUST,MAY,JMPADR .WORD STATE ;STATE OF DRIVER .WORD ^C ;COMPLEMENT OF BITS WHICH MUST BE SET .WORD MUST ;BITS WHICH MUST BE SET IN CODE .WORD ^C ;BITS WHICH MAY POSSIBLY BE SET IN CODE .WORD JMPADR ;ADDRESS OF CODE SERVICING A VALID CODE .ENDM INTTBL ; ---------------------------------------------------------------------- ; ; MACRO TO DEFINE DISPATCH TABLE FOR THE I/O FUNCTIONS OF THE QIO PACKETS ; RECEIVED BY THE DRIVER ; .MACRO DISTBL,FN,STATES,ERRACT,IECODE,JMPADR .BYTE FN/256. ;1 BYTE FN CODE WITHOUT MODIFIER BITS .BYTE ERRACT ;MASK OF POSSIBLE ACTIONS ON ERROR .WORD STATES ;MASK OF ALLOWED STATES .WORD IECODE ;STATUS CODE TO GO IN R0 FOR IOFIN .WORD JMPADR ;ADDRESS OF CODE SERVICING THIS IO FN. .ENDM DISTBL ; ;-------------------------------------------------------------------- ; ; MACRO TO GENERATE ASSEMBLER ERROR IF NON VALID ASSUMPTIONS ; ARG1 SHOULD EQUAL ARG2 .MACRO ASSUME ARG1,ARG2 .IF NE - .ERROR ;ARG1 NOT EQUAL TO ARG2 .ENDC .ENDM ASSUME ;-------------------------------------------------------------------- ; ; ; MACRO TO LOOP AND CAUSE A SHORT DELAY ; .MACRO DELAY,N MOV #N,R0 66$: DEC R0 BGT 66$ .ENDM DELAY