TITLE 'ICATS UTS INTERRUPT HANDLING ROUTINE' UTS00010 *********************************************************************** UTS00020 * * UTS00030 * MODULE NAME = UTSIOIH * UTS00040 * * UTS00050 * FUNCTION = HANDLE UTS I/O INTERRUPTS. THE ONLY INTERRUPTS WE * UTS00060 * SHOULD SEE ARE THE UNSOLICITED ATTENTION INTERRUPTS * UTS00070 * CAUSED WHEN THE UTS INITIATES A REQUEST. WE SHOULD * UTS00080 * NOT SEE THE INTERRUPTS FROM OTHER I/O WE INITIATE. * UTS00090 * * UTS00100 * ENTRY POINTS = UTSIOIH * UTS00110 * * UTS00120 * LINKAGE = FROM CMS'S FIRST LEVEL INTERRUPT HANDLER. HE SEES * UTS00130 * THAT WE'VE DONE A HNDINT FOR THAT DEVICE AND PASSES * UTS00140 * CONTROL TO THIS ROUTINE. * UTS00150 * * UTS00160 * REGISTER CONTENTS UPON ENTRY = * UTS00170 * R0-R1 = I/O OLD PSW * UTS00180 * R2-R3 = CHANNEL STATUS WORD (CSW). * UTS00190 * R4 = DEVICE ADDRESS. * UTS00200 * R14 = RETURN ADDRESS BACK TO CMS. * UTS00210 * R15 = ENTRY POINT TO THIS MODULE * UTS00220 * * UTS00230 * REGISTER USAGE = * UTS00240 * R0-R1 = USED TO PASS PARAMETERS TO SUBROUTINES. * UTS00250 * R2 = USED TO ADDRESS THE ICATS COMMON DATA AREA. * UTS00260 * R3 = FREE * UTS00270 * R4 = USED TO ADDRESS THE UTS CONTROL BLOCKS. * UTS00280 * R5-R10 = FREE * UTS00290 * R11 = MY BASE REGISTER * UTS00300 * R14 = MY RETURN ADDRESS WHEN I CALL SOMEBODY * UTS00310 * R15 = SUBROUTINE ADDRESS * UTS00320 * * UTS00330 * * UTS00340 * MODULE LOGIC: * UTS00350 * 1) MAKE SURE THIS INTERRUPT HAS ATTENTION ON IN THE CSW * UTS00360 * AND NOTHING ELSE. THIS IS THE ONLY KIND OF INTERRUPT * UTS00370 * I KNOW WHAT TO DO WITH. IGNORE ANY OTHER KIND OF * UTS00380 * INTERRUPT. * UTS00390 * 2) GO THROUGH THE UTS CONTROL BLOCK CHAIN AND FIND THE * UTS00400 * CONTROL BLOCK FOR THIS INTERRUPTING UTS. IF NOT FOUND, * UTS00410 * THEN THE INTERRUPTING DEVICE MUST NOT BE A UTS I'M * UTS00420 * HANDLING. I DON'T KNOW WHAT IT IS, SO JUST IGNORE IT. * UTS00430 * 3) IF A CORRESPONDING UTS CONTROL BLOCK IS FOUND, POST * UTS00440 * THIS INTERRUPT AND SET THE BIT THAT SAYS AN UTS * UTS00450 * INTERRUPT IS IN. THE DISPATCHER WILL LOOK AT THAT * UTS00460 * BIT LATER AND FIND OUT THAT THIS UTS NEEDS TO BE SERVICED. * UTS00470 * * UTS00480 * NORMAL EXIT = * UTS00490 * R15 = 0 * UTS00500 * * UTS00510 * EXTERNAL REFERENCES = NONE * UTS00520 * * UTS00530 * MACROS = ICDATA = ICATS COMMON DATA AREA * UTS00540 * ETTE = ENTER TRACE TABLE ENTRY SUBROUTINE * UTS00550 * * UTS00560 * CHANGE ACTIVITY * UTS00570 * DATE NAME REASON FOR CHANGE * UTS00580 * 04/19/83 RICK JASPER BROKEN AWAY FROM ICATS MAINLINE INTO * UTS00590 * SEPARATE SUBROUTINE * UTS00600 * * UTS00610 *********************************************************************** UTS00620 PRINT GEN,NODATA UTS00630 UTSIOIH CSECT UTS00640 USING ICDATA,R2 ADDRESS ICATS COMMON DATA AREA UTS00650 USING CBUTS,R4 ADDRESS UTS CONTROL BLOCK UTS00660 USING *,R15 USE R15 FOR NEXT INSTRUCTION ONLY UTS00670 STM R0,R14,UTSIOREG SAVE ALL THE REGISTERS UTS00680 DROP R15 UTS00690 USING UTSIOIH,R11 SWITCH BASE REGISTER TO R11 UTS00700 LR R11,R15 UTS00710 L R2,=V(ICDATA) RELOAD ICDATA BASE REGISTER UTS00720 * START OUT BY PUTTING AN ENTRY INTO THE TRACE TABLE RECORDING UTS00730 TM FLAGC,TRACEMOD THE FACT WE SAW AN INTERRUPT UTS00740 BNO SKIPTTE DO ONLY IF TRACE MODE IS ON. UTS00750 LH R1,UTSIOREG+18 UTS00760 L R15,ACONEHEX UTS00770 BALR R14,R15 UTS00780 STCM R1,B'0111',TTECUU UTS00790 L R1,UTSIOREG PUT 1ST HALF OF I/O OLD PSW IN TTE UTS00800 L R15,ACONEHEX UTS00810 BALR R14,R15 UTS00820 STCM R0,B'1111',TTEOLDA UTS00830 STCM R1,B'1111',TTEOLDA+4 UTS00840 L R1,UTSIOREG+4 PUT 2ND HALF OF I/O OLD PSW IN TTE UTS00850 L R15,ACONEHEX UTS00860 BALR R14,R15 UTS00870 STCM R0,B'1111',TTEOLDB UTS00880 STCM R1,B'1111',TTEOLDB+4 UTS00890 L R1,UTSIOREG+8 PUT 1ST HALF OF CSW IN TTE UTS00900 L R15,ACONEHEX UTS00910 BALR R14,R15 UTS00920 STCM R0,B'1111',TTECSWA UTS00930 STCM R1,B'1111',TTECSWA+4 UTS00940 L R1,UTSIOREG+12 PUT 2ND HALF OF CSW IN TTE UTS00950 L R15,ACONEHEX UTS00960 BALR R14,R15 UTS00970 STCM R0,B'1111',TTECSWB UTS00980 STCM R1,B'1111',TTECSWB+4 UTS00990 ETTE IOTTE UTS01000 SKIPTTE DS 0H UTS01010 TM UTSIOREG+12,X'80' CHECK CSW STATUS FOR ATTN ON UTS01020 BNO IOIGNORE UTS01030 * GO FIND THIS UTS MACHINE'S CONTROL BLOCK IN THE UTSCB CHAIN UTS01040 * R4 = THE UTS MACHINE'S VIRTUAL ADDRESS IN HEX UTS01050 L R4,CBFIRST GET ADDRESS OF FIRST UTSCB UTS01060 LTR R4,R4 ARE THERE ANY UTS'S ?? UTS01070 BZ IOIGNORE IF NOT, IGNORE THIS INTERRUPT UTS01080 IOLOOP CLC UTSIOREG+18(2),CBUTSVAD IS THIS THE INTERRUPTING UTS ?? UTS01090 BE IOCONA YES, GO TAKE CARE OF IT. UTS01100 L R4,CBUTSFP GET POINTER TO NEXT UTSCB. UTS01110 LTR R4,R4 ARE WE AT THE END OF THE CHAIN ?? UTS01120 BNE IOLOOP NOPE, GO CHECK THIS UTSCB UTS01130 B IOIGNORE IF UTS NOT FOUND, IGNORE INTERRUPT UTS01140 * UTS01150 * NOW R4 IS POINTING TO THE CORRECT UTSCB. UTS01160 * TURN ON THE I-NEED-SERVICING FLAG FOR THIS UTS & UTS01170 * TURN ON THE A-UTS-NEEDS-SERVICING FLAG. UTS01180 * REMEMBER THE TIME AND DATE OF THIS INTERRUPT. UTS01190 IOCONA DS 0H UTS01200 OI CBUTSFGA,INTISIN UTS01210 OI FLAGA,UTSINT UTS01220 *-------------------------------------------------------------* UTS01230 * GET THE TIME AND DATE FROM CP * UTS01240 *-------------------------------------------------------------* UTS01250 LA R1,CPDATA ADDRESS OF DATA FROM DIAG UTS01260 DIAG R1,R0,X'000C' REQUEST DATE AND TIME FROM CP UTS01270 *-------------------------------------------------------------* UTS01280 * CPDATA IS NOW IN THE FORMAT OF * UTS01290 * DC CL8'MM/DD/YY' * UTS01300 * DC CL8'HH:MM:SS' * UTS01310 * DS 2D THE REST IS JUNK * UTS01320 *-------------------------------------------------------------* UTS01330 MVC CBUTSDAT,CPDATA UTS01340 MVC CBUTSTIM,CPDATA+8 UTS01350 ETTE OKINTTTE UTS01360 UTSIOBYE DS 0H UTS01370 LM R0,R14,UTSIOREG UTS01380 SR R15,R15 RETURN CODE = 0 UTS01390 BR R14 BYE UTS01400 * UTS01410 IOIGNORE DS 0H UTS01420 TM TEST0916,TEST9 UTS01430 BNO IGCONA UTS01440 LH R9,68 UTS01450 LINEDIT TEXT='IGNORING THIS UTS INTERRUPT. CSW STATUS = ....'-UTS01460 ,SUB=(HEX,(R9)),RENT=NO UTS01470 IGCONA DS 0H UTS01480 ETTE BADINTTE UTS01490 B UTSIOBYE UTS01500 * UTS01510 CPDATA DS 4D UTS01520 UTSIOREG DS 15F UTS01530 * UTS01540 IOTTE DC AL1(IOTTEQU) UTS01550 DC C'INTERRUPT RECEIVED FROM ' UTS01560 TTECUU DS CL3 UTS01570 DC C'. I/O OLD PSW = ' UTS01580 TTEOLDA DS CL8 UTS01590 DC C' ' UTS01600 TTEOLDB DS CL8 UTS01610 DC C'. CSW = ' UTS01620 TTECSWA DS CL8 UTS01630 DC C' ' UTS01640 TTECSWB DS CL8 UTS01650 DC C'.' UTS01660 IOTTEQU EQU *-IOTTE-1 UTS01670 * UTS01680 OKINTTTE DC AL1(OKEQU) UTS01690 DC C'INTERRUPT DULY RECORDED' UTS01700 OKEQU EQU *-OKINTTTE-1 UTS01710 * UTS01720 BADINTTE DC AL1(BADEQU) UTS01730 DC C'INTERRUPT IGNORED' UTS01740 BADEQU EQU *-BADINTTE-1 UTS01750 LTORG UTS01760 ICDATA UTS01770 END UTS01780