*/********************************************************************/ 00050004 */* */ 00100004 */* MACRO NAME = IDACPA */ 00150004 */* */ 00200004 */* DESCRIPTIVE NAME = CHANNEL PROGRAM AREA */ 00250004 */* */ 00260004 */* FUNCTION = */ 00270004 */* */ 00270404 */* THE CHANNEL PROGRAM AREA(CPA) CONTAINS A FIXED, HEADER SECTION */ 00272004 */* CONTAINING VARIOUS POINTERS AND PARAMETERS, AND OTHER SECTIONS */ 00274004 */* WHICH CONTAIN CHANNEL PROGRAM SEGMENTS AND ARGUMENTS NEEDED BY */ 00276004 */* THE CCW-S. THESE VARIOUS OTHER SECTIONS ARE LOCATED BY POINTERS */ 00278004 */* FROM THE FIXED SECTION SINCE THE AMOUNT OF SPACE REQUIRED FOR */ 00278404 */* THEM VARIES DEPENDING ON CONTROL INTERVAL SIZE, BLOCKSIZE, OPEN */ 00278804 */* OPTIONS SPECIFIED, ETC. */ 00279204 */* */ 00280004 */* CONTROL BLOCK STRUCTURE = IDACPA IS POINTED TO BY IDABUFC */ 00290004 */* */ 00292004 */* INCLUDED MACROS = NONE */ 00294004 */* */ 00296004 */* METHOD OF ACCESS = PL/S - NO DECLARES NECESSARY */ 00298004 */* */ 00298404 */* CREATED BY = VSAM OPEN */ 00298804 */* */ 00299204 */* STATUS = VS/1 RELEASE 4 (CHANGE FLAG @X04SVXX) */ 00299604 */* */ 00299704 */* DATE OF LAST CHANGE = 13 AUG 74 */ 00299804 */* */ 00299904 */********************************************************************/ 00349904 *% GOTO CPAPLS1; 00399904 */* */ 03600000 */* READ AND WRITE CHANNEL COMMANDS SPECIFY AN INDIRECT DATA ADDRESS */ 03900000 */* LIST AND POINT TO AN ADDRESS WITHIN THE AREA POINTED TO BY */ 04200000 */* CPAIDAL. THE REAL ADDRESSES IN CPAIDAL ARE FILLED IN LATER IN */ 04500000 */* CONJUNCTION WITH PAGE FIXING. THE VIRTUAL ADDRESSES CORRESPONDING*/04800000 */* TO THE REAL ADDRESSES ARE IN THE AREA POINTED TO BY CPAVPL. */ 05100000 */* THESE VIRTUAL ADDRESSES ARE NORMALLY SUPPLIED BY OPEN. */ 05400000 */* (EXCEPTION WHEN CPAVPLV IS OFF) */ 05700000 */* THE FIRST ADDRESS IS THE STARTING ADDRESS OF THE */ 06000000 */* BUFFER. SUBSEQUENT ADDRESSES ARE OBTAINED BY INCREMENTING THE */ 06300000 */* PREVIOUS ADDRESS BY 2K OR PHYSICAL BLOCK SIZE, WHICHEVER IS LESS.*/ 06600000 */* */ 06900000 */* IT IS ALSO ASSUMED BY THE I/O MANAGER THAT CCW LISTS WILL */ 07200000 */* EXIST, AS REQUIRED, AS SPECIFIED FOR EACH TYPE OF CHANNEL */ 07500000 */* PROGRAM SEGMENT. */ 07800000 */* */ 08100000 */* */ 08400000 */* *** IMPORTANT NOTE: THE ENTIRE CPA MUST BE CONTAINED WITHIN */ 08700000 */* A SINGLE PAGE. */ 09000000 */* ALSO NOTE THAT CHANNEL PROGRAM SEGMENTS MUST BE */ 09300000 */* ON DOUBLE WORD BOUNDARIES. */ 09600000 */* */ 09900000 */* */ 10200000 */* IN THE FOLLOWING DESCRIPTIONS, */ 10500000 */* CC = COMMAND CHAIN */ 10800000 */* MT = MULTI-TRACK MODE */ 11100000 */* IDAL = INDIRECT DATA ADDRESS LIST */ 11400000 */* LL = PHYSICAL BLOCK SIZE (LPMBLKSZ) */ 11700000 */* N = NUMBER OF PHYSICAL BLOCKS PER CINV (CPABCINV) */ 12000000 */* NT = NO TRANSFER */ 12300000 */* */ 12600000 */* */ 12900000 */* */ 13200000 */* */ 13500000 */****** UPDATE WRITE CHANNEL PROGRAM SEGMENT ******/ 13800000 */* */ 14100000 */* */ 14400000 */* */ 14700000 */* EVERY SEARCH ID CCW AFTER THE FIRST ONE IS A MULTI-TRACK SEARCH. */ 15000000 */* */ 15300000 */* */ 15600000 */* (CPAWCPS POINTER MINUS 8) (EXTRA CCW SLOT IF RPS DEVICE) */ 15900000 */* CPAWCPS-> SEEKH CPAWSEEK,CC,6 */ 16200000 */* __ | SRCH ID EQ SA,CC,5 */ 16500000 */* | _ | TIC *-8 */ 16800000 */* | | WD DA1,(CC,IDAL),LL */ 17100000 */* | */ 17400000 */* | | SRCH ID EQ SA+5,(CC,MT),5 */ 17700000 */* | -| TIC *-8 */ 18000000 */* | | WD DA2,(CC,IDAL),LL */ 18300000 */* N GROUPS --| . */ 18600000 */* OF 3 CCW-S | . */ 18900000 */* . */ 19200000 */* | | SRCH ID EQ SA+5*(N-1),(CC,MT),5 */ 19500000 */* | -| TIC *-8 */ 19800000 */* |__ | WD DA(N),(CC,IDAL),LL */ 20100000 */* NOP */ 20400000 */* */ 20700000 */* |-------------------------------| */ 21000000 */* CPAIDAL-> DA1 | | */ 21300000 */* | IF LL=4K, 2*N 4 BYTE ENTRIES | */ 21600000 */* IF LL=4K, DA2 | | */ 21900000 */* DA(N)=DA(N-1)+8 | IF LL<4K, N 4 BYTE ENTRIES | */ 22200000 */* IF LL<4K, DA(N) | | */ 22500000 */* DA(N)=DA(N-1)+4 | | */ 22800000 */* |-------------------------------| */ 23100000 */* CPAVPL-> | | */ 23400000 */* | | */ 23700000 */* | | */ 24000000 */* | SAME AS ABOVE | */ 24300000 */* | | */ 24600000 */* | | */ 24900000 */* |------------------------------ | */ 25200000 */* */ 25500000 */* CPAWSID-> SA |-------------------------------| */ 25800000 */* | N 5 BYTE ENTRIES | */ 26100000 */* |------------------------------ | */ 26400000 */* */ 26700000 */* */ 27000000 */* BYTES REQUIRED BY CCW-S = (3*N+2(+1,IF RPS))*8 */ 27300000 */* */ 27600000 */* BYTES REQUIRED FOR SID ARGS = 5*N */ 27900000 */* */ 28200000 */* BYTES REQUIRED FOR BOTH, */ 28500000 */* CCW MINIMUM 24*N+16 */ 28800000 */* SID ARGS 5*N */ 29100000 */* ------- */ 29400000 */* TOTAL MINIMUM 29*N+16 */ 29700000 */* */ 30000000 */* ADDITIONAL IF RPS 8 */ 30300000 */* */ 30600000 */* */ 30900000 */* */ 31200000 */****** READ CHANNEL PROGRAM SEGMENT ******/ 31500000 */* */ 31800000 */* EVERY READ CCW AFTER THE FIRST ONE IS A MULTI-TRACK READ. */ 32100000 */* */ 32400000 */* */ 32700000 */* (CPARCPS POINTER MINUS 8) (EXTRA CCW SLOT IF RPS DEVICE) */ 33000000 */* CPARCPS-> SEEKH CPARSEEK,CC,6 */ 33300000 */* SRCH ID EQ CPARSID,CC,5 */ 33600000 */* TIC *-8 */ 33900000 */* --- RD DA1,(CC,IDAL),LL */ 34200000 */* | RD DA2,(CC,IDAL,MT),LL */ 34500000 */* N READ | . */ 34800000 */* DATA CCW-S ---| . */ 35100000 */* | . */ 35400000 */* |--- RD DA(N),(CC,IDAL,MT),LL */ 35700000 */* NOP */ 36000000 */* */ 36300000 */* |------------------------------| */ 36600000 */* CPAIDAL-> DA1 | | */ 36900000 */* | IF LL=4K, 2*N 4 BYTE ENTRIES| */ 37200000 */* IF LL=4K, DA2 | | */ 37500000 */* DA(N)=DA(N-1)+8 | IF LL<4K, N 4 BYTE ENTRIES | */ 37800000 */* IF LL<4K, DA(N) | | */ 38100000 */* DA(N)=DA(N-1)+4 | | */ 38400000 */* |------------------------------| */ 38700000 */* CPAVPL-> | | */ 39000000 */* | | */ 39300000 */* | | */ 39600000 */* | SAME AS ABOVE | */ 39900000 */* | | */ 40200000 */* | | */ 40500000 */* |------------------------------| */ 40800000 */* */ 41100000 */* */ 41400000 */* BYTES REQUIRED BY CCW-S = (N+4(+1 IF RPS))*8 */ 41700000 */* = 8*N+32 (+8, IF RPS) */ 42000000 */* */ 42300000 */* */ 42600000 */* */ 42900000 */* */ 43200000 */****** FORMAT WRITE CHANNEL PROGRAM SEGMENT ******/ 43500000 */* */ 43800000 */* */ 44100000 */* ONLY THE PART OF THE CHANNEL PROGRAM SEGMENT WHICH WRITES */ 44400000 */* THE FIRST BLOCK CAN BE PREBUILT. THEREFORE OPEN WILL */ 44700000 */* BUILD THE CHANNEL PROGRAM (6 CCW-S) AS IF THERE WERE */ 45000000 */* ONLY ONE PHYSICAL BLOCK PER CONTROL INTERVAL AND THE */ 45300000 */* I/O MANAGER WILL DYNAMICALLY MODIFY THE CCW LIST, */ 45600000 */* WHEN NECESSARY. OPEN WILL LEAVE SPACE FOR ADDITIONAL CCW-S. */ 45900000 */* */ 46200000 */* */ 46500000 */* */ 46800000 */* (CPAWCPS POINTER MINUS 8) (EXTRA CCW SLOT IF RPS DEVICE) */ 47100000 */* CPAWCPS-> SEEKH CPAWSEEK,CC,6 */ 47400000 */* SRCH ID EQ SA,CC,5 */ 47700000 */* TIC *-8 */ 48000000 */* WCKD FWCA1,DC,8 */ 48300000 */* WCKD DA1,(CC,IDAL),LL */ 48600000 */* NOP ,SILI,2 */ 48900000 */* */ 49200000 */* */ 49500000 */* CPAFWCNT-> FWCA1 |-------------------------------| */ 49800000 */* | | */ 50100000 */* | N 8 BYTE ENTRIES - USED TO | */ 50400000 */* | | */ 50700000 */* | FORM COUNT FIELDS - CCHHRKDD | */ 51000000 */* | | */ 51300000 */* |-------------------------------| */ 51600000 */* */ 51900000 */* */ 52200000 */* THE REST OF THE ITEMS IN THE ABOVE FORMAT WRITE CHANNEL */ 52500000 */* PROGRAM EXAMPLE ARE THE SAME AS IN THE UPDATE WRITE EXAMPLE */ 52800000 */* */ 53100000 */* TOTAL SPACE REQUIRED FOR CCW-S = 32*N+16 (+8 IF RPS) */ 53400000 */* */ 53700000 */* TOTAL BYTES REQUIRED, */ 54000000 */* CCW 32*N+16 */ 54300000 */* SID ARGS 5*N */ 54600000 */* COUNT FLDS 8*N */ 54900000 */* ------- */ 55200000 */* 45*N+16 PLUS CPAIDAL AND CPAVPL SPACE */ 55500000 */* ADDITIONAL */ 55800000 */* IF RPS 8 */ 56100000 */* */ 56400000 */* */ 56700000 */****** WRITE CHECK CHANNEL PROGRAM SEGMENT ******/ 57000000 */* */ 57300000 */* EVERY READ CCW AFTER THE FIRST ONE IS A MULTI-TRACK READ. */ 57600000 */* */ 57900000 */* */ 58200000 */* CPAWCKS-> SEEKH CPAWSEEK,CC,6 */ 58500000 */* SRCH ID EQ SA*,CC,5 */ 58800000 */* TIC *-8 */ 59100000 */* --- RD DA1,(CC,NT),LL */ 59400000 */* | RD DA2,(CC,NT,MT),LL */ 59700000 */* N READ | . */ 60000000 */* DATA CCW-S ---| . */ 60300000 */* | . */ 60600000 */* |--- RD DA(N),(CC,NT,MT),LL */ 60900000 */* NOP */ 61200000 */* */ 61500000 */* *SA = CPAWCHR FOR UPDATE WRITE */ 61800000 */* = CPAFWCHR (FIRST FIVE BYTES POINTED TO BY CPAFWCNT) */ 62100000 */* FOR FORMAT WRITE */ 62400000 */* */ 62700000 */* BYTES REQUIRED BY CCW-S = (N+4)*8 */ 63000000 */* = 8*N+32 */ 63300000 */* */ 63600000 */* */ 63900000 */********************************************************************/ 64200000 */* */ 64500000 */* CPA DECLARATION */ 64800000 */* */ 65100000 *%CPAPLS1: ; 65400000 * /* CPA (CHANNEL PROGRAM AREA) */ 65700000 /* */ 66000000 * DCL 1 IDACPA BDY(WORD) BASED, /* CPA */ 66300000 * 2 CPAID CHAR(1), /* CONTROL BLOCK ID */ 66600000 * 2 * CHAR(1), /* RESERVED */ 66900000 * 2 CPALEN FIXED(15), /* CONTROL BLOCK SIZE */ 67200000 * 2 CPAWREAL PTR(31), /* PREVIOUS REAL ADDR WRITE CP */ 67500000 * 2 CPAWCPS PTR(31), /* PTR TO 1ST WRITE CCW (SEEK) */ 67800000 * 2 CPAWCPE PTR(31), /* PTR TO LAST WRITE CCW(NOP/TIC)*/ 68100000 * 2 CPAWCKS PTR(31), /* PTR TO 1ST WRITE CHECK CCW */ 68400000 * 2 CPAWCKE PTR(31), /* PTR TO LAST WRITE CHECK CCW */ 68700000 * 2 CPARREAL PTR(31), /* PREVIOUS REAL ADDR READ CP */ 69000000 * 2 CPARCPS PTR(31), /* PTR TO 1ST READ CCW */ 69300000 * 2 CPARCPE PTR(31), /* PTR TO LAST READ CCW */ 69600000 * 2 CPAWPHAD CHAR(8), /* WRITE PHYS ADDR - MBBCCHHR */ 69900000 * 3 * CHAR(1), 70200000 * 3 CPAWSEEK CHAR(6), /* WRITE SEEK ADDR */ 70500000 * 4 CPAWBB CHAR(2), 70800000 * 4 CPAWCHR CHAR(5), 71100000 * 3 CPAWPHR CHAR(1), 71400000 * 2 CPAWSID PTR(31), /* PTR TO WRITE SRCH ID ARG LIST */ 71700000 * 2 CPAFWCNT PTR(31), /* PTR TO FORMAT WRITE CNT FIELDS*/ 72000000 * 2 CPARPHAD CHAR(8), /* READ PHYS ADDR - MBBCCHHR */ 72300000 * 3 * CHAR(1), 72600000 * 3 CPARSEEK CHAR(6), /* READ SEEK ADDR */ 72900000 * 4 CPARBB CHAR(2), 73200000 * 4 CPARSID CHAR(5), /* READ SEARCH ID ARGUMENT */ 73500000 * 3 * CHAR(1), 73800000 * 2 CPAIDAL PTR(31), /* PTR TO REAL PAGE LIST */ 74100000 * 2 CPAVPL PTR(31), /* PTR TO VIRT PAGE LIST */ 74400000 * 2 CPAWORK1 PTR(31), /* WORK AREA */ 74700000 * 2 CPAWORK2 PTR(31), /* WORK AREA */ 75000000 * 2 CPABLKSZ FIXED(31), /* PHYS BLOCK SIZE FROM CONVERT */ 75300000 * 2 CPABCINV FIXED(15), /* NBR OF BLOCKS PER CINV */ 75600000 * 2 CPASSECT PTR(8), /* SET SECTOR ARG */ 75900000 * 2 CPASTAT1 BIT(8), /* CPA STATUS */ 76200000 * 3 CPAVPLV BIT(1), /* SET ON IN VPL VALID */ 76500000 * 2 CPAFLAGS CHAR(2), /* I/O MANAGER FLAGS */ 76800000 * 3 CPAFLAG1 CHAR(1), 77100000 * 4 CPAWV BIT(1), /* WRITE CHAN PROG SEG VALID */ 77400000 * 4 CPAWCV BIT(1), /* WRITE CHK CHAN PROG SEG VALID */ 77700000 * 4 CPARV BIT(1), /* READ CHAN PROG SEG VALID */ 78000000 * 4 CPAWRPS BIT(1), /* WRITE CP SEG FOR RPS DEVICE */ 78300000 * 4 CPARRPS BIT(1), /* READ CP SEG FOR RPS DEVICE */ 78600000 * 4 CPACHNED BIT(1), /* CHAINING OF CP SEGS COMPLETE */ 78900000 * 4 * BIT(1), /* RESERVED */ 79200000 * 3 CPAFLAG2 CHAR(1), 79500000 * 4 CPAWREPL BIT(1), /* REPLICATED INDEX ON WRITE */ 79800000 * 4 CPARREPL BIT(1), /* REPLICATED INDEX ON READ */ 80100000 * 4 CPAXLRA BIT(1), /* LRA INSTRUCTION ERROR */ 80400000 * 4 CPAPFENT BIT(1), /* PAGEFIX APPENDAGE ENTERED */ 80700000 * 4 CPATKOFL BIT(1), /* TRACK OVERFLOW IN MVM @Y30DSJH*/ 80702004 * 2 CPARSECT PTR(8), /* SET SECTOR ARG--READ @X04SVMR*/ 80752004 * 2 CPAWSECT PTR(8), /* SET SECTOR ARG--WRITE @X04SVMR*/ 80802004 * 2 CPANXT1 PTR(31), /* MVM STATIC CPA CHAIN @Y30DSJH*/ 81100004 * 2 CPACPCHN PTR(31); /* MVM DYN CPA CHAIN FLD @Y30DSJH*/ 81200004 */********************************************************************/ 81210004 */* COMMON CHANNEL PROGRAM CCWS */ 81220004 */********************************************************************/ 81230004 DCL 1 CPACCW BDY(DWORD)BASED, /* FIRST 4 CCWS @X04SVLC*/ 81250004 2 CPACCWSK CHAR(8), /* SEEK CCW @X04SVLC*/ 81300004 2 CPACCWSS CHAR(8), /* SET SECTOR @X04SVLC*/ 81350004 2 CPACCWSI CHAR(8), /* SEARCH ID @X04SVLC*/ 81400004 2 CPACCWTC CHAR(8); /* TRANSFER IN CHANNEL @X04SVLC*/ 81450004