MACRO @V407510 00001000 &NAME LOCK &REQUEST,&TYPE=,&SPIN=,&OPTION=,&SAVE @V407510 00002000 .* NEW MACRO FOR ATTACHED PROCESSOR SUPPORT @V407510 00003000 GBLB &AP @V407510 00004000 GBLB &LOCK @V407510 00005000 LCLC &ID @V407510 00006000 LCLC &C @V407510 00007000 LCLB &A,&B,&S,&SA,&U @V407510 00008000 AIF (T'&NAME EQ 'O').NOLABEL @V407510 00009000 &NAME DS 0H @V407510 00010000 .NOLABEL ANOP @V407510 00011000 &ID SETC '&SYSNDX' @V407510 00012000 AIF ('&AP' EQ '0').SETCC0 @V407510 00013000 TM APSTAT1,APUOPER RUNNING AP? @V407510 00014000 BNO LOK&ID.B NO, BRANCH AROUND LOCKING @V407510 00015000 &LOCK SETB 0 SET GLOBAL VARIABLE FOR ABEND @V407510 00016000 &A SETB 0 INDICATE OBTAIN REQUEST @V407510 00017000 &B SETB 0 INDICATE NOT VM BLOCK @V407510 00018000 &U SETB 0 INDICATE UPDATE @V407510 00019000 AIF (T'&REQUEST EQ 'O').ERR1 @V407510 00020000 AIF ('&REQUEST' EQ 'OBTAIN').OBTAIN @V407510 00021000 AIF ('&REQUEST' NE 'RELEASE').ERR2 @V407510 00022000 .RELEASE ANOP @V407510 00023000 &A SETB 1 INDICATE RELEASE REQUEST @V407510 00024000 .OBTAIN ANOP @V407510 00025000 AIF (T'&TYPE EQ 'O').ERR3 @V407510 00026000 AIF ('&TYPE' EQ 'SYS').SYS @V407510 00027000 AIF ('&TYPE' EQ 'VMBLOK').VM @V407510 00028000 AIF ('&TYPE' EQ 'DS').DS @V407510 00030000 AIF ('&TYPE' EQ 'IO').IO @V407510 00031000 AIF ('&TYPE' EQ 'RL').RL @V407510 00032000 AIF ('&TYPE' EQ 'FREE').FREE @V407510 00033000 AIF ('&TYPE' EQ 'TR').TR @V407510 00034000 AIF ('&TYPE' NE 'PRIVATE').ERR4 @V407510 00035000 .PRIVATE ANOP @V407510 00036000 &C SETC '0(,R1)' @V407510 00037000 AGO .LABEL @V407510 00038000 .DS ANOP @V407510 00039000 &C SETC '=V(DMKLOKDS)' @V407510 00040000 AGO .LABEL @V407510 00041000 .FREE ANOP @V407510 00042000 &C SETC 'ALOKFR' AGO .LABEL @V407510 00044000 .RL ANOP @V407510 00045000 &C SETC '=V(DMKLOKRL)' @V407510 00046000 AGO .LABEL @V407510 00047000 .IO ANOP @V407510 00048000 &C SETC '=V(DMKLOKIO)' @V407510 00049000 AGO .LABEL @V407510 00050000 .TR ANOP @V407510 00051000 &C SETC '=V(DMKLOKTR)' @V407510 00052000 AGO .LABEL @V407510 00053000 .SYS ANOP @V407510 00054000 &C SETC 'ALOKSY' AGO .LABEL @V407510 00056000 .VM ANOP @V407510 00057000 &B SETB 1 INDICATE VMBLOK LOCK REQUEST @V407510 00058000 .LABEL ANOP @V407510 00059000 &S SETB 0 INDICATE SPIN=NO @V407510 00060000 AIF ('&A' EQ '1').SAVE @V407510 00061000 AIF ('&SPIN' EQ 'NO').SAVE @V407510 00062000 AIF (T'&SPIN EQ 'O').SPIN @V407510 00063000 AIF ('&SPIN' NE 'YES').ERR5 @V407510 00064000 .SPIN AIF ('&B' EQ '1').ERR6 @V407510 00065000 &S SETB 1 INDICATE SPIN=YES @V407510 00066000 .SAVE ANOP @V407510 00067000 &SA SETB 0 INDICATE NO SAVE @V407510 00068000 AIF ('&SAVE' EQ '').UPDT @V407510 00069000 AIF ('&SAVE' NE 'SAVE').ERR7 @V407510 00070000 STM R14,R1,LOCKSAV SAVE REGS 14 - 1 @V407510 00071000 &SA SETB 1 INDICATE SAVE OPTION @V407510 00072000 .UPDT ANOP @V407510 00073000 AIF (T'&OPTION EQ 'O').TEST @V407510 00074000 AIF ('&OPTION' NE 'NOUPDT').ERR8 @V407510 00075000 &U SETB 1 INDICATE NOUPDATE OPTION @V407510 00076000 .TEST ANOP @V407510 00077000 AIF ('&A' EQ '1').REL @V407510 00078000 .* &A = 0 - OBTAIN REQUEST @V407510 00079000 AIF ('&B' EQ '0').OBT OBTAIN NON-VMBLOK @V407510 00080000 .* &A=0, &B=1 - OBTAIN VMBLOK REQUEST @V407510 00081000 AIF ('&U' EQ '1').OBTVM OBTAIN, VMBLOK, NOUPDATE @V407510 00082000 .* &A=0, &B=1, &U=0 - UPDATE OBTAIN VMBLOK @V407510 00083000 .* NORMAL VMBLOK OBTAIN- GOTO LOCK MGR @V407510 00085000 L R15,ALOKVM ADDRESS OF DMKLOKVM @V407510 00086000 BALR R14,R15 CALL DMKLOKVM @V407510 00087000 AGO .END @V407510 00088000 .* &A=0, &B=0 NON VMBLOK OBTAIN REQUEST @V407510 00109000 .OBT ANOP @V407510 00110000 LH R0,LPUADDR PROCESSOR ADDRESS @V407510 00111000 AIF ('&TYPE' EQ 'PRIVATE').SKIP1 @V407510 00112000 L R1,&C LOCKWORD ADDRESS @V407510 00113000 .SKIP1 ANOP @V407510 00114000 SR R14,R14 ZERO FOR LOCK NOT HELD @V407510 00115000 CS R14,R0,0(R1) TRY TO OBTAIN LOCK @V407510 00116000 AIF ('&TYPE' EQ 'PRIVATE').SK1 @V407510 00117000 AIF ('&TYPE' EQ 'FREE').SK1 00117100 BNZ LOK&ID.C UNSUCCESSFUL, CALL LOCK MGR @V407510 00118000 ST R12,4(,R1) SAVE LOCKER R12 @V407510 00119000 AIF ('&SA' EQ '0').SKIP2 SAVE SPECIFIED? @V407510 00120000 B LOK&ID.A BRANCH TO RESTORE REGISTERS @V407510 00121000 AGO .SKIP3 @V407510 00122000 .SK1 ANOP PRIVATE LOCK, NO R12 STORE @V407510 00123000 AIF ('&SA' EQ '0').SK2 SAVE SPECIFIED? @V407510 00124000 BZ LOK&ID.A BRANCH TO RESTORE REGS @V407510 00125000 AGO .SK3 BRANCH TO ERROR CODE @V407510 00126000 .SK2 ANOP SAVE NOT SPECIFIED @V407510 00127000 BZ LOK&ID.B FINISHED @V407510 00128000 AGO .SK3 BRANCH TO ERROR CODE @V407510 00129000 .SKIP2 ANOP @V407510 00130000 B LOK&ID.B FINISHED @V407510 00131000 .SKIP3 ANOP @V407510 00132000 LOK&ID.C DS 0H LOCK NOT OBTAINED @V407510 00133000 .SK3 ANOP @V407510 00134000 AIF ('&S' EQ '1').CHECK1 SPIN = YES? @V407510 00135000 &C SETC '=V(DMKLOKDF)' SET UP FOR DEFER ENTRY @V407510 00136000 AGO .BRANCH1 @V407510 00137000 .CHECK1 ANOP @V407510 00138000 &C SETC 'ALOKSP' SET UP FOR SPIN ENTRY @V407510 00139000 .BRANCH1 ANOP @V407510 00140000 L R15,&C ADDRESS OF LOCK MANAGER @V407510 00141000 BALR R14,R15 BRANCH TO LOCK MANAGER @V407510 00142000 AGO .END FINISH EXPANSION @V407510 00143000 .OBTVM ANOP OBTAIN VMBLOK NOUPDATE @V407510 00144000 LH R0,LPUADDR PROCESSOR ADDRESS @V407510 00145000 SR R14,R14 ZERO FOR LOCK NOT HELD @V407510 00146000 CS R14,R0,VMLOCK-VMBLOK(R1) TRY TO OBTAIN LOCK @V407510 00147000 BNZ LOK&ID.C UNSUCCESSFUL, CALL LOCK MGR @V407510 00148000 ST R12,VMLOCKER-VMBLOK(,R1) SAVE LOCKER R12 @V407510 00149000 AIF ('&SA' EQ '0').SKIP8 SAVE SPECIFIED? @V407510 00150000 B LOK&ID.A BRANCH TO RESTORE REGISTERS @V407510 00151000 AGO .SKIP9 @V407510 00152000 .SKIP8 ANOP @V407510 00153000 B LOK&ID.B FINISHED @V407510 00154000 .SKIP9 ANOP @V407510 00155000 LOK&ID.C DS 0H LOCK NOT OBTAINED @V407510 00156000 LA R1,VMLOCK-VMBLOK(,R1) LOCKWORD ADDRESS @V407510 00157000 L R15,=V(DMKLOKDF) ADDRESS OF LOCK MANAGER @V407510 00158000 BALR R14,R15 BRANCH TO LOCK MANAGER @V407510 00159000 AGO .END FINISH EXPANSION @V407510 00160000 .* &A=1 RELEASE REQUEST @V407510 00161000 .REL ANOP @V407510 00162000 LH R0,LPUADDR PROCESSOR ADDRESS @V407510 00163000 AIF ('&TYPE' EQ 'PRIVATE').SKIP4 @V407510 00164000 AIF ('&B' EQ '1').SKIP4 @V407510 00165000 L R1,&C LOCKWORD ADDRESS @V407510 00166000 .SKIP4 ANOP @V407510 00167000 SR R14,R14 ZERO FOR LOCK NOT HELD @V407510 00168000 AIF ('&B' EQ '1').SKIP5 @V407510 00169000 C R0,0(,R1) LOCK CURRENTLY OWNED? @V4M0160 00170100 BE LOK&ID.D YES, CLEAR LOCKWORD @V4M0160 00170200 &LOCK SETB 1 @V4M0160 00170300 ABEND 03 LOCK NOT HELD, LOK003 ABEND @V4M0160 00170400 &LOCK SETB 0 @V4M0160 00170500 LOK&ID.D DS 0H @V4M0160 00170600 ST R14,0(,R1) CLEAR LOCKWORD @V4M0160 00170700 AGO .SKIP6 @V407510 00171000 .SKIP5 ANOP @V407510 00172000 C R0,VMLOCK-VMBLOK(R1) LOCK CURRENTLY OWNED? @V4M0160 00173100 BE LOK&ID.D YES, CLEAR LOCKWORD @V4M0160 00173200 &LOCK SETB 1 @V4M0160 00173300 ABEND 03 LOCK NOT HELD, LOK003 ABEND @V4M0160 00173400 &LOCK SETB 0 @V4M0160 00173500 LOK&ID.D DS 0H @V4M0160 00173600 ST R14,VMLOCK-VMBLOK(R1) CLEAR LOCKWORD @V4M0160 00173700 .SKIP6 ANOP @V407510 00174000 AGO .END @V407510 00185000 .ERR1 ANOP @V407510 00190000 MNOTE 8,'REQUIRED POSITIONAL OPERAND MISSING' @V407510 00191000 AGO .EXIT @V407510 00192000 .ERR2 ANOP @V407510 00193000 MNOTE 8,'INVALID POSITIONAL OPERAND' @V407510 00194000 AGO .EXIT @V407510 00195000 .ERR3 ANOP @V407510 00196000 MNOTE 8,TYPE OPERAND REQUIRED, NOT SPECIFIED' @V407510 00197000 AGO .EXIT @V407510 00198000 .ERR4 ANOP @V407510 00199000 MNOTE 8,'INVALID TYPE= OPERAND SPECIFIED' @V407510 00200000 AGO .EXIT @V407510 00201000 .ERR5 ANOP @V407510 00202000 MNOTE 8,'INVALID SPIN= OPERAND SPECIFIED' @V407510 00203000 AGO .EXIT @V407510 00204000 .ERR6 ANOP @V407510 00205000 MNOTE 8,'MUTUALLY EXCLUSIVE KEYWORDS SPIN=YES, TYPE=VMBLOK' 00206000 AGO .EXIT @V407510 00207000 .ERR7 ANOP @V407510 00208000 MNOTE 8,'INVALID SAVE PARAMETER' @V407510 00209000 AGO .EXIT @V407510 00210000 .ERR8 ANOP @V407510 00211000 MNOTE 8,'INVALID OPTION= OPERAND SPECIFIED' @V407510 00212000 AGO .EXIT @V407510 00213000 .END ANOP @V407510 00214000 AIF ('&SA' EQ '0').END1 @V407510 00215000 LOK&ID.A DS 0H @V407510 00216000 LM R14,R1,LOCKSAV RESTORE REGS 14-1 @V407510 00217000 .END1 ANOP @V407510 00218000 .EXIT ANOP @V407510 00219000 LOK&ID.B DS 0H END OF EXPANSION @V407510 00220000 MEXIT @V407510 00221000 .SETCC0 ANOP @V407510 00222000 AIF ('&REQUEST' EQ 'RELEASE').NOGEN @V4M0160 00222100 AIF ('&SPIN' NE 'NO').NOGEN 00222110 CLR R0,R0 SET CONDITION CODE = 0 00223000 MEXIT @V4M0160 00223100 .NOGEN ANOP @V4M0160 00223200 MEND @V407510 00224000