TITLE 'IEAVEIO- I/O FIRST LEVEL INTERRUPT HANDLER' 00136902 * /* START OF SPECIFICATIONS **** 00237802 * 00237902 *01* MODULE-NAME = IEAVEIO 00238002 * 00238102 *02* CSECT-NAME = IEAVEIO 00238202 * 00238302 *01* DESCRIPTIVE-NAME = I/O FIRST LEVEL INTERRUPT HANDLER 00238402 * 00238502 *01* COPYRIGHT = NONE 00238602 *01* STATUS = VERSION 1 00238702 * 00238802 *01* FUNCTION = SEE ENTRY POINT PURPOSES BELOW. 00238902 * 00239002 *02* OPERATION = THE I/O FIRST LEVEL INTERRUPT HANDLER RECEIVES 00239102 * CONTROL VIA I/O NEW PSW AFTER AN I/O INTERRUPT. ITS MAIN 00239202 * FUNCTION IS TO SAVE THE STATUS OF THE INTERRUPTED PROGRAM, 00239302 * ENTER IOS TO PROCESS THE INTERRUPT AND UPON INTERRUPT 00239402 * PROCESSING COMPLETION DECIDE WHETHER TO RETURN TO THE 00239502 * INTERRUPTED PROGRAM OR TO THE DISPATCHER. 00239602 * 00239702 *01* NOTES = SEE ENTRY POINT DESCRIPTIONS BELOW. 00239802 * 00239902 *02* DEPENDENCIES = 00240002 * 00240202 * GENERAL I/O FLIH DEPENDENCIES: 00242602 * 1. LOCAL LOCK MAY NOT BE ASKED FOR (NOR CMS LOCK) OR 00242802 * ASSUMED THAT IT IS HELD. 00243002 * 2. DISABLEMENT MUST BE PRESERVED (EXCEPT IOS WHO MAY 00243202 * ENABLE FOR MORE I/O INTERRUPTS). 00243402 * 3. SUPERVISOR STATE,KEY 0 MUST BE MAINTAINED ACROSS 00243602 * INTERFACES. 00243802 * 4. NO SVCS CAN BE ISSUED. 00244002 * 00244102 * IOS(IECINT ENTRY): 00244202 * 1. IOS MUST RETURN TO THE ENTRY POINT DISMISS IN THE 00244402 * SAME STATE AND KEY AS ON INITIAL IOS ENTRY. 00244602 * 2. THE SERVICE MANAGER MUST BE USED TO DO WORK IN ANOTHER 00245002 * ADDRESS SPACE. 00245202 * 00245302 * DISPATCHER(IEAPDS7 ENTRY): 00245402 * 1. THE DISPATCHER MUST SAVE ALL NECESSARY STATUS OTHER 00245802 * THAN THE GENERAL REGISTERS AND PSW IF SWITCHING AWAY 00246002 * FROM THE CURRENT TASK. 00246202 * 2. FOR A LOCALLY LOCKED TCB, THE INTERRUPT ID (X'FF..FF') 00246602 * MUST BE PLACED IN THE LOCKWORD ASCBLOCK AND THE CMS LOCK 00246802 * HELD INDICATOR MUST BE SET (ASCBCMSH), IF THE CMS LOCK IS 00247002 * HELD, PLUS UPDATE ALL NECESSARY LOCK TABLES. 00247402 * 3. THE DISPATCHER MUST STORE THE TOD CLOCK VALUE IN 00247602 * LCCADTOD WHEN DISPATCHING A TCB INCLUDING THE WAIT-TCB. 00247802 * 00247902 *02* REGISTER-CONVENTIONS = REFERENCE EQUATE SECTION OF CODE. 00249002 * 00249202 *03* CHARACTER-CODE-DEPENDENCIES = NONE 00249402 * 00249602 *02* RESTRICTIONS = NONE 00249802 * 00250002 *02* REGISTER-CONVENTIONS = REFERENCE EQUATE SECTION OF CODE. 00250202 * 00250402 *02* PATCH-LABEL = NONE (NUCLEUS RESIDENT) 00250602 *01* MODULE-TYPE = PROCEDURE 00251002 * 00251202 *02* PROCESSOR = ASSEMBLER 00251402 * 00251602 *02* MODULE-SIZE = REFERENCE THE ESD LENGTH AT BEGINNING OF 00251802 * ASSEMBLY. 00252002 * 00252202 *02* ATTRIBUTES = NUCLEUS, ZERO PROTECT KEY, DISABLED, REFRESHABLE, 00252402 * ADDRSPC=FIXED, SUPERVISOR MODE 00252602 * 00252802 *01* ENTRY-POINT = IEAQIO00 00253002 * 00253202 *02* PURPOSE = THIS IS THE MAIN ENTRY TO THE I/O FLIH. ITS MAIN 00253402 * FUNCTION IS TO SAVE ALL THE STATUS AT INTERRUPT TIME AND THEN 00253602 * PROCEED TO IOS. IOS MAY CAUSE RECURSIVE INTERRUPTS IN WHICH 00253802 * CASE IOS IS RECURSIVELY ENTERED. 00254002 * 00254202 *02* LINKAGE = REFERENCE INPUT SECTION BELOW. 00254402 * 00254602 *02* INPUT = 00254802 * INPUT ENVIRONMENT: 00255002 * STATE-DISABLED,SUPERVISOR 00255202 * KEY-0 00255402 * LOCKS REQUIRED-NONE 00255602 * INPUT DATA: 00255802 * ALL CONTROL BLOCKS REFERENCED IN CONTROL BLOCK SECTION. 00256002 * INPUT REGISTERS: NONE 00256202 * 00256602 *02* OUTPUT = NONE UNIQUE TO ENTRY. 00256802 * 00257002 *01* ENTRY-POINT = DISMISS 00257202 * 00257402 *02* PURPOSE = THIS ENTRY IS USED BY IOS WHEN IT HAS FINISHED 00257602 * ENABLING FOR MORE I/O INTERRUPTS AND ITS PROCESSING IS 00257802 * COMPLETE. THE ENTRY WILL DECIDE WHETHER TO RETURN TO THE 00258002 * INTERRUPTED ROUTINE(SRB ROUTINE), OR RETURN TO THE DISPATCHER. 00258202 * CPU WAIT-TIME IS ALSO COLLECTED IF NECESSARY. 00258402 * 00258602 *02* LINKAGE = REFERENCE INPUT SECTION BELOW. 00258802 * 00259002 *02* INPUT = SAME AS INPUT FOR PREVIOUS ENTRY. 00259202 * 00259402 *02* OUTPUT = NONE UNIQUE TO THIS ENTRY. 00259602 * 00259802 *01* EXIT-NORMAL = IECINT 00260002 * 00260202 *02* CONDITIONS = IOS IS ENTERED TO PROCESS THE I/O INTERRUPTION. 00260402 * IT WILL HANDLE RECURSIVE I/O INTERRUPTIONS IF IT HAD ENABLED 00260602 * FOR MORE. 00260802 * 00261002 *02* OUTPUT = 00261202 * OUTPUT DATA-NONE. 00261402 * OUTPUT REGISTERS- 5-ENTRY POINT ADDRESS. 4-RETURN ADDRESS 00261602 * OUTPUT ENVIRONMENT - SAME AS ON ENTRY. 00261802 * 00262002 *02* RETURN-CODES = NONE 00262202 * 00262402 *01* EXIT-NORMAL = IEAPDS7 00262602 * 00262802 *02* CONDITIONS = THE DISPATCHER IS ENTERED WHEN INTERRUPTION 00263002 * PROCESSING HAS COMPLETED THE TASK IS TO BE PREEMPTED. 00263240 * 00263402 *02* OUTPUT = OUTPUT DATA- NONE DIRECTLY. 00263602 * OUTPUT REGISTERS- NONE. 00263702 * OUTPUT ENVIRONMENT- DISABLED, SUPERVISOR STATE,KEY 0,LOCAL AND 00263802 * CMS LOCKS MAY BE HELD BY TCB. 00264002 * 00264202 *02* RETURN-CODES = NONE 00264402 * 00264602 *01* EXIT-NORMAL = BACK TO INTERRUPTED RUOTINE (VIA LPSW). 00264840 * 00265002 *02* CONDITIONS = SRB MODE OR TASK NOT TO BE PREEMPTED. 00265240 * 00265402 *02* OUTPUT = NONE 00265602 * 00265802 *02* RETURN-CODES = NONE 00266002 * 00266202 *01* EXIT-ERROR = NONE 00266402 * 00266602 *01* EXTERNAL-REFERENCES = SEE ROUTINES,DATA AREAS,CONTROL BLOCKS 00266802 * BELOW. 00267002 * 00267202 *02* ROUTINES = IECINT(IOS ENTRY), IEAQWAIT(CPU 00267403 * WAIT-TIME COLLECTION), IEAPDS7 (DISPATCHER ENTRY). 00267602 * 00267802 *02* DATA-AREAS = NONE OTHER THAN CONTROL-BLOCKS BELOW. 00268002 * 00268202 *02* CONTROL-BLOCKS = 00268402 * PSA R/W 00268602 * LCCA R/W 00268802 * ASCB R 00269002 * ASXB R 00269202 * IHSA W 00269402 * TCB R/W 00269602 * RB W 00270002 * PCCA R 00270202 * 00270402 *01* TABLES = NONE 00270602 * 00270802 *01* MACROS = 00271002 * HOOK 00271202 * 00271402 *01* CHANGE-ACTIVITY = Y02715,Y02751,Y02752 00271602 * 00271802 *01* MESSAGES = NONE 00272002 * 00272202 *01* ABEND-CODES = NONE 00272402 * 00272602 **** END OF SPECIFICATIONS ***/ 00272802 EJECT 00272902 IEAVEIO CSECT 00273002 MODID BR=NO 00273202 */*IEAVEIO: CHART I/O FLIH */ 00273402 */* HEADER 00273902 */* 00274302 */* 00274702 */* 00275102 */* SECTION 3.1.8.2 00276002 */* I/O FLIH 00276102 */* PAGE # */ 00276202 SPACE 2 00277402 */*IEAQIO00: E IEAQIO00 */ 00277502 SPACE 2 00277802 ENTRY IEAQIO00 00278202 IEAQIO00 DS 0H 00278402 *********************************************************************** 00278502 * * 00279402 * REGISTER EQUATES * 00281402 * * 00281802 *********************************************************************** 00282802 R0 EQU 0 GENERAL REGISTER 00284102 R2 EQU 2 GENERAL REGISTER 00285002 R8 EQU 8 GENERAL REGISTER 8 @Z40FPXI 00286340 R9 EQU 9 GENERAL REGISTER 00286802 R15 EQU 15 GENERAL REGISTER 00287702 BASEREG EQU 9 BASE REGISTER 00288602 DISPRTN EQU 13 DISPATCHER ENTRY ADDR @Z40FPXI 00289540 CCABASE EQU 8 LCCA ADDRESS @Z40FPXI 00290140 WORKREG2 EQU 8 WORK REGISTER 00291302 RBPTR EQU 5 RB ADDRESS 00292202 XIOS EQU 5 IOS ENTRY ADDRESS 00295802 XDISMISS EQU 4 DISMISS ENTRY ADDRESS 00296702 CCABASE2 EQU 15 LCCA BASE ADDRESS 00297602 WORKREG EQU 14 WORK REGISTER 00298502 XWAIT EQU 6 WAIT ENTRY ADDRESS 00299402 XWAITRT EQU 2 WAIT RETURN ADDRESS 00300302 LHTOD EQU 2 LEFT HALF TIME OF DAY @Z40FPXI 00300840 RHTOD EQU 3 RIGHT HALF TIME OF DAY @Z40FPXI 00301340 *********************************************************************** 00302002 * * 00302102 * CONSTANT EQUATES * 00302202 * * 00302302 *********************************************************************** 00302502 L8 EQU 8 LENGTH VALUE 00303002 L64 EQU 64 LENGTH VALUE @Z40FPXI 00303540 C0 EQU 0 DISPLACEMENT VALUE 00303902 C4 EQU 4 DISPLACEMENT VALUE @Z40FPXI 00305240 CXFF EQU X'FF' MASK VALUE 00305702 C32 EQU 32 DISPLACEMENT VALUE @Z40FPXI 00308740 C36 EQU 36 DISPLACEMENT VALUE @Z40FPXI 00308940 CC11 EQU 11 CONDITION CODE = 11 @Z40FPXI 00309740 *********************************************************************** 00310102 * * 00310402 * I/O FLIH MAINLINE * 00310802 * * 00310902 *********************************************************************** 00311002 USING PSA,0 00311102 SPACE 2 00311402 */* P SAVE 2 REGS FOR ADDR IN PSAGPREG */ 00312040 SPACE 2 00312902 ST R8,PSAGPREG FREE A WORK REGISTER @Z40FPXI 00313840 ST R9,PSAGPREG+C4 FREE A BASE REGISTER @Z40FPXI 00314140 SPACE 2 00314702 */* P ESTABLISH ADDRESSABILITY */ 00315602 SPACE 2 00316502 BALR BASEREG,C0 ESTABLISH 00317402 USING *,BASEREG ADDRESSABILITY 00318302 SPACE 2 00319202 */*RECTEST: D (YES,IOPROCES,NO,) I/O RECURSION? */ 00320102 SPACE 2 00321002 RECTEST DS 0H TEST LABEL 00321902 TM PSASUP1,PSAIO IS THIS A RECURSIVE ENTRY 00322802 REC DS 0H TEST LABEL 00323702 BO IOPROCES IF SO PROCESS RECURSIVE ENTRY 00324602 SPACE 2 00325502 */*NOREC: P MAKE I/O FLIH STACK CURRENT */ 00326402 SPACE 2 00327302 NOREC DS 0H TEST LABEL 00328202 L R8,PSASSTK GET IO FLIH STACK PT @Z40FPXI 00329140 ST R8,PSACSTK IO FLIH STACK = CURRENT @Z40FPXI 00330040 SPACE 2 00332002 */* P SET I/O FLIH BIT PSAIO=1 */ 00340040 SPACE 2 00342002 OI PSASUP1,PSAIO SET IO FLIH FLAG-RECURSION FLAG 00350002 SPACE 2 00360002 */* P GET LCCA ADDR FROM PSALCCAV */ 00362002 SPACE 2 00370002 L CCABASE,PSALCCAV GET LOGICAL CCA VIRTUAL ADDRESS 00400002 USING LCCA,CCABASE ESTABLISH BASE TO LOGICAL CCA 00450002 SPACE 2 00602002 */*SRBMODE: P SAVE GPRS IN LCCAGPGR AND IOOPSW IN LCCAIOPS */ 00602440 SPACE 2 00604002 SRBMODE DS 0H TEST LABEL 00610002 STM R0,R15,LCCAGPGR SAVE REGS IN SAVE AREA 00650002 L WORKREG,PSAGPREG REG 8 SAVED INITIALLY @Z40FPXI 00700040 ST WORKREG,LCCAGPGR+C32 MOVED TO SAVE AREA @Z40FPXI 00720040 L WORKREG,PSAGPREG+C4 REG 9 SAVED INITIALLY @Z40FPXI 00740040 ST WORKREG,LCCAGPGR+C36 MOVED TO SAVE AREA @Z40FPXI 00760040 MVC LCCAIOPS(L8),FLCIOPSW SAVE PSW IN SAVE AREA 00800002 SPACE 2 00801040 */*SRBTEST: D (NO,IOLOCAL,YES,IOPROCES) SRB MODE? */ 00802040 SPACE 2 00803040 SRBTEST DS 0H TEST LABEL 00804040 TM LCCADSF2,LCCASRBM IS SRB MODE INDICATED 00805040 BO IOPROCES GO TO IOS TO PROCESS @Z40FPXI 00806040 SPACE 2 00851002 */*IOLOCAL: P STORE TOD CLOCK IN LCCAITOD FOR SMF */ 00852002 SPACE 2 00853002 IOLOCAL STCK LCCAITOD SAVE TOD CLOCK FOR SMF WAIT TIME 00854002 SPACE 2 02300402 */* D (NO,CLKERR1,YES,IOPROCES) TOD CLOCK WORKING ? */ @ZA18148 02300700 SPACE 2 02301000 BNZ CLKERR1 @ZA18148 02301300 SPACE 2 02301600 */*IOPROCES: P GET IOS ENTRY POINT IN REG 5 */ 02302003 SPACE 2 02304002 IOPROCES DC 0H'0' 02310003 L XIOS,IEAVEIOI GET IOS ENTRY POINT 02350002 SPACE 2 02352002 */*IOSEP: R EXIT TO IECINT */ 02352402 SPACE 2 02354002 IOSEP DS 0H TEST LABEL 02360002 BALR XDISMISS,XIOS GO TO IOS 02400002 SPACE 2 02401000 TITLE 'IEAVEIO- DISMISS ROUTINE' 02410002 ENTRY DISMISS 02450002 SPACE 2 02460002 */*DISMISS: E DISMISS */ 02462002 */* P ESTABLISH ADDRESSABILITY USING REG 4 (ENTRY ADDR) */ 02464002 SPACE 2 02470002 DISMISS DS 0H 02500002 USING *,XDISMISS REESTABLISH ADDRESSABILITY 02550002 SPACE 2 02560002 */* P GET LCCA ADDR FROM PSALCCAV INTO REG 15 */ 02562002 SPACE 2 02570002 L CCABASE2,PSALCCAV GET LOGICAL CCA ADDRESS 02600002 DROP CCABASE 02650002 USING LCCA,CCABASE2 ESTABLISH BASE TO LCCA VIA REG15 02700002 SPACE 2 02702002 */*SRBTEST2: D (NO,IOTCB,YES,SRBMODE2) SRB MODE? */ 02702402 SPACE 2 02704002 SRBTEST2 DS 0H TEST LABEL 02710002 TM LCCADSF2,LCCASRBM IS SRB MODE INDICATED 02750002 BZ IOTCB IF NOT DO TCB EXIT PROCESS 02800002 SPACE 2 02802002 */*SRBMODE2: P MOVE LCCAIOPS TO IOOPSW TO ALLOW FOR LPSW */ 02802402 SPACE 2 02804002 SRBMODE2 DS 0H TEST LABEL 02810002 MVC FLCIOPSW(L8),LCCAIOPS MOVE PSW BACK TO IO OLD PSW 02850002 * FIELD TO ALLOW FOR LPSW 02900002 SPACE 2 02910002 */* P LOAD REGS FROM LCCAGPGR */ 02912002 SPACE 2 02920002 LM R0,R15,LCCAGPGR RESTORE ALL REGS 02950002 SPACE 2 02960002 */* P CLEAR I/O FLIH BIT */ 02962002 SPACE 2 02970002 NI PSASUP1,CXFF-PSAIO CLEAR I/O FLAG 03000002 SPACE 2 03000902 */* P RESTORE NORMAL STACK TO CURRENT */ 03001202 SPACE 2 03001602 MVC PSACSTK(4),PSANSTK RESTORE NRM STACK AS CURRENT 03002002 SPACE 2 03002202 */*SRBFIN2: R LPSW BACK TO SRB */ 03002402 SPACE 2 03004002 SRBFIN2 DS 0H TEST LABEL 03010002 LPSW FLCIOPSW RETURN TO SRB ROUTINE 03050002 SPACE 2 03060002 */*IOTCB: P GET TCB ADDRESS FROM PSATOLD */ 03062002 SPACE 2 03070002 IOTCB DS 0H 03100002 L WORKREG,PSATOLD GET CURRENT TCB ADDRESS 03150002 USING TCB,WORKREG @Z40FPXI 03150140 SPACE 2 03150440 */*WAITCK: D (NO,,YES,WAITPROC) CURRENT TCB = WAIT? */ @Z40FPXI 03150540 SPACE 2 03150640 WAITCK DS 0H TEST LABEL 03150740 C WORKREG,AWAITTCB IS TCB EQUAL TO WAIT TCB 03150840 BE WAITPROC GO PROCESS WAIT TASK @Z40FPXI 03150940 SPACE 2 03151040 */*CHKCLOCK: D (NO,BADCLOCK,YES,) TOD CLOCK WORKING? */ @ZA18148 03151100 SPACE 2 03167000 CHKCLOCK L WORKREG2,PSAPCCAV GET PCCA ADDRESS TO @ZA18148 03167700 USING PCCA,WORKREG2 CHECK CLOCK CONDITION @ZA18148 03168100 TM PCCATODE,PCCANUTD TOD CLOCK WORKING? @ZA18148 03168500 BO BADCLOCK NO - CHECK NONPREEMT @ZA18148 03168900 DROP WORKREG2 RELEASE WORK REGISTER @ZA18148 03169300 SPACE 2 03170500 */* P CALCULATE EXECUTION TIME SINCE DISPATCH */ @Z40FPXI 03171200 SPACE 2 03171900 L LHTOD,LCCAITOD GET INTERRUPT TOD @Z40FPXI 03174040 L RHTOD,LCCAITOD+C4 LEFT AND RIGHT HALVES @Z40FPXI 03177040 SL LHTOD,LCCADTOD SUBTRACT DISPATCH TOD @Z40FPXI 03180040 SL RHTOD,LCCADTOD+C4 LEFT AND RIGHT HALVES @Z40FPXI 03183040 BC CC11,COMPARE CARRY -- SMALL DELTA @Z40FPXI 03186040 BCTR LHTOD,C0 DECREMENT LH IF NO CARRY@Z40FPXI 03189040 SPACE 2 03192040 */*COMPARE: D (YES,NONPREMT,NO,) EXECUTION INTERVAL > CONSTANT? */ 03195040 SPACE 2 03198040 COMPARE DS 0H @Z40FPXI 03201040 C RHTOD,DELTA INTERVAL > CONSTANT @Z40FPXI 03204040 BH NONPREMT TOO BIG--GO DISPATCHER @Z40FPXI 03207040 LTR LHTOD,LHTOD CHECK LEFT HALF TOO BIG@Z40FPXI 03210040 BNZ NONPREMT TOO BIG--GO DISPATCHER @Z40FPXI 03213040 SPACE 2 03215040 */*FIXTOD: P STORE THE CLOCK IN LCCADTOD */ @Z40FPXI 03219040 SPACE 2 03222040 FIXTOD DS 0H 03223040 STCK LCCADTOD TIME STAMP = TOD NOW @Z40FPXI 03224040 SPACE 2 03225340 */* D (NO,CLRITOD,YES,) TOD CLOCK WORKING? */ @ZA18148 03226200 SPACE 2 03227100 BNZ CLRITOD CLOCK IS BAD @ZA18148 03228000 SPACE 2 03228900 */* P ADJUST DISPATCH TOD TO ELIMINATE INTERRUPT TIME */ 03230040 SPACE 2 03231040 LCR LHTOD,LHTOD COMPLEMENT LH INTERVAL @Z40FPXI 03231340 LCR RHTOD,RHTOD COMPLEMTNT INTERVAL @Z40FPXI 03232240 AL LHTOD,LCCADTOD ADJUST DISPATCH TOD @Z40FPXI 03232540 AL RHTOD,LCCADTOD+C4 NEW TOD = NEW - INTERVAL@Z40FPXI 03232840 ST RHTOD,LCCADTOD+C4 STORE RH DISPATCH TOD @Z40FPXI 03233440 BC CC11,STDTOD NO CARRY -- STORE LH @Z40FPXI 03234040 BCTR LHTOD,C0 DECREMENT BY ONE @Z40FPXI 03235240 STDTOD ST LHTOD,LCCADTOD ADJUST LEFT HALF @Z40FPXI 03235840 SPACE 2 03235940 */* P (,SRBMODE2) ZERO INTERRUPT TOD */ @Z40FPXI 03236040 SPACE 2 03236540 CLRITOD SLR WORKREG2,WORKREG2 ZERO A REGISTER @ZA18148 03236600 ST WORKREG2,LCCAITOD ZERO INTERRUPT TOD @Z40FPXI 03237000 ST WORKREG2,LCCAITOD+C4 LEFT AND RIGHT HALVES @Z40FPXI 03237100 B SRBMODE2 RETURN INTERRUPTED RTN @Z40FPXI 03237200 SPACE 2 03237300 */*NONPREMT: D (YES,FIXTOD,NO,) NON-PREEMPTABLE */ @ZA18148 03237400 SPACE 2 03237540 NONPREMT TM TCBFLGS1,TCBNONPR CHECK IF NONPREEMPTABLE @Z40FPXE 03237740 BO FIXTOD ADJUST TOD DO NOT PREMPT@Z40FPXE 03237940 SPACE 2 03238440 */*DISPRET: P GET DISPATCHER ADDRESS */ @Z40FPXI 03238540 SPACE 2 03239140 DISPRET DS 0H 03239240 L DISPRTN,AIEAPDS7 GET DISPATCHER ADDRESS @Z40FPXI 03239340 SPACE 2 03239440 */*LOCKTEST: D (YES,LLHELD,NO,) SETLOCK-- LOCAL LOCK HELD? */ @Z40FPXI 03240040 SPACE 2 03240140 LOCKTEST DS 0H 03240740 SETLOCK TEST,TYPE=LOCAL,BRANCH=(HELD,LLHELD) @Z40FPXI 03240840 SPACE 2 03240940 */*NOLOCAL: P (,DISPRET) SAVE GPRS IN TCB AND IOOPSW IN RB */ @Z40FPXI 03241140 SPACE 2 03241240 MVC TCBGRS(L64),LCCAGPGR MOVE REGS TO TCB @Z40FPXI 03241440 L RBPTR,TCBRBP ADDRESS INTERRUPTED RB @Z40FPXI 03241540 USING RBSECT,RBPTR 03241640 MVC RBOPSW(L8),LCCAIOPS MOVE PSW TO RB @Z40FPXI 03241840 B IOEXIT RETURN TO DISPATCHER @Z40FPXI 03242440 SPACE 2 03243040 */*LLHELD: P OBTAIN IHSA ADDRESS FROM ASXB */ @Z40FPXI 03243640 SPACE 2 03244240 LLHELD DS 0H 03244540 L WORKREG2,PSAAOLD GET CURRENT ASCB ADDRESS@Z40FPXI 03244840 USING ASCB,WORKREG2 ESTABLISH BASE TO ASCB @Z40FPXI 03245440 L WORKREG2,ASCBASXB GET ASXB ADDRESS @Z40FPXI 03246040 USING ASXB,WORKREG2 ESTABLISH BASE TO ASXB @Z40FPXI 03246640 L WORKREG2,ASXBIHSA GET ASXB SAVE AREA ADDR @Z40FPXI 03247240 USING IHSA,WORKREG2 ESTABLISH BASE TO SAVE AREA 03247840 SPACE 2 03248440 */* P (,DISPRET) SAVE GPRS IN IHSAGPRS AND IOOPSW IN IHSACPSW */ 03249040 SPACE 2 03249640 MVC IHSAGPRS(L64),LCCAGPGR MOVE REGISTERS TO IHSA @Z40FPXI 03250240 MVC IHSACPSW(L8),LCCAIOPS MOVE PSW TO IHSA @Z40FPXI 03250840 B IOEXIT RETURN TO DISPATCHER @Z40FPXI 03251440 SPACE 2 03252002 */*WAITPROC: D (YES,DISPRET,NO,) IS CLOCK BAD? */ 03252440 SPACE 2 03254002 WAITPROC DS 0H 03257040 L R2,PSAPCCAV GET PCCA ADDRESS 03260002 L DISPRTN,AIEAPDS7 GET DISPATCHER ADDRESS @Z40FPXI 03265040 TM PCCATODE-PCCA(R2),PCCANUTD IS CLOCK FUNCTIONING 03270002 BO IOEXIT IF NOT BRANCH AROUND IEAQWAIT 03290040 SPACE 2 03292002 */* P REG 2= PTR(RETURN) REG 6= PTR(IEAQWAIT) */ 03292402 SPACE 2 03294002 L XWAIT,AQWAIT GET IEAQWAIT ADDRESS 03300002 SPACE 2 03302002 */*WAITRTN: L EP=IEAQWAIT-- CALCULATE CPU WAIT TIME */ 03302402 SPACE 2 03304002 WAITRTN DS 0H TEST LABEL 03310002 BALR XWAITRT,XWAIT GO TO IEAQWAIT 03350002 SPACE 2 03360002 */*IOEXIT: P CLEAR I/O FLIH BIT */ 03362002 SPACE 2 03370002 IOEXIT NI PSASUP1,CXFF-PSAIO CLEAR I/O FLIH FLAG 03450002 SPACE 2 03452002 */*TCBFIN: R EXIT TO DISPATCHER */ 03452402 SPACE 2 03454002 TCBFIN DS 0H TEST LABEL 03460002 BR DISPRTN EXIT TO DISPATCHER 03500002 SPACE 2 03510002 */*CLKERR1: P (,IOPROCES) CLEAR INTERRUPT TOD */ @ZA18148 03510100 SPACE 2 @ZA18148 03510200 USING LCCA,CCABASE LCCA ADDRESSABILITY @ZA18148 03510300 DROP CCABASE2 @ZA18148 03510400 CLKERR1 SLR WORKREG,WORKREG CLOCK BAD - CLEAR ITOD @ZA18148 03510500 ST WORKREG,LCCAITOD ZERO LEFT HALF ITOD @ZA18148 03510900 ST WORKREG,LCCAITOD+C4 ZERO RIGHT HALF ITOD @ZA18148 03511000 DROP CCABASE @ZA18148 03511100 B IOPROCES CONTINUE PROCESSING I/O @ZA18148 03511200 SPACE 2 03511300 */*BADCLOCK: D (YES,CLRITOD,NO,DISPRET) NON-PREEMPTABLE? */ @ZA18148 03511400 SPACE 2 03511600 ************** HERE IF CLOCK IS BAD ************************* @ZA18148 03511700 * IF CLOCK IS BAD AND TASK IS NON-PREEMPTABLE, THEN RETURN TO @ZA18148 03512100 * THE INTERRUPTED TASK. HOWEVER, IF THE CLOCK IS BAD AND THE @ZA18148 03513200 * TASK IS PREEMPTABLE, THEN AN ACCURATE TIME SLICE CANNOT BE @ZA18148 03513400 * CALCULATED. THUS CONTROL WILL BE GIVEN TO THE DISPATCHER @ZA18148 03513600 SPACE 2 03513800 BADCLOCK TM TCBFLGS1,TCBNONPR NON-PREEMPTABLE TASK @ZA18148 03514000 BO CLRITOD YES - RETURN TO IT @ZA18148 03514200 B DISPRET NO - RETURN TO DISP @ZA18148 03514400 SPACE 2 03514600 */* FOOTING 03515600 */* 03515800 */* */ 03516002 */*IEAVEIO: END I/O FLIH */ 03518002 SPACE 2 03520002 *********************************************************************** 03530002 * * 03540002 * CONSTANTS AND STORAGE * 03542002 * * 03544002 *********************************************************************** 03546002 EXTRN IECINT 03550002 ENTRY IEAVEIOI 03560002 IEAVEIOI DC A(IECINT) IOS ENTRY ADDRESS 03570002 EXTRN TRIO 03650002 ATRIO DC A(TRIO) TRACE ENTRY ADDRESS 03700002 EXTRN WAITTCB 03750002 AWAITTCB DC A(WAITTCB) WAIT TCB ADDRESS 03800002 EXTRN IEAQWAIT 03850002 AQWAIT DC A(IEAQWAIT) IEAQWAIT ADDRESS 03900002 EXTRN IEAPDS7 03950002 AIEAPDS7 DC A(IEAPDS7) DISPATCH ENTRY 04000002 DELTA DC X'00070000' EXECUTION INTERVAL @Z40FPXI 04001040 TITLE 'IEAVEIO- PSA MAPPING' 04002002 IHAPSA 04010002 TITLE 'IEAVEIO- LCCA DSECT MAPPING' 04012002 IHALCCA 04020002 TITLE 'IEAVEIO- PCCA DSECT MAPPING' 04022002 IHAPCCA 04030002 TITLE 'IEAVEIO- ASCB DSECT MAPPING' 04032002 IHAASCB 04040002 TITLE 'IEAVEIO- ASXB DSECT MAPPING' 04040402 IHAASXB 04042002 TITLE 'IEAVEIO- IHSA DSECT MAPPING' 04042402 IHAIHSA 04044002 TITLE 'IEAVEIO- TCB DSECT MAPPING' 04044402 IKJTCB 04046002 TITLE 'IEAVEIO- RB DSECT MAPPING' 04046402 IKJRB 04048002 END 04050002