.TITLE CDTAB .IDENT /1.1MC/ .ENABL LC ; ; FERMILAB 1981 ; ; AUTHORS: DAVID B. BURCH RD/COMPUTING ; VICKY WHITE ; ; Modifications: G.Cornelius, S.Jobes - Mayo Clinic - September, 1984 ; SLJ11 ; 1. Added UMR & Q-Bus support ; 2. Added M+ support (no attempt to support resident driver) ; 3. Tried to make comments more readable. ; ;+ ; DR11-W INTERPROCESSOR COMMUNICATIONS DRIVER DATABASE. ; ; THIS DATABASE SUPPORTS THE DR11-W INTERPROCESSOR COMMUNICATON ; DEVICE. THE DEVICE DRIVER ASSOCIATED WITH THIS DATABASE PROVIDES ; HIGH-RATE TASK-TO-TASK LOGICAL LINKS BETWEEN PDP-11 SERIES ; PROCESSORS. THIS CAPABILITY IS SIMILAR TO THAT PROVIDED BY ; DECNET, BUT WITHOUT MUCH OF THE OVERHEAD ASSOCIATED WITH THAT ; PRODUCT. IN ORDER TO PROVIDE THIS SERVICE WITHOUT RESORTING TO ; AN ACP, THIS DRIVER MUST BE FAIRLY NON-STANDARD. IT MAINTAINS ; A LINKED LIST IN POOL OF LOGICAL LINK DESTINATIONS (CALLED ; "PACKET TYPE CODE AFFINITIES"). IT PROCESSES UNSOLICITED ; RECEIVES ON THE DR11-W DEVICE AND, IN FACT, IT WILL REJECT ANY ; READ REQUEST UNTIL DATA IS AVAILABLE FOR THE TASK ISSUING THE ; READ REQUEST. IT ALSO SUPPORTS A MODE OF OPERATION WHERE THE ; DRIVER RELEASES THE DR11-W INTERRUPT VECTOR AND DEVICE PAGE ; REGISTERS TO A PRIVILEGED TASK FOR USE BY THE DATA AQUISITION ; SYSTEM. ; THE DRIVER ALSO SUPPORTS INTERNAL COMMUNICATION BETWEEN TASK ; IN THE SAME MACHINE ;- ; ; MACRO CALLS: .MCALL DCBDF$,HWDDF$,SCBDF$,UCBDF$ DCBDF$ ;DEFINE DEVICE CONTROL BLOCK OFFSETS HWDDF$ ;DEFINE HARDWARE REGISTERS AND STATUS CODES SCBDF$ ;DEFINE STATUS CONTROL BLOCK OFFSETS UCBDF$ ;DEFINE UNIT CONTROL BLOCK OFFSETS .NLIST UC.LGH =01 ;For U.CTL, even byte count .MACRO CDUCBX N ;=========================================== ; *** Unit Control Block (UCB) for CD'N: *** ;=========================================== .if df M$$MUP .WORD 0 ;U.OWN TCB OF ATTACHING TERMINAL .endc ;M$$MUP .CD'N:: .WORD .DC0 ;U.DCB BACK POINTER TO DCB .WORD .-2 ;U.RED REDIRECT UCB POINTER .if ne VEC$'N ; SLJ11 .BYTE UC.ALG!UC.KIL!UC.QUE!UC.PWF!UC.NPR!UC.LGH ;U.CTL Control flags ; Word-aligned buffers ; Call driver on I/O kill ; Pass I/O packets to driver w/o queueing ; Call PWF entrypoint on load ; NPR device ; Word modulus bufr size .iff ;VEC$N .BYTE UC.ALG!UC.KIL!UC.QUE!UC.PWF!UC.LGH ;U.CTL Control flags ; Word-aligned buffers ; Call driver on I/O kill ; Pass I/O packets to driver w/o queueing ; Call PWF entrypoint on load ; Word modulus bufr size .endc ;VEC$N .BYTE 0 ;U.STS UNIT STATUS (UNIT BUSY BIT IN HERE) .BYTE N ;U.UNIT PHYSICAL UNIT NO. FOR DR11-W ALWAYS 0 .if df R$$MPL ; SLJ11 .BYTE US.OFL ;U.ST2 Additional unit status ; SLJ11 .iff ;R$$MPL .BYTE 0 ;U.ST2 ADDITIONAL UNIT STATUS .endc ;R$$MPL ; DEVICE OFFLINE BIT IS IN HERE .WORD 0 ;U.CW1 DEVICE CHARACTERISTICS ; USED BY THE GLUN$ DIRECTIVE TO ; REPORT TO A TASK WHAT SORT OF ; DEVICE THIS IS. NONE OF THE POSSIBLE ; CATEGORIES REALLY FIT, SO IT IS LEFT ; ZERO .WORD 0 ;U.CW2 DEVICE CHARACTERISTICS ; THIS WORD IS USED BY THIS DRIVER TO ; MAINTAIN DRIVER STATE CODES .WORD 0 ;U.CW3 DEVICE CHARACTERISTICS ; THIS WORD USED BY THIS DRIVER FOR ; STORAGE OF RESTART COUNT U.SCT .WORD 0 ;U.CW4 DEVICE CHARACTERISTICS ; DEFAULT BUFFER SIZE, NOT USED BY THIS ; DRIVER AT PRESENT. FUTURE USE ; MAY BE FOR FLOW CONTROL ; THIS CAN BE READ OUT BY TYPING: ; MCR>SET /BUF=CD: .WORD $CD'N ;U.SCB STATUS CONTROL BLOCK LINK .WORD 0 ;U.ATT USED FOR TCB OF ATTACHING TASK ; UNIMPLEMENTED IN THIS VERSION .BLKW 2 ;U.BUF BUFFER ADDRESS ; ALREADY FORMATTED FOR AN NPR DEVICE ; WORD 1 ; BIT 0 - GO BIT ; BIT 1-3 - FUNCTION CODE ; BIT 4,5 - MEMORY EXTENTION BITS ; BIT 6 - INTERRUPT ENABLE ; BIT 7-15 - ZERO ; WORD 2 ; LOW ORDER 16 BITS OF PHYSICAL ADDRESS ; ; IN THE CASE OF IC TRANSFERS IT IS IN ; AN ADDRESS DOUBLEWORD FORM .BLKW 1 ;U.CNT BUFFER BYTE COUNT ; THIS MIGHT BE MADE INTO A WORD COUNT .if df R$$MPL ; M+ ; SLJ11 .WORD 0 ;U.UCBX UCB extension ; SLJ11 .endc ;R$$MPL .WORD 0 ;U.ACP UNUSED .WORD 0 ;U.VCB UNUSED .WORD 0 ;U.PTC PTC CHAIN LISTHEAD ; LISTHEAD FOR THE CHAIN OF PACKET TYPE ; CODES THAT ALLOW UNSOLICITED PACKETS TO ; BE ROUTED. IT IS MAINTAINED BY THIS ; DRIVER, AND HAS NO MEANING TO RSX. .WORD 0 ;U.CPT ADDRESS OF PTC CODE BLOCK FOR CURRENT ; UNSOLICITED READ, OR ZERO IF NONE. .WORD 0 ;U.ITB LOCATION TO STORE ADDRESS OF INTERRUPT ; TRANSFER BLOCK ACROSS A DISCONNECT. .WORD 0 ;U.MSS UNIT MASTER/SLAVE STATUS .WORD 0 ;U.IDR CONTENTS OF IDR AT LAST INTERRUPT .WORD 0 ;U.IOS SAVED I/O STATUS ; USED WHERE THIS IS KNOWN PRIOR TO ; THE END OF PROTOCOL PROCESSING. .WORD 0 ;U.PRW SAVED PROTOCOL STATUS WORD ; USED TO PRESERVE INFORMATION ABOUT ; CURRENT STATES DURING EOM/REQUEST LINK ; SEQUENCE. .WORD 0 ;U.WDC SAVED WORD COUNT OR SIGNAL .WORD 0 ;U.FLG FLAG USED TO DETERMINE IF AN ; INTERRUPT WAS RECEIVED THAT WE ; WERE UNABLE TO PROCESS .WORD 0 ;U.IO2 SAVED 2ND IO STATUS WORD FOR FORK .WORD 0 ;U.DAT LAST WORD RECEIVED ON DMA .WORD 0 ;U.FFL FORK REASONS BIT MASK .WORD 0 ;U.FST STATE TO GO TO AT END OF FORK .WORD 0 ;U.TIM ADDRESS OF TIMER BLOCK .WORD 0 ;U.PKT ADDRESS OF NEXT WRITE PACKET .WORD 0 ;U.ACK FLAG FOR PENDING LINK ACKNOWLEDGE .WORD 0 ;U.ERR TO SAVE DR11W ERROR REGISTER .WORD 0 ;U.QWC SAVE WORD COUNT OF CURRENT QIO PACKET .ENDM .MACRO CDSCBX N,C ; SLJ11 ;======================================================== ; *** Status Control Block (SCB) for CD'N: controller *** ;======================================================== .if df R$$MPL ; M+ ; SLJ11 .BYTE CDPR ;K.PRI ; SLJ11 .BYTE VEC$'N/4. ;K.VCT ; SLJ11 .BYTE 'N*2 ;K.CON ; SLJ11 .BYTE 0 ;K.IOC ; SLJ11 .WORD KS.OFL ;K.STS ; SLJ11 $CD'C:: ; SLJ11 .WORD CSR$'N ;K.CSR ; SLJ11 .WORD CD'C-$CD'C ;K.OFF ; SLJ11 .BYTE 0 ;K.HPU ; SLJ11 .BYTE 0 ;UNUSED ; SLJ11 .WORD .CD'N ;K.OWN ; SLJ11 $CD'N:: ; SLJ11 .WORD 0 ;K.CRQ ; SLJ11 .WORD .-2 ; ; SLJ11 .BLKW 4 ;S.FRK ; SLJ11 .WORD 0 ;S.KS5 ; SLJ11 .WORD 0 ;S.PKT ; SLJ11 .BYTE 0 ;S.CTM ; SLJ11 .BYTE 5 ;S.ITM ; SLJ11 .BYTE 0 ;S.STS ; SLJ11 .BYTE 0 ;S.ST3 ; SLJ11 .WORD S2.CON ;S.ST2 ; SLJ11 .WORD $CD'C ;S.KRB ; SLJ11 .iff ;R$$MPL ; 11M $CD'N:: .WORD 0 ;S.LHD DEVICE I/O QUEUE LISTHEAD .WORD .-2 .BYTE CDPR ;S.PRI DEVICE INTERRUPT PRIORITY .BYTE VEC$'N/4 ;S.VCT DEVICE INTERRUPT VECTOR ADDRESS / 4 .BYTE 0 ;S.CTM CURRENT DEVICE TIMEOUT COUNT (SECONDS) .BYTE 5 ;S.ITM INITIAL DEVICE TIMEOUT COUNT (SECONDS) .BYTE ;S.COM CONTROLLER INDEX. (# * 2) ; THIS SERVES AS A POINTER INTO A TABLE OF ; CONTOLLERS FOR CASES WHERE MORE THAN ONE ; DR11-W ARE PRESENT .BYTE 0 ;S.STS CONTROLLER STATUS .WORD CSR$'N ;S.CSR CONTROL STATUS REGISTER .BLKW 1 ;S.PKT I/O PACKET ADDRESS RETURNED BY $GTPKT .BLKW 4 ;S.FRK FORK BLOCK STORAGE .if df LD$CD .BLKW 1 ; ADD ONE TO LENGTH OF SCB .endc ;LD$CD .iftf ;R$$MPL ; 11M/M+ .if df M$$EXT ; SLJ11 .if ne VEC$'N ; SLJ11 .if df R$$MPL ; Special mapping assignment block ; @K.OFF(KRB)-2*M.LGTH .iff ;R$$MPL ; Real mapping assignment block .BLKW 6 ; S.MPR ; Special mapping assignment block ; S.MPR+M.LGTH .iftf ;R$$MPL .WORD 0 ; M.LNK ; SLJ11 .WORD 0 ; M.UMRA ; SLJ11 .WORD NUMR*4 ; M.UMRN ; SLJ11 .WORD 0 ; M.UMVL ; SLJ11 .BYTE 0 ; M.UMVH ; SLJ11 .BYTE 0 ; M.BFVH ; SLJ11 .WORD 0 ; M.BFVL ; SLJ11 .ift ;R$$MPL ; Real mapping assignment block .BLKW 6 ; @K.OFF(KRB)-M.LGTH .endc ;R$$MPL .endc ;VEC$N ; SLJ11 .endc ;M$$EXT ; SLJ11 .ift ;R$$MPL ; M+ CD'C: ; SLJ11 .endc ;R$$MPL .ENDM .if ndf LD$CD .MACRO VECTX N ; Interrupt vectors .=VEC$'N .WORD $CDINT .WORD CDPR!N .ENDM .endc ;LD$CD .LIST .PAGE ; Generate the tables for the driver. The number of physical devices D$$11W ; should be defined in a conditional file. ICDRV must be defined if the ; internal communications link is required. The priority of the device must ; be defined as CDPR and for each of the CD unit numbers, both physical and ; internal logical, the Vector and CSR must be defined as CSR$n and VEC$n. ; The total number of CD units is defined as CD$NUM. ; ; If the driver is to be loadable the symbol LD$CD must be defined. ; WARNING: Don't bet too heavily on this thing working if not loadable. .if df LD$CD ;IF COMMUNICATIONS DRIVER LOADABLE $CDTBL=0 .iff ;LD$CD ;IF COMMUNICATIONS DRIVER NOT LOADABLE $USRTB:: .endc ;LD$CD $CDDAT:: ;=================================================== ; *** Device Control Block (DCB) for CD devices *** ;=================================================== $CDDCB:: .DC0: .WORD 0 ;D.LNK LINK TO NEXT DCB .WORD .CD0 ;D.UCB LINK TO FIRST UNIT CONTROL BLOCK .ASCII /CD/ ;D.NAM GENERIC DEVICE NAME .BYTE 0 ;D.UNIT LOWEST UNIT NUMBER .BYTE CD$NUM-1 ; HIGHEST UNIT NUMBER .WORD CDND-CDST ;D.UCBL LENGTH OF UNIT CONTROL BLOCK .WORD $CDTBL ;D.DSP ADDRESS OF DRIVER DISPATCH TABLE .WORD 207 ;D.MSK LEGAL FUNCTION CODE MASK BITS 0 - 15 ; CODE BIT ; ---- --- ; 0 1 - IO.KIL ; 1 2 - IO.WLB ; 2 4 - IO.RLB ; 7 200 - IO.CLN .WORD 200 ; CONTROL FUNCTION CODE MASK BITS 0 - 15 .WORD 0 ; NO-OP'ED FUNCTION CODE MASK BITS 0 - 15 .WORD 0 ; ACP FUNCTION CODE MASK BITS 0 - 15 .WORD 163400 ; LEGAL FUNCTION CODE MASK BITS 16 - 31 ; 24. 400 - RETURN DRIVER STATUS ; 25. 1000 - SET PTC AFFINITY ; 26. 2000 - REMOVE PTC AFFINITY ; 29. 20000 - AWAKE DRIVER FROM SLEEP ; 30. 40000 - SEND SIGNAL ; 31. 100000 - REJECT I/O .WORD 163400 ; CONTROL FUNCTION CODE MASK BITS 16 - 31 .WORD 0 ; NO-OP'ED FUNCTION CODE BITS 16 - 31 .WORD 0 ; ACP FUNCTION CODE BITS 16 - 31 .if df LD$CD .WORD 0 ;D.PCB PARTITION CONTROL BLOCK ADDRESS .endc ;LD$CD CDST =. CDUCBX 0 CDND =. .iif gt CD$NUM-1,CDUCBX 1 .iif gt CD$NUM-2,CDUCBX 2 .iif gt CD$NUM-3,CDUCBX 3 .if df R$$MPL ; M+ ; SLJ11 CDSCBX 0,A ; SLJ11 .iif gt CD$NUM-1,CDSCBX 1,B ; SLJ11 .iif gt CD$NUM-2,CDSCBX 2,C ; SLJ11 .iif gt CD$NUM-3,CDSCBX 3,D ; SLJ11 .iff ;R$$MPL ; 11M CDSCBX 0 ; SLJ11 .iif gt CD$NUM-1,CDSCBX 1 .iif gt CD$NUM-2,CDSCBX 2 .iif gt CD$NUM-3,CDSCBX 3 .ift ;R$$MPL ; M+ ; SLJ11 ;=================================================== ; *** Controller Table (CTB) for CD controllers *** ;=================================================== .WORD 0 ;L.ICB ; SLJ11 $CTB0: .WORD 0 ;L.LNK ; SLJ11 .ASCII /CD/ ;L.NAM ; SLJ11 .WORD $CDDCB ;L.DCB ; SLJ11 .BYTE CD$NUM ;L.NUM ; SLJ11 .BYTE 0 ;L.STS ; SLJ11 $CDCTB:: .WORD $CDA ;L.KRB ; SLJ11 .iif gt CD$NUM-1,.WORD $CDB ; SLJ11 .iif gt CD$NUM-2,.WORD $CDC ; SLJ11 .iif gt CD$NUM-3,.WORD $CDD ; SLJ11 .endc ;R$$MPL $CDEND:: ;MARK END OF DATABASE .if ndf LD$CD ; IF DRIVER IS RESIDENT, WE MUST DEFINE THE INTERRUPT VECTORS HERE. .if gt D$$11W N=0 .PSECT . ABS. .rept D$$11W VECTX \N .endr .PSECT .endc ;D$$11W .endc ;LD$CD .END