TITLE 'USER EXTENSION MODULE -- USCTPCE - SECURITY PROCESSOR, C
INITIAL ENTRY POINT'
*************************************************************************
* *
* PROCESSOR NAME -- USCTPCE *
* *
* DESCRIPTIVE NAME -- USER SECURITY PROCESSOR *
* *
* FUNCTION -- MANAGE THE INSTALLATION SECURITY SAF CALLS BY PASSING *
* A REQUEST TO THE SECURITY PROCESSOR'S SECURITY *
* SUBTASK TO ISSUE THE SAF CALL. *
* *
* NOTES -- BECAUSE A JES2 PROCESSOR IS NOT ALLOWED TO DIRECTLY *
* ISSUE AN OS WAIT, USCTPCE ATTACHES A SUB-TASK TO *
* PERFORM THOSE FUNCTIONS REQUIRING WAITS, THE SUB-TASK, *
* USCTDTE, PERFORMS THE CALL TO THE SECURITY *
* AUTHORIZATION FACILITY (SAF). *
* *
* *
* REGISTER CONVENTIONS -- R0 - R2 -- WORK REGISTERS *
* R3 -- ADDRESS OF $DTE *
* R4 -- ADDRESS OF WORK ELEMENT *
* R5 - R9 -- WORK REGISTERS *
* R10 -- ADDRESS OF $UCT *
* R11 -- ADDRESS OF $HCT *
* R12 -- BASE ADDRESSABILITY *
* R13 -- ADDRESS OF PCE *
* R14 -- LINKAGE REGISTER *
* R15 -- LINKAGE REGISTER *
* *
*************************************************************************
EJECT
*************************************************************************
* *
* USCTPCE INITIAL ENTRY POINT *
* *
*************************************************************************
SPACE 2
USING UCT,R10 ESTABLISH UCT ADDRESSABILITY
SPACE 1
USCTPCE $ENTRY BASE=R12 PROVIDE PROCESSOR ENTRY POINT
SPACE 1
L R10,$UCT OBTAIN THE UCT ADDRESS
EJECT
*************************************************************************
* *
* MAIN LOOP OF THE SECURITY PROCESSOR *
* *
*************************************************************************
SPACE 1
USCTYLOP $ACTIVE INDICATE PROCESSOR ACTIVE
1
BZ USCATACH NO, GO ATTACH IT
TM DTEFLAG1-DTE(R3),DTE1ACTV SUBTASK ACTIVE...
BO USCTEST YES, GO QUEUE UP MEMBER
SPACE 1
*************************************************************************
* *
* DETACH THE SECURITY SUBTASK (ABENDED) *
* *
*************************************************************************
SPACE 1
$DTEDYN DETACH,ID=UDTESCTY,DTE=(R3),WAIT=XECB C
DETACH ABENDED SUB-TASK
XC SCYDTEAD,SCYDTEAD CLEAR DTE ADDR
EJECT
*************************************************************************
* *
* (RE)-ATTACH THE SECURITY SUBTASK *
* *
*************************************************************************
SPACE 1
USCATACH $DTEDYN ATTACH,ID=UDTESCTY,WAIT=XECB,ERRET=USCATERR C
ATTACH USCTDTE
ST R1,SCYDTEAD STORE SUBTASK DTE ADDRESS
MVC XECBECB-XECB+DTEIXECB-DTE(,R1),$ZEROS CLEAR C
COMMUNICATION ECB
LR R3,R1 SET THE SUBTASK DTE ADDRESS
ST R11,SCDHCT(,R3) STORE HCT ADDRESS IN DTE XTNSN @SA
*************************************************************************
* *
* DETERMINE IF THERE IS WORK TO BE DONE *
* *
*************************************************************************
SPACE 1
USCTEST ICM R4,B'1111',UCTSYQUE ANYWORK TO DO...
BNZ USCWORK YES, GO DO IT
SPACE 1
$DORMANT INDICATE THAT PROCESSOR COMPLETE
SPACE 1
$WAIT SCTY,INHIBIT=NO WAIT FOR WORK
B USCTYLOP GO CHECK FOR WORK TO DO
EJECT
*************************************************************************
* *
* SET UP FOR SUB-TASK TO PROCESS JOB *
* *
* INSTALLATION CODE WOULD GO HERE TO PASS TO SUBTASK THE NECESSARY *
* INFORMATION (THROUGH THE DTE EXTENSION THAT IS UNIQUE FOR THE *
* SECURITY SUBTASK). *
* *
*************************************************************************
SPACE 1
USCWORK DS 0H
XC UCTSYQUE INDICATE WORK BEING PROCESSED (IN C
REALITY THIS WOULD PROBABLY UNCHAIN C
THE REQUEST, NOT CLEAR THE QUEUE)
EJECT
*************************************************************************
* *
* MVS POST THE SUBTASK FOR WORK TO DO AND $WAIT FOR IT TO *
* COMPLETE. NOTE THAT THE CALL TO THE SUBTASK IS $TRACE'D, *
* IF TRACING IS ACTIVE. *
* *
*************************************************************************
SPACE 1
MVC XECBECB-XECB+DTEIXECB-DTE(,R3),$ZEROS CLEAR ECB C
FOR $WAIT
LA R1,DTEWECB-DTE(,R3) POINT TO THE WORK ECB
SPACE 1
POST (1) POST SECURITY SUBTASK FOR WORK
SPACE 1
$TRACE ID=255,LEN=USCSAFML,OFF=USCTROFF,NAME=SAFCALL
MVC 0(USCSAFML,R1),USCSAFM SET INFORMATION TO BE TRACED
SPACE 1
USCTROFF LR R1,R3 GET DTE ADDRESS
$WAIT OPER,XECB=DTEIXECB-DTE(,R1) $WAIT FOR SUB-TASK C
TO POST US
EJECT
*************************************************************************
* *
* SUBTASK HAS POSTED US BACK *
* *
* INSTALLATION CODE WOULD GO HERE TO VALIDATE THE SUCCESS OF THE *
* SECURITY CALL AND TO DO ANY PROCESSING RELEVANT TO THE SUCCESS *
* OR FAILURE OF THE CALL. *
* *
*************************************************************************
SPACE 1
DS 0H VALIDATE THE RESULT OF THE SECURITY C
CALL.
SPACE
*************************************************************************
* *
* BRANCH TO OBTAIN THE NEXT ITEM TO VERIFY *
* *
*************************************************************************
SPACE 1
B USCTEST GO CHECK FOR MORE WORK
EJECT
*************************************************************************
* *
* AN ERROR WAS ENCOUNTERED ON THE ATTACH OF THE SUBTASK. *
* WAIT FOR 30 SECONDS AND ATTEMPT TO TRY AGAIN. *
* *
*************************************************************************
SPACE 1
USCATERR LA R1,SCYTQE GET ADDRESS OF PCE TQE
LA R0,30 SET TIME INTERVAL
ST R0,TQETIME(,R1) IN TQE
ST R13,TQEPCE(,R1) STORE PCE ADDRESS IN TQE
$TIMER (41) CHAIN THIS TQE
$WAIT WORK AND WAIT FOR INTERVAL TO ELAPSE
B USCATACH GO ATTACH SUBTASK
SPACE 1
*************************************************************************
* *
* LIST LITERALS AND SUSPEND ADDRESSABILITIES. *
* *
*************************************************************************
SPACE 1
LTORG
SPACE 1
DROP R10,R12,R13 SUSPEND UCT, BASE, AND PCE ADDRESS