; ATTACH - ATTACH OR DETACH A LUN ; LAST EDIT: 16-JAN-80 ; ;- .NLIST .LIST TTM .NLIST BEX .TITLE ATTACH .LIST ; ;+ ; ; ATTACH,DETACH - ATTACH A LUN ; ; CALL ATTACH(LUN,[IDEV],[IUNIT],[IWT],[IERR]) ; ; WHERE: LUN IS AN AVAILABLE LOGICAL UNIT NUMBER ; IDEV IS AN ASCII DEVICE NAME (2 CHARS) ; IUNIT IS AN INTEGER UNIT NUMBER ; IWT IS AN INTEGER NUMBER OF SECONDS ; IERR IS A STATUR RETURN, -VE ON ERROR ; IF IDEV,IUNIT ARE SPECIFIED THE LUN IS FIRST ASSIGNED ; OTHERWISE THE CURRENT ASSIGNMENT IS USED. ; AN ATTACH IS THEN ISSUED FOR THE LUN. IF IWT IS ; SPECIFIED AND THE ATTACH HAS NOT COMPLETED WITHIN IWT ; SECONDS AN ERROR STATUS IE.DAA=-8 IS RETURNED AND ; THE ATTACH REQUEST IS KILLED. ; ; TO DETACH A LUN ; CALL DETACH(LUN) ; THE LUN IS DETACHED FROM ITS CURRENT DEVICE IF ANY. ; ; ; ONCE A DEVICE IS ATTACHED IT MAY ONLY BE USED BY THE ATTACHING ; TASK. ANY OTHER ATTEMPT TO USE THE DEVICE IS BLOCKED UNTIL A ; DETACH IS ISSUED OR UNTIL THE ATTACHED TASK TERMINATES. ATTACH ; CAN THUS BE USED TO CONTROL THE ALLOCATION OF RESOURCES SUCH AS ; PRINTERS AND DISPLAY SYSTEMS. ; ;- .PSECT .MCALL QIO$S,QIOW$S,MRKT$S,CMKT$S,ALUN$S,WTSE$S ; ; P1=2 P2=4 P3=6 P4=10 P5=12 ; ; ATTACH::MOV R0,-(SP) MOV R1,-(SP) MOV @P1(R5),R1 ;GET THE LUN NUMBER CMPB (R5),#3 ;DEVICE AND UNIT SPECIFIED ? BLT 1$ CMP P3(R5),#-1 BEQ 1$ ALUN$S R1,@P2(R5),@P3(R5) MOV $DSW,R0 BMI EX 1$: CMPB (R5),#4 ;DO WE WAIT ? BLT 2$ CMP P4(R5),#-1 BEQ 2$ MRKT$S R1,@P4(R5),#2 ;START WAIT IN SECONDS 2$: QIO$S #IO.ATT,R1,R1,,#STAT MOV $DSW,R0 BMI EX WTSE$S R1 ;NOW WAIT TSTB STAT ;HAS REQUEST COMPLETED ? BNE 3$ ;SKIP IF SO QIOW$S #IO.KILL,R1,R1 MOV #IE.DAA,R0 BR EX 3$: CMKT$S ;KILL THE MARK TIME MOVB STAT,R0 ;AND RETURN STATUS ; EX: CMPB (R5),#5 ;ERROR RETURN SUPPLIED BLT 1$ MOV R0,@P5(R5) 1$: MOV (SP)+,R1 MOV (SP)+,R0 RETURN ; DETACH::QIOW$S #IO.DET,@P1(R5),@P1(R5) RETURN ; STAT: .WORD 0,0 ; .END