IDENT 1DA,DASX TITLE 1DA - DISK ARRAY SUBSYSTEM (DAS) DRIVER. CIPPU ,S MEMSEL 8 LIST F BASE M SST DLYA,.DLY,.EST *COMMENT 1DA - DISK ARRAY SUBSYSTEM (DAS) DRIVER. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. SPACE 4,10 *** 1DA - DAS DRIVER. * * C. D. ROWE. 91/03/06. * P. C. SMITH. 94/03/21. * R. E. DUNBAR. 94/07/15. * P. C. SMITH. 95/12/10. SPACE 4,40 *** *1DA* IS THE DRIVER FOR THE 583X/47444 DISK ARRAY SUBSYSTEM. * * THE FOLLOWING DISK DRIVES ARE SUPPORTED, * 5832-1, 5832-2 * 5833-1, 5833-1P * 5833-2, 5833-2P * 5833-3P, 5833-4 * 5838-1, 5838-1P * 5838-2, 5838-2P * 5838-3P, 5838-4 * 47444-1, 47444-1P * 47444-2, 47444-2P * 47444-3P, 47444-4 * * THE DAS DISK DRIVES ARE SUPPORTED AS BUFFERED I/O * DEVICES. REQUESTS TO BE PROCESSED BY *1DA* ARE POSTED * BY *CPUMTR* IN THE BUFFERED I/O TABLES IN *CMR*. * *1DA* INTERLOCKS UNITS, DELINKS BUFFERS, AND COMPLETES * SAID REQUESTS BY ISSUING APPROPRIATE *BIOM* FUNCTIONS. * * EACH COPY OF *1DA* WILL SUPPORT ONE CONCURRENT CHANNEL * CONFIGURED WITH THE INTELLIGENT PERIPHERAL INTERFACE (IPI) * AND IS THE SOLE DRIVER FOR ALL DAS DISKS ON THAT CHANNEL. * *1DA* MUST BE LOADED INTO A CONCURRENT PP, IN THE SAME * BANK AS THE CHANNEL IT IS TO SERVICE. THIS DRIVER SUPPORTS * THE 10 AND THE 25 MB IPI CHANNELS. WHEN THE DRIVER IS * LOADED IT STATUSES THE CHANNEL TO DETERMINE WHICH ONE IS * PRESENT. IT WILL READ THE CHANNEL SPEED SELECTED IN THE * CONTROLLER USING INTERLOCK MODE. IF THE SPEED IS * INCORRECT, IT WILL SET THE SPEED TO BE THE SAME AS THE * CHANNEL. * * EACH COPY OF THE DRIVER CAN SERVICE UP TO 24 LOGICAL DAS * UNITS IN ANY CONFIGURATION MIX. UP TO 4 CONTROLLERS MAY * BE CONFIGURED; A CONTROLLER MAY BE COUPLED TO EITHER PORT * OF THE IPI ADAPTER. * * *1DA* SCANS THROUGH THE *PUT* ENTRIES IN A CIRCULAR FASHION * LOOKING FOR REQUESTS TO PROCESS. ONCE A REQUEST IS FOUND, * *1DA* USES THE PHYSICAL DISK AND UEM ADDRESSES IN THE * CORRESPONDING *CBT* ENTRY TO DETERMINE THE ACTION TO BE * TAKEN. *1DA* WILL ATTEMPT TO PROCESS CONSECUTIVE REQUESTS * ON THE CURRENT UNIT UNTIL THE END OF THE UNIT I/O QUEUE, * OR A CONSECUTIVE REQUEST WAS NOT FOUND. AT THIS POINT * *1DA* WILL RESUME ITS SEARCH THROUGH THE *PUT* WITH THE * *PUT* ENTRY IMMEDIATELY FOLLOWING THE ONE JUST PROCESSED. SPACE 4,40 *** ORGANIZATION OF THE DAS UNITS (MEASUREMENTS IN DECIMAL). * * EQUIPMENT TYPE EA EB * PRODUCT NUMBER 5832-1 5832-2 * * UNITS/LOGICAL DEVICE 1-8 1-4 * PARTITIONS 1 1 * * PHYSICAL ORGANIZATION * * WORDS/PHYSICAL SECTOR 2048 2048 * PHYSICAL SECTORS/TRACK 3 6 * SPARE SECTORS/CYLINDER 0 0 * PHYSICAL TRACKS/CYLINDER 4 4 * CYLINDERS/DRIVE 844 844 * * LOGICAL ORGANIZATION * * WORDS/LOGICAL SECTOR 64 64 * LOGICAL SECTORS/LOGICAL TRACK 160 320 * LOGICAL TRACKS/DRIVE 2023 2023 * * * EQUIPMENT TYPE EC/ED EE/EF * PRODUCT NUMBER 5833-1/1P 5833-2/2P * * UNITS/LOGICAL DEVICE 1-2 1 * PARTITIONS 1 1 * * PHYSICAL ORGANIZATION * * WORDS/PHYSICAL SECTOR 2048 2048 * PHYSICAL SECTORS/TRACK 6 11 * SPARE SECTORS/CYLINDER 2 2 * PHYSICAL TRACKS/CYLINDER 7 7 * CYLINDERS/DRIVE 1629 1629 * * LOGICAL ORGANIZATION * * WORDS/LOGICAL SECTOR 64 64 * LOGICAL SECTORS/LOGICAL TRACK 992 1920 * LOGICAL TRACKS/DRIVE 2046 2034 * * * EQUIPMENT TYPE EM EN * PRODUCT NUMBER 5833-3P 5833-4 * * UNITS/LOGICAL DEVICE 1 1 * PARTITIONS 2 2 * * PHYSICAL ORGANIZATION * * WORDS/PHYSICAL SECTOR 2048 2048 * PHYSICAL SECTORS/TRACK 17 22 * SPARE SECTORS/CYLINDER 2 2 * PHYSICAL TRACKS/CYLINDER 7 7 * CYLINDERS/DRIVE 1629 1629 * CYLINDERS/PARTITION 814 814 * * LOGICAL ORGANIZATION * * WORDS/LOGICAL SECTOR 64 64 * LOGICAL SECTORS/LOGICAL TRACK 1504 1952 * LOGICAL TRACKS/LOGICAL DEVICE 2023 2025 * * * EQUIPMENT TYPE EG/EH EI/EJ * PRODUCT NUMBER 5838-1/1P 5838-2/2P * * UNITS/LOGICAL DEVICE 1 1 * PARTITIONS 1 2 * * PHYSICAL ORGANIZATION * * WORDS/PHYSICAL SECTOR 2048 2048 * PHYSICAL SECTORS/TRACK 5 9 * SPARE SECTORS/CYLINDER 4 4 * PHYSICAL TRACKS/CYLINDER 9 9 * CYLINDERS/DRIVE 2620 2620 * CYLINDERS/PARTITION 2620 1310 * * LOGICAL ORGANIZATION * * WORDS/LOGICAL SECTOR 64 64 * LOGICAL SECTORS/LOGICAL TRACK 1696 1600 * LOGICAL TRACKS/LOGICAL DEVICE 2025 2015 * * * EQUIPMENT TYPE EK EL * PRODUCT NUMBER 5838-3P 5838-4 * * UNITS/LOGICAL DEVICE 1 1 * PARTITIONS 3 4 * * PHYSICAL ORGANIZATION * * WORDS/PHYSICAL SECTOR 2048 2048 * PHYSICAL SECTORS/TRACK 14 18 * SPARE SECTORS/CYLINDER 4 4 * PHYSICAL TRACKS/CYLINDER 9 9 * CYLINDERS/DRIVE 2620 2620 * CYLINDERS/PARTITION 873 655 * * LOGICAL ORGANIZATION * * WORDS/LOGICAL SECTOR 64 64 * LOGICAL SECTORS/LOGICAL TRACK 1696 1632 * LOGICAL TRACKS/LOGICAL DEVICE 2007 2026 * * * EQUIPMENT TYPE EO/EP ES/EU * PRODUCT NUMBER 47444-1/1P 47444-2/2P * * UNITS/LOGICAL DEVICE 1 1 * PARTITIONS 1 2 * * PHYSICAL ORGANIZATION * * WORDS/PHYSICAL SECTOR 512 1024 * PHYSICAL SECTORS/TRACK 13 13 * SPARE SECTORS/CYLINDER 7 7 * PHYSICAL TRACKS/CYLINDER 15 15 * CYLINDERS/DRIVE 2290 2290 * CYLINDERS/PARTITION 2290 1145 * * LOGICAL ORGANIZATION * * WORDS/LOGICAL SECTOR 64 64 * LOGICAL SECTORS/LOGICAL TRACK 3240B 3240B * LOGICAL TRACKS/LOGICAL DEVICE 3755B 3754B * * * EQUIPMENT TYPE EV EW * PRODUCT NUMBER 47444-3P 47444-4 * * UNITS/LOGICAL DEVICE 1 1 * PARTITIONS 3 4 * * PHYSICAL ORGANIZATION * * WORDS/PHYSICAL SECTOR 1024 1024 * PHYSICAL SECTORS/TRACK 19 25 * SPARE SECTORS/CYLINDER 7 7 * PHYSICAL TRACKS/CYLINDER 15 15 * CYLINDERS/DRIVE 2290 2290 * CYLINDERS/PARTITION 763 572 * * LOGICAL ORGANIZATION * * WORDS/LOGICAL SECTOR 64 64 * LOGICAL SECTORS/LOGICAL TRACK 3200B 3200B * LOGICAL TRACKS/LOGICAL DEVICE 3764B 3744B SPACE 4,20 *** TRANSFER RATES * * 1. MAXIMUM TRANSFER RATE OF PP IF 10 MB IPI CHANNEL, 16 KB * SECTOR SIZE, AND CPU RESPONSE TIME IS IMMEDIATE. * * SECTORS STREAMED / PP OVERHEAD + SECTORS * (1.6384 + .150) * * USE SECTORS = 96 (8 SSD CYLINDERS) * * RATE = 96 * 16384 1572864 * ----------------- = ------- = 9.06 MB/S * 2 + 96 * (1.7884) 173.686 * * = 11310 KCHAR/S * * 2. MAXIMUM RATE FOR SSD IF 10 MB IPI CHANNEL, 16 KB SECTOR * SIZE, AND CPU RESPONSE TIME IS IMMEDIATE. * * BYTES FOR 8 CYLINDERS * RATE = ------------------------------------------------------- * PP+CTR OVERHEAD + 8 CYL SWITCHES+SEC. * (1.6384 + 150) * * * 1572864 * = -------------------------- = 8.83 MB/S * 2 + 2 + 2.4 + 96 * (1.7884) * * = 11040 KCHAR/S * * 3. MAXIMUM RATE FOR 5833-1 IF 10 MB IPI CHANNEL, 16 KB SECTOR * SIZE, AND CPU RESPONSE TIME IS IMMEDIATE. * * CYLINDER SWITCH = 5.5 MILLISECONDS * * * BYTES FOR 8 CYLINDERS * RATE = ------------------------------------------------ * 8 CYL SWITCHES + ((HEADS * CYL) + 1) * 16.66666 * * * 40 * 16384 * 8 5242880 * RATE = ------------------ = ------------ = 5.27 MB/S * 44 + 57 * 16.6666 994 * * = 6593 KCHAR/S * * 4. MAXIMUM RATE FOR 5833-2 IF 10 MB IPI CHANNEL, 16 KB SECTOR * SIZE, AND CPU RESPONSE TIME IS IMMEDIATE. * * CYLINDER SWITCH = 11 MILLISECONDS * * BYTES FOR 8 CYLINDERS * RATE = ------------------------------------------------ * 8 CYL SWITCHES + ((HEADS * CYL) + 1) * 16.66666 * * * 75 * 16384 * 8 9830400 * RATE = ------------------ = ------------ = 9.45 MB/S * 88 + 57 * 16.6666 1040 * * * = 11810 KCHAR/S * * NOTE - SINCE THIS IS GREATER THAN THE RATE THE PP CAN MAINTAIN, * YOU MUST USE THE RATE THE PP CAN MAINTAIN (11310 KCHAR/S). * * 5. MAXIMUM TRANSFER RATE OF PP IF 25 MB IPI CHANNEL, 16 KB * SECTOR SIZE, AND CPU RESPONSE TIME IS IMMEDIATE. * * SECTORS STREAMED / PP OVERHEAD + SECTORS * (.65536 + 150) * * USE SECTORS = 96 (8 SSD CYLINDERS) * * RATE = 96 * 16384 1572864 * ----------------- = ------- = 20.34 MB/S * 2 + 96 * (.80536) 77.316 * * = 25430 KCHAR/S SPACE 4,35 *** MEASURED TRANSFER RATES. * MAINFRAME = 860/870 * MST(N=400000,P=6) TO GET TIMING VALUES. * * NOTE - THE NUMBER OF DRIVES CONFIGURED PER DRIVER AND THE * INTERRUPT SIZE (PHYSICAL SECTORS) FOR WRITES COULD * AFFECT PERFORMANCE. * * NOTE- BUFFER THRESHOLD VALUES USED WERE 4,3,3. CHANGING * THE BUFFER VALUES TO 1,3,3 FOR 583X DRIVES INCREASED * RANDOM READS APPROXIMATELY 30 PERCENT AND DID NOT * HURT OTHER VALUES. * * NOTE- A FIELD LENGTH OF 60000 WAS USED WHEN RUNNING MST. * USE OF A SMALLER FIELD LENGTH COULD CAUSE PERFORMANCE * NUMBERS TO DECREASE. * * SEQ. SEQ. RANDOM RANDOM * UNITS INT. WRITE READ READ WRITE * TYPE DEFINED SIZE KC/S KC/S IO/S IO/S CHANNEL * ------------------------------------------------------------- * 5832-1 1 NA 9448 9306 78.2 59.9 IPI-10 * 5832-2 1 NA 10009 9980 73.6 53.9 IPI-10 * 5833-1 1 2 6669 6765 31.8 25.4 IPI-10 * 5833-2 1 2 9996 9379 36.3 27.0 IPI-10 * 5833-3 1 2 9945 9956 36.0 26.4 IPI-10 * 5833-4 1 2 9983 10078 37.2 16.4 IPI-10 * 5838-1 1 2 8180 8172 44.4 27.9 IPI-10 * 47444-1 1 8 4097 4232 29.1 16.4 IPI-10 * 47444-2 1 4 8191 9525 33.5 17.8 IPI-10 * 47444-3 1 4 8792 9594 32.1 16.6 IPI-10 * 47444-4 1 4 9161 9713 32.8 17.0 IPI-10 * 5832-1 1 NA 9886 10032 88.2 66.9 IPI-25 * 5832-2 1 NA 12894 8157 119.1 79.8 IPI-25 * 5833-1 1 2 6649 6774 32.9 25.9 IPI-25 * 5833-2 1 2 11975 8078 40.4 27.5 IPI-25 * 5833-3 1 2 * 5833-4 1 2 * 5838-1 1 2 8067 8205 44.3 26.9 IPI-25 * 5838-2 1 2 * 5838-3 1 2 * 5838-4 1 2 * 47444-1 1 8 IPI-25 * 47444-2 1 4 IPI-25 * 47444-3 1 4 IPI-25 * 47444-4 1 4 IPI-25 * 9853 1 8 3087 3130 21.7 17.2 IPI-10 * 887-4K 1 11210 10958 35.3 18.9 ISI SPACE 4,10 *** CALL. * *T 18/ DRN, 6/ CP, 6/ CO, 18/, 7/ 1, 5/ CH * * DRN DRIVER NAME. * CP CONTROL POINT NUMBER (MUST BE SYSTEM CP). * CO CHANNEL TABLE ORDINAL (SET BY *CPUMTR*). * CH CHANNEL NUMBER BEING SERVICED BY THIS PP. SPACE 4,10 *** DAYFILE MESSAGES. * * DRN - UNAUTHORIZED CALL. * * THE DRIVER (NAMED *DRN*) WILL ISSUE THIS MESSAGE AND ABORT * IF NOT ASSIGNED TO THE SYSTEM CONTROL POINT. SPACE 4,20 *** ERRLOG MESSAGES. * * EQORD,TKNNNN, MEDIA DEFECT ENCOUNTERED. * * A MEDIA DEFECT HAS BEEN ENCOUNTERED ON EQUIPMENT WITH EST * ORDINAL ORD, LOGICAL TRACK NNNN. A REQUEST HAS BEEN ISSUED * TO AUTOMATICALLY FLAW THIS TRACK WHEN IT IS DROPPED. * * * CHCC MH427-DXX,CMN. * * CONTROLLER N ON CHANNEL CC IS RUNNING MICROCODE REVISION * LEVEL XX. * * * YYZZZ, UNN, CMA CONTROLLER DISABLED, CCHBB. * * CONTROLLER A ON CONCURRENT CHANNEL BB HAS BEEN DISABLED. * THIS DRIVER WILL NO LONGER TRY TO USE THIS CONTROLLER. * THIS ACTION WAS TAKEN AS A RESULT OF ERROR PROCESSING FOR * DRIVE NN OF THE LOGICAL UNIT WITH DRIVE TYPE YY AND EST * ORDINAL ZZZ. ACCESS TO THIS CONTROLLER MAY BE REENABLED * BY ENTERING AN *UP,CCH* COMMAND FOR THE AFFECTED CHANNEL. * * * YYZZZ, UNN, CMA CONTROLLER ENABLED, CCHBB. * * CONTROLLER A ON CONCURRENT CHANNEL BB HAS BEEN REENABLED. * THIS DRIVER WILL NOW ATTEMPT TO USE THIS CONTROLLER AGAIN. * THIS ACTION WAS TAKEN IN RESPONSE TO AN *UP,CCH* COMMAND * FOR THIS CHANNEL. * * * YYZZZ, UNN, CMA RESET ON CCHBB. * * A SLAVE RESET HAS BEEN INITIATED ON CONTROLLER A ON * CONCURRENT CHANNEL BB, AS PART OF ERROR PROCESSING FOR * DRIVE NN OF THE LOGICAL UNIT WITH DRIVE TYPE YY AND EST * ORDINAL ZZZ. * * * YYZZZ, UNN, CMA RESET COMPLETE. * * THE SLAVE RESET OF CONTROLLER A, WHICH WAS INITIATED AS * PART OF ERROR PROCESSING FOR DRIVE NN OF THE LOGICAL UNIT * WITH DRIVE TYPE YY AND EST ORDINAL ZZZ, IS COMPLETE. * * * YYZZZ, UNN, CMA RESET FAILURE. * * THE SLAVE RESET OF CONTROLLER A, WHICH WAS INITIATED AS * PART OF ERROR PROCESSING FOR DRIVE NN OF THE LOGICAL UNIT * WITH DRIVE TYPE YY AND EST ORDINAL ZZZ, HAS FAILED. * * * YYZZZ, UNN, FORMAT COMPLETE. * * THE FORMAT OF DRIVE NN OF THE LOGICAL UNIT WITH DRIVE TYPE * YY AND EST ORDINAL ZZZ IS COMPLETE. * * * YYZZZ, UNN, FORMAT INITIATED. * * A FORMAT HAS BEEN INITIATED ON DRIVE NN OF THE LOGICAL UNIT * WITH DRIVE TYPE YY AND EST ORDINAL ZZZ. * * * YYZZZ, UNN,PS=XXXXXX. * * THE DAS UNIT, NN, WITH DEVICE TYPE YY AND ORDINAL ZZZ HAS * THE PACK SERIAL NUMBER XXXXXX. * * * YYZZZ, UNN, PARITY PROTECTION DISABLED. * * DRIVE NN OF THE LOGICAL UNIT WITH DRIVE TYPE YY AND ORDINAL * ZZZ HAS BEEN SET OFF LINE. * * * YYZZZ, UNN, PARITY PROTECTION RESTORED. * * DRIVE NN OF THE LOGICAL UNIT WITH DRIVE TYPE YY AND ORDINAL * ZZZ HAS BEEN RESTORED. * * * YYZZZ, UNN, PARITY RESTORE INITIATED. * * A PARITY RESTORE HAS BEEN INITIATED ON DRIVE NN OF THE * LOGICAL UNIT WITH DRIVE TYPE YY AND ORDINAL ZZZ. SPACE 4,10 *** OPERATOR MESSAGES. * * EQORD, SPIN UP PENDING. * * EQORD UNN FORMATTING. * * CMX BEING RESET ON CCHNN. * * MR ERROR. SPACE 4,15 *** DISK ERROR PROCESSING. * * THE DRIVER MAINTAINS A COUNTER OF THE NUMBER OF RETRIES * NECESSARY TO SUCCESSFULLY PROCESS A REQUEST. IF THE * ERROR COUNT IS NON-ZERO WHEN A REQUEST IS COMPLETED, THE * DRIVER WILL LOG A BML MESSAGE AND INCREMENT THE RECOVERED * ERROR COUNT IN THE MST. * * IF THE ERROR COUNT REACHES *MERC* BEFORE THE REQUEST IS * SUCCESSFULLY COMPLETED, THE DRIVER WILL SET AN ERROR CODE * IN THE *CBT*, LOG A FATAL ERROR IN THE BML, AND INCREMENT * THE UNRECOVERED ERROR COUNT IN THE MST. SPACE 4,10 *** CONFIGURATION NOTES. * * IN A DUAL ACCESS ENVIRONMENT, THE SAME EQUIPMENT NUMBER MUST * BE SET FOR THE PORT IN USE ON EACH CONTROLLER. SPACE 4,20 *** SPECIAL PROGRAMMING NOTES. * * THE FOLLOWING IS A LIST OF SPECIAL NOTES THAT SHOULD BE * READ AND UNDERSTOOD BEFORE ANY MODIFICATIONS ARE MADE TO * THIS PROGRAM. * * * 1) WHERE POSSIBLE, *CMR* POINTERS HAVE BEEN PLUGGED BY THE * PRESET ROUTINE TO IMPROVE THE EXECUTION SPEED OF THE * PROGRAM AND TO MINIMIZE THE AMOUNT OF CODE. * * 2) SUBROUTINE *IMR* ISSUES A *BIOM* REQUEST TO *CPUMTR* * WITHOUT WAITING FOR THE REQUEST TO COMPLETE. THEREFORE, * BEFORE WRITING THE OUTPUT REGISTER FOR ANY OTHER MONITOR * FUNCTION, SUBROUTINE *CMC* MUST BE CALLED TO ENSURE ANY * PREVIOUS *BIOM* REQUEST IS COMPLETE. TO ENSURE THAT THIS * LOGIC IS FOLLOWED, THE *MONITOR* MACRO IS REDEFINED TO * CALL SUBROUTINE *IMF* RATHER THAN *PPR* SUBROUTINE *FTN*. * * 3) THE DEVICE STATE TABLE COMPLETELY OVERLAYS *PPR*. * THEREFORE, IT IS NOT POSSIBLE TO CALL ANY *PPR* ENTRY * POINT AFTER SUBROUTINE *IST* IS CALLED IN *3DZ*. SPACE 4,25 *** INFORMATIVE BML MESSAGES. * * SOME MESSAGES MAY BE LOGGED AT DRIVE INITIALIZATION TIME THAT * ARE INFORMATIVE RATHER THAN HARDWARE ERRORS. * * 1) IF A DRIVE IS FORMATTED FOR NOS/VE, THEN USED BY NOS IN * DUAL ACCESS MODE, THE DRIVE WILL BE FORMATTED THROUGH * ONE PATH, BUT THE CONTROLLER ON THE OTHER PATH DOES NOT * YET KNOW A FORMAT CHANGE OCCURRED. IF THE NUMBER OF * PHYSICAL DRIVES PER LOGICAL UNIT REMAINS THE SAME, A * LOGICAL RESET WILL BE REQUIRED. EXAMPLE OF RESPONSE * RETURNED. * * 0016 0132 0600 0018 0DE1 0000 0101 0000 C0FE 0000 1000 * * IF THE NUMBER OF PHYSICAL DRIVES PER LOGICAL UNIT * CHANGES, A SLAVE RESET WILL BE REQUIRED ON THE SIDE THAT * DOES NOT DO THE FORMAT/CLUSTER. * * 2) IF THE SYSTEM IS DEADSTARTED WHILE I/O REQUESTS ARE IN * PROGRESS OR A CHANNEL IS DOWNED WHEN I/O IS IN PROGRESS, * A DRIVE COULD BE LEFT RESERVED. THE NEXT TIME THE DRIVE * IS ACCESSED, A RECOVERABLE ERROR MAY OCCUR. IF A DRIVE * IS BUSY, THE DRIVE RESET, STEP 2 OF ERROR RECOVERY, WILL * BREAK THE RESERVE. SPACE 4,10 ** COMMON DECKS. *CALL COMPMAC RICHI$ EQU 1 SELECT DEFERRED INSTRUCTION MODIFICATION LCHI$ EQU 1 SELECT CONL FOR CHANNEL ADDRESS TABLE *CALL COMPCHI *CALL COMSCPS QUAL$S SET 0 REMOVE QUALIFICATION OF COMSDFS CONSTANTS *CALL COMSDFS *CALL COMSEVT LIST X *CALL COMSHIO LIST * QUAL IOU *CALL COMSIOU QUAL * QUAL MMF *CALL COMSMMF QUAL * *CALL COMSMSC *CALL COMSMSP *CALL COMSMST *CALL COMSPIM *CALL COMS1DS SPACE 4,10 ** INTERFACE SPECIFICATIONS. DN MICRO 1,3,*1DA* DEFAULT DRIVER NAME TITLE CONSTANTS AND DEFINITIONS. SPACE 4,10 **** DIRECT CELL ALLOCATION. NR EQU 15 - 21 NEXT REQUEST WB EQU 22 - 26 CM WORD BUFFER * THE NEXT FIVE LOCATIONS ARE ORDER DEPENDENT. PB EQU 27 PREVIOUS CONTROL BUFFER ORDINAL CB EQU 30 CURRENT CONTROL BUFFER ORDINAL NB EQU 31 NEXT CONTROL BUFFER ORDINAL UA EQU 32 - 33 UEM ADDRESS / 100 EO EQU 34 EST ORDINAL DN EQU 35 DRIVE NUMBER CI EQU 36 CONTROLLER STATE TABLE ADDRESS CN EQU 37 CONTROLLER NUMBER MS EQU 40 MAJOR STATUS (RESPONSE PACKET) RT EQU 41 STATUS RESPONSE TYPE TM EQU 42 TRANSFER MODE, 0 = STREAM DATA DT EQU 43 DRIVE TYPE UC EQU 44 UNIT ACTIVITY COUNT RW EQU 45 READ / WRITE FLAG PA EQU 46 PROCESSOR ADDRESS DI EQU 47 DEVICE STATE TABLE ADDRESS CT EQU IR CHANNEL TYPE, 0 = 10 MB CHANNEL FC EQU IR+1 FORMAT COMPLETE FOR ALL UNITS IF NONZERO DD EQU IR+2 NUMBER OF DATA DRIVES IN DEVICE MF EQU IR+3 MASTER CLEAR CHANNEL ERROR IF NONZERO CR EQU 57 CHANNEL RESERVED IF NONZERO RF EQU 60 RESET IN PROGRESS IF NONZERO LF EQU 61 LAST FUNCTION PD EQU 62 NUMBER OF PARITY DRIVES IN DEVICE CW EQU 63 - 67 CM WORD BUFFER **** SPACE 4,10 ** IPI ADAPTER FUNCTION CODES. F0000 EQU 0#0000 MASTER CLEAR F00E1 EQU 0#00E1 READ STATUS REGISTER F0100 EQU 0#0100 CLEAR DMA ERROR F0102 EQU 0#0102 READ IPI REVISION REGISTER F0300 EQU 0#0300 WRITE CONTROL REGISTER F0700 EQU 0#0700 READ OPERATIONAL STATUS F0800 EQU 0#0800 DMA TERMINATE F0A00 EQU 0#0A00 READ T REGISTER F0B00 EQU 0#0B00 WRITE T REGISTER F0C00 EQU 0#0C00 DMA READ FROM ADAPTER F0D00 EQU 0#0D00 DMA WRITE TO ADAPTER F0E00 EQU 0#0E00 CLEAR T REGISTER F0062 EQU 0#0062 PORT A SELECT F0862 EQU 0#0862 PORT B SELECT SPACE 4,10 ** IPI CHANNEL FUNCTION CODES. F0029 EQU 0#0029 SELECT CONTROLLER (SET SELECT OUT) F005B EQU 0#005B DEFINE INFORMATION TRANSFER (SET SYNC OUT) F0071 EQU 0#0071 DESELECT CONTROLLER (CLEAR SELECT OUT) F0711 EQU 0#0711 CLEAR MASTER OUT F0715 EQU 0#0715 ENABLE INTERRUPTS (SET MASTER OUT) F8025 EQU 0#8025 REQUEST TRANSFER MODE (SET MASTER OUT) F8039 EQU 0#8039 MASTER STATUS (CLEAR MASTER OUT) F8215 EQU 0#8215 RESET LOGICAL INTERFACE (SET MASTER OUT) F8415 EQU 0#8415 RESET SLAVE (SET MASTER OUT) F9213 EQU 0#9213 MASTER RESET SLAVES (SET SYNC OUT) * DATA TRANSFER FUNCTIONS. F0081 EQU 0#0081 READ INTERLOCKED F0181 EQU 0#0181 WRITE INTERLOCKED F0281 EQU 0#0281 READ STREAMING F0381 EQU 0#0381 WRITE STREAMING SPACE 4,10 ** COMMAND / RESPONSE PACKET DEFINITIONS. PLN EQU 0 PACKET LENGTH CRN EQU 1 COMMAND REFERENCE NUMBER OPC EQU 2 OPERATION CODE CUN EQU 3 CONTROLLER + UNIT NUMBER FCP EQU 4 FIRST COMMAND PARAMETER MST EQU 4 MAJOR STATUS * MAJOR STATUS RESPONSE TYPES. CMCT EQU 1 COMMAND COMPLETE ASRT EQU 4 ASYNCHRONOUS RESPONSE XFNT EQU 5 TRANSFER NOTIFICATION * MAJOR STATUS CODES. CMCS EQU 0#12 COMMAND COMPLETE (CONDITIONAL SUCCESS) CMSS EQU 0#18 COMMAND COMPLETE (SUCCESSFUL) ASRS EQU 0#40 ASYNCHRONOUS RESPONSE XFNS EQU 0#50 TRANSFER NOTIFICATION IOPL EQU 20 I/O COMMAND PACKET LENGTH RPBFL EQU 77 RESPONSE PACKET BUFFER LENGTH SPACE 4,10 ** COMMAND PACKET OPERATION CODES. C0200 EQU 0#0200 REPORT ATTRIBUTES C0202 EQU 0#0202 RESTORE ATTRIBUTES C0209 EQU 0#0209 LOAD ATTRIBUTES C020A EQU 0#020A SAVE ATTRIBUTES C0301 EQU 0#0301 REPORT ADDRESSEE CONDITION C0302 EQU 0#0302 REPORT ADDRESSEE STATUS C0700 EQU 0#0700 SET OPERATING MODE C0800 EQU 0#0800 ABORT (DRIVE RESET) C1005 EQU 0#1005 BLOCK READ C2005 EQU 0#2005 BLOCK WRITE C280E EQU 0#280E FORMAT C8100 EQU 0#8100 DRIVE DIAGNOSTICS CE005 EQU 0#E005 RESTORE DRIVE SPACE 4,10 ** COMMAND PACKET PARAMETER ID-S. P02D1 EQU 0#02D1 PERFORMANCE LOGGING P0254 EQU 0#0254 DRIVE RESET P02D2 EQU 0#02D2 MASTER TERMINATE P02D3 EQU 0#02D3 EXTENT RESPONSE P02D4 EQU 0#02D4 ENABLE ASYNCS P02D5 EQU 0#02D5 PHYSICAL DRIVE P0351 EQU 0#0351 DISK MODES P036C EQU 0#036C REQUEST ATTRIBUTE P0931 EQU 0#0931 COMMAND EXTENT P0568 EQU 0#0568 FACILITIES ATTACHED P0968 EQU 0#0968 FACILITIES ATTACHED P0D68 EQU 0#0D68 FACILITIES ATTACHED P1168 EQU 0#1168 FACILITIES ATTACHED SPACE 4,10 ** SUBSTATUS PARAMETER ID CODES. ID16 EQU 0#16 MACHINE EXCEPTION FOR CONTROLLER ID17 EQU 0#17 COMMAND EXCEPTION FOR CONTROLLER ID23 EQU 0#23 MESSAGE EXCEPTION ID24 EQU 0#24 INTERVENTION REQUIRED FOR DRIVE ID26 EQU 0#26 MACHINE EXCEPTION FOR DRIVE ID29 EQU 0#29 CONDITIONAL SUCCESS ID32 EQU 0#32 RESPONSE EXTENT (COMMON) SPACE 4,10 ** INFORMATION TRANSFER DEFINITIONS. CIOT EQU 0 COMMAND - INFORMATION OUT RIIN EQU 1 RESPONSE - INFORMATION IN DAOT EQU 2 DATA - INFORMATION OUT DAIN EQU 3 DATA - INFORMATION IN SPACE 4,10 ** MAINTENANCE REGISTER REQUEST CODE SYMBOLS. MR EQU /IOU/MR MAINTENANCE CHANNEL IOUC EQU /IOU/IOUC+/IOU/MRRD READ CONNECT CODE RMRF EQU /IOU/MRRD-/IOU/MRRD READ REGISTER WMRF EQU /IOU/MRWT-/IOU/MRRD WRITE REGISTER RFMR EQU RMRF*10000+/IOU/FMCR READ FAULT MASK REGISTER RCSR EQU RMRF*10000+/IOU/C0CR READ CHANNEL STATUS REGISTER WFMR EQU WMRF*10000+/IOU/FMCR WRITE FAULT MASK REGISTER SPACE 4,10 ** INITIAL OR FINAL FAULT ANALYSIS CODES. ECIE EQU 2 IPI CHANNEL ERROR FLAG (CHPE) ECHF EQU 7 CHANNEL HUNG FULL (CHFE) ETIT EQU 10 CONTROLLER INTERRUPT TIMEOUT (FTOE) ETFN EQU 11 CHANNEL FUNCTION TIMEOUT EDPE EQU 14 MEDIA ERROR (PARE) *EDNR EQU 20 USED BY 9853 (NRDE) EIDT EQU 24 INCOMPLETE DATA TRANSFER (IDTE) ERSS EQU 30 RESERVED SUBSTATUS (ID X1) (DSTE) EDFM EQU 31 DEFECT MANAGEMENT ERROR (ID X2) EMME EQU 32 MESSAGE/MICROCODE EXCEPTION (ID X3) ETSL EQU 33 SELECT TIMEOUT ESUF EQU 34 SPIN-UP FAILURE (DSTE) ESDF EQU 35 SPIN-DOWN FAILURE *ETTC EQU 36 USED BY 9853 EIVR EQU 37 INTERVENTION REQUIRED (ID X4) EAPR EQU 40 ALTERNATE PORT EVENT (ID X5) (DSTE) EMEX EQU 41 MACHINE EXCEPTION (ID X6) ECEX EQU 42 COMMAND EXCEPTION (ID X7) EFDF EQU 43 FORMAT DRIVE FAILURE EIOS EQU 44 I/O INITIATION ERROR (DSTE) *ERPE EQU 45 USED BY 9853 *ERDS EQU 46 USED BY 9853 EROD EQU 47 RESTORE OFF-LINE DRIVE ERROR ECMA EQU 50 COMMAND ABORTED (ID X8) (DSTE) ECCS EQU 51 CONDITIONAL SUCCESS (ID X9) ECIC EQU 52 COMMAND INCOMPLETE (ID XA) EUST EQU 53 SUCCESSFUL NOT SET IN ENDING STATUS EDTF EQU 54 DIAGNOSTIC FAULT (DDFE) *EDRS EQU 55 USED BY 9853 ECNR EQU 60 SLAVE/SYNC IN SIGNAL ERROR (RAME) ELCA EQU 61 LOAD CONTROLLER ATTRIBUTES FAILURE ESRE EQU 62 SELECTIVE RESET ERROR ERDA EQU 63 REPORT DEVICE ATTRIBUTES ERROR EBAE EQU 64 BUS ACKNOWLEDGE ERROR (RAME) ECOT EQU 65 CONTROLLER OVER TEMPERATURE EDRE EQU 70 DRIVE RESERVE ERROR (DRVE) ECRE EQU 74 USED BY 9853 (RAME) ECMD EQU 75 CONTROLLER DEAD WDTP EQU 100 WRONG DRIVE TYPE (DSTE) PNSP EQU 101 PARALLEL NOT SUPPORTED PDPD EQU 102 PARITY DRIVE PROTECTION DISABLED PDPE EQU 103 PARITY DRIVE PROTECTION ENABLED SPACE 4,10 ** CHANNEL STATUS FAULT CODES. ECPE EQU 1 CHANNEL PARITY ERROR *ECIE EQU 2 IPI CHANNEL ERROR FLAG ECER EQU 4 CHANNEL DETECTED ERROR ECCM EQU 5 CHANNEL DETECTED CM ERROR SPACE 4,10 ** DEVICE STATE TABLE DEFINITIONS. (LDM XXXX,DI) BEGIN BSSN 0 PUTO BSSN 1 *PUT* ORDINAL PNUN BSSN 1 4/C, 3/P, 3/E, 6/U WHERE C = *CSTB* INDEX P = PORT NUMBER E = EQUIPMENT (CONTROLLER) NUMBER U = UNIT NUMBER ADDR BSSN 1 NO ATTENTION RETURN ATTN BSSN 1 ATTENTION RETURN IDTR BSSN 1 RETURN ADDRESS FROM *IDT* EEST BSSN 1 EXPECTED EXECUTION STATUS RWST BSSN 1 READ / WRITE STATUS RQLN BSSN 1 1/U, 11/R WHERE U = UNIT INTERLOCK SET (IN *PUT*) R = NUMBER OF REQUESTS PROCESSED CSCT BSSN 1 CUMULATIVE SECTOR COUNT CYLN BSSN 1 CYLINDER ON SEEK PHYD BSSN 1 PHYSICAL DRIVE TKSN BSSN 1 TRACK, SECTOR FOR I/O ERCT BSSN 1 ERROR COUNT SREQ BSSN 1 SPECIAL REQUEST IPPS BSSN 1 I/O PREPROCESSING STATUS LCMD BSSN 1 LAST COMMAND OP CODE IOST BSSN 1 READ/WRITE STATUS DVTP BSSN 1 9/XX, 1/0, 6/YY WHERE XX = BIT 15 PARTITIONED DEVICE BIT 14 PROCESS LOST PARITY BIT 13 CHECK DRIVE TYPE BIT 12 MMF RESTORE / ACCESS DISABLED BIT 11 MMF RESTORE / ACCESS ENABLED BIT 10 ENABLE MMF PARITY DEV. ACCESS BIT 09 MMF SHARED DEVICE BIT 08 MMF RESTORE INITIATION BIT 07 CHECK MMF PARITY ACCESS YY = DRIVE TYPE (0 = EA, 1 = EB, ... ) OUPD BSSN 1 OFFLINE UNIT OF PARITY DEVICE SEPR BSSN 1 RETURN ADDRESS FROM *SEP* OR *WAC* DSTBE BSSN 0 LENGTH OF STATE TABLE ENTRY END BSSN SPACE 4,10 ** CSTB - CONTROLLER STATE TABLE. (LDML XXXX,CI) BEGIN BSSN 0 CTST BSSN 1 CONTROLLER STATUS * 1/S, 1/R, 1/D, 1/0, 12/FD * S = SLAVE RESET IN PROGRESS * R = INITIAL LOGICAL RESET REQUIRED (DRIVER STARTUP) * D = CONTROLLER DEAD (SLAVE RESET FAILED) * FD = *DST* ADDRESS OF FIRST DEVICE ON CONTROLLER. * * NOTE - COMMANDS AND RESPONSES WILL BE TRANSFERRED IN * INTERLOCK MODE IF *CTST* BIT 15, 14 OR 13 IS SET. CTSN BSSN 3 CONTROLLER SERIAL NUMBER (LAST 6 DIGITS) CSTBE BSSN 0 LENGTH OF CONTROLLER STATE TABLE ENTRY END BSSN SPACE 4,10 **** ASSEMBLY CONSTANTS. TE EQU 0 = 1 TO ENABLE COMMAND/RESPONSE TRACING DE EQU 0 = 1 TO ENABLE DEBUG MODE BPB EQU 16384D BYTES PER BUFFER / DATA BURST CH EQU 16 CHANNEL NUMBER MXCN EQU 4 MAXIMUM NUMBER OF CONTROLLERS / DRIVER MXND EQU 30 MAXIMUM NUMBER OF UNITS / DRIVER CBTO EQU 30D NORMAL COMMAND BLOCK TIMEOUT (SECONDS) FMTO EQU 12D*60D FORMAT TIMEOUT (SECONDS) (UPPED FOR 47444) SUTO EQU 8D*60D SPIN UP TIMEOUT (SECONDS) SRTO EQU 9D*60D SLAVE RESET TIMEOUT (SECONDS) DRFM EQU 1000 DIRECTION FLAG MASK ILFM EQU 4000 INTERLOCK FLAG MASK CSRC EQU 4 RETRY COUNT TO MAKE CHANNEL SWITCH SRRC EQU 2 RETRY COUNT TO ISSUE SLAVE RESET MERC EQU CSRC*2 RETRY COUNT TO SET UNRECOVERABLE IRBR EQU 3 I/O REQUESTS BEFORE NEXT RESTORE SBUR EQU 20D SECONDS BETWEEN *UTRS* REQUESTS **** SPACE 4,10 * MEMORY LAYOUT. DSTB EQU 100 START OF DEVICE STATE TABLES DSTBL EQU DSTB+DSTBE*MXND LWA+1 OF DEVICE STATE TABLES ERRNG 7777-DSTBL DI IS IN *CTST* BITS 0-11 ONLY CSTB EQU DSTBL CONTROLLER STATE TABLE CSTBL EQU CSTB+CSTBE*MXCN LWA+1 OF CONTROLLER STATE TABLES OCMD MAX CSTBL,MSFW+5 DRIVER ORIGIN SPACE 4,10 * LAYOUT OF ERROR DATA BUFFERS. BEGIN BSSN 0 REAL TIME ERROR DATA EXST BSSN 1 ENDING STATUS BSSN 2 RESERVED LSCC BSSN 1 LAST SLAVE COMMAND LCFN BSSN 1 LAST CHANNEL FUNCTION CREG BSSN 4 CHANNEL REGISTER DATA BSSN 3 RESERVED TREG BSSN 3 CONTENTS OF T REGISTER RTEDL EQU * EMBF BSSN 0 ERROR MESSAGE BUFFER BSSN 3*5 BML MESSAGE PREFIX AND HEADER CODE BSSN 1 INITIAL FAULT CODE FCS1 BSSN 1 FAULT CODE - ERROR STEP 1 FCS2 BSSN 1 FAULT CODE - ERROR STEP 2 FCS3 BSSN 1 FAULT CODE - ERROR STEP 3 FALT BSSN 1 FINAL FAULT CODE EREA BSSN 1 ERROR RECOVERY ENTRY ADDRESS RBCT BSSN 1 RESIDUAL BYTE COUNT STCT BSSN 1 SECTORS TRANSFERED COUNT ICYL BSSN 1 CYLINDER ON INITIAL SEEK ITAS BSSN 1 TRACK + SECTOR ON INITIAL SEEK .3 SET *-EMBF+4 EMBFS EQU .3/5 EMBF1 EQU EMBFS*5+EMBF .1 SET RTEDL*4 .2 SET .1-.1/3*3+2 .3 SET .1/3+.2/3+4 EMBF2 EQU .3/5*5+EMBF1 EMBF2L EQU EMBF2/5 .1 SET RPBFL*4 .2 SET .1-.1/3*3+2 .3 SET .1/3+.2/3+4 EMBFL EQU .3/5*5+EMBF2 END BSSN EDBFL EQU RTEDL+EMBFL TITLE MACROS. ** MACRO DEFINITIONS. TBLM SPACE 4,10 ** TBLM - CREATE MASS STORAGE DEVICE TABLE ENTRIES. * PURGMAC TBLM TBLM MACRO TY .A1 IFGE AI_TY,AIAB .A2 IFLT AI_TY,AIAE * 1/PARITY DRIVES, 3/DATA DRIVES, 12/MNEMONIC DM RMT EQ_TY EQU *-DM VFDL 1/BF_TY-6,3/PDD_TY,12/2R_TY DM RMT * PHYSICAL SECTORS PER CYLINDER. PSCY RMT CON PTCY_TY*PSPT_TY-SPSC_TY PSCY RMT .A SET CYPN_TY-1 .B SET PTCY_TY*PSPT_TY-SPSC_TY .A SET .A*.B .C SET MCLT_TY-4000B .D SET SL_TY/LSPS_TY .C SET .D*.C .A SET .A-.C+1 .A SET .A/PSBF_TY*PSBF_TY IFGT .A,10B*.B,1 .A SET 10B*.B STS_TY EQU .A * 7/BML MESSAGE DEVICE CODE, 9/STREAMING END-CASE SECTORS. STS RMT VFDL 7/MLID_TY,9/STS_TY STS RMT * 4/LOGICAL TO PHYSICAL SHIFT, 12/LAST CYLINDER ON UNIT. CYUN RMT VFDL 4/CFS_TY,12/CYUN_TY-1 CYUN RMT * 4/PHYSICAL SECTORS PER BUFFER, 12/MAINTENANCE CYLINDER. MC RMT VFDL 4/PSBF_TY,12/CYPN_TY-1 MC RMT * 6/LAST TRACK ON CYLINDER, 6/LAST SECTOR ON CYLINDER + 1 LSOC RMT VFD 6/PTCY_TY-1,6/PSPT_TY-SPSC_TY LSOC RMT * BYTES PER SECTOR + PHYSICAL SECTORS PER PHYSICAL TRACK. BPS RMT CONL 16384D/PSBF_TY+PSPT_TY BPS RMT * MODEL NUMBER (LAST TWO BYTES). MN RMT CONL MDL_TY MN RMT .A2 ENDIF .A1 ENDIF TBLM ENDM SPACE 4 TBL "MSEQ" GENERATE DEVICE ATTRIBUTE TABLES TBLM SPACE 4,10 ** TBLM - CREATE TABLE ENTRY MACRO. * *NAM TBLM * * ENTRY NAM = TABLE NAME. * * EXIT NAM_E MACRO DEFINED. PURGMAC TBLM MACRO TBLM,NAM PURGMAC NAM_E NAM_E MACRO ADDR LOCAL A MACREF NAM_E NOREF A A EQU ADDR T_NAM RMT CONL A RMT TBLM ENDM CBTE SPACE 4,15 ** CBTE - CONTROL BUFFER TABLE ENTRY. * * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCBT* * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH * REQUIRES THE FWA OF THE CONTROL BUFFER TABLE. * * CBTE ADDR * * ENTRY (ADDR) = ADDRESS OF INSTRUCTION. * * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TCBT*. CBT TBLM CCTE SPACE 4,15 ** CCTE - CHANNEL CONTROL TABLE ENTRY. * * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCCT* * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH * REQUIRES THE FWA OF THE CHANNEL CONTROL TABLE. * * CCTE ADDR * * ENTRY (ADDR) = ADDRESS OF INSTRUCTION. * * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TCCT*. CCT TBLM CHTE SPACE 4,15 ** CHTE - CHANNEL TABLE ENTRY. * * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCHT* * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH * REQUIRES THE FWA OF THE CHANNEL TABLE. * * CHTE ADDR * * ENTRY (ADDR) = ADDRESS OF INSTRUCTION. * * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TCHT*. CHT TBLM EMBE SPACE 4,15 ** EMBE - ERROR MESSAGE TABLE ENTRY. * * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TEMB* * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH * REQUIRES THE FWA OF THE ERROR MESSAGE TABLE. * * EMBE ADDR * * ENTRY (ADDR) = ADDRESS OF INSTRUCTION. * * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TEMB*. EMB TBLM EXPE SPACE 4,15 ** EXPE - EXCHANGE PACKAGE ADDRESS ENTRY. * * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TEXP* * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH * REQUIRES THE FWA OF THE PP EXCHANGE PACKAGE. * * EXPE ADDR * * ENTRY (ADDR) = ADDRESS OF INSTRUCTION. * * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TEXP*. EXP TBLM FTTE SPACE 4,15 ** FTTE - FUNCTION TIMEOUT TABLE ENTRY. * * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TFTT* * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH * REQUIRES THE FWA OF THE FUNCTION TIMEOUT TABLE. * * FTTE ADDR * * ENTRY (ADDR) = ADDRESS OF INSTRUCTION. * * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TFTT*. FTT TBLM PUTE SPACE 4,15 ** PUTE - PHYSICAL UNIT TABLE ENTRY. * * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TPUT* * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH * REQUIRES THE FWA OF THE PHYSICAL UNIT TABLE. * * PUTE ADDR * * ENTRY (ADDR) = ADDRESS OF INSTRUCTION. * * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TPUT*. PUT TBLM ERRMSG SPACE 4,10 ** ERRMSG - DEFINE ERROR LOG MESSAGE. * * TAG ERRMSG (TEXT) * * *ERRMSG* DEFINES AN ERROR LOG MESSAGE, AND CALCULATES THE * LENGTH OF THE MESSAGE IN CM WORDS. THE LENGTH IS STORED * IN THE PP LOCATION BEFORE THE TEXT. *TAG* POINTS TO THE * TEXT ITSELF. THE CALCULATED LENGTH IS BIASED TO INCLUDE * THE MESSAGE HEADER CONTAINED IN SUBROUTINE *IEM*. PURGMAC ERRMSG MACRO ERRMSG,TAG,MSG LOCAL LEN CON LEN/5 TAG DATA C*MSG* ERRNG 18D-*+TAG MESSAGE TOO LONG LEN EQU *-TAG+13+4 ENDM MONITOR SPACE 4,10 ** MONITOR - REQUEST MONITOR FUNCTION. * * MONITOR F * * ENTRY F = MONITOR FUNCTION. * (CM+1 - CM+4) = PARAMETERS. * * CALLS IMF. PURGMAC MONITOR MONITOR MACRO F MACREF MONITOR LDK F RJM IMF ENDM WAIT SPACE 4,10 ** WAIT - DO NOTHING FOR SPECIFIED TIME. * * WAIT N * * N = MICROSECOND COUNT. * * EXIT (A) = 0. PURGMAC WAIT WAIT MACRO N MACREF WAIT NOREF .2 BASE D .2 SET N 1 IFEQ N,64,2 LDD HN SKIP 4 IFEQ N,512,2 LDD TH SKIP 1 LDK .2 BASE * SBN 1 STD T0 NJN *-2 IF WAIT TIME HAS NOT ELAPSED ENDM TITLE MAIN PROGRAM. DAS SPACE 4,15 ** DAS - MAIN PROGRAM. * * ENTRY AT *DAS* (VIA *RJM*) TO SET REENTRY ADDRESS. * AT *DAS1* WITH (ADDR,DI) ZERO WHEN REQUEST COMPLETE. * AT *DAS1* WITH (ADDR,DI) NONZERO TO ALLOW REENTRY. * AT *DAS6* IF CHANNEL DOWN WHEN DRIVER LOADED. * * USES DI. * * CALLS CAA, CCR, CET, CFR, EMP, IOM, LDP, PLP, PPE, PRS. * * MACROS MONITOR. ORG OCMD RICHI BEGIN CHANNEL INSTRUCTION MODIFICATION DAS SUBR PRS ENTRY (EXECUTE *PRS* ON INITIAL ENTRY) LDML DAS SET REENTRY ADDRESS STML ADDR,DI * PROCESS NEXT DEVICE. DAS1 LDC DSTB (ADDRESS OF NEXT *DST* ENTRY) DASA EQU *-1 LMC DSTBL (LWA+1 OF *DSTB* - ADJUSTED BY *IST*) DASB EQU *-1 ZJN DAS3 IF END OF DEVICE STATE TABLE DAS2 LDM DASA STD DI SET DEVICE STATE TABLE ADDRESS ADN DSTBE STM DASA ADVANCE TABLE ADDRESS RJM LDP LOAD DEVICE PARAMETERS RJM PLP PROCESS LOST PARITY, IF PENDING RJM PPE PROCESS PARITY ENABLE, IF PENDING RJM CAA CHECK IF ACCESS ALLOWED NJN DAS1 IF ACCESS TO DEVICE NOT ALLOWED RJM CFR CHECK FOR REQUEST UJN DAS1 CHECK NEXT DEVICE * END OF DEVICE STATE TABLE - CHECK FOR CHANNEL DOWN. DAS3 RJM CCR CHECK FOR CHANNEL REQUEST ZJN DAS5 IF CHANNEL DOWN RJM CET CHECK ELAPSED TIME MJN DAS4 IF NOT TIME TO REFRESH OPERATOR MESSAGE LCN 0 TRY TO MAKE MULTIPLE MESSAGES VISIBLE RJM IOM REFRESH OPERATOR MESSAGE DAS4 LDC DSTB RESTART DEVICE STATE TABLE SCAN STM DASA UJP DAS2 PROCESS NEXT DEVICE * CHANNEL *DOWN* DETECTED - FORCE COMPLETION ON ALL REQUESTS. DAS5 UJN *+2 FIRST PASS * UJN *+1 (SECOND PASS) DASC EQU *-1 UJN DAS6 DROP PP ON SECOND PASS SOM DASC LDC CMP8 CHANGE PATH THRU *CFR* STML CFRA UJN DAS4 LOOP THROUGH DEVICE STATE TABLE DAS6 MONITOR DPPM DROP PP UJN * HANG UNTIL *CPUMTR*/*1MA* IDLES PP .DLY CON 370 DELAY MACRO - DELAY COUNT FOR 4X PP DLYA SBN 4 DELAY MACRO - FOR 4X PP TITLE DEVICE ATTRIBUTE TABLES. SPACE 4,20 ** DEVICE RELATED TABLES BUILT VIA *MSDC*. * * LOCATION DT IS THE INDEX TO THESE TABLES. LIST G DM SPACE 4,10 ** 1/PARITY DRIVES, 3/DATA DRIVES, 12/MNEMONIC DM BSS 0 DM HERE EQNS EQU *-DM CON 0 TERMINATE DEVICE TYPE LIST PSCY SPACE 4,10 ** PHYSICAL SECTORS PER CYLINDER. PSCY BSS 0 PSCY HERE STS SPACE 4,10 ** 7/BML MESSAGE DEVICE CODE, 9/STREAMING END-CASE SECTORS. BMID BSS 0 STS BSS 0 STS HERE CYUN SPACE 4,10 ** 4/LOGICAL TO PHYSICAL SHIFT, 12/LAST CYLINDER ON UNIT. CFS BSS 0 CYUN BSS 0 CYUN HERE MC SPACE 4,10 ** 4/PHYSICAL SECTORS PER BUFFER, 12/MAINTENANCE CYLINDER. PSBF BSS 0 MC BSS 0 MC HERE LSOC SPACE 4,10 ** 6/LAST TRACK ON CYLINDER, 6/LAST SECTOR ON CYLINDER + 1 LSOC BSS 0 LSOC HERE BPS SPACE 4,10 ** BYTES PER SECTOR + PHYSICAL SECTORS PER PHYSICAL TRACK. BPS BSS 0 PSPT BSS 0 BPS HERE MN SPACE 4,10 ** MODEL NUMBER (LAST TWO BYTES). MN BSS 0 MN HERE LIST * SPACE 4,20 ** CHANNEL TYPE RELATED TABLES. * * LOCATION CT IS THE INDEX INTO THESE TABLES. TRAT DATA 0#7E42 10 MB CHANNEL TRANSFER RATE DATA 0#FF42 25 MB CHANNEL TRANSFER RATE PAS DATA 0#62 10 MB CHANNEL PORT A SELECT DATA 0#362 25 MB CHANNEL PORT A SELECT CTS DATA 0#F02 10 MB CHANNEL, CHANNEL TRANSFER SPEED DATA 0 25 MB CHANNEL, CHANNEL TRANSFER SPEED EDC DATA 0 10 MB CHANNEL, USE SINGLE CMI SLOT DATA 0#4000 25 MB CHANNEL, USE DOUBLE CMI SLOT TITLE READ / WRITE PROCESSING. PIO SPACE 4,20 ** PIO - READ / WRITE PROCESSING. * * ENTRY AT *PIO* TO INITIATE REQUEST. * AT *PIO2* FROM *CTC* IF NO DATA TRANSFERRED. * AT *PIO6* FROM *CTC* IF NO MORE DATA. * (RW) = 0 IF READ. * (CB) = CONTROL BUFFER. * (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT TO *ERR* IF ERROR. * TO *CMP* WHEN COMMAND COMPLETES. * * USES CB, T1. * * CALLS ATT, BCS, CTC, DCM, EIO, FCN, GSS, SCD, SFR, SOU, * WCB, WTR. PIO BSS 0 ENTRY LDML PIOA,RW READ OR WRITE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT * COMMAND EXTENT PARAMETER SET BY *IIO*. LDN IOPL COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET UJN PIO2 SET I/O IN PROGRESS PIO1 RJM DCM DESELECT CONTROLLER PIO2 LDD CB SET I/O IN PROGRESS STM IPPS,DI LDN XFNT PROCESS ATTENTION RJM ATT ZJN PIO3 IF EXPECTED STATUS LCN EIOS I/O INITIATION ERROR RJM ERR PROCESS ERROR PIO3 STML PIOC CLEAR ENDING STATUS LDN 1 SET CHANNEL ACTIVE FOR *CPD* RJM SCD LDM IPPS,DI RESTORE CURRENT BUFFER ORDINAL PIO4 STD CB LDML PIOC CHECK ENDING STATUS LPN 0#30 NJN PIO1 IF PAUSE / TIME DEPENDENT OPERATION * INITIATE DATA TRANSFER. LDN DAIN DEFINE TRANSFER DIRECTION SBD RW ERRNZ DAOT+1-DAIN CODE DEPENDS ON VALUE RJM BCS LDML PIOB,RW SET DMA MODE RJM FCN RJM WTR WRITE T REGISTER LDD CB RJM SFR SEARCH FOR CONSECUTIVE REQUEST * WAIT UNTIL ONE BURST DMA TRANSFER COMPLETE. RJM CTC CHECK TRANSFER COMPLETE * LDN 0 STD T1 CLEAR RESIDUAL BYTE COUNT LDD NB ZJN PIO5 IF NO MORE CONSECUTIVE REQUESTS LDN 0#A PIO5 LMN 0#A CHECK ENDING STATUS RJM GSS RJM EIO ENTER BUFFER IN I/O REQUEST QUEUE LDD NB NJN PIO4 IF CONSECUTIVE REQUEST PRESENT * COMPLETE READ / WRITE OPERATIONS. * LDN 0 CLEAR CHANNEL ACTIVE FOR *CPD* RJM SCD RJM DCM DESELECT CONTROLLER LDN CMSS EXPECT COMMAND COMPLETE PIO6 RJM ATT WAIT FOR INTERRUPT NJN PIO7 IF NOT SUCCESSFUL LDM RSDI CHECK IF RESTORE IN PROGRESS LMD DI NJN PIO6.1 IF NO RESTORE IN PROGRESS ON THIS DEVICE SOM RMUX REQUESTS TO MULTIPLEX BETWEEN RESTORES PIO6.1 LJM CMP COMPLETION PROCESSING PIO7 LDDL MS LMC 0#42 NJN PIO8 IF NOT CONDITIONAL SUCCESS/ASYNCH LDDL PA STML ATTN,DI SET ATTENTION RETURN ADDRESS PIO8 LCN EIOS I/O INITIATION ERROR RJM ERR PROCESS ERROR PIOA BSS 0 COMMAND CODES CONL C1005 CONL C2005 PIOB BSS 0 DATA TRANSFER FUNCTIONS CON F0281 CON F0381 PIOC CON 0 ENDING STATUS (SET BY *GSS*) TITLE FORMAT DRIVES AT DEADSTART. CFF SPACE 4,25 ** CFF - CHECK FOR FORMAT. * * ENTRY FROM *CFR* AFTER INITIAL LOGICAL RESET HAS BEEN * PERFORMED FOR ALL CONTROLLERS. * (CI) = CONTROLLER STATE TABLE ADDRESS. * (DI) = DEVICE STATE TABLE ADDRESS. * (FC) = 0. * * EXIT TO *CMP*. * TO *ERR* IF CONTROLLER NOT FUNCTIONING. * (FC) = 1 IF ALL UNITS FORMATTED. * * USES DI, FC. * * CALLS CCS, CFM, CLP, CMN, CPC, CPF, IDU, ILU, LDP, SEP. CFF5 LDN ECMD CONTROLLER DEAD RJM ERR PROCESS ERROR CFF BSS 0 ENTRY/EXIT RJM LDP LOAD DEVICE PARAMETERS LDD CM+3 SHN 21-FCRF+14 PJN CFF1 IF NO FORMAT REQUEST FOR THIS DEVICE RJM IDU INTERLOCK DEVICE NJN CFF1 IF INTERLOCK NOT AVAILABLE RJM SEP SET ERROR PROCESSING INTERLOCK NJN CFF1 IF ERROR IN PROGRESS ON DIFFERENT DEVICE * FORMAT DEVICE. LDD DI INDICATE FORMAT IN PROGRESS STM CFFA LDML CTST,CI CHECK FOR CONTROLLER DEAD SHN 21-15 MJN CFF5 IF CONTROLLER NOT FUNCTIONAL RJM CPC CHECK FOR PARALLEL CONTROLLER RJM CMN CHECK MODEL NUMBER RJM ILU INITIALIZE LOGICAL UNIT LDN 0 STM CFFA INDICATE FORMAT COMPLETE RJM CLP CLEAR *LOST PARITY* FLAGS, IF SET RJM CFM CLEAR *FORMAT PENDING* FLAG IN MST LDN FCRF RJM CPF CLEAR *FORMAT* SPECIAL REQUEST IN *PUT* * CHECK IF ANY FORMAT REQUESTS REMAIN. CFF1 LDD DI SAVE DEVICE STATE TABLE INDEX STM CFFB LDC DSTB CHECK FIRST DEVICE STD DI CFF2 RJM LDP LOAD DEVICE PARAMETERS LDD CM+3 SHN 21-FCRF+14 PJN CFF3 IF NO FORMAT REQUEST FOR DEVICE RJM CCS CHECK CHANNEL STATE ZJN CFF4 IF CHANNEL UP CFF3 LDN DSTBE CHECK NEXT DEVICE RAD DI LMM DASB NJN CFF2 IF MORE DEVICES TO CHECK AOD FC INDICATE NO MORE DEVICES TO FORMAT CFF4 LDC ** RESTORE DEVICE STATE TABLE INDEX CFFB EQU *-1 STD DI RJM LDP RELOAD DEVICE PARAMETERS LJM CMP COMPLETE REQUEST CFFA DATA 0 FORMAT IN PROGRESS (*DST* ADDRESS) TITLE SELECTIVE RESET PROCESSING. SRS SPACE 4,20 ** SRS - SELECTIVE RESET PROCESSING. * * ENTRY (A) = 2/X, 16/RA. * WHERE X = 0 IF SLAVE RESET. * = 1 IF LOGICAL RESET. * RA = RETURN ADDRESS IF COMMAND COMPLETE. * (CI) = CONTROLLER STATE TABLE ADDRESS. * (CN) = CONTROLLER NUMBER. * (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * AT *SRS1* FROM *CCA* IF CHANNEL SPEED WRONG. * * EXIT (SRSA) = 0 IF RESET COMPLETE. * TO *CMP* IF PROCESSING INITIAL LOGICAL RESET. * TO *CMP10* IF RESET IN PROGRESS ON A DIFFERENT DEVICE, * OR IF SLAVE RESET REQUIRED DURING *RESTORE*. * TO *ERR* IF ERROR. * * USES PA, RW, TM, T1. * * CALLS ATT, CCA, CRF, CRP, GCS, IEM, IOM, RIF, SRI, SRP, STO. SRS BSS 0 ENTRY STDL T1 SAVE RETURN ADDRESS SHN -20 SAVE RESET OPTION STD RW LDM SRSA ZJN SRS0 IF NO RESET IN PROGRESS LMD DI NJP CMP10 IF RESET IN PROGRESS ON A DIFFERENT DEVICE SRS0 LDDL T1 STML SRSB SAVE RETURN ADDRESS * REENTER HERE FROM *CCA* WITH (RW) = 0 TO FORCE SLAVE RESET. SRS1 RJM SRI SET SLAVE RESET INTERLOCK, IF REQUIRED LDD RW SET RESET OPTION STM RWST,DI LMN 1 SHN 17-0 STDL T1 LDD DI STM SRSA SET LOCAL RESET IN PROGRESS LDML CTST,CI LPC 77777 LMDL T1 SET BIT 15 IF SLAVE RESET STML CTST,CI LDN 1 STDL TM INTERLOCK DATA TRANSFERS RJM RIF RESET SLAVE / LOGICAL INTERFACE LDML SRST,RW DEFINE RESET TIMEOUT RJM STO LDD CN CONVERT CONTROLLER NUMBER ADN 1R0 SHN 6 INSERT IN MESSAGE LMN 1R STM SRSG+1 LDD RW NJN SRS2 IF LOGICAL RESET * IF A SLAVE RESET IS REQUIRED DURING A RESTORE, THE RESTORE * WILL BE ABANDONED. AN EXIT TO *CMP10* IS FORCED TO ENSURE * THAT ALL INTERLOCKS ARE CLEARED. LDM RSIN CHECK RESTORE INTERLOCK LMD DI NJN SRS1.1 IF INTERLOCK NOT SET ON THIS DEVICE RJM CRP CLEAR *RESTORE IN PROGRESS* LDC CMP10 FORCE COMPLETION AFTER RESET STML SRSB SRS1.1 LDC SRSG ISSUE OPERATOR MESSAGE RJM IOM LDC ERCR+100000 *EQXXX, UXX, CMX RESET ON CCHXX.* RJM IEM ISSUE ERRORLOG MESSAGE SRS2 LDN ASRT WAIT ON ASYNC INTERRUPT RJM ATT NJN SRS3 IF NOT ASYNCHRONOUS RESPONSE * SEARCH RESPONSE PACKET FOR MACHINE EXCEPTION PARAMETER. LDN ID16 LOOK FOR MACHINE EXCEPTION RJM SRP MJN SRS3 IF PARAMETER NOT FOUND LDML RPBF+6,T3 LPC 0#FEE0 CHECK OPERATIONAL + READY TRANSITION LMC 0#6000 ZJN SRS4 IF CONTROLLER RESET SUCCESSFUL SRS3 LCN ESRE SELECTIVE RESET ERROR RJM ERR PROCESS ERROR SRS4 RJM CCA CHECK CONTROLLER ATTRIBUTES RJM GCS GET CONTROLLER SERIAL NUMBER LDM RWST,DI NJN SRS5 IF NOT SLAVE RESET LDC ERRC+100000 *EQXXX, UXX, CMX RESET COMPLETE.* RJM IEM ISSUE ERRORLOG MESSAGE SRS5 RJM CRF CLEAR RESET FLAGS LDML CTST,CI ENABLE CONTROLLER ACTIVITY STDL T0 LPC 37777 CLEAR BITS 15 AND 14 STML CTST,CI LDDL T0 SHN 21-16 MJP CMP IF PROCESSING INITIAL LOGICAL RESET LDML SRSB RETURN ADDRESS STDL PA LJM 0,PA RETURN TO CALLER SRSA CON 0 DI OF CONTROLLING DRIVE FOR RESET SRSB CON 0 RETURN ADDRESS SRSG DATA C*CM3 BEING RESET ON CCHNN.* SRST BSS 0 CONL SRTO SLAVE RESET TIMEOUT CONL CBTO LOGICAL RESET TIMEOUT TITLE SUBROUTINES. ACE SPACE 4,10 ** ACE - ANALYZE CHANNEL ERROR. * * ENTRY (RBUF) = CHANNEL STATUS REGISTER. * * EXIT (A) = 0 IF ERROR FLAG NOT SET. * = CHANNEL ERROR FAULT CODE. ACE3 LDN ECCM SET CHANNEL DETECTED CM ERROR ACE SUBR ENTRY/EXIT LDM RBUF+5 LPN 2 ZJN ACEX IF CHANNEL ERROR FLAG NOT SET LDM RBUF LPN 76 NJN ACE3 IF ERROR IN MEMORY LDM RBUF+1 SHN -5 ZJN ACE2 IF NOT PARITY / IPI CHANNEL ERROR LPN 2 ZJN ACE1 IF NOT PARITY ERROR * SET FAULT ANALYSIS CODE. LDN ECPE&ECIE CHANNEL PARITY ERROR ACE1 LMN ECIE&ECER IPI CHANNEL ERROR FLAG ACE2 LMN ECER CHANNEL DETECTED ERROR UJN ACEX RETURN AME SPACE 4,10 ** AME - ATTEMPT MONITOR EXCHANGE. * * EXIT (A) = 0. * * USES CW - CW+4. * * MACROS EXPE. AME SUBR ENTRY/EXIT EXPE * AME1 LDC 6 CHECK FOR (MA) NON-ZERO CRD CW LDD CW+1 ADD CW NJN AME1 IF EXCHANGE PACKAGE NOT READY EXPE * AME2 LDC 0 SET (B0) NON-ZERO CWM AMEA,ON SBN 1 EXCHANGE MONITOR MXN 0 CRD CW LDD CW+4 ZJN AMEX IF EXCHANGE TAKEN LDN 28D SBN 1 NJN *-1 IF NOT 20 MICROSECONDS ELAPSED UJN AME2 RETRY EXCHANGE AMEA VFD 24/0 (P) VFD 18/0 (A0) VFD 18/0 (B0) ATT SPACE 4,10 ** ATT - PROCESS ATTENTION. * * ENTRY (A) = EXPECTED STATUS RESPONSE TYPE. * (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT VIA *ECI* IF INTERRUPT RECEIVED. * TO *ERR* IF NO INTERRUPT. * (ATTA) = INTERRUPT ADDRESS FOR LAST INTERRUPT TIMEOUT. * * CALLS CTO, DAS. ATT CON 0 ENTRY STML EEST,DI LDML ATT SAVE RETURN ADDRESS STML ATTN,DI ATT1 RJM DAS RETURN TO MAIN LOOP * RETURN HERE THROUGH *ECI* IF NO INTERRUPT RECEIVED. RJM CTO MJN ATT1 IF NOT TIMEOUT LDML ATTN,DI SAVE ADDRESS STML ATTA LDN 0 STML ATTN,DI CLEAR ATTENTION PROCESSING ADDRESS STML ADDR,DI CLEAR REENTRY ADDRESS LDN ETIT INTERRUPT TIMEOUT RJM ERR PROCESS ERROR ATTA CON 0 ADDRESS FOR INTERRUPT TIMEOUT CAA SPACE 4,10 ** CAA - CHECK IF ACCESS TO PARITY DEVICE IS ALLOWED. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (DVTP,DI) BIT 7 SET, TIME TO CHECK FOR MMF *RESTORE*. * * EXIT (A) = 0, IF ACCESS ALLOWED. * * CALLS CMR, DMP, EMP. CAA8 LDN 0 INDICATE ACCESS ALLOWED CAA SUBR ENTRY/EXIT LDML ADDR,DI * UJN CAA8 (NO SHARED DEVICES CONFIGURED) CAAA EQU *-2 NJN CAA8 IF REQUEST IN PROGRESS ON THIS DEVICE LDM RSIN CHECK IF RESTORE INTERLOCK SET LMD DI ZJN CAAX IF INTERLOCK SET FOR THIS DEVICE LDML DVTP,DI SHN 21-7 MJN CAA2 IF TIME TO CHECK FOR MMF RESTORE CAA1 LDML DVTP,DI CHECK IF ACCESS ALLOWED SHN 0-10 LPN 21 *ACCESS DISABLED* AND *RESTORE INITIATION* UJN CAAX RETURN CAA2 LDML DVTP,DI CLEAR *CHECK MMF PARITY ACCESS* BIT LPC 177577 STML DVTP,DI SHN 21-10 CHECK MMF RESTORE BITS MJN CAA5 IF *MMF RESTORE INITIATION* FLAG SET RJM CMR CHECK MMF RESTORE FLAGS IN MST PJN CAA7 IF RESTORE INITIATION NOT IN PROGRESS LDML DVTP,DI SET *MMF RESTORE INITIATION* FLAG LPC 177377 LMC 400 STML DVTP,DI CAA3 RJM DMP DISABLE MMF PARITY DEVICE ACCESS CAA4 UJN CAA1 RETURN ACCESS PERMISSION CAA5 RJM CMR CHECK MMF RESTORE FLAGS IN MST PJN CAA6 IF RESTORE INITIATION COMPLETE LDML DVTP,DI CHECK MMF RESTORE BITS SHN 21-14 PJN CAA3 IF *DISABLE* FLAG NOT SET UJN CAA4 RETURN ACCESS PERMISSION CAA6 RJM EMP ENABLE MMF PARITY ACCESS, IF POSSIBLE UJN CAA4 RETURN ACCESS PERMISSION CAA7 LDML DVTP,DI CHECK MMF RESTORE BITS SHN 0-13 LPN 3 ZJN CAA4 IF NEITHER *ENABLE* OR *DISABLE* BIT SET LDM CMRA NJN CAA4 IF RESTORE STILL IN PROGRESS UJN CAA6 ENABLE MMF PARITY ACCESS CAB SPACE 4,10 ** CAB - CHECK ACGL *MMF PARITY DEVICE ACCESS* BIT. * * ENTRY (EO) = EST ORDINAL. * * EXIT (A) = 0, IF THE BIT FOR THIS MAINFRAME IS CLEAR. * * USES CM - CM+4. * * CALLS REE. CAB SUBR ENTRY/EXIT RJM REE READ EST ENTRY LDD CM+4 SHN 3 ADN ACGL CRD CM LDD CM LPN 0 (MACHINE MASK FOR THIS MF) CABA EQU *-1 UJN CABX RETURN CAC SPACE 4,15 ** CAC - CHECK FOR ALTERNATE CHANNEL. * * ENTRY (EO) = EST ORDINAL. * * EXIT (A) = 0, IF ALTERNATE CHANNEL DEFINED AND UP. * (CM - CM+4) = *EQDE* WORD OF EST. * (T1) = INDEX INTO (CM+1) FOR THIS CHANNEL. * (T2) = INDEX INTO (CM+1) FOR ALTERNATE CHANNEL. * (T6) = MST ADDRESS / 10B. * * USES T2. * * CALLS CCI. CAC SUBR ENTRY/EXIT RJM CCI CALCULATE CHANNEL INDEX LMN 1 STD T2 LDM CM+1,T2 CHECK ALTERNATE CHANNEL SHN -11 CHECK IF ALTERNATE CHANNEL DEFINED AND UP LMN 4 UJN CACX RETURN CAN SPACE 4,10 ** CAN - CONVERT ASCII NUMBER TO DISPLAY CODE. * * ENTRY (T3) = ADDRESS OF OUTPUT BUFFER. * (T4) = ADDRESS OF 6-DIGIT ASCII NUMBER. * * EXIT (T3) ADVANCED. * (T4) ADVANCED. * * USES T1, T3, T4. CAN SUBR ENTRY/EXIT LDDL T3 ADN 3 STDL T1 CAN1 LDIL T4 SHN -10 SBN 60-33 CONVERT ASCII TO DISPLAY CODE SHN 6 STI T3 UPPER CHARACTER OF WORD LDIL T4 LPC 377 SBN 60-33 CONVERT ASCII TO DISPLAY CODE RAI T3 LOWER CHARACTER OF WORD AODL T4 AODL T3 LMDL T1 NJN CAN1 IF MORE CHARACTERS TO CONVERT UJN CANX RETURN CBB SPACE 4,10 ** CBB - CHECK BDLL *DISABLE ACCESS* BIT. * * ENTRY (DI) = DEVICE STATE TABLE INDEX. * * EXIT (A) .LT. 0, IF THE BIT FOR THIS CHANNEL IS SET. * (A) .GE. 0, IF THE BIT FOR THIS CHANNEL IS CLEAR. * (T1) = CHANNEL INDEX. * * CALLS CCI, RBD. CBB SUBR ENTRY/EXIT RJM CCI CALCULATE CHANNEL INDEX LDC SHNI+21-7 SBD T1 STM CBBA RJM RBD READ *BDLL* LDD CM+3 CHECK *DISABLE ACCESS* BIT IN *BDLL* SHN 21-7 CHECK IF BIT SET FOR FIRST CHANNEL * SHN 21-10 (CHECK IF BIT SET FOR SECOND CHANNEL) CBBA EQU *-1 UJN CBBX RETURN CBC SPACE 4,10 ** CBC - CLEAR BUFFER COUNT. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT (A) = (RQLN,DI). * BUFFER COUNT IN (RQLN,DI) CLEARED. CBC SUBR ENTRY/EXIT LDM RQLN,DI LPC 4000 STM RQLN,DI UJN CBCX RETURN CBI SPACE 4,10 ** CBI - CLEAR *BDT* ERROR PROCESSING INTERLOCKS. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * USES CM - CM+4. * * CALLS LNE, RBD, UBP. * * MACROS MONITOR. CBI SUBR ENTRY/EXIT LDN 0 INITIALIZE PARTITION SEARCH CBI1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN CBIX IF NO MORE PARTITIONS RJM RBD READ *BDLL* LDD CM+3 CHECK IF THIS MF HOLDS INTERLOCK SHN 21-12 PJN CBI2 IF THIS MF DOES NOT HOLD INTERLOCK LDN CEPS CLEAR ERROR PROCESSING INTERLOCK STD CM+1 LDD EO SET EST ORDINAL STD CM+4 MONITOR MTEM * LDN 0 CLEAR FLAG THAT SAYS THIS MF HAS INTERLOCK STD CM+2 LDN 26 BIT TO CHANGE RJM UBP UPDATE *BDLL* PARAMETER CBI2 LDD EO UJN CBI1 CHECK FOR NEXT PARTITION CCA SPACE 4,20 ** CCA - CHECK CONTROLLER ATTRIBUTES. * - DISABLE USAGE STATISTIC COUNTING. * - ENABLE MASTER TERMINATE. * - DISABLE EXTENT RESPONSE FOR MASTER TERMINATE. * - ENABLE REPORTING DEVICE FAULT LOG. * - SET SPEED SELECTION TO 10 MB IF 10 MB CHANNEL. * - SET SPEED SELECTION TO 25 MB IF 25 MB CHANNEL. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (CT) = CHANNEL TYPE. * * EXIT TO *SRS1* WITH (RW) = 0, IF CHANNEL SPEED WRONG. * TO *ERR*, IF LOAD CONTROLLER ATTRIBUTES ERROR. * * USES RW, TM, T1 - T3. * * CALLS ATT, IDT, SDT, SOC, WCB. CCA SUBR ENTRY/EXIT * RESTORE CONTROLLER ATTRIBUTES. LDC C0202 RESTORE ATTRIBUTES OPERATION CODE RJM SOC SET OPERATION CODE AND CONTROLLER LDN 6 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJP CCA1.1 IF NOT SUCCESSFUL RJM SDT SET DATA TRANSFER MODE FOR INTERLOCK * CHECK ATTRIBUTE PARAMETERS D1, D2, D3, D4, AND D6. LDC C0200 REPORT ATTRIBUTES OPERATION CODE RJM SOC SET OPERATION CODE AND CONTROLLER LDC 0#76C STML CPBF+FCP LDC 0#80D1 REPORT PARAMETERS D1,D2,D3,D4,D6 STML CPBF+FCP+1 LDC 0#D2D3 STML CPBF+FCP+2 LDC 0#D4D6 STML CPBF+FCP+3 LDN 14D COMMAND PACKET LENGTH RJM IDT INPUT DATA TO PP LDN 0 STDL T1 STDL T2 STDL T3 STDL TM DATA TRANSFER MODE IS STREAMING CCA1 LDML ATTB,T1 LMML CCAA,T1 CCA1.1 NJN CCA2.1 IF PARAMETER ID NOT FOUND AODL T1 SBN 11 PJN CCA2 IF ALL PARAMETERS CHECKED LDML ATTB,T1 LMML CCAA,T1 NJN CCA3 IF PARAMETER SET WRONG AODL T1 UJN CCA1 CHECK NEXT PARAMETER CCA2 LDML ATTB+13 LPC 0#F02 LMML CTS,CT NJN CCA3 IF ATTRIBUTE D6 INCORRECT RJM ATT WAIT FOR COMPLETION RESPONSE RJM SDT SET DATA TRANSFER MODE TO STREAMING LJM CCAX EXIT CCA2.1 LCN ELCA LOAD CONTROLLER ATTRIBUTES FAILURE RJM ERR PROCESS ERROR * LOAD/SAVE ATTRIBUTES. CCA3 LDML CCAA,T3 BUILD COMMAND PACKET STML CPBF+FCP,T3 AODL T3 LMN 11 NJN CCA3 IF MORE PARAMETER WORDS TO MOVE LDML ATTB+11 STML CPBF+FCP+11 PORT A,B CONTROLLER ADDRESS LDML ATTB+12 STML CPBF+FCP+12 PORT C,D CONTROLLER ADDRESS LDML ATTB+13 LPC 0#F0FD LMML CTS,CT STML CPBF+FCP+13 SELECT CHANNEL TRANSFER RATE RJM ATT WAIT FOR COMPLETION RESPONSE LDM RPBF LMN 10 CCA3.1 NJP CCA2.1 IF ERROR LDC C0209 LOAD ATTRIBUTE OPERATION CODE RJM SOC SET OPERATION CODE AND CONTROLLER LDC P02D1 STM CPBF+FCP RESTORE WORD WIPED OUT BY *ATT* LDN 30D COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJN CCA3.1 IF NOT SUCCESSFUL RJM SDT SET DATA TRANSFER MODE LDC C020A SAVE ATTRIBUTE OPERATION CODE RJM SOC SET OPERATION CODE AND CONTROLLER LDN 6 RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJN CCA3.1 IF NOT SUCCESSFUL LDML ATTB+13 LPC 0#F02 LMML CTS,CT ZJP CCAX IF CHANNEL TRANSFER SPEED CORRECT LDN 0 STD RW LJM SRS1 FORCE SLAVE RESET CCAA BSS 0 EXPECTED CONTROLLER ATTRIBUTES CONL P02D1,0#100 CONL P02D2,0#100 CONL P02D3,0#100 CONL P02D4,0#100 CONL 0#7D6 CCI SPACE 4,15 ** CCI - CALCULATE CHANNEL INDEX. * * ENTRY (EO) = EST ORDINAL. * (IR+4) = CHANNEL SERVICED BY THIS DRIVER. * * EXIT (A) = (T1) = INDEX INTO (CM+1) FOR THIS CHANNEL. * (CM - CM+4) = *EQDE* WORD OF EST. * * USES T1. * * CALLS REE. CCI SUBR ENTRY/EXIT RJM REE READ EST ENTRY LDD CM+1 EXTRACT CHANNEL LMD IR+4 LPN 77 ZJN CCI1 IF PATH SERVICED BY THIS DRIVER LDN 1 CCI1 STD T1 SET CHANNEL BYTE INDEX UJN CCIX RETURN CCO SPACE 4,20 ** CCO - CHECK FOR CONTROLLER OVER TEMPERATURE. * * THIS ROUTINE SEARCHES THE RESPONSE PACKET FOR STATUS * INDICATING AN OVER TEMPERATURE CONDITION. IF THERE IS * AN OVER TEMPERATURE CONDITION, AN ERROR IS OPTIONALLY * LOGGED TO THE BML, A BIT INDICATING OVER TEMPERATURE IS * SET IN *BDLL*, AND AN OPERATOR ACTION MESSAGE IS GENERATED. * * ENTRY (A) = 0 IF BML MESSAGE SHOULD NOT BE ISSUED. * (DT) = DRIVE TYPE. * * USES CM+2, T7. * * CALLS IDM, IEE, SRP, UBP. CCO SUBR ENTRY/EXIT STD T7 LDN ID16 RJM SRP SEARCH RESPONSE PACKET MJN CCOX IF PARAMETER 16 NOT FOUND LDML RPBF+6,T3 SHN 21-11 PJN CCOX IF NOT CONTROLLER OVER TEMPERATURE LDM MSID STM CCOA SAVE VALUES FROM CURRENT MESSAGE LDM EDBF+FALT STM CCOA+1 LDM EDBF+FCS2 STM CCOA+2 LDM MSGL+1 STM CCOA+3 LDML BMID,DT SHN -11 STM MSID ERROR MESSAGE ID LDN ECOT CONTROLLER OVERTEMPERATURE STM EDBF+FALT FINAL FAULT CODE LDD T7 ZJP CCO1 IF NOT ISSUING MESSAGE TO BML * *HPA* DOES NOT DISPLAY THE DATA WITH SYMPTOM 0111 WHEN THE * ERROR IS RECOVERABLE, SO TWO MESSAGES ARE ISSUED TO THE BML. LCN 0 STM EDBF+FCS2 SET NO STATUS FOR *HPA* LDN 5 STM MSGL+1 MESSAGE LENGTH LDD HN ERRNZ HD0100-100 CODE DEPENDS ON VALUE RJM IDM ISSUE INITIAL BML MESSAGE LDN 3 STM MSGL+1 MESSAGE LENGTH LDC HD0111 RJM IDM ISSUE FINAL BML MESSAGE LDM CCOA STM MSID RESTORE VALUES IN CURRENT MESSAGE LDM CCOA+1 STM EDBF+FALT LDM CCOA+2 STM EDBF+FCS2 LDM CCOA+3 STM MSGL+1 * SET OVER TEMPERATURE BIT IN *BDLL*. CCO1 LDN 1 NEW VALUE STD CM+2 LDN 63 BIT TO CHANGE RJM UBP UPDATE *BDLL* PARAMETER RJM IEE ISSUE *CHECK E,E DISPLAY* EVENT UJP CCOX RETURN CCOA BSS 4 SAVE AREA FOR VALUES FROM CURRENT MESSAGE CCR SPACE 4,15 ** CCR - CHECK FOR CHANNEL REQUEST. * * ENTRY (UC) = UNIT ACTIVITY COUNT. * (IR+4) = CHANNEL NUMBER. * AT *CCR2* FROM */3DZ/BST*. * * EXIT (A) = 0 IF CHANNEL DOWN. * TO */3DZ/BST2* IF ENTRY WAS FROM */3DZ/BST*. * * USES CM+1, CR. * * CALLS DCR, RCT, SRF. * * MACROS DELAY, MONITOR. CCR3 RJM SRF SET DRIVER RELOAD FLAG CCR4 LDD CR CCR SUBR /3DZ/BST2 ENTRY/EXIT RJM RCT READ CHANNEL TABLE SHN 21-5 MJN CCR3 IF CHANNEL GLOBALLY DOWN LPN 40 ZJN CCR4 IF CHANNEL NOT REQUESTED STM CHRQ DISABLE NEW ACTIVITY LDD UC NJN CCRX IF CURRENT ACTIVITY RJM DCR DROP CHANNEL RESERVATION * LDN 0 STM CHRQ ENABLE NEW ACTIVITY CCR1 LDD CR NJN CCRX IF CHANNEL RESERVED * ENTERED HERE FROM *PRS*. CCR2 DELAY WAIT AWHILE LDD IR+4 STD CM+1 ATTEMPT TO RESERVE CHANNEL MONITOR CCHM LDD CM+2 SET RESERVATION STATUS STD CR RJM RCT READ CHANNEL TABLE LPN 40 ZJN CCR1 IF CHANNEL NOT DOWN UJP CCR3 SET DRIVER RELOAD FLAG CCS SPACE 4,10 ** CCS - CHECK CHANNEL STATE FOR SPECIFIED DEVICE. * * ENTRY (EO) = EST ORDINAL. * (IR+4) = CHANNEL SERVICED BY THIS DRIVER. * * EXIT (A) = CHANNEL STATE. * * CALLS CCI. CCS SUBR ENTRY/EXIT RJM CCI CALCULATE CHANNEL INDEX LDM CM+1,T1 SHN -11 SCN 4 UJN CCSX RETURN CDA SPACE 4,15 ** CDA - CONVERT DISK ADDRESS. * * ENTRY (T4) = RELATIVE CYLINDER NUMBER. * (T5) = PHYSICAL TRACK. * (T7) = LOGICAL SECTOR WITHIN PHYSICAL TRACK. * (DT) = DRIVE TYPE. * * EXIT (T6) = LOGICAL TRACK. * * USES T1, T3 - T7, CM - CM+4. * * CALLS REE. CDA SUBR ENTRY/EXIT RJM REE READ EST ENTRY LDD CM+4 SHN 3 ADN MDGL CRD CM LDD CM+1 SINGLE UNIT SECTOR LIMIT STD T1 LDN 0 CLEAR SECTOR COUNT ACCUMULATOR STD T3 LDC 3777 INITIALIZE LOGICAL TRACK CALCULATION STD T6 LDML CFS,DT SET UP PHYSICAL TO LOGICAL SHIFTS SHN -14 ADK SHNI STM CDAA STM CDAB * MULTIPLY THE PHYSICAL TRACK NUMBER BY THE NUMBER OF LOGICAL * SECTORS PER PHYSICAL TRACK. CDA1 SOD T5 MJN CDA3 IF END OF CONVERSION LDM PSPT,DT CDAA SHN ** PHYSICAL SECTORS TO LOGICAL SECTORS RAD T7 ADVANCE LOGICAL SECTOR COUNT SHN -14 RAD T3 UJN CDA1 LOOP ON CONVERSION * MULTIPLY THE CYLINDER NUMBER BY THE NUMBER OF LOGICAL SECTORS * PER CYLINDER. CDA2 LDML PSCY,DT CDAB SHN ** PHYSICAL SECTORS TO LOGICAL SECTORS RAD T7 ADVANCE LOGICAL SECTOR COUNT SHN -14 RAD T3 CDA3 SOD T4 PJN CDA2 IF NOT END OF CONVERSION * DIVIDE THE ACCUMULATED LOGICAL SECTOR COUNT BY THE NUMBER OF * LOGICAL SECTORS PER LOGICAL TRACK. THE SINGLE UNIT SECTOR * LIMIT IS USED, BECAUSE ONLY THE LOGICAL TRACK NUMBER (AND * NOT THE LOGICAL SECTOR NUMBER) IS OF INTEREST. CDA4 AOD T6 ADVANCE LOGICAL TRACK NUMBER LDN 0 SBD T1 SINGLE UNIT SECTOR LIMIT RAD T7 PJN CDA4 IF NO UNDERFLOW AOD T7 SOD T3 PJN CDA4 IF DIVISION INCOMPLETE LJM CDAX RETURN CDS SPACE 4,15 ** CDS - CHECK DEVICE STATUS. * * ENTRY (EO) = EST ORDINAL. * * EXIT (A) .LT. 0, IF DEVICE HAS NOT BEEN RECOVERED. * (A) .GT. 0, IF DEVICE IS RECOVERD AND SHARED. * (A) .EQ. 0, IF DEVICE IS RECOVERD AND NOT SHARED. * (CM - CM+4) = *EQDE* WORD OF EST ENTRY. * * CALLS REE. CDS SUBR ENTRY/EXIT RJM REE READ EST ENTRY LDD CM SHN 21-6 MJN CDSX IF DEVICE UNAVAILABLE (NOT RECOVERED) LDD CM LPC 1000 ISOLATE *SHARED* STATUS UJN CDSX RETURN CDT SPACE 4,25 ** CDT - CHECK DRIVE TYPE. * * VERIFY THAT THE CONFIGURED DRIVE MATCHES THE ACTUAL DRIVE * TYPE. IF A DRIVE IS ACCESSED FROM 2 CONTROLLERS, THE DRIVE * COULD BE RECLUSTERED FROM ONE CONTROLLER AND THE OTHER ONE * WOULD NOT KNOW THE CHANGE OCCURRED. A SLAVE RESET MUST BE * ISSUED TO CAUSE THE CONTROLLER TO REEVALUATE THE DRIVE. * * ENTRY (DN) = DRIVE NUMBER. * (DI) = DEVICE STATE TABLE ADDRESS. * (DT) = DRIVE TYPE. * * EXIT TO *CMP* WITH CHECK DRIVE BIT CLEAR IF CORRECT * NUMBER OF PHYSICAL DRIVES IN THE LOGICAL UNIT AND * THE DRIVE ATTRIBUTES ARE CORRECT. * TO *CMP10* IF ERROR IN PROGRESS ON A DIFFERENT DEVICE. * TO *ERR* IF ERROR. * * USES CM+2, T2, T3. * * CALLS ATT, COD, CUF, DDT, SEP, UBP, VDA, WAC. CDT BSS 0 ENTRY * ALLOW ACTIVITY ON OTHER DRIVES TO COMPLETE BEFORE REPORTING * ATTRIBUTE 68 FOR THE CONTROLLER. EVEN IF ISSUED, IT WOULD * NOT BE EXECUTED UNTIL ALL COMMANDS IN PROGRESS COMPLETE. RJM SEP SET ERROR PROCESSING INTERLOCK NJP CMP10 IF ERROR IN PROGRESS ON A DIFFERENT DEVICE RJM WAC WAIT FOR OTHER ACTIVITY TO COMPLETE * CLEAR CONTROLLER OVER TEMPERATURE BIT IN *BDLL*. LDN 0 SET NEW VALUE STD CM+2 LDN 63 BIT TO CHANGE RJM UBP UPDATE *BDLL* PARAMETER * CHECK DRIVE CONFIGURATION. LDD DN STM PHYD,DI PHYSICAL DRIVE RJM DDT DETERMINE DRIVE TYPE MJN CDT1 IF DRIVE NOT FOUND LDM DDTA TOTAL DRIVES FOUND STD T2 SBD DD TOTAL DRIVES EXPECTED SBD PD ZJN CDT2 IF CORRECT DRIVE COUNT CDT1 LCN ERDA REPORT DEVICE ATTRIBUTES ERROR RJM ERR PROCESS ERROR CDT2 LDD T2 SHN 1 RAD T3 LDM ATTB,T3 SHN 21-4 PJN CDT4 IF NO PARITY DRIVE SOD T2 CDT4 LDD T2 TOTAL DATA DRIVES FOUND LMD DD EXPECTED DATA DRIVES NJN CDT1 IF ERROR LDM ATTB,T3 SHN 21-11 PJN CDT1 IF NOT CLUSTERED RJM ATT WAIT FOR COMPLETION RESPONSE LDC C0302 REPORT ADDRESSEE STATUS OPERATION CODE RJM CUF CHECK IF UNIT FORMATTED NJN CDT1 IF NOT FORMATTED RJM VDA VERIFY DRIVE ATTRIBUTES RJM COD CHECK FOR OFFLINE DRIVE LDML DVTP,DI LPC 157777 CLEAR *CHECK DRIVE TYPE* FLAG STML DVTP,DI LJM CMP EXIT CEA SPACE 4,15 ** CEA - CLEAR *ENABLE CONTROLLER ACTIVITY* REQUEST. * * ENTRY (EO) = EST ORDINAL FOR DEVICE. * (IR+4) = CHANNEL NUMBER. * * EXIT CHANNEL ENABLE BIT CLEARED IN *MST* WORD *BDLL*. * SPECIAL REQUEST BIT CLEARED. * * USES CM+2. * * CALLS CCI, CPF, UBP. CEA SUBR ENTRY/EXIT RJM CCI CALCULATE CHANNEL INDEX LDN 0 NEW VALUE STD CM+2 LDD T1 BIT TO CHANGE ADN 49D RJM UBP CLEAR ENABLE CHANNEL BIT IN *BDLL* LDN ECAF CLEAR SPECIAL REQUEST IN *PUT* RJM CPF UJN CEAX RETURN CEC SPACE 4,10 ** CEC - CHECK FOR *ENABLE CONTROLLER ACTIVITY* REQUEST. * * EXIT (A) = 0, IF REQUEST IS FOR THIS CHANNEL. * * USES T1 - T7, CM. * * MACROS SFA. CEC SUBR ENTRY/EXIT SFA EST,EO CHECK EST ENTRY ADK EQDE CRD T1 LDD T1+4 SHN 3 ADN BDLL CHECK IF REQUEST IS FOR THIS CHANNEL CRD T4 LDD T4 SHN -1 LPN 3 STD T4 ZJN CECX IF NEITHER CHANNEL FLAG IS SET SBN 3 ZJN CECX IF BOTH CHANNEL FLAGS ARE SET LDM T1,T4 COMPARE REQUESTED CHANNEL TO THIS CHANNEL LMD IR+4 LPN 77 UJN CECX RETURN CEP SPACE 4,15 ** CEP - CLEAR ERROR PROCESSING INTERLOCK. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * (ERPA) = (DI), IF ERROR PROCESSING ACTIVE ON DEVICE. * (ERFL) = (DI), IF E.P. INTERLOCK SET FOR THIS DEVICE. * (ERMF) = (DI), IF MMF RECOVERY INTERLOCK SET. * * EXIT (ERPA) = (ERRA) = 0, IF ERROR PROCESSING ACTIVE. * (ERFL) = (ERRA) = 0, IF INTERLOCK SET. * (ERMF) = 0, IF MMF RECOVERY INTERLOCK SET. * MMF INTERLOCK(S) CLEARED. * * CALLS CBI, CDS, LNE. * * MACROS CMSTF, MONITOR. CEP SUBR ENTRY/EXIT LDM ERPA CHECK IF ERROR PROCESSING ACTIVE LMD DI NJN CEP1 IF NOT ACTIVE ON THIS DEVICE STM ERPA CLEAR ERROR PROCESSING ACTIVE FLAG STM ERRA ENABLE NEXT PASS THROUGH ERROR PROCESSOR CEP1 LDM ERFL CHECK IF ERROR PROCESSING INTERLOCK SET LMD DI NJN CEPX IF NOT SET ON THIS DEVICE STM ERFL CLEAR ERROR PROCESSING INTERLOCK FLAG * CLEAR ERROR PROCESSING FLAGS IN *MST*. CEP2 LDN 0 INITIALIZE PARTITION SEARCH CEP3 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN CEP5 IF NO MORE PARTITIONS TO PROCESS RJM CDS CHECK DEVICE STATUS MJN CEP4 IF DEVICE NOT RECOVERED CMSTF GDER CLEAR *ERROR RECOVERY IN PROGRESS* FLAG CEP4 LDD EO UJN CEP3 CHECK FOR NEXT PARTITION * CLEAR MMF INTERLOCKS, IF SET. CEP5 LDM ERMF CHECK IF RECOVERY ERROR INTERLOCK SET ZJN CEP6 IF INTERLOCK NOT SET LDN CRIS CLEAR RECOVERY ERROR PROCESSING INTERLOCK STD CM+1 MONITOR MTEM * LDN 0 CLEAR RECOVERY ERROR INTERLOCK FLAG STM ERMF CEP6 RJM CBI CLEAR *BDT* ERROR PROCESSING INTERLOCKS UJP CEPX RETURN CET SPACE 4,10 ** CET - CHECK ELAPSED TIME. * * ENTRY (CETB) = TIME OF LAST GLOBAL MST CHECK. * * EXIT (A) .LT. 0, IF NOT TIME TO CHECK GLOBAL MST-S. * (DVTP) BIT 7 SET FOR SHARED PARITY DEVICES, IF TIME. * (CETB) UPDATED, IF TIME TO CHECK GLOBAL MST-S. * * USES T1, T2, CM - CM+4. CET SUBR ENTRY/EXIT LDK RTCL GET CURRENT CLOCK CRD CM LDD CM+1 COMPARE LOW ORDER BYTE OF SECONDS SBM CETB CALCULATE ELAPSED TIME PJN CET1 IF NO UNDERFLOW ADC 10000 CORRECT FOR UNDERFLOW CET1 SBN SBUR MJN CETX IF ELAPSED TIME LESS THAN *SBUR* SECONDS LDD CM+1 SAVE CURRENT CLOCK VALUE STM CETB * SET *CHECK MMF ACCESS* FLAGS FOR ALL SHARED PARITY DEVICES. LDC DSTB-DSTBE * UJN CETX (NO SHARED DEVICES CONFIGURED) CETA EQU *-2 STD T1 CET2 LDN DSTBE PROCESS NEXT DEVICE RAD T1 LMM DASB ZJN CETX IF NO MORE DEVICES TO PROCESS LDM DVTP,T1 LPN 77 STD T2 DRIVE TYPE LDML DM,T2 SHN 21-17 PJN CET2 IF NOT PARITY DEVICE LDML DVTP,T1 SHN 21-11 PJN CET2 IF NOT SHARED DEVICE SHN -21+11+22 LPC 177577 LMC 200 SET *CHECK MMF PARITY ACCESS* FLAG STML DVTP,T1 UJN CET2 PROCESS NEXT DEVICE CETB CON 0 TIME OF LAST GLOBAL MST CHECK (SECONDS) CFM SPACE 4,15 ** CFM - CLEAR *FORMAT PENDING* FLAG IN MST(S). * * IF FORMAT IS COMPLETE ON ALL UNITS OF A DEVICE, CLEAR *FP* * IN THE MST(S) FOR ALL PARTITIONS OF THAT DEVICE. * * ENTRY (EO) = EST ORDINAL FOR DEVICE. * * EXIT MST(S) UPDATED IF FORMAT COMPLETE. * * USES CM - CM+4, CW - CW+4. * * CALLS LNE. * * MACROS CMSTF, PUTE. CFM SUBR ENTRY/EXIT LDI DI *PUT* ORDINAL OF FIRST UNIT OF DEVICE ERRNZ PUTO CODE DEPENDS ON VALUE CFM1 SHN PUTLS PUTE * ADC HSCT GET *PUT* ORDINAL OF NEXT UNIT CRD CM ADN PILL-HSCT GET SPECIAL REQUEST FLAGS CRD CW LDD CW+3 SHN 21-FCRF-14 MJN CFMX IF FORMAT REQUEST SET FOR THIS UNIT LDD CM+4 NJN CFM1 IF ADDITIONAL UNITS IN DEVICE * LDN 0 INITIALIZE PARTITION SEARCH CFM2 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN CFMX IF NO MORE PARTITIONS CMSTF LFPR CLEAR *FORMAT PENDING* FLAG IN MST LDD EO UJN CFM2 SEARCH FOR NEXT PARTITION CFR SPACE 4,25 ** CFR - CHECK *PUT* FOR REQUEST. * * ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS. * (DI) = DEVICE STATE TABLE ADDRESS. * (FC) = 0 IF FORMATTING OF DRIVES NOT COMPLETE. * * EXIT TO SPECIAL REQUEST OR IO ROUTINE AS APPLICABLE WITH - * (PO) = *PUT* ORDINAL. * (CB) = *CBT* ORDINAL. * (EO) = EST ORDINAL. * (RW) = READ / WRITE FLAG. * (CN) = CONTROLLER NUMBER. * (DN) = DRIVE NUMBER. * (WB - WB+4) = *UNCT* WORD OF *PUT* ENTRY. * (DI) = DEVICE STATE TABLE ADDRESS. * TO *ERR* IF CONTROLLER ERROR. * TO *CFF* TO CHECK FOR FORMAT REQUEST. * TO *ISR* TO PROCESS SPECIAL REQUEST. * TO *PIO* TO PROCESS I/O REQUEST. * TO *ROD* TO RESTORE AN OFF-LINE DRIVE. * * USES CM+3. * * CALLS CMP8, ECI, IDU, IIO, ISR, LDP, ROD. CFR9 LDM RSDI CHECK IF RESTORE IN PROGRESS LMD DI NJN CFRX IF NO RESTORE IN PROGRESS ON THIS DEVICE STM RMUX CLEAR MULTIPLEX COUNT RJM ROD RESTORE OFF-LINE DRIVE CFR SUBR ENTRY/EXIT RJM ECI EXAMINE CONTROLLER INTERRUPTS * RJM CMP8 (TERMINATION PROCESSING) CFRA EQU *-1 NJN CFRX IF DEVICE SHOULD NOT BE PROCESSED LDD FC NJN CFR0 IF FORMAT COMPLETE LJM CFF CHECK FOR FORMAT CFR0 RJM LDP LOAD DEVICE PARAMETERS LDML DVTP,DI CHECK FOR INTERNAL SPECIAL REQUESTS SHN 6-15 LPC 100 ISOLATE *CHECK DRIVE TYPE* FLAG ZJN CFR1 IF NO INTERNAL SPECIAL REQUESTS PENDING STD CM+3 SET INTERNAL SPECIAL REQUESTS CFR1 LDD CM+3 NJN CFR2 IF SPECIAL REQUEST LDD WB+3 CFR1.1 ZJN CFR9 IF NO I/O REQUEST CFR2 LDD CM+4 ZJN CFR3 IF UNIT NOT INTERLOCKED LMD OA CFR2.1 NJN CFRX IF UNIT INTERLOCKED BY OTHER DRIVER CFR3 LDD CM+3 ZJN CFR5 IF NOT SPECIAL REQUEST RJM ROD SEE IF TIME TO ISSUE RESTORE RJM ISR IDENTIFY AND PROCESS SPECIAL REQUEST UJN CFR1 CHECK FOR ANOTHER REQUEST CFR5 LDD CB RJM IIO INITIATE I/O ZJN CFR1.1 IF I/O NOT ENABLED ON THIS ACCESS RJM IDU INTERLOCK DISK UNIT NJN CFR2.1 IF INTERLOCK NOT AVAILABLE LDML CTST,CI SHN 21-15 PJN CFR6 IF CONTROLLER FUNCTIONAL LDN ECMD CONTROLLER DEAD RJM ERR PROCESS ERROR CFR6 RJM ROD SEE IF TIME TO ISSUE RESTORE LJM PIO PROCESS I/O REQUEST CLP SPACE 4,10 ** CLP - CLEAR *LOST PARITY* FLAGS. * * USES CM - CM+4. * * CALLS CDS, LNE. * * MACROS CMSTF, MONITOR. CLP SUBR ENTRY/EXIT LDML DVTP,DI CLEAR *PROCESS LOST PARITY* FLAG, IF SET LPC 137777 STML DVTP,DI LDN 0 INTIALIZE PARTITION SEARCH CLP1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN CLPX IF NO MORE PARTITIONS RJM CDS CHECK DEVICE STATUS MJN CLP2 IF DEVICE NOT RECOVERED LDD EO SET EST ORDINAL STD CM+1 LDN 0 STD CM+2 LDN SOUS CLEAR OFFLINE UNIT IN *ACGL* STD CM+3 MONITOR STBM CMSTF GDPL CLEAR *PARITY PROTECTION LOST* FROM *ACGL* CLP2 LDD EO UJN CLP1 PROCESS NEXT PARTITION CLU SPACE 4,40 ** CLU - CLUSTER LOGICAL UNIT. * * ENTRY (DT) = DRIVE TYPE. * (CN) = CONTROLLER NUMBER. * (DD) = NUMBER OF DATA DRIVES IN DEVICE. * (DN) = DRIVE NUMBER. * (PD) = NUMBER OF PARITY DRIVES IN DEVICE. * * EXIT TO *ERR* IF ERROR. * COMMAND PACKET WRITTEN THE FOLLOWING VALUES, WHERE * X INDICATES THE UNIT NUMBER (RANK IN THE CABINET). * * <- 5832 -> <-------- 5833 / 5838 / 47444 ---------> * -1 -2 -1 -1P -2 -2P -3 -3P -4 * * LENGTH 000C 0010 000C 0010 0010 0014 0014 0018 0018 * * CPBF+FCP+0 0568 0968 0568 0968 0968 0D68 0D68 1168 1168 * * 1 0X01 0X01 0X01 0X01 0X01 0X01 0X01 0X01 0X01 * 2 8600 8680 8A00 8A80 8A80 8A80 8A80 8A80 8A80 * * X X X X X X X * 3 ---- 0801 ---- 1801 0801 0801 0801 0801 0801 * 4 ---- 8680 ---- 8A10 8A80 8A80 8A80 8A80 8A80 * * X * 5 ---- ---- ---- ---- ---- 1801 1X01 1X01 1X01 * 6 ---- ---- ---- ---- ---- 8A10 8A80 8A80 8A80 * * X X * 7 ---- ---- ---- ---- ---- ---- ---- 1801 1801 * 8 ---- ---- ---- ---- ---- ---- ---- 8A10 8A80 * * USES T1. * * CALLS ATT, SOU, SRP, WCB. CLU SUBR ENTRY/EXIT LDC C0209 LOAD ATTRIBUTE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LPN 77B SHN 10 ADN 1 STML CPBF+FCP+1 FIRST DRIVE ADC 0#800 STML CPBF+FCP+3 SECOND DRIVE ADC 0#800 STML CPBF+FCP+5 THIRD DRIVE ADC 0#800 STML CPBF+FCP+7 FOURTH DRIVE LDD DD NUMBER OF DATA DRIVES ADD PD NUMBER OF PARITY DRIVES SBN 1 TOTAL DRIVES LESS 1 SHN 1 SET PARAMETER BLOCK INDEX STD T1 SHN 1+10B BUILD CLUSTER PARAMETER ADC P0568 STML CPBF+FCP LDD DT IFNE EQEA,0,2 SBK EQEA MJN CLU1 IF NOT 5832 SOLID STATE DEVICE SBK EQEC-EQEA PJN CLU1 IF NOT 5832 SOLID STATE DEVICE LDC 0#8680 UJN CLU2 CONTINUE SETUP CLU1 LDC 0#8A80 CLU2 STML CPBF+FCP+2 STML CPBF+FCP+4 STML CPBF+FCP+6 STML CPBF+FCP+10 LDD T1 NJN CLU3 IF NOT 1X DRIVE LDC -0#80 CLEAR PARALLEL BIT RAML CPBF+FCP+2 CLU3 LDD PD ZJN CLU4 IF NOT A PARITY DEVICE LDML CPBF+FCP+7 MAKE LAST DRIVE PARITY DRIVE STML CPBF+FCP+1,T1 LDC 0#10-0#80 CLEAR PARALLEL BIT, SET PARITY BIT RAML CPBF+FCP+2,T1 * COMMAND PACKET SETUP COMPLETE FOR ALL CONFIGURATIONS. CLU4 LDD T1 SHN 1 ADK 0#C RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJN CLU10 IF NOT SUCCESSFUL * WAIT FOR ASYNCHRONOUS RESPONSE FROM DRIVE. CLU9 LDN ASRT RJM ATT PROCESS ATTENTION NJN CLU10 IF ERROR LDD CN SHN 10 ADD DN LMML RPBF+CUN NJN CLU9 IF WRONG UNIT LDN ID26 RJM SRP SEARCH RESPONSE PACKET MJN CLU10 IF ID26 NOT FOUND LDML RPBF+5,T3 SBN 7 MJN CLU10 IF PARAMETER TOO SHORT LDML RPBF+5+3,T3 SHN 21-13 MJP CLUX IF READ READY CLU10 LCN ELCA LOAD CONTROLLER ATTRIBUTES FAILURE RJM ERR PROCESS ERROR CMC SPACE 4,10 ** CMC - CHECK MONITOR COMPLETE. * * EXIT (A) = (CW) = 0. * * USES CW - CW+4. * * CALLS AME. * * MACROS DELAY. CMC SUBR ENTRY/EXIT CMC1 LDD OA CHECK OUTPUT REGISTER CRD CW LDD CW ZJN CMCX IF NO REQUEST WAITING FOR RESPONSE SHN 21-13 PJN CMC2 IF REISSUE FLAG NOT SET SHN 13-21 LPC 177 CLEAR FLAGS STD CW LDD OA UPDATE OUTPUT REGISTER CWD CW RJM AME REISSUE REQUEST UJN CMC3 DELAY AND RECHECK CMC2 SHN 13-21 LPC 177 SBN CPUM PJN CMC3 IF NOT *MTR* REQUEST LDK PPRL SET *MTR* REQUEST FLAG CRD CW LDD OA STD CW LDK PPRL CWD CW CMC3 DELAY UJN CMC1 RECHECK OUTPUT REGISTER CMN SPACE 4,15 ** CMN - CHECK MODEL NUMBER. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (DN) = DRIVE NUMBER. * (DT) = DRIVE TYPE. * * EXIT TO *ERR* IF WRONG DRIVE TYPE. * * USES T1, T2. * * CALLS ATT, DDT, IDT, SCP, SOU. CMN4 RJM ATT WAIT FOR COMPLETION RESPONSE CMN SUBR ENTRY/EXIT LDD DN STM PHYD,DI PHYSICAL DRIVE RJM DDT DETERMINE DRIVE TYPE MJN CMN4 IF DRIVE NOT FOUND RJM ATT WAIT FOR COMPLETION RESPONSE LDC C0200 REPORT ATTRIBUTES OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDC 0#8050 STML CPBF+FCP+1 LDC 0#36C RJM SCP SET COMMAND PARAMETER LDN 10D COMMAND PACKET LENGTH RJM IDT INPUT DATA TO PP LDM DDTA DRIVES PER LOGICAL UNIT STDL T1 LDN 0 STDL T2 CMN1 LDML ATTB+26D,T2 NJN CMN2 IF MODEL NUMBER PRESENT SODL T1 ZJN CMN3 IF NO MODEL NUMBER LDN 14 RADL T2 UJN CMN1 CONTINUE SEARCH FOR MODEL NUMBER CMN2 LMML MN,DT EXPECTED MODEL NUMBER ZJN CMN3 IF CORRECT MODEL NUMBER LDC -WDTP WRONG DRIVE TYPE RJM ERR PROCESS ERROR CMN3 UJP CMN4 WAIT FOR COMPLETION RESPONSE CMP SPACE 4,25 ** CMP - COMPLETE PROCESSING. * * ENTRY AT *CMP* IF SPECIAL REQUEST OR I/O REQUEST * COMPLETED SUCCESSFULLY. * AT *CMP1* IF UNRECOVERED ERROR. * AT *CMP2* FROM *ERR* IF SUSPECT STATE WAS JUST * SET FOR THE DEVICE. * AT *CMP8* IF PP BEING DROPPED. * AT *CMP10* TO ABANDON REQUEST (WILL BE RETRIED LATER). * (DI) = DEVICE STATE TABLE ADDRESS. * (UC) = UNIT ACTIVITY COUNT. * (RW) = READ / WRITE STATUS. * * EXIT TO *DAS1*. * (UC) = UNIT ACTIVITY COUNT DECREMENTED. * * USES UC, WB+3, WB+4. * * CALLS CBC, CEP, CMC, CRF, CRP, DMP, IDM, IMR, RCR. CMP10 RJM RCR RESET CHANNEL REGISTERS RJM CBC CLEAR BUFFER COUNT * UJN CMP ABANDON REQUEST CMP LDM ERCT,DI ZJN CMP3 IF NO ERRORS LDN 3 STM MSGL+1 SET BASIC MESSAGE LENGTH CMP1 AOM ERCT,DI LDC HD0111 ISSUE FINAL BML MESSAGE RJM IDM CMP2 LDN 0 CLEAR ERROR COUNT STM ERCT,DI CMP3 RJM CEP CLEAR ERROR PROCESSING, IF SET RJM CRF CLEAR RESET FLAGS, IF SET LDM CFFA LMD DI NJN CMP4 IF NO FORMAT IN PROGRESS ON DEVICE STM CFFA CLEAR *FORMAT IN PROGRESS* FLAG * INCLUDE *PROBE* DATA IN FINAL *BIOM* REQUEST. CMP4 LDD RW SET DATA TRANSFER DIRECTION SHN 13-0 LMM CSCT,DI APPEND CUMULATIVE SECTOR COUNT STD WB+4 LDM RQLN,DI CMP5 ZJN CMP7 IF UNIT NOT INTERLOCKED STD WB+3 LDM RSDI CHECK IF RESTORE IN PROGRESS LMD DI NJN CMP6 IF NO RESTORE IN PROGRESS ON THIS DEVICE LDD WB+3 LPN 77 STD WB+3 ZJN CMP7 IF NO BUFFERS TO DELINK LDN DCBS DELINK BUFFERS (LEAVE INTERLOCK SET) RJM IMR RJM CBC CLEAR BUFFER COUNT (LEAVE INTERLOCK SET) UJN CMP7 CHECK MONITOR COMPLETE CMP6 LDN DCBS DELINK BUFFERS / RELEASE UNIT INTERLOCK RJM IMR * LDN 0 CLEAR UNIT INTERLOCKED FLAG STM RQLN,DI SOD UC ADJUST UNIT ACTIVITY COUNT CMP7 RJM CMC CHECK MONITOR COMPLETE * LDN 0 STM ADDR,DI CLEAR REENTRY ADDRESS STM ATTN,DI CLEAR INTERRUPT ADDRESS STM CSCT,DI CLEAR CUMULATIVE SECTOR COUNT STM SREQ,DI CLEAR SPECIAL REQUEST FLAG LJM DAS1 PROCESS NEXT DEVICE * TERMINATION PROCESSING. CMP8 CON 0 RJM CRF CLEAR RESET FLAGS, IF SET RJM CEP CLEAR ERROR PROCESSING, IF SET RJM CRP CLEAR *RESTORE IN PROGRESS*, IF SET LDN 0 CLEAR *PROBE* DATA STD WB+4 LDD PD ZJN CMP9 IF NOT PARITY DEVICE LDML DVTP,DI SHN 21-11 PJN CMP9 IF NOT MMF SHARED DEVICE RJM DMP DISABLE MMF PARITY DEVICE ACCESS CMP9 RJM CBC CLEAR BUFFER COUNT UJP CMP5 RELEASE UNIT INTERLOCK, IF SET CMR SPACE 4,15 ** CMR - CHECK FOR MMF *RESTORE* FLAGS. * * ENTRY (EO) = EST ORDINAL. * * EXIT (A) .EQ. 0, IF RESTORE NOT IN PROGRESS. * (A) .GT. 0, IF RESTORE IN PROGRESS FOR ANY PARTITION. * (A) .LT. 0, IF RESTORE INITIATION FOR ANY PARTITION. * (CMRA) = EST ORDINAL OF DEVICE WITH RESTORE FLAG SET. * (CMRA) = 0, IF NO EST WITH RESTORE FLAG FOUND. * * USES T4. * * CALLS CDS, GCA, LNE. CMR3 LDD T4 RETURN STATUS SHN 21-3 CMR SUBR ENTRY/EXIT LDN 0 STD T4 STM CMRA * LDN 0 INITIALIZE PARTITION SEARCH CMR1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN CMR3 IF NO MORE PARTITIONS RJM CDS CHECK DEVICE STATUS MJN CMR2 IF DEVICE NOT RECOVERED ZJN CMR2 IF NOT SHARED DEVICE RJM GCA GET CURRENT *ACGL* LDD CM+4 LPN 11 CHECK *RESTORE* AND *RESTORE INITIATION* ZJN CMR2 IF NEITHER BIT SET STD T4 SAVE STATUS LDD EO STM CMRA SAVE EST ORDINAL CMR2 LDD EO UJN CMR1 CHECK FOR NEXT PARTITION CMRA CON 0 EST ORDINAL WITH *RESTORE* SET COD SPACE 4,10 ** COD - CHECK FOR OFF-LINE DRIVE. * * ENTRY (PD) = PARITY DEVICE FLAG. * * EXIT (A) = 0, IF NO OFFLINE DRIVE FOUND. * * CALLS ATT, RDO, SOU, WCB. COD1 LDN 0 INDICATE NO OFFLINE DRIVE FOUND COD SUBR ENTRY/EXIT LDD PD ZJN CODX IF NOT A PARITY DEVICE LDC C0302 REPORT ADDRESSEE STATUS OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDN 6 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT WAIT FOR COMPLETION RESPONSE NJN COD1 IF ERROR LDML RPBF+11 SHN 21-11 PJN COD1 IF NO OFF-LINE DRIVE DETECTED SHN -21+11+22 SET PHYSICAL DRIVE ID LPN 37 STM PHYD,DI STM OUPD,DI SET OFFLINE UNIT RJM RDO REPORT DRIVE OFFLINE LDN 1 INDICATE OFFLINE DRIVE FOUND UJN CODX RETURN CPC SPACE 4,10 ** CPC - CHECK FOR PARALLEL CONTROLLER. * * ENTRY (DT) = DRIVE TYPE. * * EXIT TO *ERR* IF CONTROLLER DOES NOT SUPPORT THIS DRIVE. * * CALLS ATT, IDT, SOC. CPC1 RJM ATT WAIT FOR COMPLETION RESPONSE CPC SUBR ENTRY/EXIT LDD DD DATA DRIVES PER LOGICAL UNIT SBN 1 ZJN CPCX IF THIS DRIVE WILL WORK IN SERIAL MODE LDC C0200 REPORT ATTRIBUTES OPERATION CODE RJM SOC SET OPERATION CODE AND CONTROLLER LDC 0#36C STML CPBF+FCP LDC 0#80DA STML CPBF+FCP+1 REPORT PARAMETER DA LDN 10D COMMAND PACKET LENGTH RJM IDT INPUT DATA TO PP LDML ATTB+1 SHN 21-10 MJN CPC1 IF CONTROLLER SUPPORTS PARALLEL DRIVES LDC -PNSP CONTROLLER DOES NOT SUPPORT PARALLEL RJM ERR PROCESS ERROR CPE SPACE 4,20 ** CPE - CHECK IF PARITY DRIVE ENABLED. * * ENTRY (FFDA) = 0 IF FAILING DRIVE IN RESPONSE PACKET. * (CI) = CONTROLLER STATE TABLE ADDRESS. * (FC) = FORMAT COMPLETE FLAG. * (PD) = 0, IF NOT PARITY DEVICE. * (IPPA) = 1. * * EXIT (CPEA) = 0 IF PARITY DRIVE AND RESPONSE HAS FAILING * DRIVE. * (T2) = (RPBF+9) FROM REPORT ADDRESSEE STATUS. * TO *ERR* IF ERROR. * * USES T2. * * CALLS ATT, SOU, WCB. CPE SUBR ENTRY/EXIT LDD PD PARITY DRIVE INDICATOR ZJN CPEX IF NOT A PARITY DEVICE LDM SREQ,DI NJN CPEX IF SPECIAL REQUEST LDML CTST,CI SHN 21-15 MJN CPEX IF CONTROLLER DEAD LDD FC ZJN CPEX IF FORMAT NOT COMPLETE LDM FFDA NJN CPEX IF NO FAILING DRIVE LDC C0302 REPORT ADDRESSEE STATUS RJM SOU SET OPERATION CODE AND UNIT LDN 6 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION ZJN CPE2 IF SUCCESSFUL LCN ERDA REPORT DEVICE ATTRIBUTES ERROR RJM ERR PROCESS ERROR CPE2 LDML RPBF+11 STDL T2 SHN 3 PJN CPE4 IF LOGICAL UNIT NOT READ READY SHN 1 PJN CPE4 IF NO PARITY DRIVE SHN 4 PJN CPE3 IF NO OFF-LINE DRIVE SHN -10 RIGHT JUSTIFY OFF-LINE UNIT NUMBER LMM PHYD,DI LPN 37 NJN CPE4 IF FAILING DRIVE NOT OFF-LINE CPE3 LDN 0 STM CPEA CPE4 UJP CPEX RETURN CPEA CON 0 CPF SPACE 4,15 ** CPF - CHANGE *PILL* FIELD IN *PUT*. * * ENTRY (A) = 6/V, 6/N, 6/B. * V = VALUE TO SET INTO SPECIFIED FIELD. * N = NUMBER OF BITS - 1 TO CLEAR. * B = LOW ORDER BIT NUMBER TO CHANGE. * (DI) = DEVICE STATUS TABLE ENTRY ADDRESS. * * EXIT (A) = 0. * * USES T6, T7, CM+1 - CM+4. * * MACROS MONITOR, PUTE. CPF SUBR ENTRY/EXIT STD T6 SAVE FIELD SIZE AND LOW ORDER BIT SHN -14 STD CM+2 NEW VALUE LDD T6 SHN 6 STD T7 SET BIT NUMBER SHN -14 ADC PILL*100+1 WORD OFFSET STD T6 LDD MA CWD T6 STORE MESSAGE BUFFER PARAMETERS LDN 1 STD CM+1 PARAMETER WORD COUNT LDI DI ERRNZ PUTO CODE DEPENDS ON VALUE SHN PUTLS PUTE * ADC 0 SET BASE *PUT* ENTRY ADDRESS STD CM+4 SHN -14 STD CM+3 MONITOR UTEM CLEAR *PUT* FLAG * LDN 0 UJN CPFX RETURN CRF SPACE 4,10 ** CRF - CLEAR RESET FLAGS. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (SRSA) = (DI), IF RESET IN PROGRESS ON DEVICE. * * USES RF. * * CALLS CRI, IOM. CRF SUBR ENTRY/EXIT LDM SRSA CHECK RESET FLAG LMD DI NJN CRFX IF NO RESET IN PROGRESS ON THIS DEVICE STM SRSA CLEAR RESET FLAG STD RF CLEAR *RESET FAILED* RJM CRI CLEAR SLAVE RESET INTERLOCK, IF SET LDN 0 CLEAR OPERATOR MESSAGE RJM IOM UJN CRFX RETURN CRI SPACE 4,10 ** CRI - CLEAR SLAVE RESET INTERLOCK. * * ENTRY (CRIB) = 0, IF SLAVE RESET INTERLOCK NOT SET. * * CALLS IFR. CRI SUBR ENTRY/EXIT CRIA LDC ** (SLAVE RESET INTERLOCK FLAG) * UJN CRIX (NO SHARED BUFFERED DEVICES CONFIGURED) CRIB EQU *-1 ZJN CRIX IF SLAVE RESET INTERLOCK NOT SET LCN /MMF/DSRI CLEAR *DAS SLAVE RESET INTERLOCK* FLAG BIT RJM IFR LDN 0 CLEAR *SLAVE RESET INTERLOCK SET* FLAG STM CRIB UJN CRIX RETURN CRP SPACE 4,15 ** CRP - CLEAR *RESTORE IN PROGRESS* FLAGS. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * (RSIN) = (DI), IF RESTORE INTERLOCK SET ON DEVICE. * * USES CM - CM+4. * * CALLS CPF, CDS, LNE, RBD, UBP. * * MACROS CMSTF, MONITOR. CRP4 LDN RSPF CLEAR *RESTORE* SPECIAL REQUEST FLAG RJM CPF STM SREQ,DI CLEAR SPECIAL REQUEST FLAG CRP SUBR ENTRY/EXIT LDM RSIN CHECK RESTORE INTERLOCK FLAG LMD DI NJN CRPX IF INTERLOCK NOT SET FOR THIS DEVICE STM RSIN CLEAR RESTORE INTERLOCK FLAG STM RSDI CLEAR *RESTORE IN PROGRESS* FLAG * LDN 0 INITIALIZE PARTITION SEARCH CRP1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN CRP4 IF NO MORE PARTITIONS RJM CDS CHECK DEVICE STATUS ZJN CRP2 IF DEVICE RECOVERED BUT NOT SHARED RJM RBD READ *BDLL* LDD CM+3 CHECK IF THIS MF HOLDS *RESTORE* INTERLOCK SHN 21-11 PJN CRP3 IF THIS MF DOES NOT HOLD INTERLOCK CRP2 CMSTF GDUR CLEAR *RESTORE IN PROGRESS* FROM *ACGL* CMSTF GDRI CLEAR *RESTORE INITIATION* FROM *ACGL* LDD EO SET EST ORDINAL STD CM+1 LDN 0 STD CM+2 LDN SRCS CLEAR REMAINING CYLINDERS / 100B IN *ACGL* STD CM+3 MONITOR STBM RJM CDS CHECK DEVICE STATUS MJN CRP3 IF DEVICE NOT RECOVERED ZJN CRP3 IF NOT SHARED DEVICE LDD EO SET EST ORDINAL STD CM+4 LDN CRPS CLEAR RESTORE PARITY INTERLOCK IN *BDT* STD CM+1 MONITOR MTEM * LDN 0 CLEAR FLAG THAT SAYS THIS MF HAS INTERLOCK STD CM+2 LDN 25 BIT TO CHANGE RJM UBP UPDATE *BDLL* PARAMETER CRP3 LDD EO UJP CRP1 PROCESS NEXT PARTITION CSC SPACE 4,10 ** CSC - COMPUTE SECTOR COUNT FOR RESTORE. * * ENTRY (DT) = DRIVE TYPE. * (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT (CPBF+FCP+2) = NUMBER OF SECTORS TO RESTORE. * * USES T1 - T3. CSC2 LDM PSPT,DT SBD T2 RAD T3 ADD SECTORS FOR LAST TRACK STM CPBF+FCP+2 SECTOR COUNT CSC SUBR ENTRY/EXIT LDM RTSN STM TKSN,DI FOR ERROR LOGGING SHN 14 STD T1 STARTING TRACK SHN -14 STD T2 STARTING SECTOR LDD T1 SHN 10 ADD T2 STML CPBF+FCP+4 STARTING TRACK, SECTOR LDN 0 STD T3 STM CPBF+FCP+1 UPPER 2 BYTES OF SECTOR COUNT CSC1 AOD T1 LDM LSOC,DT SHN -6 SBD T1 MJN CSC2 IF LAST TRACK LDM PSPT,DT RAD T3 COMPUTE SECTOR COUNT UJN CSC1 INCREMENT TRACK NUMBER CSN SPACE 4,15 ** CSN - COMPARE CONTROLLER SERIAL NUMBERS. * * COMPARE THE CONTROLLER SERIAL NUMBER IN THE *BDT* ENTRY * FOR THE SPECIFIED DEVICE WITH THE SERIAL NUMBER OF THE * CONTROLLER PROCESSING THE DEVICE ON THIS CHANNEL. * * ENTRY (A) = EST ORDINAL. * (CI) = CONTROLLER STATE TABLE ADDRESS. * * EXIT (A) = 0, IF CONTROLLER SERIAL NUMBER MATCHES. * * USES CM - CM+4. * * MACROS MONITOR. CSN SUBR ENTRY/EXIT * GET SERIAL NUMBER OF CONTROLLER PERFORMING *RESTORE*. STD CM+4 SET EST ORDINAL LDN GBDS GET *BDT* ENTRY STD CM+1 MONITOR MTEM LDD MA READ *BDT* ENTRY CRD CM * COMPARE WITH THIS CONTROLLER-S SERIAL NUMBER. LDD CM+2 LMM CTSN,CI NJN CSNX IF NOT THE SAME SERIAL NUMBER LDD CM+3 LMM CTSN+1,CI NJN CSNX IF NOT THE SAME SERIAL NUMBER LDD CM+4 LMM CTSN+2,CI UJN CSNX RETURN STATUS CSR SPACE 4,10 ** CSR - CLEAR SPECIAL REQUEST. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT TO *CMP*. * * CALLS CPF. CSR BSS 0 ENTRY LDM SREQ,DI ZJN CSR1 IF NO SPECIAL REQUEST IN PROGRESS LPN 77 SBN ECAF+ISRB-ISRA PJN CSR1 IF INTERNAL SPECIAL REQUEST LDM SREQ,DI RJM CPF CLEAR SPECIAL REQUEST FROM *PUT* CSR1 LJM CMP COMPLETE PROCESSING CTO SPACE 4,10 ** CTO - CHECK TIMEOUT. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT (A) .LT. 0 IF NOT TIMEOUT. * * USES T6, T7, CM - CM+4. * * MACROS FTTE. CTO SUBR ENTRY/EXIT LDI DI ERRNZ PUTO CODE DEPENDS ON VALUE SHK FTTLS FTTE * ADC 0 READ *FTT* ENTRY CRD CM LDC RTCL FETCH CURRENT CLOCK VALUE CRD T6 LDD T6 CHECK ELAPSED TIME SBD CM+3 MJN CTOX IF NOT TIMEOUT SHN 14 ADD T7 SBD CM+4 UJN CTOX RETURN CUF SPACE 4,10 ** CUF - CHECK IF UNIT FORMATTED. * * ENTRY (A) = OPERATION CODE. * (DT) = DRIVE TYPE. * * EXIT (A) = 0 IF DRIVE FORMATTED WITH CORRECT SECTOR SIZE. * TO *ERR* IF ERROR. * * CALLS ATT, SOU, WCB. CUF3 LDN 1 CUF SUBR ENTRY/EXIT RJM SOU SET OPERATION CODE AND UNIT LDN 6 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION ZJN CUF1 IF SUCCESSFUL LCN ERDA REPORT DEVICE ATTRIBUTES ERROR RJM ERR PROCESS ERROR CUF1 LDML RPBF+11 SHN 21-16 PJN CUF3 IF NOT FORMATTED SHN 21-17-21+16+22 MJN CUF2 IF CLUSTERED (DATA DRIVES ALREADY CHECKED) LDML RPBF+7 LPN 77B MASK ACTUAL DATA DRIVES FOR FORMAT LMD DD EXPECTED DATA DRIVES NJN CUFX IF WRONG NUMBER OF DATA DRIVES CUF2 LDML BPS,DT EXPECTED SECTOR SIZE SCN 77 LMML RPBF+13 ACTUAL SECTOR SIZE UJP CUFX RETURN DCA SPACE 4,15 ** DCA - DISABLE CONTROLLER ACTIVITY. * * ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS. * (CN) = CONTROLLER NUMBER. * (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * (IR+4) = CHANNEL NUMBER. * * EXIT *CONTROLLER DEAD* FLAG SET IN CONTROLLER STATE TABLE. * *CMX CONTROLLER DISABLED, CCHXX.* MESSAGE ISSUED. * * CALLS IEM. DCA SUBR ENTRY/EXIT LDML CTST,CI SET *CONTROLLER DEAD* FLAG LPC 017777 CLEAR BITS 15, 14 AND 13 LMC 020000 SET BIT 13 STML CTST,CI LDC ERCD+100000 *EQXXX, UXX, CMX CONTROLLER DISABLED.* RJM IEM ISSUE ERRORLOG MESSAGE UJN DCAX RETURN DCE SPACE 4,10 ** DCE - DOWN CHANNEL ON EQUIPMENT. * * ENTRY (EO) = EST ORDINAL OF DEVICE. * * USES EO, CM - CM+4. * * CALLS DAS. * * MACROS DELAY, EXECUTE, MONITOR. DCE SUBR ENTRY/EXIT DCE1 LDD EO SET EST ORDINAL STM DCEA LMC 4000 STM DCEB+4 SET DRIVER CALL FLAG, EST ORDINAL LDD MA CWM DCEB,ON STORE *1DS* CALL IN MESSAGE BUFFER LDN 0 STD CM+1 SET NON-PRIORITY REQUEST EXECUTE 1DS,= MONITOR RPPM REQUEST PP LDD CM+1 NJN DCEX IF *1DS* STARTED RJM DAS PROCESS ACTIVITY ON OTHER DEVICES DELAY LDC ** (EST ORDINAL OF CURRENT PARTITION) DCEA EQU *-1 STD EO RESTORE EST ORDINAL UJN DCE1 RETRY CALL DCEB VFD 18/3L1DS,6/,12/DWNF,12/0,12/4000 DCR SPACE 4,15 ** DCR - DROP CHANNEL RESERVATION. * * ENTRY (CR) = 1 IF CHANNEL RESERVED. * (IR+4) = CHANNEL NUMBER. * * EXIT (A) = (CR) = 0. * CHANNEL RESERVATION DROPPED. * * USES CM+1, CR. * * MACROS MONITOR. DCR SUBR ENTRY/EXIT LDD CR ZJN DCRX IF CHANNEL NOT RESERVED LDD IR+4 STD CM+1 DROP CHANNEL MONITOR DCHM * LDN 0 SET CHANNEL NOT RESERVED STD CR UJN DCRX RETURN DDT SPACE 4,20 ** DDT - DETERMINE DRIVE TYPE. * * ENTRY (PHYD,DI) = DRIVE TO DETERMINE TYPE OF. * (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT (A) .EQ. DRIVE TYPE (0-7) IF SUPPORTED DRIVE FOUND. * DRIVE TYPE 8-13 AND 14-19 ARE REPORTED AS * DRIVE TYPE 2-7. * (A) .EQ. *EQNS* IF NON-SUPPORTED DRIVE TYPE FOUND. * (A) .LT. 0 IF DRIVE NOT FOUND OR ERROR. * (DDTA) = DRIVES PER LOGICAL UNIT. * (ATTB+2,T3) HAS BIT 9 SET IF THE DRIVE IS FOUND * AND IT IS CLUSTERED. (T3) IS ADJUSTED TO POINT * TO THE CORRECT WORD IN THE RESPONSE. * * USES T1 - T4. * * CALLS IDT, SOC. * * NOTE TO ENSURE THAT THIS ROUTINE IS NOT CALLED FOR MORE * THAN ONE DEVICE AT THE SAME TIME, THE ERROR PROCESSING * FLAG MUST ALWAYS BE SET BEFORE CALLING THIS ROUTINE. DDT SUBR ENTRY LDC C0200 REPORT ATTRIBUTES OPERATION CODE RJM SOC SET OPERATION CODE AND CONTROLLER LDC P036C STML CPBF+FCP PARAMETER TO READ REV NUMBER LDC 0#8068 STML CPBF+FCP+1 REPORT PARAMETER 68 LDN 10D COMMAND PACKET LENGTH RJM IDT INPUT DATA TO PP LDML DDT STDL T4 RETURN ADDRESS FROM *DDT* LDML RPBF+5+2 SHN -1 STDL T1 LENGTH OF ATTRIBUTE DATA LDM PHYD,DI PHYSICAL DRIVE SHN 10 ADN 1 STDL T2 EXPECTED PARAMETER WORD WITH UNIT NUMBER LDN 0 STDL T3 INDEX TO PARAMETER 68 LDN 1 STML DDTA PHYSICAL DRIVES PER LOGICAL UNIT DDT1 LDML ATTB,T3 LMC 0#568 NJN DDT4 IF NOT SINGLE UNIT LDML ATTB+1,T3 LMDL T2 NJP DDT15 IF DIFFERENT UNIT LDML ATTB+2,T3 SHN 21-12 MJN DDT2 IF SOLID STATE DISK LDN EQEC 5833-1 OR 5838-1 OR 47444-1 UJN DDT3 EXIT DDT2 LDN EQEA 5832-1 DDT3 UJP DDTX RETURN DDT4 LMC 0#968&0#568 NJN DDT9 IF NOT 2 UNITS LDML ATTB+1,T3 LMDL T2 ZJN DDT5 IF UNIT FOUND LDML ATTB+3,T3 LMDL T2 NJP DDT16 IF DIFFERENT UNIT DDT5 LDN 2 STML DDTA PHYSICAL DRIVES PER LOGICAL UNIT LDML ATTB+4,T3 SHN 21-13 MJN DDT6 IF NOT SSD LDN EQEB 5832-2 UJN DDT3 EXIT DDT6 SHN 21-4-21+13 MJN DDT7 IF PARITY DRIVE LDN EQEE 5833-2 OR 5838-2 OR 47444-2 UJN DDT3 EXIT DDT7 LDN EQED 5833-1P OR 5838-1P OR 47444-1P DDT8 UJN DDT3 EXIT DDT9 LMC 0#D68&0#968 NJN DDT12 IF NOT 3 UNITS LDML ATTB+1,T3 LMDL T2 ZJN DDT10 IF UNIT FOUND LDML ATTB+3,T3 LMDL T2 ZJN DDT10 IF UNIT FOUND LDML ATTB+5,T3 LMDL T2 NJP DDT17 IF UNIT NOT FOUND DDT10 LDN 3 STML DDTA PHYSICAL DRIVES PER LOGICAL UNIT LDML ATTB+6,T3 SHN 21-4 PJP DDT14 IF NOT A PARITY UNIT LDN EQEF 5833-2P OR 5838-2P OR 47444-2P DDT11 UJN DDT8 EXIT DDT12 LMC 0#1168&0#D68 NJP DDT20 IF ILLEGAL PARAMETER LDML ATTB+1,T3 LMDL T2 ZJN DDT12.1 IF UNIT FOUND LDML ATTB+3,T3 LMDL T2 ZJN DDT12.1 IF UNIT FOUND LDML ATTB+5,T3 LMDL T2 ZJN DDT12.1 IF UNIT FOUND LDML ATTB+7,T3 LMDL T2 NJN DDT18 IF DIFFERENT UNIT DDT12.1 LDN 4 STML DDTA TOTAL DRIVES LDML ATTB+10,T3 SHN 21-4 PJN DDT13.1 IF NOT A PARITY UNIT LDN EQEM 5833-3P OR 5838-3P OR 47444-3P DDT13 UJN DDT11 EXIT DDT13.1 LDN EQEN 5833-4 OR 5838-4 OR 47444-4 UJN DDT13 EXIT DDT14 LDN EQNS NUMBER OF DEFINED DRIVE TYPES UJN DDT13 EXIT DDT15 LDN 3 UJN DDT19 UPDATE POINTER DDT16 LDN 5 UJN DDT19 UPDATE POINTER DDT17 LDN 7 UJN DDT19 UPDATE POINTER DDT18 LDN 11 DDT19 RADL T3 UPDATE POINTER TO PARAMETER 68 SBDL T1 MJP DDT1 IF MORE PARAMETERS TO CHECK DDT20 LCN 0 DRIVE NOT FOUND OR ERROR UJN DDT13 EXIT DDTA CON 0 TOTAL NUMBER OF DRIVES IN LOGICAL UNIT DLU SPACE 4,10 ** DLU - DECLUSTER LOGICAL UNIT. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (DDTA) = PHYSICAL DRIVES PER LOGICAL UNIT. * (PHYD,DI) = DRIVE TO DECLUSTER. * (DT) = DRIVE TYPE. * * EXIT TO *ERR* IF ERROR. * * CALLS ATT, SCP, SOU, SRP, WCB. DLU SUBR ENTRY/EXIT LDC C0209+1S17 LOAD ATTRIBUTE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDC P0568 RJM SCP SET COMMAND PARAMETER LDML CPBF+CUN LPN 77B MASK DRIVE NUMBER SHN 10 ADN 1 STML CPBF+FCP+1 PARAMETER WORD WITH DRIVE NUMBER LDD DT IFNE EQEA,0,2 SBN EQEA MJN DLU1 IF NOT SOLID STATE SBN EQEC-EQEA PJN DLU1 IF NOT SOLID STATE LDC 0#8500 DECLUSTER 5832 UJN DLU2 SET DECLUSTER PARAMETER DLU1 LDC 0#8900 DECLUSTER 5833/5838/47444 DLU2 STML CPBF+FCP+2 LDN 12D COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJN DLU4 IF NOT SUCCESSFUL * IF THE NEXT COMMAND IS ISSUED BEFORE THE DECLUSTER * COMPLETES, AN ERROR COULD OCCUR. DLU3 LDN ASRT RJM ATT PROCESS ATTENTION LDK ID26 RJM SRP SEARCH RESPONSE PACKET MJN DLU3 IF ID26 NOT FOUND SOM DDTA NJN DLU3 IF ANOTHER ASYNCHRONOUS RESPONSE EXPECTED UJP DLUX RETURN DLU4 LCN ELCA LOAD CONTROLLER ATTRIBUTES FAILURE RJM ERR PROCESS ERROR DMP SPACE 4,15 ** DMP - DISABLE MMF PARITY DEVICE ACCESS. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * USES CM+2. * * CALLS CAB, CAC, CBB, LNE, RBD, UBP. * * MACROS CMSTF. DMP5 LDC ** (UNPROCESSED PARTITION COUNT) DMPB EQU *-1 NJN DMPX IF NOT ALL PARTITIONS PROCESSED LDML DVTP,DI SET *ACCESS DISABLED* FLAG LPC 167777 LMC 10000 STML DVTP,DI DMP SUBR ENTRY/EXIT LDN 0 CLEAR UNPROCESSED PARTITION COUNT STM DMPB * LDN 0 INITIALIZE PARTITION SEARCH DMP1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN DMP5 IF NO MORE PARTITIONS RJM CAB CHECK ACGL *MMF PARITY DEVICE ACCESS* BIT ZJN DMP4 IF BIT FOR THIS MF IS CLEAR RJM CBB CHECK BDLL *DISABLE ACCESS* BIT MJN DMP2 IF BIT FOR THIS DRIVER ALREADY SET LDN 1 NEW VALUE STD CM+2 LDD T1 BIT TO CHANGE ADN 19D RJM UBP SET DISABLE ACCESS BIT IN *BDLL* DMP2 RJM CAC CHECK FOR ALTERNATE CHANNEL NJN DMP3 IF ALTERNATE CHANNEL UNDEFINED OR DOWN RJM RBD READ *BDLL* LDD CM+3 CHECK IF BITS SET FOR BOTH CHANNELS SHN -7 LPN 3 LMN 3 ZJN DMP3 IF BOTH BITS ARE NOW SET AOM DMPB UNPROCESSED PARTITION COUNT UJN DMP4 PROCESS NEXT PARTITION DMP3 CMSTF GPDA CLEAR ACCESS FLAG BIT FOR THIS MF DMPA EQU *-3 (BIT NUMBER FOR THIS MF) DMP4 LDD EO UJP DMP1 PROCESS NEXT PARTITION DRT SPACE 4,10 ** DRT - CHECK REQUEST TYPE. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (FC) = 0 IF FORMAT NOT COMPLETE. * (CB) = 0 IF NO I/O BUFFER PRESENT. * * EXIT (A) .NE. 0 IF I/O REQUEST. DRT2 LDN 0 DRT SUBR ENTRY/EXIT LDD FC ZJN DRTX IF FORMAT NOT COMPLETE LDM SREQ,DI NJN DRT2 IF SPECIAL REQUEST LDM RSDI CHECK IF RESTORE IN PROGRESS LMD DI NJN DRT1 IF NO RESTORE IN PROGRESS ON THIS DEVICE LDM RMUX ZJN DRTX IF CURRENTLY RESTORING A CYLINDER DRT1 LDD CB UJN DRTX ECA SPACE 4,20 ** ECA - ENABLE CONTROLLER ACTIVITY. * * THIS SPECIAL REQUEST CLEARS THE CONTROLLER DEAD FLAG IN THE * CONTROLLER STATE TABLE. THIS FUNCTION IS ISSUED BY *1MV* * WHEN AN *UP,CCH* COMMAND IS ENTERED. * * ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS. * (CN) = CONTROLLER NUMBER. * (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * (IR+4) = CHANNEL NUMBER. * * EXIT *CONTROLLER DEAD* FLAG CLEARED IN *CTST*. * *CMX CONTROLLER ENABLED, CCHXX* MESSAGE ISSUED. * TO *CMP* WHEN FUNCTION COMPLETE. * * CALLS CEA, IEM. ECA BSS 0 ENTRY LDML CTST,CI ENABLE CONTROLLER ACTIVITY SHN 21-15 PJN ECA1 IF CONTROLLER NOT DISABLED SHN -21+15+22 LPC 17777 CLEAR BITS 15 - 13 STML CTST,CI LDC ERCE+100000 *EQXXX, UXX, CMX CONTROLLER ENABLED.* RJM IEM ISSUE ERRORLOG MESSAGE ECA1 RJM CEA CLEAR ENABLE ACTIVITY REQUEST LJM CMP COMPLETE FUNCTION ECI SPACE 4,15 ** ECI - EXAMINE CONTROLLER INTERRUPTS. * * ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS. * (CN) = CONTROLLER NUMBER. * (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT (A) = (PA) = 0 IF NO REQUEST IN PROGRESS. * (A) .NE. 0, IF DEVICE SHOULD NOT BE PROCESSED. * TO (ADDR,DI) IF NO RESPONSE FOR REQUEST IN PROGRESS. * TO (ATTN,DI) IF RESPONSE FOR REQUEST IN PROGRESS. * TO *CMP* AFTER PERFORMING THE INITIAL LOGICAL RESET * ON THE CONTROLLER. THIS RESET IS DONE ONCE PER * CONTROLLER WHEN THE DRIVER IS LOADED. * * USES PA. * * CALLS FCN, GIS, IDU, IHD, LDP, SAP, SRS. ECI SUBR ENTRY/EXIT RJM SAP SELECT ADAPTER PORT LDC F0715 ENABLE INTERRUPTS RJM FCN RJM LDP LOAD DEVICE PARAMETERS RJM GIS GET INTERRUPT STATUS LPML TMSK,CN ZJN ECI2 IF NO INTERRUPT FROM THIS CONTROLLER * CHECK THAT INTERRUPT BELONGS TO CURRENT DRIVE. RJM IHD ZJN ECI2 IF RESPONSE FROM INACTIVE DRIVE * LDML ATTN,DI STDL PA SET RETURN ADDRESS LDN 0 STML ATTN,DI DEACTIVATE RETURN * RETURN TO CALLER WITH STATUS FROM RESPONSE PACKET. LDM EEST,DI EXPECTED RESPONSE TYPE LMD RT ZJN ECI1 IF EXPECTED RESPONSE LMD RT LMD MS ZJN ECI1 IF EXPECTED STATUS LMK CMCS&CMSS ECI1 LJM 0,PA RETURN TO CALLER * NO INTERRUPT FOUND - CHECK FOR REQUEST IN PROGRESS. ECI2 LDDL PA NJN ECI1 IF REQUEST IN PROGRESS LDM ERFL ZJN ECI3 IF DRIVER NOT IN ERROR PROCESSING LMD DI NJN ECI5 IF ERROR ON DIFFERENT DEVICE ECI3 LDM SRSA NJN ECI5 IF RESET IN PROGRESS LDM CFFA NJN ECI5 IF FORMAT IN PROGRESS LDML CTST,CI CHECK CONTROLLER STATUS SHN 21-16 MJN ECI6 IF INITIAL LOGICAL RESET NOT COMPLETE LDN 0 ECI5 LJM ECIX RETURN * PROCESS INITIAL LOGICAL RESET. ECI6 RJM IDU INTERLOCK DISK UNIT NJN ECI5 IF DEVICE ASSIGNED ELSEWHERE LDC 1S16+CMP LJM SRS INITIATE LOGICAL RESET EDR SPACE 4,20 ** EDR - EXECUTE DRIVE (POWER ON) RESET. * * THIS MASTER CLEARS THE DRIVE(S), BREAKS AN OPPOSITE ACCESS * RESERVE AND RUNS DIAGNOSTICS. IT IS ISSUED BY THE * CONTROLLER EVEN IF THE DRIVE IS OFF-LINE OR NOT OPERATIONAL. * IF A SLAVE RESET IS ISSUED AND AN ATTACHED DRIVE IS RESERVED * TO ANOTHER CONTROLLER, THE CONTROLLER WILL REPORT THE DRIVE * AS NOT OPERATIONAL. * * ENTRY (CN) = CONTROLLER NUMBER. * (DD) = NUMBER OF DATA DRIVES IN DEVICE. * (DN) = DRIVE NUMBER. * (DI) = DEVICE STATE TABLE ADDRESS. * (PD) = NUMBER OF PARITY DRIVES IN DEVICE. * * EXIT (PHYD,DI) IS NOT CHANGED. * * CALLS ATT, DDT, SRS, UPD, WCB. EDR5 RJM UPD UPDATE PHYSICAL DRIVE ADDRESS NJN EDR1 IF MORE PHYSICAL DRIVES IN LOGICAL UNIT LDM EDRA STM PHYD,DI RESTORE DRIVE NUMBER EDR SUBR ENTRY/EXIT LDM MSGL+1 SBN EMBF2L-1 MJN EDRX IF NO RESPONSE PACKET LDM PHYD,DI STM EDRA SAVE DRIVE NUMBER LDD DN STM PHYD,DI PHYSICAL DRIVE EDR1 RJM DDT DETERMINE DRIVE TYPE LDML DDTA TOTAL DRIVES IN LOGICAL UNIT LMN 1 ZJN EDR3 IF 1X DRIVE RJM ATT WAIT FOR COMPLETION RESPONSE LDD DD ADD PD SBN 1 ZJN EDR2 IF 1X DRIVE CONFIGURED LDM PHYD,DI LPN 70B NJP EDR5 IF RESET ALREADY ISSUED EDR2 LDD CN SHN 10 ADD DN SCN 0#38 UJN EDR4 SAVE ADDRESS FOR COMMAND EDR3 RJM ATT WAIT FOR COMPLETION RESPONSE LDDL CN SHN 10 ADM PHYD,DI EDR4 STML CPBF+CUN LOGICAL ADDRESS LDC C0800 ABORT COMMAND STML CPBF+OPC LDC P0254 STML CPBF+FCP LDC 0#400 RESET AS AT POWER ON STML CPBF+FCP+1 LDN 10D COMMAND PACKET LENGTH RJM WCB COMMAND PACKET TRANSFER LDN CMSS WAIT ON INTERRUPT RJM ATT LDC EDR5+1S16 RETURN ADDRESS/LOGICAL RESET LJM SRS RESET IN CASE OF MULTIPLE RESPONSES EDRA CON 0 FAILING DRIVE NUMBER EIO SPACE 4,35 ** EIO - ENTER I/O REQUEST QUEUE. * * THIS ROUTINE SETS LINKAGE BITS IF THE REQUEST IS A READ. * IT ALSO DELINKS COMPLETED BUFFERS FROM THE REQUEST QUEUE. * ON READ REQUESTS, EACH BUFFER IS DELINKED IMMEDIATELY. * ON WRITE REQUESTS, BUFFERS ARE ONLY DELINKED AFTER ENOUGH * SUBSEQUENT SECTORS HAVE BEEN SENT TO THE CONTROLLER TO * ENSURE THAT THE DATA HAS BEEN FLUSHED TO THE DISK (BASED * ON THE FACT THAT THE CONTROLLER HAS AN INTERNAL BUFFER OF * 128KB FOR EACH SPINDLE OF THE DEVICE). * * THIS ALGORITHM ENSURES THAT THE CURRENT CBT ORDINAL IN THE * *PUT* WILL POINT TO THE SECTOR IN ERROR, WHEN AN ERROR IS * ENCOUNTERED ON A WRITE REQUEST. SINCE (CB) IS ALWAYS RESET * TO THE CURRENT CBT ORDINAL FROM THE *PUT* WHEN *LDP* IS * CALLED, THIS ALLOWS CODE IN *ERR* TO ENSURE THAT THE CORRECT * I/O REQUEST WILL BE RETRIED DURING ERROR PROCESSING. * * ENTRY (RW) = READ / WRITE STATUS. * (CB) = CURRENT BUFFER ORDINAL. * (DI) = DEVICE STATE TABLE ADDRESS. * (DT) = DRIVE TYPE. * (NB) = NEXT BUFFER ORDINAL. * * USES T1, WB+3, CM - CM+4. * * CALLS IMR, SLB. EIO SUBR ENTRY/EXIT LDD RW NJN EIO2 IF WRITE OPERATION LDD CB RJM SLB SET LINKAGE BITS LDD NB ZJN EIO1 IF LAST BUFFER LDN 1 UJN EIO3 DELINK AFTER ONE BUFFER READ EIO1 LDN 2 LAST MONITOR REQUEST WILL DELINK AND UJN EIO3 RELEASE UNIT INTERLOCK EIO2 LDD DD CONTROLLER BUFFER IS 128K PER DATA DRIVE SHN 3 ADN 2 EIO3 STD T1 DELINKING CRITERIA LDML PSBF,DT SHN -14 RAM CSCT,DI AOM RQLN,DI ADVANCE ENTRY COUNT LPC 3777 SBD T1 MJN EIO5 IF QUEUE NOT FULL ADN 1 STD WB+3 NUMBER OF BUFFERS TO DELINK SBN 14 PJN EIO4 IF TIME TO FORCE DELINK LDD OA CRD CM CHECK OUTPUT REGISTER LDD CM NJN EIO5 IF MONITOR REQUEST IN PROGRESS EIO4 LDN DCBS RJM IMR INITIATE MONITOR REQUEST * LDN 0 SBD WB+3 ADJUST QUEUE ENTRY COUNT RAM RQLN,DI EIO5 UJP EIOX RETURN EMP SPACE 4,15 ** EMP - ENABLE MMF PARITY DEVICE ACCESS. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * EXIT (A) = 0, IF ALL PARTITIONS PROCESSED. * * USES CM+2, T4. * * CALLS CAB, CBB, CCI, CDS, CMR, CSN, LNE, UBP. * * MACROS SMSTF. EMP6 LDC 10000 SET *MMF RESTORE / ACCESS DISABLED* FLAG STDL T4 EMP7 LDML DVTP,DI CLEAR *ACCESS DISABLED*, *ACCESS ENABLED*, LPC 163377 AND *RESTORE INITIATION* LMDL T4 SET ACCESS ENABLED OR DISABLED FLAG STML DVTP,DI EMP8 LDC ** (COUNT OF UNPROCESSED PARTITIONS LEFT) EMPB EQU *-1 EMP SUBR ENTRY/EXIT LDN 0 CLEAR UNPROCESSED PARTITION COUNT STM EMPB RJM CMR CHECK MMF RESTORE FLAGS MJN EMP8 IF RESTORE INITIATION IN PROGRESS ZJN EMP1 IF NO RESTORE IN PROGRESS LDM CMRA EST ORDINAL WITH RESTORE SET RJM CSN COMPARE CONTROLLER SERIAL NUMBERS NJN EMP6 IF RESTORE ON DIFFERENT CONTROLLER LDC 4000 SET *MMF RESTORE / ACCESS ENABLED* FLAG STD T4 UJN EMP7 SET FLAG AND EXIT EMP1 LDN 0 CLEAR ACCESS ENABLED/DISABLED FLAG STD T4 * LDN 0 INITIALIZE PARTITION SEARCH EMP2 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN EMP7 IF NO MORE PARTITIONS RJM CDS CHECK DEVICE STATUS MJN EMP4 IF DEVICE NOT RECOVERED RJM CBB CHECK BDLL *DISABLE ACCESS* BIT PJN EMP3 IF BIT FOR THIS DRIVER ALREADY CLEAR LDN 0 NEW VALUE STD CM+2 LDD T1 BIT TO CHANGE ADN 19D RJM UBP CLEAR DISABLE ACCESS BIT IN *BDLL* EMP3 RJM CAB CHECK ACGL *MMF PARITY DEVICE ACCESS* BIT NJN EMP5 IF BIT FOR THIS MF IS ALREADY SET SMSTF GPDA SET ACCESS FLAG BIT FOR THIS MF EMPA EQU *-3 (BIT NUMBER FOR THIS MF) UJN EMP5 PROCESS NEXT PARTITION EMP4 AOM EMPB INCREMENT UNPROCESSED PARTITION COUNT EMP5 LDD EO UJP EMP2 PROCESS NEXT PARTITION ERR SPACE 4,45 ** ERR - PROCESS ERRORS. * * ERROR PROCESSING FLOW IS CONTROLLED BY THE RETRY COUNT * (ERCT,DI). EXAMPLE FLOW THROUGH RECOVERY FOR DRIVE ERROR- * * (ERCT,DI) COMMENT * --------- ------------------------------------------------------ * 0 ENTER, LOGICAL RESET * 1 ISSUE BML MESSAGE, EXIT * 1 ENTER, LOGICAL RESET, DRIVE RESET * 2 ISSUE BML MESSAGE, EXIT * 2 ENTER, SLAVE RESET (OR LOGICAL RESET IF A DRIVE CAN BE * OFF-LINE OR MEDIA ERROR) * 3 ISSUE BML MESSAGE, EXIT * 3 ENTER, LOGICAL RESET * 4 ISSUE BML MESSAGE, SET SUSPECT STATE, EXIT * * THE REQUEST IS NOW CHANNEL SPECIFIC, AND IF DUAL ACCESS IS * DEFINED, WILL BE FOR THE OTHER CHANNEL. * * 4 ENTER, LOGICAL RESET * 5 ISSUE BML MESSAGE, EXIT * 5 ENTER, LOGICAL RESET, DRIVE RESET * 6 ISSUE BML MESSAGE, EXIT * 6 ENTER, LOGICAL RESET * 7 ISSUE BML MESSAGE, RUN DRIVE DIAGNOSTICS, EXIT * 7 ENTER, LOGICAL RESET * 8 IF NO DRIVE TO OFF-LINE OR THE OFF-LINE COMMAND * FAILED, SET MISCELLANEOUS AND ISSUE THE FINAL BML * MESSAGE. OTHERWISE, OFF-LINE THE FAILING DRIVE, * SET ERCT TO 0, AND EXIT. * * NOTE - IF THE REQUEST STARTS OUT AS A CHANNEL-SPECIFIC * REQUEST (E.G. A *1MV* I/O REQUEST), ALL RETRIES WILL * BE DONE ON THIS CHANNEL. * * NOTE - IF AN ERROR OCCURS ON AN I/O REQUEST DURING A * RESTORE, ALL RETRIES WILL BE DONE ON THIS CHANNEL. * IF THE ERROR IS UNRECOVERABLE, I/O REQUESTS AND * SPECIAL REQUESTS WILL BE DISABLED FOR THE DRIVE * UNTIL THE RESTORE COMPLETES. * * ENTRY (A) = FAULT ANALYSIS CODE. * (CI) = CONTROLLER STATE TABLE ADDRESS. * (DI) = DEVICE STATE TABLE ADDRESS. * (DN) = DRIVE NUMBER. * * EXIT TO *DAS1* TO RETRY REQUEST. * TO *CMP2* AFTER SUSPECT STATE SET. * TO *CMP1* IF RETRIES COMPLETE AND UNRECOVERABLE SET. * TO *CMP10* IF ERROR IN PROGRESS ON DIFFERENT DEVICE. * * USES RW, T1 - T5. * * CALLS CBC, CMC, CRF, DCA, EDR, EUI, GBM, ICR, IDM, IEM, IOM, * LDP, RCR, RND, SCD, SDO, SEC, SEP, SRS, SSS, WAC. * * MACROS CBTE. ERR CON 0 ENTRY PJN ERR1 IF NO RESPONSE PACKET LMC 767777 ERR1 STD T4 SAVE FAULT CODE SHN 0-14 STD T1 SET RESPONSE PACKET STATUS RJM EUI ENSURE UNIT INTERLOCKED LDM ERPA CHECK IF ERROR PROCESSING ALREADY ACTIVE ZJN ERR1.1 IF ERROR PROCESSING NOT ACTIVE LMD DI NJN ERR2 IF ACTIVE ON DIFFERENT DEVICE ERR1.1 LDD DI SET ERROR PROCESSING ACTIVE FLAG STM ERPA LDM SRSA ZJN ERR4 IF NO RESET IN PROGRESS LMD DI ZJN ERR3 IF THIS UNIT CONTROLLING RESET ERR2 LJM CMP10 ABANDON REQUEST (RETRY LATER) ERR3 RJM CRF CLEAR RESET FLAGS LDM RWST,DI NJN ERR4 IF NOT SLAVE RESET LDC ERRF+100000 *EQXXX, UXX, CMX RESET FAILURE.* RJM IEM ISSUE ERRORLOG MESSAGE LDN 0 CLEAR OPERATOR MESSAGE RJM IOM RJM DCA DISABLE CONTROLLER ACTIVITY ERR4 LDN 0 CLEAR CHANNEL ACTIVE RJM SCD LDC ** (ZERO IF NEW PASS THROUGH ERROR PROCESSING) ERRA EQU *-1 NJP ERR11 IF NOT NEW PASS THROUGH ERROR PROCESSING AOM ERRA INDICATE STATUS SAVED LDM ERCT,DI SBN SRRC ZJN ERR6 IF ERROR MIGHT BE FROM SLAVE RESET LDM RWST,DI STM IOST,DI SAVE READ/WRITE STATUS ERR6 LDD DN SET DEFAULT FAILING DRIVE (MAY BE CHANGED STM PHYD,DI LATER IF A RESPONSE IS PRESENT) LCN 0 STM EDBF+FCS2 NO RESPONSE PACKET FOR *HPA* LDD T4 INSERT INITIAL FAULT CODE STM EDBF+CODE STM EDBF+FALT PRESET FINAL FAULT CODE * GENERATE BML MESSAGE. ON A *CONDITIONAL SUCCESS* ERROR, * REENTER CALLING ROUTINE TO COMPLETE PROCESSING REQUEST. RJM GBM GENERATE BML MESSAGE * RELOAD DEVICE PARAMETERS AND CLEAR BUFFER COUNT. IF AN ERROR * OCCURS WHILE STREAMING WRITE REQUESTS, THIS ENSURES THAT (CB) * POINTS TO THE REQUEST IN ERROR, AND THAT NO ADDITIONAL WRITE * REQUESTS WILL BE DELINKED. SEE DOCUMENTATION IN *EIO*. RJM LDP RELOAD DEVICE PARAMETERS RJM CBC CLEAR BUFFER COUNT * SET ERROR PROCESSING INTERLOCK. RJM SEP SET ERROR PROCESSING INTERLOCK NJP CMP10 IF ERROR IN PROGRESS ON A DIFFERENT DEVICE LDN 0 CLEAR *FORMAT IN PROGRESS* FLAG STM CFFA LDML CTST,CI SHN 21-15 PJN ERR7 IF CONTROLLER STILL FUNCTIONAL LDN 1 STM CPEA INDICATE NO DRIVE TO OFF-LINE UJN ERR14 SLAVE RESET FAILED * ALLOW ACTIVITY ON OTHER DRIVES TO COMPLETE BEFORE ISSUING * THE RESET. ERR7 RJM WAC WAIT FOR OTHER ACTIVITY TO COMPLETE RJM ICR ISSUE CONTROLLER RESET * UJN ERR12 (IF RESET SUCCESSFUL) UJN ERR14 RESET FAILED * REENTER HERE IF ERROR WHILE ATTEMPTING HARDWARE RECOVERY. ERR11 RJM RCR RESET CHANNEL REGISTERS UJN ERR14 SET RECOVERY FAULT CODE ERR12 LDM ERCT,DI CHECK RETRY COUNT SBN 1 ZJN ERR13 IF TIME FOR DRIVE RESET SBN MERC-CSRC NJN ERR14 IF NOT TIME FOR DRIVE RESET ERR13 RJM EDR EXECUTE DRIVE RESET ERR14 LDN 0 STM EDBF+FCS3 SET RECOVERY FAULT CODE LDM IOST,DI STM RWST,DI RESTORE READ/WRITE STATUS STD RW LDM ERCT,DI CHECK ERROR COUNT SBN MERC-1 MJN ERR15 IF NOT TIME TO OFF-LINE DRIVE RJM SDO SET DRIVE OFF-LINE RJM SEC SET ERROR CODE IN *CBT* AOM MISC MARK ERROR UNRECOVERED LJM CMP1 COMPLETE PROCESSING ERR15 AOM ERCT,DI LDD HN ERRNZ HD0100-100 CODE DEPENDS ON VALUE RJM IDM ISSUE MESSAGE LDML CTST,CI SHN 21-15 MJN ERR16 IF CONTROLLER DEAD LDM ERCT,DI SBN MERC-1 NJN ERR16 IF NOT TIME TO RUN DIAGNOSTICS RJM RND RUN DRIVE DIAGNOSTICS ERR16 LDM SREQ,DI NJP ERR19 IF SPECIAL REQUEST LDD FC ZJP ERR19 IF FORMAT NOT COMPLETE LDM RSDI CHECK IF RESTORE IN PROGRESS LMD DI NJN ERR17 IF NO RESTORE IN PROGRESS ON THIS DEVICE LDM RMUX ZJN ERR18 IF CURRENTLY RESTORING A CYLINDER ERR17 LDM ERCT,DI LMN CSRC NJN ERR18 IF NOT TIME FOR CHANNEL SWAP LDD CB ZJN ERR17.1 IF NO I/O BUFFER SHN CBTLS CBTE * ADC HSLK GET CHANNEL SELECT STATUS CRD T1 LDD T1 SHN 0-12 LMN 1 ZJN ERR19 IF REQUEST ALREADY CHANNEL-SPECIFIC ERR17.1 UJP ERR20 SET SUSPECT STATE ERR18 LDM EDBF+CODE LMN EROD NJN ERR19 IF NOT RESTORE LDM EDBF+FALT LMN EDPE NJN ERR19 IF NOT MEDIA ERROR * IF THE RETRY LIMIT FOR SKIPPING MEDIA ERRORS DURING A * RESTORE IS CHANGED, CODE IN *GBM* MUST ALSO BE CHANGED. LDML ERCT,DI SBN 2 ZJP CMP IF MEDIA RETRY LIMIT FOR RESTORE ERR19 RJM CMC CHECK MONITOR COMPLETE * LDN 0 STM ADDR,DI CLEAR REENTRY ADDRESS STM ATTN,DI CLEAR INTERRUPT ADDRESS STM CSCT,DI CLEAR CUMULATIVE SECTOR COUNT STM SREQ,DI CLEAR SPECIAL REQUEST FLAG STM ERRA ENABLE NEXT PASS THROUGH ERROR PROCESSOR LDD RF NJN ERR19.2 IF RESET FAILURE ERR19.1 LJM DAS1 RETURN TO MAIN LOOP ERR19.2 LDML CTST,CI SHN 21-15 MJN ERR19.1 IF CONTROLLER DEAD LDC 1S16+DAS1 RETURN ADDRESS LJM SRS ISSUE LOGICAL RESET ERR20 RJM SSS SET SUSPECT STATE ON DEVICE RJM SEC SET ERROR CODE IN *CBT* LJM CMP2 COMPLETE PROCESSING ERPA CON 0 ERROR PROCESSING ACTIVE FLAG (*DST* INDEX) EUI SPACE 4,15 ** EUI - ENSURE UNIT INTERLOCKED. * * IF AN INTERRUPT IS PRESENT AND A CHANNEL ERROR OCCURS WHILE * READING THE RESPONSE, (DI) MIGHT BE FOR A UNIT THAT IS NOT * INTERLOCKED. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT (DI) = DEVICE ADDRESS OF INTERLOCKED UNIT. * TO *CMP7* IF NO INTERLOCKED UNIT. * * USES DI. * * CALLS LDP, LND, RCR. EUI SUBR ENTRY/EXIT LDM RQLN,DI SHN 0-13 NJN EUIX IF UNIT INTERLOCKED STML ADDR,DI CLEAR REENTRY ADDRESS STML ATTN,DI CLEAR INTERRUPT ADDRESS * LDN 0 LOCATE FIRST DRIVE EUI1 RJM LND LOCATE NEXT DRIVE ZJN EUI2 IF NO MORE DRIVES ON CONTROLLER LDM RQLN,T7 SHN 0-13 LMN 1 NJN EUI1 IF UNIT NOT INTERLOCKED LDD T7 STD DI RJM LDP LOAD DEVICE PARAMETERS UJN EUIX RETURN EUI2 RJM RCR RESET CHANNEL REGISTERS LJM CMP7 COMPLETE REQUEST FFD SPACE 4,15 ** FFD - FIND FAILING DRIVE. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT (FFDA) = 0 IF FAILING DRIVE. * (PHYD,DI) = FAILING DRIVE. * * USES T3. * * CALLS SRP. FFD SUBR ENTRY/EXIT LDM EDBF+FALT SBN EMME ZJN FFD1 IF RESPONSE PRESENT SBN EIVR-EMME ZJN FFD1 IF RESPONSE PRESENT SBN EMEX-EIVR NJP FFD7 IF NO RESPONSE PACKET FFD1 LDK ID23 RJM SRP SEARCH RESPONSE PACKET MJN FFD2 IF ID23 NOT FOUND LDML RPBF+5,T3 SHN -10 SBN 6 PJN FFD4 IF FAILING DRIVE FOUND FFD2 LDK ID24 RJM SRP SEARCH RESPONSE PACKET MJN FFD3 IF ID24 NOT FOUND LDML RPBF+5,T3 SHN -10 SBN 7 MJN FFD3 IF NO FAILING DRIVE LDML RPBF+5+3,T3 UJN FFD5 CHECK FOR PHYSICAL DRIVE NUMBER FFD3 LDK ID26 RJM SRP SEARCH RESPONSE PACKET MJN FFD7 IF ID26 NOT FOUND LDML RPBF+5,T3 SHN -10 SBN 10 MJN FFD7 IF NO FAILING DRIVE AOD T3 FFD4 LDML RPBF+5+3,T3 SHN -10 FFD5 LPC 377 LMC 0#FE ZJN FFD7 IF NO PHYSICAL DRIVE NUMBER LMC 0#FE STM PHYD,DI SAVE FAILING DRIVE NUMBER LDML RPBF+OPC LMC C0209 ZJN FFD7 IF COMMAND THAT OFF-LINES A DRIVE LDN 0 FFD6 STM FFDA UJP FFDX RETURN FFD7 LDN 1 UJN FFD6 RETURN FFDA CON 0 FMU SPACE 4,15 ** FMU - FORMAT UNIT. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (PHYD,DI) = THE PHYSICAL DRIVE TO FORMAT. * (DD) = NUMBER OF DATA DRIVES IN DEVICE. * (DT) = DRIVE TYPE. * (FC) = FORMAT COMPLETE FLAG. * * EXIT TO *ERR* IF ERROR. * * CALLS ATT, C2D, IEM, IOM, SFP, WCB. FMU SUBR ENTRY/EXIT LDC ERFI *EQXXX, UXX, FORMAT INITIATED.* RJM IEM ISSUE ERROR LOG MESSAGE LDM PHYD,DI RJM C2D PUT UNIT NUMBER IN MESSAGE STM FMUA+4 LDD EO RJM C2D CONVERT EST ORDINAL STM FMUA+2 LDD EO SHN -6 SET ORDINAL IN MESSAGE ADC 2RQ0 STM FMUA+1 LDC FMUA RJM IOM ISSUE OPERATOR MESSAGE * FORMAT THE DIAGNOSTIC CYLINDER. RJM SFP SET COMMON FORMAT PARAMETERS LDC 0#1DF STML CPBF+FCP+3 FORMAT THE DIAGNOSTIC CYLINDER LDD DT DRIVE TYPE IFNE EQEA,0,2 SBN EQEA MJN FMU0 IF NOT 5832 SBN EQEC-EQEA MJN FMU1 IF 5832 FMU0 LDN 0#E COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJN FMU1.2 IF NOT SUCCESSFUL * FORMAT THE DATA CYLINDERS. FMU1 RJM SFP SET COMMON FORMAT PARAMETERS LDML FC NJN FMU2 IF DRIVE CLUSTERED LDC 0#7DD FACTORY FORMAT PARAMETER STML CPBF+FCP+3 LDD DD STML CPBF+FCP+4 DATA DRIVES PER LOGICAL UNIT LDN 0 STML CPBF+FCP+5 UPPER BYTES OF SECTOR SIZE LDML BPS,DT BYTES PER SECTOR SCN 77 STML CPBF+FCP+6 LDN 0#14 COMMAND PACKET LENGTH UJN FMU3 WRITE COMMAND PACKET FMU1.2 LCN EFDF FORMAT DRIVE FAILURE RJM ERR PROCESS ERROR FMU2 LDC 0#53B STML CPBF+FCP+3 LOGICAL SECTOR SIZE LDN 0 STML CPBF+FCP+4 UPPER BYTES OF SECTOR SIZE LDML BPS,DT SCN 77 STML CPBF+FCP+5 LDN 0#12 COMMAND PACKET LENGTH FMU3 RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJN FMU1.2 IF ERROR * LDN 0 CLEAR OPERATOR MESSAGE RJM IOM LDC ERFC *EQXXX, UXX, FORMAT COMPLETE.* RJM IEM ISSUE ERROR LOG MESSAGE UJP FMUX RETURN FMUA DATA C* EQ000 U00 FORMATTING.* GBM SPACE 4,35 ** GBM - GENERATE BML MESSAGE. * * THIS ROUTINE GENERATES THE ERROR MESSAGE FOR SYMPTOM 100 OR * 111. IF THE ERROR IS A MEDIA ERROR, THE RETRY COUNT IS ONE, * AND THE COMMAND IS READ OR WRITE, THE TRACK FLAW WILL BE SET * IN THE MST. IF THE ERROR IS A MEDIA ERROR, THE RETRY COUNT * IS ONE, AND THE COMMAND IS A RESTORE, THE CYLINDER, TRACK, * AND SECTOR VALUES WILL BE UPDATED TO POINT TO THE SECTOR * AFTER THE ONE WITH THE MEDIA ERROR, SO THE NEXT RESTORE * COMMAND WILL END UP SKIPPING THE MEDIA DEFECT. * * ENTRY (T1) .NE. 0 IF RESPONSE PACKET PRESENT. * (DI) .EQ. DEVICE STATE TABLE ADDRESS. * (DT) .EQ. DEVICE TYPE. * * EXIT TO *DAS1* IF CONDITIONAL SUCCESS. THE CONTROLLER * RETURNS AN ASYNCHRONOUS RESPONSE WITH A PARAMETER 29 * FOR EACH PHYSICAL DRIVE OF THE LOGICAL UNIT THAT IT * PERFORMED RECOVERY ON. IT THEN RETURNS A COMMAND * COMPLETION RESPONSE. THIS ROUTINE LOGS THE * ASYNCHRONOUS RESPONSE TO THE BML, THEN EXITS TO THE * MAIN LOOP, *DAS*. SINCE (ATTN,DI) AND (ADDR,DI) ARE * STILL SET EXPECTING THE COMMAND COMPLETION RESPONSE, * WHEN THE COMMAND COMPLETION RESPONSE IS RECEIVED, * THE CODE IN *PIO* WILL GO TO *CMP* AND LOG A * RECOVERED ERROR. HOWEVER, IF THE ERROR COUNT * REACHES THE MAXIMUM VALUE WHEN PROCESSING A * CONDITIONAL SUCCESS, IT WILL BE TREATED AS A * NORMAL ERROR. * * USES PA, T2 - T7. * * CALLS ACE, CCO, FFD, IDM, RCR, RMR, RTR, SMD, SRP, STF, UHD. GBM SUBR ENTRY/EXIT LDM CSCT,DI STM EDBF+STCT SECTORS TRANSFERRED LDM CYLN,DI SET SEEK ADDRESS - CYLINDER STM EDBF+ICYL LDM TKSN,DI SEEK ADDRESS - TRACK AND SECTOR STM EDBF+ITAS LDML LCMD,DI SET LAST COMMAND STML EDBF+LSCC LDML GSSA EXECUTION (ENDING) STATUS STML EDBF+EXST LDML ERR ERROR RECOVERY ENTRY ADDRESS STML EDBF+EREA GBM1 LDDL LF SAVE LAST CHANNEL FUNCTION STML EDBF+LCFN SCF. GBM1,MR ACQUIRE MAINTENANCE CHANNEL ACCESS LDN ZERL CRML RBUF,ON CLEAR BUFFER IN CASE OF ERROR SBN 1 CRML RBUF+4,ON RJM RMR READ CHANNEL STATUS REGISTER DCN. MR+40 CCF. *+2,MR CLEAR MAINTENANCE CHANNEL FLAG LDN 0 STD T2 INITIALIZE INDEX RJM ACE ANALYZE CHANNEL ERROR STML EDBF+FCS1 SAVE CHANNEL STATUS LDC EDBF+CREG STDL T5 SET ERROR BUFFER ADDRESS GBM2 LDM RBUF,T2 SHN 10 PACK 8-BIT DATA LMM RBUF+1,T2 STIL T5 AODL T5 ADVANCE ADDRESS LDN 2 RAD T2 INCREMENT INDEX LMN RBUFL NJN GBM2 IF MORE REGISTER DATA RJM RTR READ T REGISTER LDK RTEDL STD T4 SET LENGTH OF DATA LDC EDBF STDL T2 SOURCE DATA ADDRESS ADK EMBF1 RJM UHD UNPACK HEX DATA ADN EMBFS STM MSGL+1 MESSAGE LENGTH INCLUDING NON-HEX DATA LDD T1 ZJN GBM3 IF NO RESPONSE PACKET PRESENT * PUT RESPONSE IN BML. LDC RPBF STDL T2 SET SOURCE DATA ADDRESS LDIL T2 ADN 3 CALCULATE STATUS BLOCK LENGTH SHN -1 SBK RPBFL MJN GBM2.1 IF LESS THAN MAXIMUM SIZE LDN 0 GBM2.1 ADK RPBFL STD T4 LDC EDBF+EMBF2 CONVERT STATUS TO 12 BIT DATA RJM UHD MOVE RESPONSE PACKET TO BML MESSAGE RAM MSGL+1 INCREASE LENGTH TO INCLUDE RESPONSE LDN 0 STM EDBF+FCS2 RESPONSE PACKET PRESENT FOR *HPA* * CONVERT MAJOR STATUS TO INDEX. LDDL MS UNPACK BUS A FLAGS SHN -10 STD T2 LDD MS BUS B SUBSTATUS FLAGS LPN 7 SHN 10 COMBINE FLAGS IN ORDER RAD T2 GBM3 ZJP GBM27 IF NO SUBSTATUS LCN 0 STD T3 GBM4 AOD T3 ADVANCE INDEX LDD T2 SHN 21-0 CONVERT FLAG POSITION TO INDEX STD T2 PJN GBM4 IF BIT NOT SET LDML GBMA,T3 STDL PA SET PROCESSOR ADDRESS LJM 0,PA EXIT TO PROCESSOR * RESERVED SUBSTATUS (PID = X0 AND X1). GBM5 LDN ERSS UJN GBM11 SET FINAL FAULT CODE * DEFECT MANAGEMENT (PID = X2). GBM6 LDN EDFM UJN GBM11 SET FINAL FAULT CODE * MESSAGE / MICROCODE EXCEPTION (PID = X3). GBM7 LDN EMME UJN GBM11 SET FINAL FAULT CODE * INTERVENTION REQUIRED (PID = X4). GBM8 LDN ID24 RJM SRP SEARCH RESPONSE PACKET PJN GBM10 IF ID24 FOUND GBM9 LDN EIVR UJN GBM11 SET FINAL FAULT CODE GBM10 LDML RPBF+5+1,T3 SHN 21-11 PJN GBM9 IF NOT FACILITY BUSY LDN EDRE GBM11 LJM GBM26 SET FINAL FAULT CODE * ALTERNATE PORT EXCEPTION (PID = X5). GBM12 LDN EAPR UJN GBM11 SET FINAL FAULT CODE * MACHINE EXCEPTION (PID = X6). GBM13 LDN ID26 SEARCH FOR DRIVE SUBSTATUS RJM SRP ZJN GBM15 IF SUBSTATUS FOUND GBM14 LDN 0 DO NOT ISSUE SPECIAL BML MESSAGE RJM CCO CHECK FOR CONTROLLER OVER TEMPERATURE LDN EMEX LJM GBM26 SET FINAL FAULT CODE GBM15 LDML RPBF+5,T3 CHECK LENGTH OF PARAMETER SHN -10 SBN 0#10+1 MJN GBM14 IF NO EXTENDED SUBSTATUS LDML RPBF+5+4,T3 SHN -10 LMC 0#FE ZJN GBM16 IF NO PHYSICAL DRIVE NUMBER LMC 0#FE STM PHYD,DI FAILING PHYSICAL DRIVE GBM16 LDM RPBF+15,T3 LPN 77 EXAMINE COMMAND ENDING STATUS SBN 0#11 ZJN GBM17 IF ECC ERROR SBN 0#13-0#11 ZJN GBM17 IF MISSING SYNC SBN 0#19-0#13 NJP GBM14 IF NOT SECTOR NOT FOUND ERROR GBM17 LDML RPBF+OPC SHN -14 SBN 1 ZJN GBM18 IF READ SBN 1 ZJN GBM18 IF WRITE SBN 14 NJP GBM14 IF NOT RESTORE (NOT MEDIA ERROR) GBM18 LDM ERCT,DI LMN 1 NJN GBM19 IF NOT FIRST RETRY LDM RPBF+12,T3 STD T4 SET CYLINDER IN ERROR GBM18.1 SBM MC,DT CHECK FOR MAINTENANCE CYLINDER ZJN GBM19 IF NOT IN USER AREA SBN 1 PJN GBM18.1 IF MORE TO CHECK LDML CFS,DT SHN -14 ADK SHNI STM GBMB LDML RPBF+13,T3 LPN 77 STD T6 PHYSICAL SECTOR GBMB SHN ** CONVERT PHYSICAL TO LOGICAL STD T7 LOGICAL SECTOR WITHIN PHYSICAL TRACK LDML RPBF+13,T3 SHN -10 STD T5 PHYSICAL TRACK RJM SMD SKIP MEDIA DEFECT NJN GBM19 IF RESTORE RJM STF INSERT TRACK FLAW IN MST GBM19 LDN EDPE UJN GBM22 SET FINAL FAULT CODE * COMMAND EXCEPTION (PID = X7). GBM20 LDN ECEX UJN GBM22 SET FINAL FAULT CODE * COMMAND ABORTED (PID = X8). GBM21 LDN ECMA GBM22 LJM GBM26 SET FINAL FAULT CODE * COMMAND CONDITIONALLY SUCCESSFUL (PID = X9). GBM23 LDN ECCS STML EDBF+FALT SET FAULT CODE LDN ID29 RJM SRP SEARCH RESPONSE PACKET MJN GBM24 IF ID29 NOT FOUND LDML RPBF+5,T3 SHN -10 SBN 6 MJN GBM24 IF NO FAILING DRIVE LDML RPBF+5+3,T3 SHN -10 LMC 0#FE ZJN GBM24 IF NO FAILING DRIVE NUMBER LMC 0#FE STM PHYD,DI FAILING DRIVE NUMBER GBM24 LDN 0 STM EDBF+FCS3 LDM ERCT,DI CHECK ERROR COUNT SBN MERC-1 MJN GBM24.1 IF MAXIMUM ERROR COUNT NOT REACHED LDN ECCS UJN GBM26 SET FINAL FAULT CODE * ISSUE BML MESSAGE AND RETURN TO MAIN LOOP. THIS ALLOWS * A REENTRY BASED ON THE VALUES OF (ATTN,DI) AND (ADDR,DI). GBM24.1 AOM ERCT,DI INCREMENT ERROR COUNT LDD HN ERRNZ HD0100-100 CODE DEPENDS ON VALUE RJM IDM ISSUE MESSAGE LDN 0 STM ERPA CLEAR ERROR PROCESSING ACTIVE FLAG STM ERRA ENABLE NEXT PASS THROUGH ERROR PROCESSOR LJM DAS1 RETURN TO MAIN LOOP * COMMAND INCOMPLETE (PID = XA). GBM25 LDN ECIC * LJM GBM26 SET FINAL FAULT CODE * COMPLETE ERROR PROCESSING. GBM26 STML EDBF+FALT SET FINAL FAULT CODE GBM27 RJM RCR RESET CHANNEL RJM FFD FIND FAILING DRIVE LJM GBMX RETURN GBMA BSS 0 SUBSTATUS PROCESSORS CONL GBM5 RESERVED CONL GBM5 RESERVED CONL GBM6 DEFECT MANAGEMENT CONL GBM7 MESSAGE / MICROCODE EXCEPTION CONL GBM8 INTERVENTION REQUIRED CONL GBM12 ALTERNATE PORT EXCEPTION CONL GBM13 MACHINE EXCEPTION CONL GBM20 COMMAND EXCEPTION CONL GBM21 COMMAND ABORTED CONL GBM23 COMMAND CONDITIONALLY SUCCESSFUL CONL GBM25 COMMAND INCOMPLETE GCA SPACE 4,15 ** GCA - GET CURRENT *ACGL*. * * ENTRY (EO) = EST ORDINAL. * * EXIT (CM - CM+4) = *ACGL* WORD FROM *MST*. * * USES CM - CM+4. * * CALLS REE. * * MACROS MONITOR. GCA SUBR ENTRY/EXIT LDD EO SET EST ORDINAL STD CM+1 LDN UTRS GET CURRENT MST STD CM+3 MONITOR STBM RJM REE READ EST ENTRY LDD CM+4 SHN 3 ADN ACGL READ *ACGL* CRD CM UJN GCAX RETURN GCS SPACE 4,15 ** GCS - GET CONTROLLER SERIAL NUMBER. * * ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS. * (CN) = CONTROLLER NUMBER. * (DN) = DRIVE NUMBER. * * EXIT CONTROLLER SERIAL NUMBER IN (CTSN - CTSN+2). * * USES T3, T4. * * CALLS ATT, CAN, IDT, RCA. GCS SUBR ENTRY/EXIT LDM CTSN,CI NJN GCSX IF CONTROLLER SERIAL NUMBER ALREADY KNOWN RJM RCA REPORT CONTROLLER ATTRIBUTES RJM IDT INPUT DATA TO PP * CONVERT RIGHT 6 OF 8 CONTROLLER SERIAL NUMBER CHARACTERS. LDC ATTB+0#10 SET ADDRESS OF CONTROLLER SERIAL NUMBER STDL T4 LDD CI SET ADDRESS FOR CONVERSION ADN CTSN STDL T3 RJM CAN CONVERT ASCII NUMBER TO DISPLAY CODE RJM ATT WAIT FOR COMPLETION RESPONSE UJN GCSX RETURN IBM SPACE 4,10 ** IBM - ISSUE BML MESSAGE. * * ENTRY (A) = SYMPTOM - 100. * (NR - NR+4, WB - WB+4) = MESSAGE PARAMETERS. * * EXIT (A) = 0. * * USES CM - CM+4, NR, NR+1. * * CALLS IDM. IBM SUBR ENTRY/EXIT ADD HN INSERT SYMPTOM CODE ERRNZ HI0100-100 CODE DEPENDS ON VALUE STD NR+1 LDC DM0401 DEFINE MESSAGE ID STD NR LDN ZERL CLEAR HEADER WORD CRD CM LDN 3 WORD COUNT OF MESSAGE STD CM+3 ADK MLDY-3 DIRECT MESSAGE TO BML STD CM+4 LDC SBUF SET MESSAGE ADDRESS STML MAD1 LDD MA MOVE MESSAGE DATA CWM CM,TR ERRNZ CM+5-NR CODE DEPENDS ON VALUE SBN 3 ERRNZ NR+5-WB CODE DEPENDS ON VALUE CRM SBUF,TR ERRNG SBUFL-3*5 CODE DEPENDS ON VALUE LDN 0 ISSUE BML MESSAGE RJM IDM * LDN 0 UJN IBMX RETURN ICR SPACE 4,15 ** ICR - ISSUE CONTROLLER RESET. * * ENTRY (RW) .NE. 0 IF PREVIOUS RESET FAILED. * (RF) .NE. 0 IF RESET FAILURE. * (DI) = DEVICE STATE TABLE ADDRESS. * (PD) = 0, IF NOT PARITY DEVICE. * (CPEA) = 0, IF TIME TO DO SLAVE RESET AND THERE * IS A DRIVE TO OFF-LINE. * * EXIT TO *ERR12* IF RESET COMPLETE. * (CPEA) = 0 IF LOGICAL RESET ISSUED AND THERE IS * A DRIVE TO OFF-LINE. * * CALLS CPE, SRS. ICR6 LDN 1 STM CPEA INDICATE NO DRIVE TO OFF-LINE LDM RWST,DI ZJN ICRX IF SLAVE RESET FAILED LDM ERCT,DI SBN CSRC-SRRC ZJN ICR1 IF TIME TO TRY SLAVE RESET ICR SUBR ENTRY/EXIT LDD RF NJN ICR6 IF PREVIOUS RESET FAILED LDM ERCT,DI SBN CSRC-SRRC NJN ICR2 IF NOT TIME TO TRY SLAVE RESET * DO NOT DO SLAVE RESET IF CHANNEL ERROR, MEDIA ERROR, * OR CONTROLLER DEAD. ICR1 LDML EDBF+FALT SBN ETIT ZJN ICR3 IF INTERRUPT TIMEOUT SBN EDPE-ETIT+1 MJN ICR2 IF NOT DOING SLAVE RESET (CHANNEL ERROR) SBN ECNR-EDPE-1 ZJN ICR3 IF SLAVE IN/SYNC IN SIGNAL ERROR SBN ECRE-ECNR PJN ICR2 IF NOT DOING SLAVE RESET * DO NOT ISSUE SLAVE RESET (1 MINUTE) IF A DRIVE CAN * BE SET OFF-LINE. LDD PD ZJN ICR3 IF NOT PARITY DEVICE LDM CPEA NJN ICR3 IF NO DRIVE TO OFF-LINE ICR2 LDN 1 STM CPEA INDICATE NO DRIVE TO OFF-LINE LDC 1S16+ICR5 RETURN ADDRESS UJN ICR4 ISSUE LOGICAL RESET ICR3 LDN 0 ENABLE LOGGING OF ERROR RESPONSE STM ERRA LDC ERR12 RETURN ADDRESS FROM SLAVE RESET ICR4 LJM SRS ISSUE RESET ICR5 RJM CPE CHECK IF PARITY DRIVE ENABLED LJM ERR12 EXIT IDM SPACE 4,20 ** IDM - ISSUE DAYFILE MESSAGE. * * ENTRY (A) = BML MESSAGE SYMPTOM CODE. * (RW) = READ / WRITE FLAG. * (EO) = EST ORDINAL. * (CN) = CONTROLLER NUMBER. * (DI) = DEVICE STATE TABLE ADDRESS. * (DT) = DRIVE TYPE. * (PHYD,DI) = DRIVE NUMBER. * (MISC) = 1 IF UNRECOVERED ERROR. * (MAD1) = MESSAGE ADDRESS. * * NOTE - THE CONTENTS OF THE MESSAGE DETERMINES WHETHER IT * GOES TO THE ERROR LOG OR THE BML. * * EXIT (A) = (MISC) = 0. * * CALLS IMB, UEC. IDM SUBR ENTRY/EXIT LMC D"DN"*400 STM BMLM+1 INSERT SYMPTOM CODE IN MESSAGE LDML BMID,DT SHN -11 STM MSID ERROR MESSAGE ID LDD CN SHN 6 ADM PHYD,DI INSERT UNIT NUMBER STM UNIT LDM PNUN,DI SET PORT NUMBER SHN -3 SCN 77 STM PORT LDD EO INCLUDE EST ORDINAL STM ESTO LDD RW READ / WRITE FLAG LPN 1 SHN 21-4 ADM ERCT,DI SET RETRY COUNT SHN 13-5 RAM MISC APPEND TO RECOVERED/UNRECOVERED STATUS LDML MAD1 RJM IMB ISSUE MESSAGE TO BUFFER RJM UEC UPDATE MST ERROR COUNT LDC MSGP STML MAD1 RESTORE BML ERROR MESSAGE ADDRESS LDN 0 STM MISC CLEAR UNRECOVERED ERROR STATUS * LDN 0 LJM IDMX RETURN MAD1 CONL MSGP MESSAGE ADDRESS (MAY BE SET BY CALLER) IDU SPACE 4,15 ** IDU - INTERLOCK DISK UNIT. * * ENTRY (CB) = CBT ORDINAL, IF I/O REQUEST. * (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * EXIT (A) .EQ. 0, IF UNIT INTERLOCKED SUCCESSFULLY. * (A) .LT. 0, IF CHANNEL DOWN. * (A) .GT. 0, IF UNABLE TO INTERLOCK. * * USES T7, WB+3, CM - CM+4. * * CALLS CAC, CCS, SUI. * * MACROS CBTE. IDU4 RJM SUI SET UNIT INTERLOCK IDU SUBR ENTRY/EXIT LDM RQLN,DI SHN 0-13 CHECK UNIT RESERVED LMN 1 ZJN IDUX IF UNIT INTERLOCKED LDC 0 CHRQ EQU *-1 NJN IDUX IF CHANNEL REQUESTED RJM CCS CHECK CHANNEL STATE IDU2 ZJN IDU4 IF CHANNEL UP SCN 1 NJN IDU3 IF CHANNEL DOWN * CHANNEL IDLE. IF OTHER CHANNEL IS DEFINED AND UP, ONLY * PROCESS CHANNEL-SPECIFIC REQUESTS ON THIS CHANNEL. LDD CB ZJN IDU3 IF NOT I/O REQUEST SHN CBTLS CBTE * ADC PAD4 GET CHANNEL FROM CBT ENTRY CRD T7 ADN HSLK-PAD4 GET CHANNEL SELECT STATUS CRD CM LDD CM CHECK ERROR FLAGS SHN 0-12 NJN IDU2.1 IF CHANNEL SPECIFIC REQUEST RJM CAC CHECK ALTERNATE CHANNEL STATUS ZJN IDU3 IF OTHER CHANNEL DEFINED AND UP UJP IDU4 SET UNIT INTERLOCK IDU2.1 LDD T7 CHECK SPECIFIED CHANNEL SHN -6 LMD IR+4 ZJN IDU2 IF REQUEST FOR THIS DRIVER IDU3 LCN 0 RETURN *CHANNEL DOWN* STATUS UJP IDUX RETURN IEE SPACE 4,15 ** IEE - ISSUE E,E EVENT. * * THIS ROUTINE ISSUES A MONITOR REQUEST WHICH CAUSES AN * OPERATOR ACTION TO VIEW THE E,E DISPLAY. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * * USES CM - CM+4. * * MACROS MONITOR. IEE SUBR ENTRY/EXIT LDN EEVS STD CM+1 ENTER EVENT LDN 0 STD CM+3 LDN CEDE *CHECK E,E DISPLAY* EVENT STD CM+4 MONITOR EATM UJN IEEX RETURN IEM SPACE 4,15 ** IEM - ISSUE ERROR LOG MESSAGE. * * ENTRY (A) = 1/CF,15/ADDRESS. * CF - SET CONTROLLER NUMBER INTO MESSAGE. * THE MESSAGE LENGTH IS IN (ADDRESS-1). * (CN) = CONTROLLER NUMBER. * (DT) = DRIVE TYPE. * (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * USES T1, T2. * * CALLS C2D, IDM. IEM SUBR ENTRY/EXIT STDL T0 SAVE COMPLETE PARAMETER LPC 17777 STDL T1 ADDRESS OF SPECIFIED MESSAGE STML IEMA LDDL T0 CHECK IF CONTROLLER NUMBER FLAG SET SHN 21-17 PJN IEM1 IF CONTROLLER NUMBER NOT PART OF MESSAGE LDD CN CONVERT CONTROLLER NUMBER ADN 1R0 SHN 6 INSERT IN MESSAGE LMN 1R STM 1,T1 IEM1 LDM DM,DT SAVE DEVICE MNEMONIC STM ERMH+5 LDD EO SHN -3 RJM C2D STM ERMH+6 UPPER 2 DIGITS OF EST ORDINAL LDD EO LPN 7 SHN 6 ADC 2R0, STM ERMH+7 LOWER DIGIT OF EST ORDINAL LDM PHYD,DI RJM C2D STM ERMH+11 FAILING DRIVE LDM -1,T1 SET MESSAGE LENGTH STM ERMH+3 LDN 4 STD T1 LDD MA CWM **,T1 COPY MESSAGE INTO BUFFER IEMA EQU *-1 LDD MA CRM ERMB,T1 LDC ERMH MESSAGE HEADER ADDRESS STML MAD1 RJM IDM ISSUE MESSAGE TO ERROR LOG UJP IEMX RETURN * ERROR MESSAGE HEADER AND BUFFER. ERMH CON 0,0,0,**,ELDY DATA 12H*****, U**, ERMB BSSZ 4*5 CON 0 * ERROR MESSAGES. ERPD ERRMSG (PARITY PROTECTION DISABLED.) ERPR ERRMSG (PARITY PROTECTION RESTORED.) ERRI ERRMSG (PARITY RESTORE INITIATED.) ERFI ERRMSG (FORMAT INITIATED.) ERFC ERRMSG (FORMAT COMPLETE.) ERCR ERRMSG (CMX RESET ON CCHXX.) ERRC ERRMSG (CMX RESET COMPLETE.) ERRF ERRMSG (CMX RESET FAILURE.) ERCD ERRMSG (CMX CONTROLLER DISABLED, CCHXX.) ERCE ERRMSG (CMX CONTROLLER ENABLED, CCHXX.) IHD SPACE 4,20 ** IHD - INTERRUPT HANDLER. * * ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS. * (DI) = DEVICE STATE TABLE ADDRESS. * (DN) = DRIVE NUMBER. * * EXIT (A) = EXIT CONDITION FROM ROUTINE *VIS*. * = 0 IF INTERRUPT FOR INACTIVE DRIVE. * = RETURN ADDRESS TO PROCESSOR. * (MS) = MAJOR STATUS FROM RESPONSE PACKET. * (RT) = RESPONSE TYPE FROM STATUS BLOCK. * (DI) = THE COMMAND REFERENCE NUMBER FROM AN EXPECTED * RESPONSE. * TO *DAS1* IF UNEXPECTED ASYNCH. * * USES DI, MS, RT, T4. * * CALLS DCM, LDP, LSD, RCR, RRP, SCM, VIS. IHD6 LCN 0 INDICATE ASYNC INTERRUPT IHD7 RJM VIS VERIFY INTERRUPT SOURCE IHD SUBR ENTRY/EXIT LDML CTST,CI SHN -15 ZJN IHD1 IF STREAMING MODE FOR RESPONSES * IF 10 MB CHANNEL AND INTERLOCK MODE, SOMETIMES AFTER SENDING * A COMMAND PACKET, THE ERROR FLAG WILL SET DURING THE * FOLLOWING BUS CONTROL SEQUENCE (IPI ERROR REGISTER = 0004). * MASTER CLEARING THE CHANNEL AFTER THE COMMAND PACKET * PREVENTS THIS PROBLEM. RJM RCR RESET CHANNEL REGISTERS IHD1 RJM SCM SELECT CONTROLLER RJM RRP READ RESPONSE PACKET LDML RPBF+MST STDL MS SAVE MAJOR STATUS SHN -4 LPN 17 EXTRACT RESPONSE TYPE STD RT LMN XFNT ZJN IHD7 IF TRANSFER NOTIFICATION RJM DCM DESELECT CONTROLLER LDD RT CHECK RESPONSE TYPE LMN ASRT NJP IHD7 IF NOT ASYNC (UNSOLICITED) RESPONSE LDM RPBF+CUN LPC 377 STD T4 SAVE DRIVE NUMBER LMC 377 ZJP IHD6 IF RESPONSE FOR CONTROLLER RJM LSD LOCATE SELECTED DRIVE ZJN IHD5 IF DRIVE UNKNOWN ON THIS CONTROLLER STD DI RJM LDP LOAD DEVICE PARAMETERS * AN ASYNCH FOR A DRIVE CAN OCCUR BEFORE THE ASYNCH FOR THE * CONTROLLER AFTER A SLAVE RESET. LDM SRSA NJN IHD5 IF RESET IN PROGRESS LDM EEST,DI LMN ASRT ZJN IHD4 IF EXPECTED ASYNCH LDML RPBF+CRN LMD DI NJN IHD5 IF NOT EXPECTED ASYNCH IHD4 LDML ATTN,DI LJM IHDX RETURN * AN UNEXPECTED ASYNCH CAN BE THE RESULT OF A DRIVE RESET FROM * THE OTHER ACCESS, OR BECAUSE AN OFF-LINE DRIVE HAS BEEN * REPAIRED AND SPUN UP. SUCH UNEXPECTED ASYNCHS ARE IGNORED. IHD5 LJM DAS1 RETURN TO MAIN LOOP IIO SPACE 4,20 ** IIO - INITIATE I/O. * * ENTRY (A) = (CB) = *CBT* ORDINAL. * (DI) = DEVICE STATE TABLE ADDRESS. * (DT) = DRIVE TYPE. * * EXIT (A) = 0 IF I/O DISABLED ON THIS CHANNEL. * (RW) = READ / WRITE STATUS. * (PA) = PROCESSOR ADDRESS. * (NR - NR+4) = PHYSICAL ADDRESS OF REQUEST. * * USES PA, RW, NR - NR+4, T1 - T7. * * CALLS PEF. * * MACROS CBTE. IIO4 STDL PA SCN 77 SET I/O DISABLED STATUS IIO SUBR ENTRY/EXIT SHN CBTLS CBTE * ADC PAD1 FETCH SEEK PARAMETERS FROM *CBT* CRD NR ADN PAD4-PAD1 GET CHANNEL FROM CBT ENTRY CRD T1 ADN HSLK-PAD4 GET CHANNEL SELECT STATUS CRD T2 SBN HSLK-IOLK GET READ / WRITE FLAG CRD T3 LDD T2 CHECK ERROR FLAGS SHN 0-12 ZJN IIO1 IF NO FLAGS SHN -1 STD RW PROCESS ERROR FLAGS RJM PEF NJN IIO4 IF I/O PREPROCESSING INDICATED *IIO1 LDN 0 IIO1 STML CPBF+FCP+1 CLEAR UPPER BYTES OF BLOCK COUNT STML CPBF+FCP+6 CLEAR UPPER BYTES OF INTERRUPT SIZE STML CPBF+FCP+10 CLEAR UPPER BYTES OF BURST SIZE LDC P0931 STML CPBF+FCP COMMAND EXTENT PARAMETER LDD NR+1 STM CPBF+FCP+3 SET CYLINDER IN COMMAND PACKET STM CYLN,DI * DETERMINE PARTITION. IIO2 SBM MC,DT MJN IIO2.1 IF IN THE CORRECT PARTITION SBN 1 PJN IIO2 IF NOT AT MAINTENANCE CYLINDER * SET BLOCK COUNT. USING A LARGER BLOCK COUNT IMPROVES * STREAMING PERFORMANCE. IIO2.1 ADN 7 PJN IIO2.2 IF WITHIN LAST 8 CYLINDERS LDML PSCY,DT SET SECTOR COUNT FOR 8 CYLINDERS SHN 3 UJN IIO3 RETURN IIO2.2 LDM STS,DT SET SECTOR COUNT FOR .LT. 8 CYLINDERS LPC 777 IIO3 STML CPBF+FCP+2 SECTOR COUNT LDD NR+2 STM TKSN,DI TRACK + SECTOR SCN 77 SHN 2 LMD NR+2 SEPARATE INTO 8 BIT FIELDS SCN 77 LMD NR+2 SET IN COMMAND PACKET STML CPBF+FCP+4 LDD T3 SHN 22-11 EXTRACT WRITE DATA FLAG LPN 1 STM RWST,DI SET READ / WRITE STATUS STD RW LDC PIO UJP IIO4 SET PROCESSOR ADDRESS ILU SPACE 4,15 ** ILU - INITIALIZE LOGICAL UNIT. * * DECLUSTER UNIT IF CLUSTERED, FORMAT ALL THE PHYSICAL DRIVES * OF THE LOGICAL UNIT AS NECESSARY, THEN CLUSTER THE UNIT. * * ENTRY (DN) = DRIVE NUMBER. * (DT) = DRIVE TYPE. * (DI) = DEVICE STATE TABLE ADDRESS. * * USES CM - CM+4. * * CALLS ATT, CLU, CUF, DDT, DLU, FMU, SRS, UPD. ILU SUBR ENTRY/EXIT LDD DN STM PHYD,DI PHYSICAL DRIVE ILU1 RJM DDT DETERMINE DRIVE TYPE MJP ILU7 IF DRIVE NOT IN CONTROLLER TABLE SBD DT PJN ILU1.2 IF ACTUAL EQUAL OR GREATER THAN EXPECTED ILU1.1 ADN EQEG-EQEC ADVANCE DEVICE TYPE RANGE ERRNZ EQEO-EQEG-EQEG+EQEC (RANGES MUST BE EQUAL SIZE) MJN ILU1.1 IF NOT TO PROPER RANGE ILU1.2 ZJN ILU4 IF EXPECTED AND ACTUAL TYPES MATCH LDM DDTA SBN 1 ZJN ILU4 IF LOGICAL UNIT IS ONE DRIVE * IF 2 CONTROLLERS ARE CABLED TO THE UNIT AND THE UNIT IS * CLUSTERED DIFFERENTLY THAN IT IS CONFIGURED, THE OTHER * CONTROLLER MAY ALREADY HAVE DECLUSTERED AND RECLUSTERED * DIFFERENTLY. SLAVE RESET MUST BE DONE TO CAUSE THE * CONTROLLER TO REEVALUATE THE DRIVES. LDC ILU2 RETURN ADDRESS LJM SRS INITIATE SLAVE RESET * CLEAR THE ASYNCHRONOUS RESPONSES AFTER THE SLAVE RESET. * THERE IS NORMALLY ONE ASYNCH PER PHYSICAL DRIVE AFTER A * DECLUSTER COMMAND. IF THE DECLUSTER COMMAND IS ISSUED AFTER * SLAVE RESET, THE ASYNCHS THAT SHOULD HAVE BEEN AFTER THE * COMPLETION RESPONSE FOR THE DECLUSTER MAY COME BEFORE THE * COMPLETION RESPONSE. THIS WILL CAUSE A TIMEOUT WAITING * FOR A RESPONSE. ILU2 LDC 1S16+ILU3 RETURN ADDRESS LJM SRS ISSUE LOGICAL RESET ILU3 RJM DDT DETERMINE DRIVE TYPE MJN ILU7 IF DRIVE NOT IN CONTROLLER TABLE ILU4 LDML ATTB+2,T3 SHN 21-11 PJN ILU5 IF UNIT NOT CLUSTERED RJM ATT WAIT FOR COMPLETION RESPONSE RJM DLU DECLUSTER LOGICAL UNIT UJN ILU6 CHECK FOR CONDITIONAL FORMAT ILU5 RJM ATT WAIT FOR COMPLETION RESPONSE ILU6 LDK SSTL CRD CM LDD CM+1 SHN 21-12 PJN ILU8 IF UNCONDITIONAL FORMAT RJM DDT DETERMINE DRIVE TYPE MJN ILU7 IF DRIVE NOT IN CONTROLLER TABLE RJM ATT WAIT FOR COMPLETION RESPONSE LDC C0302+1S17 REPORT ADDRESSEE STATUS OPERATION CODE RJM CUF CHECK IF UNIT FORMATTED ZJN ILU9 IF UNIT FORMATTED UJN ILU8 FORMAT THE UNIT ILU7 RJM ATT WAIT FOR COMPLETION RESPONSE ILU8 RJM FMU FORMAT UNIT ILU9 RJM UPD UPDATE DRIVE NUMBER NJP ILU1 IF MORE DRIVES TO CHECK RJM CLU CLUSTER LOGICAL UNIT UJP ILUX RETURN IMF SPACE 4,10 ** IMF - ISSUE MONITOR FUNCTION AND WAIT FOR COMPLETION. * * ENTRY (A) = FUNCTION. * * EXIT (A) = 0. * (CM - CM+4) = MONITOR FUNCTION RESPONSE. * * USES CM - CM+4. * * CALLS AME, CMC. IMF SUBR ENTRY/EXIT STD CM RJM CMC WAIT MONITOR COMPLETE (PREVIOUS REQUEST) LDD OA WRITE OUTPUT REGISTER CWD CM LDD CM SBN CPUM MJN IMF1 IF NOT *CPUMTR* REQUEST RJM AME ATTEMPT MONITOR EXCHANGE IMF1 RJM CMC WAIT FOR MONITOR COMPLETE (NEW REQUEST) LDD OA READ OUTPUT REGISTER CRD CM LDN 0 UJN IMFX RETURN IMR SPACE 4,15 ** IMR - INITIATE *BIOM* MONITOR REQUEST. * * ENTRY (A) = *BIOM* SUBFUNCTION. * (WB+3 - WB+4) = *BIOM* PARAMETERS. * (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT (A) = 0. * * USES WB - WB+2. * * CALLS AME, CMC. IMR SUBR ENTRY/EXIT STD WB+1 LDI DI SET *PUT* ORDINAL ERRNZ PUTO CODE DEPENDS ON VALUE STD WB+2 LDN BIOM SET MONITOR FUNCTION STD WB RJM CMC CHECK MONITOR COMPLETE LDD OA CWD WB RJM AME ATTEMPT MONITOR EXCHANGE * LDN 0 UJN IMRX RETURN IOM SPACE 4,10 ** IOM - ISSUE OPERATOR MESSAGE. * * ENTRY (A) = ADDRESS OF MESSAGE. * = 0 TO CLEAR MESSAGE. * = - TO REFRESH MESSAGE. * (EO) = EST ORDINAL. * * USES T1. * * CALLS C2D. IOM2 LDD CP SYSTEM CP ADDRESS ADN MS2W CWD T1 CLEAR THE MESSAGE IOM3 LDML IOMA NJN IOM1 IF MESSAGE PRESENT IOM SUBR ENTRY/EXIT STDL T1 MJN IOM3 IF MESSAGE REFRESH STML IOMA ZJN IOM2 IF CLEAR MESSAGE CALL IOM1 LDD CP SYSTEM CP ADDRESS ADN MS2W CWM **,TR STORE OPERATOR MESSAGE IOMA EQU *-1 UJN IOMX RETURN IPR SPACE 4,30 ** IPR - INITIATE PARITY RESTORE. * * INITIATE RESTORE OF AN OFF-LINE DRIVE, IN RESPONSE TO AN * OPERATOR *RESTORE* COMMAND. * * THIS ROUTINE CHECKS FOR AN OFF-LINE DRIVE OF A PARITY UNIT. * IT WILL ISSUE A SPIN UP DRIVE COMMAND TO SEE IF THE DRIVE * IS USEABLE, AND IF SO, FORMAT THE DRIVE IF NECESSARY, THEN * SET UP TABLES SO THE DRIVE WILL BE RESTORED ONE CYLINDER * AT A TIME AS A BACKGROUND OPERATION. * * THIS DRIVER WILL HOLD THE UNIT INTERLOCK (IN THE *PUT*) * DURING THE ENTIRE RESTORE OPERATION. FOR A SHARED DEVICE, * IT WILL ALSO HOLD THE ERROR PROCESSING INTERLOCK (IN THE * *BDT*) DURING THE RESTORE INITIATION PROCESS, AND THE MMF * RESTORE INTERLOCK (IN THE *BDT*) DURING THE ENTIRE RESTORE. * THE MMF RESTORE INTERLOCK WILL ENSURE THAT ONLY THE * CONTROLLER THAT IS PERFORMING THE RESTORE WILL BE ALLOWED * TO DO I/O ON THE DEVICE DURING THE RESTORE. * * ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS. * (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * EXIT TO *CSR*. * TO *CMP*, TO LEAVE REQUEST PENDING. * * USES CM - CM+4. * * CALLS ATT, CDS, CLP, COD, CRP, DAS, FMU, GCA, IEE, IEM, * LNE, SEP, SOU, SRS, SUD, UBP, WAC, WCB. * * MACROS CMSTF, DELAY, MONITOR, SMSTF. IPR BSS 0 ENTRY LDM RSIN CHECK RESTORE INTERLOCK FLAG ZJN IPR1 IF INTERLOCK NOT SET LMD DI NJN IPR2 IF INTERLOCK SET FOR ANOTHER DEVICE LJM IPR13 PROCESS REENTRY FOR RESTORE ON THIS DEVICE * ISSUE LOGICAL RESET TO ENSURE THAT THIS CONTROLLER SEES * THE CURRENT STATUS OF THE DRIVE IN QUESTION. ALLOW ACTIVITY * ON OTHER DEVICES TO COMPLETE BEFORE ISSUING THE RESET. IPR1 RJM SEP SET ERROR PROCESSING INTERLOCK ZJN IPR3 IF INTERLOCK SET SUCCESSFULLY IPR2 LJM CMP LEAVE REQUEST PENDING IPR3 RJM WAC WAIT FOR OTHER ACTIVITY TO COMPLETE LDML CSTB,CI SHN 21-15 MJN IPR5 IF CONTROLLER NOT FUNCTIONAL LDC IPR4+1S16 RETURN ADDRESS LJM SRS ISSUE LOGICAL RESET * CHECK FOR OFF-LINE DRIVE. IPR4 RJM COD CHECK FOR OFF-LINE DRIVE NJN IPR6 IF OFF-LINE DRIVE DETECTED RJM CLP CLEAR *LOST PARITY* FLAGS IPR5 RJM CRP CLEAR *RESTORE IN PROGRESS*, IF SET LJM CSR ABANDON REQUEST * SET *RESTORE IN PROGRESS* FLAGS AND INTERLOCKS. IPR6 LDD DI SET RESTORE INTERLOCK FLAG STM RSIN LDD CI SET ADDRESS OF CONTROLLER SERIAL NUMBER ADK CTSN-2 STM IPRA LDN 0 INITIALIZE PARTITION SEARCH IPR7 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJP IPR9 IF NO MORE PARTITIONS RJM CDS CHECK DEVICE STATUS MJN IPR5 IF DEVICE NOT RECOVERED ZJN IPR8 IF NOT SHARED DEVICE LDD MA SET CONTROLLER SERIAL NUMBER INTO MB CWM **,ON (ADDRESS OF *CTSN* FOR THIS CONTROLLER) IPRA EQU *-1 LDD EO SET EST ORDINAL STD CM+4 LDN SRPS SET RESTORE PARITY INTERLOCK IN *BDT* STD CM+1 MONITOR MTEM LDD CM+4 NJP IPR5 IF REJECT (OTHER MF PERFORMING RESTORE) LDN 1 SET FLAG THAT SAYS THIS MF HAS INTERLOCK STD CM+2 LDN 25 BIT TO CHANGE RJM UBP UPDATE *BDLL* PARAMETER IPR8 SMSTF GDRI SET *RESTORE INITIATION* IN *ACGL* SMSTF GDUR SET *RESTORE IN PROGRESS* IN *ACGL* LDC ERRI *EQXXX, UXX, PARITY RESTORE INITIATED.* RJM IEM ISSUE ERROR LOG MESSAGE LDD EO UJP IPR7 PROCESS NEXT PARTITION * IF SHARED DEVICE, WAIT FOR OTHER MF-S TO ACKNOWLEDGE. IPR9 RJM IEE ISSUE E,E EVENT LDN 0 INITIALIZE PARTITION SEARCH IPR10 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN IPR13 IF NO MORE PARTITIONS STM IPRC SAVE EST ORDINAL RJM CDS CHECK DEVICE STATUS ZJN IPR12 IF NOT SHARED DEVICE IPR11 RJM GCA GET CURRENT *ACGL* LDD CM GET ACCESS FLAGS LPN 17 SCN ** (MACHINE MASK FOR THIS MF) IPRB EQU *-1 ZJN IPR12 IF NO OTHER MF HAS ACCESS FLAG SET RJM DAS PROCESS ACTIVITY ON OTHER DEVICES DELAY LDC ** (EST ORDINAL OF CURRENT PARTITION) IPRC EQU *-1 STD EO RESTORE EST ORDINAL UJN IPR11 RETRY IPR12 LDD EO UJN IPR10 PROCESS NEXT PARTITION * SPIN UP DRIVE. IPR13 RJM SUD SPIN UP DRIVE ZJN IPR15 IF SUCCESSFUL IPR14 LJM IPR5 ABANDON RESTORE * FORMAT DRIVE, IF REQUIRED. IPR15 LDK SSTL CRD CM LDD CM+1 SHN 21-12 PJN IPR16 IF UNCONDITIONAL FORMAT LDC C0302 REPORT ADDRESSEE STATUS OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDC P02D5 STML CPBF+FCP PHYSICAL DRIVE PARAMETER LDM OUPD,DI OFFLINE UNIT NUMBER SHN 10 STML CPBF+FCP+1 PHYSICAL DRIVE TO STATUS LDN 12 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJN IPR14 IF ERROR LDML RPBF+11 SHN 21-16 IPR16 PJN IPR17 IF DRIVE NOT FORMATTED LDM RPBF+7 CHECK NUMBER OF DATA DRIVES LPN 77 LMD DD EXPECTED DATA DRIVES NJN IPR17 IF WRONG NUMBER OF DATA DRIVES LDML BPS,DT CHECK SECTOR SIZE SCN 77 LMML RPBF+13 ACTUAL SECTOR SIZE ZJN IPR18 IF CORRECT SECTOR SIZE IPR17 RJM FMU FORMAT THE DRIVE * SET UP RESTORE PARAMETERS. IPR18 LDD DI SET *RESTORE IN PROGRESS* FLAG STM RSDI LDN 0 STM RCYL STARTING CYLINDER TO RESTORE STM RTSN STARTING TRACK, SECTOR TO RESTORE STM RMUX I/O REQUESTS TO MULTIPLEX PER RESTORE * LDN 0 INITIALIZE PARTITION SEARCH IPR19 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN IPR20 IF NO MORE PARTITIONS CMSTF GDRI CLEAR *RESTORE INITIATION* FROM *ACGL* LDD EO UJN IPR19 PROCESS NEXT PARTITION IPR20 LJM CSR CLEAR SPECIAL REQUEST FLAG / START RESTORE ISR SPACE 4,25 ** ISR - IDENTIFY AND PROCESS SPECIAL REQUEST. * * ENTRY (CM+3) = SPECIAL REQUEST FLAGS. * (CI) = CONTROLLER STATE TABLE ADDRESS. * (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * EXIT (CM+3) UPDATED - BITS FOR *ECAF* AND/OR *LMLF* CLEARED * IF REQUEST IS FOR THE ALTERNATE CHANNEL. * TO *DAS1* IF UNIT INTERLOCK NOT OBTAINED. * TO *ERR* IF CONTROLLER FAILURE. * TO *ECA* IF ENABLE CONTROLLER ACTIVITY AND *BDLL* * BIT SET FOR THIS CHANNEL. * TO SPECIAL REQUEST PROCESSOR (ADDRESS IN TABLE *ISRA*) * IF SPECIAL REQUEST FOUND, WITH - * (RW) = INDEX FOR SPECIAL REQUEST. * * USES CM+3, PA, RW. * * CALLS CEC, CPF, IDU, SEO. ISR SUBR ENTRY/EXIT * CHECK FOR *ENABLE CONTROLLER ACTIVITY* (*ECAF*) REQUEST. * IF REQUEST IS FOR OTHER CHANNEL, LOOK FOR DIFFERENT REQUEST. LDD CM+3 SHN 21-ECAF+ECAF/12D*12D PJN ISR3 IF *ECAF* REQUEST NOT SET RJM CEC CHECK IF REQUEST IS FOR THIS CHANNEL NJN ISR2 IF REQUEST IS NOT FOR THIS CHANNEL LJM ECA ENABLE CONTROLLER ACTIVITY ISR2 LDD CM+3 LOOK FOR A DIFFERENT REQUEST TO PROCESS SCN 1 ERRNZ ECAF-12D CODE DEPENDS ON VALUE STD CM+3 * CHECK FOR *LIST FIRMWARE REVISION* (*LMLF*) REQUEST. * IF REQUEST IS FOR OTHER CHANNEL, LOOK FOR DIFFERENT REQUEST. ISR3 LDD CM+3 SHN 21-LMLF+LMLF/12D*12D PJN ISR4 IF *LMLF* REQUEST NOT SET LPN 77 ISOLATE CHANNEL NUMBER LMD IR+4 ZJN ISR6 IF REQUEST FOR THIS DRIVER LDD CM+3 LOOK FOR A DIFFERENT REQUEST TO PROCESS LPN 37 ERRNZ LMLF-17D CODE DEPENDS ON VALUE STD CM+3 * IF RESTORE ALREADY IN PROGRESS FOR ANY DEVICE, LEAVE ANY * ADDITIONAL *RESTORE* REQUEST PENDING. ISR4 LDM RSDI ZJN ISR4.1 IF NO RESTORE IN PROGRESS LDD CM+3 CLEAR *RESTORE* SPECIAL REQUEST FLAG SCN 2 ERRNZ RSPF-13D CODE DEPENDS ON VALUE STD CM+3 * SEARCH FOR OTHER SPECIAL REQUEST. ISR4.1 LDD CM+3 ISOLATE SPECIAL REQUEST FLAGS STD T0 ZJP ISRX IF NO SPECIAL REQUEST TO PROCESS LDN ECAF-1 STD RW ISR5 AOD RW ADVANCE INDEX LDD T0 SHN 21-0 CHECK NEXT FLAG STD T0 PJN ISR5 IF NOT SET LDD RW UJN ISR7 SET SPECIAL REQUEST FLAG * PROCESS SPECIAL REQUEST. ISR6 LDC 6S6+LMLF BITS - 1 TO CLEAR / STARTING BIT ISR7 STM SREQ,DI SET SPECIAL REQUEST FLAG LPN 77 SBN ECAF CALCULATE INDEX STD RW STM RWST,DI SAVE INDEX RJM SEO SET EST ORDINAL LDML ISRA,RW STDL PA SET PROCESSOR ADDRESS RJM IDU INTERLOCK DISK UNIT MJN ISR8 IF CHANNEL DOWN OR NOT ENABLED NJN ISR9 IF INTERLOCK NOT AVAILABLE LDML CTST,CI SHN 21-15 MJN ISR10 IF CONTROLLER DEAD LJM 0,PA EXIT TO SPECIAL REQUEST * CHANNEL DOWN OR NOT ENABLED. ISR8 LDM SREQ,DI LMC 6S6+LMLF NJN ISR9 IF NOT LIST MICROCODE REVISION LDC 6S6+LMLF BITS - 1 TO CLEAR / STARTING BIT RJM CPF CLEAR SPECIAL REQUEST BIT IN *PUT* * INTERLOCK NOT AVAILABLE. ISR9 LDN 0 STM SREQ,DI CLEAR SPECIAL REQUEST FLAG STM ADDR,DI CLEAR REENTRY ADDRESS STM ATTN,DI CLEAR INTERRUPT ADDRESS LJM DAS1 RETURN TO MAIN LOOP * CONTROLLER FAILURE. ISR10 LDN ECMD CONTROLLER DEAD RJM ERR PROCESS ERROR ISRA BSS 0 SPECIAL REQUEST PROCESSORS CONL CSR CLEAR FLAG (ENABLE CONTROLLER ACTIVITY) CONL IPR INITIATE PARITY RESTORE CONL CSR CLEAR FLAG (RESERVED) CONL LPS LIST PACK SERIAL NUMBER CONL CSR CLEAR FLAG (FORMAT REQUEST) CONL LMR LIST MICROCODE REVISION LEVEL ISRB BSS 0 INTERNAL SPECIAL REQUEST PROCESSORS CONL CDT CHECK DRIVE TYPE (INTERNAL REQUEST) LDP SPACE 4,25 ** LDP - LOAD DEVICE PARAMETERS. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT (A) = (EO) = EST ORDINAL. * (CB) = *CBT* ORDINAL. * (CI) = CONTROLLER STATE TABLE ADDRESS. * (CN) = CONTROLLER NUMBER. * (DD) = NUMBER OF DATA DRIVES IN DEVICE. * (DN) = DRIVE NUMBER. * (DT) = DRIVE TYPE. * (PA) = REQUEST IN PROGRESS ADDRESS. * (PD) = PARITY DEVICE FLAG. * (RW) = READ / WRITE FLAG. * (CM - CM+4) = *PILL* WORD OF *PUT* ENTRY. * (WB - WB+4) = *UNCT* WORD OF *PUT* ENTRY. * * USES CB, CI, CN, DD, DN, DT, PA, PD, RW, CM - CM+4, * WB - WB+4. * * CALLS SEO. * * MACROS PUTE. LDP SUBR ENTRY/EXIT LDM DVTP,DI LPN 77 STD DT DRIVE TYPE LDML DM,DT SHN 0-17 STD PD NONZERO IF PARITY DEVICE LDML DM,DT SHN 0-14 LPN 7 STD DD NUMBER OF DATA DRIVES IN DEVICE LDML PNUN,DI SHN -14 SHN 2 ERRNZ CSTBE-4 CODE DEPENDS ON VALUE ADC CSTB STD CI CONTROLLER STATE TABLE ADDRESS LDI DI ERRNZ PUTO CODE DEPENDS ON VALUE SHN PUTLS PUTE * ADC PILL GET INTERLOCK STATUS CRD CM SBN PILL-UNCT FETCH UNIT CONTROL WORD CRD WB LDD WB GET CONTROLLER AND UNIT NUMBER LPC 777 SHN 21-5 EXTRACT CONTROLLER NUMBER STD CN SHN 5-21 ISOLATE DRIVE NUMBER STD DN LDM RWST,DI RESTORE READ / WRITE STATUS STD RW LDML ADDR,DI CURRENT PROCESSING ADDRESS STDL PA LDD WB+3 *CBT* ORDINAL STD CB RJM SEO SET EST ORDINAL UJP LDPX RETURN LMR SPACE 4,15 ** LMR - LOG MICROCODE REVISION. * * ENTRY (CN) = CONTROLLER NUMBER. * (DN) = DRIVE NUMBER. * (DI) = DEVICE STATE TABLE ADDRESS. * (DT) = DRIVE TYPE. * * EXIT TO *CSR* WHEN THE REQUEST IS COMPLETE. * * USES NR+2, NR+3, T3, T4, WB - WB+4. * * CALLS ATT, CHD, IBM, IDM, IDT, RCA. LMR BSS 0 ENTRY RJM RCA REPORT CONTROLLER ATTRIBUTES RJM IDT INPUT DATA TO PP * GENERATE MICROCODE REVISION ERRLOG MESSAGE. LDD CN SET CONTROLLER NUMBER IN BML MESSAGE STD NR+3 ADC 2RM0 CONVERT FOR ERRLOG MESSAGE STM LMRB+6 LDC LMRB+4 LOCATION FOR REVISION LEVEL STDL T3 SBN LMRB+4-LMRA SET MESSAGE ADDRESS STML MAD1 LDM ATTB+16 CONVERT REVISION LEVEL RJM CHD RJM IDM ISSUE MESSAGE TO ERRLOG * GENERATE MICROCODE REVISION BML MESSAGE. LDD MA MOVE MICROCODE REVISION LEVEL CWM LMRB,ON SBN 1 COPY TO BML MESSAGE CRD WB LDD IR+4 SET CHANNEL NUMBER STD NR+2 LDN HI0104-HI0100 RJM IBM ISSUE BML MESSAGE * LDN 0 RJM ATT WAIT FOR COMPLETION RESPONSE LJM CSR CLEAR SPECIAL REQUEST FLAG LMRA CON 0,0,0,4,ELDY MICROCODE REVISION ERRLOG MESSAGE DATA 4HCH** LMRB DATA 10H MH427-D** DATA C+,CM0.+ LND SPACE 4,15 ** LND - LOCATE NEXT DRIVE (ON SPECIFIED CONTROLLER). * * ENTRY (A) = 0 TO LOCATE FIRST DRIVE OF STRING. * (CI) = CONTROLLER STATE TABLE ADDRESS. * (DI) = DEVICE STATE TABLE ADDRESS. * (T7) = CURRENT *DST* ADDRESS, IF (A) .NE. 0. * * EXIT (A) = (T7) = DEVICE STATE TABLE ADDRESS OF NEXT DRIVE. * (A) = 0 IF NO MORE DRIVES (ON CONTROLLER). * * USES T7. LND2 LDM CTST,CI ADDRESS OF FIRST DRIVE IN STRING STD T7 LND3 LDM PNUN,T7 VERIFY CONTROLLER LMM PNUN,DI SHN -6 NJN LND1 IF NOT SPECIFIED CONTROLLER LDD T7 LND SUBR ENTRY/EXIT ZJN LND2 IF INITIAL CALL LND1 LDN DSTBE RAD T7 ADVANCE DEVICE STATE TABLE ADDRESS LMM DASB NJN LND3 IF NOT END OF BLOCK * LDN 0 UJN LNDX RETURN LNE SPACE 4,25 ** LNE - LOCATE NEXT EST/PARTITION FOR THIS DEVICE. * * LOCATE NEXT EST ASSOCIATED WITH THE CURRENT DEVICE. * * ENTRY (A) .EQ. 0, START SEARCH WITH EST ORDINAL IN *PUT*. * (A) .NE. 0, (A) = LAST EST ORDINAL PROCESSED. * (DI) = DEVICE STATUS TABLE ADDRESS. * (EO) = CURRENT EST ORDINAL. * * EXIT (A) = (EO) = EST ORDINAL OF NEXT PARTITION. * (A) = 0, IF NO MORE PARTITIONS FOR THIS *PUT*. * (EO) = ORIGINAL EST ORDINAL (FROM *CBT*/*PUT*). * * USES EO, CM - CM+4. * * CALLS REE, SEO. * * MACROS PUTE. LNE3 RJM SEO SET EST ORDINAL FROM *CBT* OR *PUT* LNE4 LDN 0 INDICATE NO MORE PARTITIONS LNE SUBR ENTRY/EXIT ZJN LNE1 IF INITIAL ENTRY OF SEARCH STD EO SET EST ORDINAL LDML DVTP,DI SHN 21-17 PJN LNE4 IF NOT PARTITIONED DEVICE UJN LNE2 LOCATE NEXT EST ORDINAL LNE1 LDI DI *PUT* ORDINAL FROM DEVICE STATE TABLE ERRNZ PUTO CODE DEPENDS ON VALUE SHN PUTLS PUTE * ADC UNCT GET FIRST EST FOR THIS *PUT* CRD CM SOD CM+1 SET STARTING EST ORDINAL FOR SEARCH STD EO LNE2 AOD EO LMC ** HIGHEST EST ORDINAL FOR THIS DRIVER (+1) LNEA EQU *-1 ZJN LNE3 IF NO MORE *EST* ENTRIES TO CHECK RJM REE READ EST ENTRY LDD CM SHN 21-13 PJN LNE2 IF NOT MASS STORAGE SHN 21-5-21+13 PJN LNE2 IF NOT A BUFFERED DEVICE LDD CM+4 SHN 3 ADK DILL CRD CM LDD CM+2 GET *PUT* ORDINAL FROM *MST* LMI DI *PUT* ORDINAL FROM DEVICE STATE TABLE ERRNZ PUTO CODE DEPENDS ON VALUE NJN LNE2 IF NOT FOR THE DESIRED *PUT* LDD EO UJP LNEX RETURN NEXT EST ORDINAL LPS SPACE 4,15 ** LPS - LOG PACK SERIAL NUMBER(S). * * ENTRY (CN) = CONTROLLER NUMBER. * (DN) = DRIVE NUMBER. * (DI) = DEVICE STATE TABLE ADDRESS. * (DT) = DRIVE TYPE. * * EXIT TO *CSR* WHEN THE REQUEST IS COMPLETE. * * USES NR+2, NR+3, T3, T4, WB - WB+4. * * CALLS ATT, CAN, C2D, IBM, IDM, IDT, SOU, UPD. LPS BSS 0 ENTRY LDD DN STM PHYD,DI PHYSICAL DRIVE NUMBER LDC C0200 REPORT ATTRIBUTES OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDC P036C REQUEST ATTRIBUTE PARAMETER STM CPBF+FCP LDC 0#8050 RETURN ATTRIBUTE ID 50 AS DATA STML CPBF+FCP+1 LDN 12 COMMAND PACKET LENGTH RJM IDT INPUT DATA TO PP LDC ATTB+0#1E SET ADDRESS OF FIRST PACK SERIAL NUMBER STDL T4 * GENERATE PACK SERIAL NUMBER ERRLOG MESSAGE. LPS1 LDC LPSB+2 SET ADDRESS FOR CONVERSION STDL T3 SBN LPSB+2-LPSA DEFINE MESSAGE ADDRESS STML MAD1 RJM CAN CONVERT ASCII NUMBER TO DISPLAY CODE LDN 11 RADL T4 UPDATE POINTER TO NEXT SERIAL NUMBER LDM PHYD,DI STD NR+3 PUT UNIT NUMBER IN BML MESSAGE RJM C2D CONVERT UNIT NUMBER FOR ERRLOG MESSAGE STM LPSA+11 LDD EO CONVERT EST ORDINAL SHN -3 RJM C2D STM LPSA+6 INSERT IN ERRLOG MESSAGE LDM DM,DT STM LPSA+5 SAVE DEVICE MNEMONIC STD NR+2 LDD EO LPN 7 CONVERT LOWER DIGIT SHN 6 ADC 2R0, ADD TO ERRLOG MESSAGE STM LPSA+7 RJM IDM ISSUE MESSAGE TO ERRLOG * GENERATE PACK SERIAL NUMBER BML MESSAGE. LDD MA MOVE DRIVE SERIAL NUMBER CWM LPSB,ON SBN 1 COPY TO BML MESSAGE CRD WB LDD EO INSERT EST ORDINAL STD WB LDN 0 CLEAR UNUSED FIELD STD WB+1 RJM IBM ISSUE BML MESSAGE RJM UPD UPDATE PHYSICAL DRIVE NJP LPS1 IF MORE PHYSICAL DRIVES * LDN 0 RJM ATT WAIT FOR COMPLETION RESPONSE LJM CSR CLEAR SPECIAL REQUEST FLAG LPSA CON 0,0,0,4,ELDY PACK SERIAL NUMBER ERRLOG MESSAGE DATA 10H*****, U** LPSB DATA C+,PS=******.+ LSD SPACE 4,15 ** LSD - LOCATE SELECTED DRIVE IN *DSTB*. * * ENTRY (T4) = DRIVE NUMBER. * * EXIT (A) = 0 IF NO RESPONSE EXPECTED. * = DEVICE STATE TABLE ADDRESS FOR DRIVE. * * CALLS LND. LSD SUBR ENTRY/EXIT LDN 0 UJN LSD2 LOCATE FIRST DRIVE LSD1 LDN 1 LSD2 RJM LND ZJN LSDX IF END OF DRIVE STRING LDD FC NJN LSD3 IF FORMAT COMPLETE LDML ATTN,T7 ZJN LSD1 IF RESPONSE NOT EXPECTED UJN LSD4 LSD3 LDM PNUN,T7 LPN 77 CHECK DRIVE NUMBER LMD T4 NJN LSD1 IF SPECIFIED DRIVE NOT FOUND LSD4 LDD T7 UJN LSDX RETURN PEF SPACE 4,15 ** PEF - PROCESS ERROR FLAGS. * * ENTRY (RW) = ERROR INDEX. * (CB) = *CBT* ORDINAL. * (DI) = DEVICE STATE TABLE ADDRESS. * (DN) = DRIVE NUMBER. * (T1) = BYTE 0 OF *PAD4* WORD OF CBT ENTRY. * (T2) = BYTE 0 OF *HSLK* WORD OF CBT ENTRY. * (NR - NR+4) = *PAD1* WORD OF *CBT* ENTRY. * * EXIT (A) = 0 IF OK TO INITIATE I/O. * TO (0,PA) TO PROCESS A CHANNEL SPECIFIC READ OR * WRITE REQUEST. AFTER SUSPECT STATE IS SET, THE * REQUEST BECOMES CHANNEL SPECIFIC. * TO *CMP10* IF ERROR IN PROGRESS ON A DIFFERENT DEVICE. * * CALLS IDU, IIO, LDP, SEP. PEF1 LDN 0 INDICATE I/O IN ORDER PEF SUBR ENTRY/EXIT LDD T1 SHN -6 CHECK CHANNEL NUMBER LMD IR+4 NJN PEFX IF I/O DISABLED ON THIS ACCESS LDD RW ZJN PEFX IF *1MV* DEVICE VERIFICATION LDM ERFL LMD DI ZJN PEFX IF ERROR IN PROGRESS ON THIS DEVICE LDML CTST,CI SHN 21-15 MJN PEF1 IF CONTROLLER DEAD LDML ERCT,DI NJN PEF1 IF I/O INITIATED RJM IDU INTERLOCK DEVICE NJN PEFX IF INTERLOCK NOT AVAILABLE LDN CSRC STM ERCT,DI SET INITIAL ERROR COUNT RJM LDP LOAD DEVICE PARAMETERS LDD CM+1 SHN -6 FAILING DRIVE NUMBER STM PHYD,DI FOR RECOVERED ERROR REPORTING RJM SEP SET ERROR PROCESSING INTERLOCK NJP CMP10 IF ERROR IN PROGRESS ON A DIFFERENT DEVICE LDD CB INITIATE I/O RJM IIO LJM 0,PA EXIT TO PROCESSOR PLP SPACE 4,20 ** PLP - PROCESS LOST PARITY. * * PLP HANDLES *PROCESS LOST PARITY* CONDITIONS, PROVIDED THAT * THE DEVICE HAS BEEN RECOVERED. IF IT HAS, PLP SETS THE UNIT * NUMBER AND THE *PARITY PROTECTION LOST* FLAG IN MST WORD * *ACGL*, SO THAT THE THE E,E DISPLAY ON EACH MAINFRAME WILL * SHOW WHICH DRIVE IS OFF-LINE. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * USES CM - CM+4. * * CALLS CDS, IEE, LNE. * * MACROS MONITOR, SMSTF. PLP4 LDC ** (COUNT OF NEW PARTITIONS PROCESSED) PLPA EQU *-1 ZJN PLP5 IF NO NEW PARTITIONS PROCESSED RJM IEE ISSUE E,E EVENT PLP5 LDC ** (COUNT OF UNPROCESSED PARTITIONS LEFT) PLPB EQU *-1 NJN PLPX IF NOT ALL PARTITIONS PROCESSED LDML DVTP,DI CLEAR *PROCESS LOST PARITY* FLAG LPC 137777 STML DVTP,DI PLP SUBR ENTRY/EXIT LDML DVTP,DI SHN 21-16 PJN PLPX IF *PROCESS LOST PARITY* NOT SET LDN 0 CLEAR PARTITION COUNTS STM PLPA STM PLPB * LDN 0 INITIALIZE PARTITION SEARCH PLP1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN PLP4 IF NO MORE PARTITIONS RJM CDS CHECK DEVICE STATUS MJN PLP2 IF DEVICE NOT RECOVERED LDD CM+4 CHECK IF *PARITY LOST* FLAG ALREADY SET SHN 3 ADN ACGL CRD CM LDD CM+4 SHN 21-2 MJN PLP3 IF PARTITION ALREADY PROCESSED LDD EO SET EST ORDINAL STD CM+1 LDM OUPD,DI OFFLINE UNIT OF PARITY DEVICE STD CM+2 LDN SOUS SET OFFLINE UNIT IN *ACGL* STD CM+3 MONITOR STBM SMSTF GDPL SET *PARITY PROTECTION LOST* IN *ACGL* AOM PLPA INDICATE NEW PARTITION PROCESSED UJN PLP3 PROCESS NEXT PARTITION PLP2 AOM PLPB INCREMENT UNPROCESSED PARTITION COUNT PLP3 LDD EO UJP PLP1 PROCESS NEXT PARTITION PPE SPACE 4,10 ** PPE - PROCESS PARITY ENABLE. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * EXIT (DVTP,DI) BIT 10 CLEAR, IF PROCESSING COMPLETE. * (DVTP,DI) BIT 7 SET, IF PROCESSING COMPLETE. * * CALLS EMP. PPE SUBR ENTRY/EXIT LDML DVTP,DI SHN 21-12 PJN PPEX IF *ENABLE MMF PARITY ACCESS* NOT SET RJM EMP ENABLE MMF PARITY DEVICE ACCESS NJN PPEX IF NOT ALL PARTITIONS PROCESSED LDML DVTP,DI CLEAR *ENABLE MMF PARITY ACCESS* FLAG LPC 175577 LMC 200 SET *CHECK MMF PARITY ACCESS* FLAG STML DVTP,DI UJN PPEX RETURN RBD SPACE 4,10 ** RBD - READ *BDLL*. * * ENTRY (EO) = EST ORDINAL. * * EXIT (CM - CM+4) = *BDLL* WORD OF MST. * * USES CM - CM+4. * * CALLS REE. RBD SUBR ENTRY/EXIT RJM REE READ EST ENTRY LDD CM+4 SHN 3 ADN BDLL CRD CM UJN RBDX RETURN RCA SPACE 4,10 ** RCA - REPORT CONTROLLER ATTRIBUTES. * * ENTRY (CN) = CONTROLLER NUMBER. * * EXIT PARAMETERS SET UP FOR *IDT* CALL. * * CALLS SOC. RCA SUBR ENTRY/EXIT LDC C0200 REPORT ATTRIBUTES OPERATION CODE RJM SOC SET OPERATION CODE AND CONTROLLER LDC P036C REQUEST ATTRIBUTE PARAMETER STM CPBF+FCP LDC 0#8050 RETURN ATTRIBUTE ID 50 AS DATA STML CPBF+FCP+1 LDN 12 COMMAND PACKET LENGTH UJN RCAX RETURN RCT SPACE 4,10 ** RCT - READ CHANNEL TABLE. * * EXIT (A) = CHANNEL TABLE STATUS BYTE. * * USES NR - NR+4. * * MACROS CHTE. RCT SUBR ENTRY/EXIT CHTE * LDC 0 READ CHANNEL TABLE ENTRY CRD NR RCTA LDD NR UJN RCTX RETURN RDO SPACE 4,15 ** RDO - REPORT DRIVE OFF-LINE. * * RDO SETS THE *PROCESS LOST PARITY* FLAG SO THAT MST WORD * *ACGL* WILL BE UPDATED WHEN THE DEVICE HAS BEEN RECOVERED. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * * CALLS PLP. RDO SUBR ENTRY/EXIT LDML DVTP,DI SET *PROCESS LOST PARITY* FLAG LPC 137777 LMC 40000 STML DVTP,DI RJM PLP PROCESS LOST PARITY UJN RDOX RETURN REE SPACE 4,10 ** REE - READ EST ENTRY. * * ENTRY (EO) = EST ORDINAL. * * EXIT (A) = ADDRESS OF *EQDE* WORD OF EST ENTRY. * (CM - CM+4) = *EQDE* WORD OF EST ENTRY. * * USES CM - CM+4. * * MACROS SFA. REE SUBR ENTRY/EXIT SFA EST,EO ADK EQDE CRD CM UJN REEX RETURN RLB SPACE 4,15 ** RLB - READ LINKAGE BITS. * * ENTRY (T6) = ADDRESS FOR LINKAGE. * (PB) = CONTROL BUFFER ORDINAL. * (T1) = DATA BUFFER ADDRESS. * (T2) = CONTROL BUFFER WORD NUMBER. * (CM - CM+4) = *PAD* WORD OF *CBT* ENTRY. * * EXIT SECTOR LINKAGE SET IN *CBT* ENTRY. * * USES T1, T6. * * MACROS CBTE. RLB1 LDN 10+4 ADVANCE BUFFER ADDRESS RADL T1 LDIL T1 EXTRACT LINKAGE FROM BUFFER RLB2 SHN -14 SHN 10 POSITION FOR *CBT* ENTRY STI T6 LDML 4,T1 EXTRACT LINKAGE FROM BUFFER SHN -14 SHN 4 POSITION FOR *CBT* ENTRY RAI T6 LDML 10,T1 EXTRACT LINKAGE FROM BUFFER SHN -14 * SHN 0 POSITION FOR *CBT* ENTRY RAI T6 AOD T6 ADVANCE *CBT* WORD ADDRESS LMN CM+5 NJN RLB1 IF MORE LINKAGE LDD PB SHN CBTLS CBTE * ADC 0 FWA OF *CBT* ADD T2 CWD CM UPDATE CONTROL BUFFER ENTRY RLB SUBR ENTRY/EXIT UJN RLB2 MOVE SECTOR LINKAGE RMR SPACE 4,10 ** RMR - READ CHANNEL STATUS REGISTER. * * EXIT (A) = 0 IF NO CHANNEL ERROR. * (RBUF) = REGISTER CONTENTS. * * CALLS WMC. RMR SUBR ENTRY/EXIT FNC. IOUC,MR ACN. MR ACTIVATE MAINTENANCE CHANNEL LDN 0 OAN. MR OUTPUT NULL PARAMETER CON LDCI IAN CH (FORCE CHANNEL TABLE ENTRY) ORG *-1 CON RCSR+CH TRANSMIT REGISTER NUMBER OAN. MR RJM WMC WAIT CHANNEL EMPTY DCN. MR+40 NJN RMRX IF CHANNEL HUNG FULL ACN. MR LDN RBUFL READ CHANNEL STATUS REGISTER IAM. RBUF,MR UJN RMRX RETURN RND SPACE 4,15 ** RND - RUN DIAGNOSTICS. * * NOTE - THE DRIVE MUST BE CLUSTERED TO RUN DIAGNOSTICS. * THE CODE WILL NOT RUN DIAGNOSTICS IF A FORMAT * REQUEST IS PRESENT TO ENSURE THIS ROUTINE IS ONLY * RUN WHEN THE DRIVE IS CLUSTERED. * * ENTRY (PHYD,DI) = DRIVE TO RUN DIAGNOSTICS. * (FC) = 0 IF FORMAT NOT COMPLETE. * (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT TO *ERR* IF ERROR. * * CALLS ATT, SOU, WCB. RND SUBR ENTRY/EXIT LDD FC ZJN RNDX IF FORMAT NOT COMPLETE LDML EDBF+FALT SBN EDPE ZJN RND1 IF MEDIA ERROR SBN EIVR-EDPE ZJN RND1 IF ID24 SBN EMEX-EIVR NJN RNDX IF NOT ID26 RND1 STM ERRA ENABLE LOGGING OF ERROR RESPONSE LDC C8100 DRIVE DIAGNOSTIC COMMAND RJM SOU SET OPERATION CODE AND UNIT LDC P02D5 STML CPBF+FCP PARAMETER TO SELECT DRIVE LDM PHYD,DI SHN 10 STML CPBF+FCP+1 PHYSICAL DRIVE NUMBER LDN 12 WRITE COMMAND PACKET RJM WCB LDN CMSS PROCESS ATTENTION RJM ATT ZJP RNDX IF DIAGNOSTICS COMPLETED SUCCESSFULLY LCN EDTF DIAGNOSTIC FAULT RJM ERR PROCESS ERROR ROD SPACE 4,20 ** ROD - RESTORE OFF-LINE DRIVE. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (DT) = DRIVE TYPE. * * EXIT TO CALLER IF NO RESTORE OR NOT TIME TO RESTORE. * TO *CMP* IF RESTORE CYLINDER COMMAND COMPLETE. * TO *ERR* IF ERROR. * * USES T1. * * CALLS ATT, CLP, CRP, CSC, IDM, IEM, LNE, SOU, WCB. * * MACROS MONITOR. ROD10 LDDL MS LMC 0#42 NJN ROD11 IF NOT CONDITIONAL SUCCESS LDDL PA SET INTERRUPT REENTRY ADDRESS STML ATTN,DI EXPECT A COMMAND COMPLETE RESPONSE ROD11 LCN EROD RESTORE OFF-LINE DRIVE ERROR UJN ROD13 PROCESS ERROR ROD12 LDN ECMD CONTROLLER DEAD ROD13 RJM ERR PROCESS ERROR ROD SUBR ENTRY/EXIT LDM RSDI CHECK IF RESTORE IN PROGRESS LMD DI NJN RODX IF NO RESTORE IN PROGRESS ON THIS DEVICE LDM RMUX NJN RODX IF NOT TIME TO RESTORE A CYLINDER LDML CTST,CI SHN 21-15 MJN ROD12 IF CONTROLLER DEAD * RESTORE NEXT CYLINDER. LDC CE005 RESTORE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT RJM CSC COMPUTE SECTOR COUNT LDC P0931 STML CPBF+FCP COMMAND EXTENT PARAMETER LDC P02D5 STML CPBF+FCP+5 PHYSICAL DRIVE PARAMETER LDM OUPD,DI STM PHYD,DI SHN 10 STML CPBF+FCP+6 PHYSICAL DRIVE PARAMETER LDC 0#2E3 STML CPBF+FCP+7 RESTORE OPTION PARAMETER LDM RCYL STM CPBF+FCP+3 CYLINDER TO RESTORE STM CYLN,DI FOR ERROR LOGGING LMM CYUN,DT CHECK FOR LAST CYLINDER NJN ROD1 IF NOT LAST CYLINDER LDC 0#901 STML CPBF+FCP NO OP EXTENT PARAMETER LDC 0#100 UJN ROD2 ON LINE DRIVE ROD1 LDC 0#200 RESTORE DRIVE ROD2 STML CPBF+FCP+10 LDN 30 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJP ROD10 IF ERROR STM RTSN NEXT TRACK, SECTOR TO RESTORE LDML RMUX SHN 21-17 MJN ROD3 IF MULTIPLEXING DISABLED LDN IRBR STM RMUX I/O REQUESTS BEFORE NEXT RESTORE * CALCULATE REMAINING CYLINDERS. ROD3 LDM CYUN,DT CALCULATE REMAINING CYLINDERS / 100B SBM RCYL ADN 77 SHN -6 STD T1 LMC ** (VALUE PREVIOUSLY CALCULATED) RODA EQU *-1 ZJN ROD5 IF VALUE HAS NOT CHANGED LDN 0 INITIALIZE PARTITITON SEARCH ROD4 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN ROD5 IF NO MORE PARTITIONS STD CM+1 SET EST ORDINAL LDD T1 REMAINING CYLINDERS / 100B STM RODA STD CM+2 LDN SRCS SET REMAINING CYLINDERS / 100B IN *ACGL* STD CM+3 MONITOR STBM LDD EO UJN ROD4 PROCESS NEXT PARTITION ROD5 AOM RCYL INCREMENT CYLINDER TO RESTORE SBM CYUN,DT CYLINDERS REMAINING MJN ROD6 IF MORE CYLINDERS TO RESTORE NJN ROD7 IF NO MORE CYLINDERS TO RESTORE ROD6 LJM CMP COMPLETION PROCESSING * RESTORE COMPLETE. ROD7 RJM CRP CLEAR *RESTORE IN PROGRESS* FLAGS RJM CLP CLEAR *LOST PARITY* FLAGS LDM OUPD,DI DRIVE JUST RESTORED STM PHYD,DI LDN EROD RESTORE COMMAND STM EDBF+CODE LDC PDPE PARITY DRIVE PROTECTION ENABLED STM EDBF+FALT FINAL FAULT CODE LDN 0 STM EDBF+FCS1 STM EDBF+FCS2 STM EDBF+FCS3 * LDN 0 INITIALIZE PARTITION SEARCH ROD8 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN ROD9 IF NO MORE PARTITIONS LDC ERPR *EQXXX, UXX, PARITY PROTECTION RESTORED.* RJM IEM ISSUE ERROR LOG MESSAGE LDD EO UJN ROD8 PROCESS NEXT PARTITION ROD9 LDN 4 STM MSGL+1 SET BASIC MESSAGE LENGTH AOM ERCT,DI LDD HN ERRNZ HD0100-100 CODE DEPENDS ON VALUE RJM IDM ISSUE *PARITY RESTORED* BML MESSAGE LJM CMP COMPLETION PROCESSING RCYL CON 0 CURRENT CYLINDER BEING RESTORED RMUX CON 0 1/X, 15/Y WHERE X = 0 IF MULTIPLEXING ALLOWED Y = REQUESTS TO MULTIPLEX PER RESTORE RSDI CON 0 RESTORE IN PROGRESS FLAG (*DST* INDEX) RSIN CON 0 RESTORE INTERLOCK FLAG (*DST* INDEX) RTSN CON 0 6 / RESTORE TRACK, 6 / RESTORE SECTOR SCD SPACE 4,15 ** SCD - STORE *CPD* DATA. * * ENTRY (A) = 0 TO INDICATE CHANNEL INACTIVE. * = 1 TO INDICATE CHANNEL ACTIVE. * (UC) = UNIT ACTIVITY COUNT. * * EXIT (T7) = 0. * * USES CM - CM+2, T5 - T7. * * MACROS CCTE. SCD SUBR ENTRY/EXIT STD T5 LDN ZERL CLEAR UNUSED BYTES CRD T6 LDD UC INSERT UNIT COUNT STD T6 CCTE * LDC CREQ STORE *CPD* DATA CWD T5 UJN SCDX RETURN SCP SPACE 4,10 ** SCP - SET COMMAND PARAMETER. * * ENTRY (A) = COMMAND PARAMETER. * (DI) = DEVICE STATE TABLE ADDRESS. * (DDTA) = TOTAL NUMBER OF DRIVES IN LOGICAL UNIT. * * EXIT (A) = 0 IF 1X DRIVE. * (CPBF+CUN) = LOGICAL ADDRESS. SCP SUBR ENTRY/EXIT STML CPBF+FCP LDML DDTA TOTAL DRIVES LMN 1 ZJN SCPX IF SINGLE DRIVE LDML CPBF+CUN SCN 0#38 STML CPBF+CUN ENSURE STRING BIT CLEAR LDN 1 UJN SCPX RETURN SDO SPACE 4,15 ** SDO - SET DRIVE OFF-LINE. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * (PD) = 0, IF NOT PARITY DEVICE. * (CPEA) = 0 IF DRIVE SHOULD BE SET OFF-LINE. * (PHYD,DI) = FAILING DRIVE. * * EXIT TO CALLER IF NO DRIVE TO SET OFF-LINE. * TO *CMP10* WITH *ERCT* CLEAR IF DRIVE SET OFF-LINE. * TO *ERR* IF ERROR. * * CALLS ATT, CRP, IDM, IEM, LNE, RDO, SOU, WCB. SDO SUBR ENTRY/EXIT LDD PD ZJN SDOX IF NOT PARITY DEVICE LDM CPEA NJN SDOX IF NO DRIVE TO SET OFF-LINE STM ERRA ENABLE LOGGING OF ERROR RJM CRP CLEAR *RESTORE IN PROGRESS*, IF SET LDC C0209 LOAD ATTRIBUTE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDC P02D5 STML CPBF+FCP PARAMETER WITH FAILING DRIVE NUMBER LDM PHYD,DI STM OUPD,DI OFFLINE DRIVE UNIT NUMBER SHN 10 STML CPBF+FCP+1 FAILING DRIVE NUMBER LDC 0#1D9 STML CPBF+FCP+2 PARAMETER TO SET OFF-LINE DRIVE LDN 14 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND BLOCK LDN CMSS RJM ATT WAIT FOR ATTENTION ZJN SDO1 IF SUCCESSFUL LCN ERDA REPORT DRIVE ATTRIBUTES ERROR RJM ERR PROCESS ERROR * *HPA* DOES NOT DISPLAY THE DATA WITH SYMPTOM 0111 WHEN THE * ERROR IS RECOVERABLE, SO TWO MESSAGES ARE ISSUED TO THE BML. SDO1 AOM ERCT,DI LCN 0 STM EDBF+FCS2 INDICATE NO RESPONSE FOR HPA LDC PDPD PARITY DRIVE PROTECTION DISABLED STM EDBF+FALT FINAL FAULT CODE LDD HN ERRNZ HD0100-100 CODE DEPENDS ON VALUE RJM IDM ISSUE INITIAL BML MESSAGE LDN 3 STM MSGL+1 MESSAGE LENGTH LDC HD0111 RJM IDM ISSUE FINAL BML MESSAGE STM ERCT,DI CLEAR ERROR COUNT * LDN 0 INITIALIZE PARTITION SEARCH SDO2 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN SDO3 IF NO MORE PARTITIONS LDC ERPD *EQXXX, UXX, PARITY PROTECTION DISABLED.* RJM IEM ISSUE ERROR LOG MESSAGE LDD EO UJN SDO2 PROCESS NEXT PARTITION SDO3 RJM RDO REPORT DRIVE OFF-LINE LJM CMP10 ABANDON REQUEST (RETRY LATER) SDT SPACE 4,10 ** SDT - SET DATA TRANSFER MODE. * * ENTRY (TM) = 0 TO STREAM DATA. * * EXIT TO *ERR* IF ERROR. * * CALLS ATT, SOC, WCB. SDT SUBR ENTRY/EXIT LDC C0209 LOAD ATTRIBUTE OPERATION CODE RJM SOC SET OPERATION CODE AND CONTROLLER LDC 0#46E STML CPBF+FCP PARAMETER 6E LDDL TM ADC 0#C080 STML CPBF+FCP+1 MODE FOR DATA LDN 0 STML CPBF+FCP+2 LDN 14 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION ZJP SDTX IF SUCCESSFUL LCN ELCA LOAD CONTROLLER ATTRIBUTES FAILURE RJM ERR PROCESS ERROR SEC SPACE 4,15 ** SEC - SET ERROR CODE. * * ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS. * (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * USES RF, T5, UC, WB+3, WB+4. * * CALLS CAC, CEA, CEC, CFM, CPF, CRP, DCE, DRT, IMR, IOM, LDP. * THE *SETS* MONITOR REQUEST IS USED TO MOVE THE I/O REQUEST * TO AN ALTERNATE CHANNEL. THE I/O BUFFER IS ONLY DELINKED * IF THE REQUEST IS CHANNEL SPECIFIC. SEC6 LDM RSDI CHECK IF RESTORE IN PROGRESS LMD DI NJN SEC7 IF NO RESTORE IN PROGRESS ON THIS DEVICE LDC 100000 STML RMUX DISABLE REQUEST MULTIPLEXING UJN SECX RETURN SEC7 LDN 1 BUFFER COUNT TO BE DELINKED STD WB+3 LDN SETS INSERT CODE IN *CBT*, RELEASE INTERLOCK RJM IMR * LDN 0 SET INTERLOCK RELEASED (FOR *CMP*) STM RQLN,DI SOD UC DECREMENT UNIT ACTIVITY COUNT SEC SUBR ENTRY/EXIT LDN 0 STD RF CLEAR RESET IN PROGRESS FLAG RJM IOM CLEAR OPERATOR MESSAGE RJM LDP LOAD DEVICE PARAMETERS LDML EDBF+FALT SHN -2 CREATE INDEX FROM FAULT CODE STD T5 LDM TMSE,T5 STD WB+4 SET MASS STORAGE ERROR CODE RJM DRT DETERMINE REQUEST TYPE NJP SEC6 IF I/O REQUEST LDML CTST,CI SHN 21-15 MJN SEC1 IF CONTROLLER DEAD SHN -21+15+22 LPC 137777 CLEAR RESET FLAG (BIT 14) STML CTST,CI SEC1 RJM CRP CLEAR *RESTORE IN PROGRESS* RJM LDP LOAD DEVICE PARAMETERS LDD CM+3 SHN 21-LMLF+14 PJN SEC2 IF *LIST MICROCODE REVISION* NOT SET LPN 77 LMD IR+4 NJN SEC2 IF REQUEST NOT FOR THIS DRIVER LDC 6S6+LMLF BITS - 1 TO CLEAR / STARTING BIT RJM CPF CLEAR SPECIAL REQUEST BIT IN *PUT* SEC2 RJM LDP LOAD DEVICE PARAMETERS LDD CM+3 SHN 21-ECAF+14 PJN SEC3 IF *ENABLE CONTROLLER ACTIVITY* NOT SET RJM CEC CHECK IF REQUEST IS FOR THIS CHANNEL NJN SEC3 IF REQUEST IS NOT FOR THIS CHANNEL RJM CEA CLEAR REQUEST SEC3 RJM CAC CHECK FOR ALTERNATE CHANNEL NJN SEC4 IF NO ALTERNATE CHANNEL RJM DCE DOWN CHANNEL ON EQUIPMENT UJN SEC5 COMPLETE PROCESSING SEC4 LDC 3S6+ECAF+1 BITS - 1 TO CLEAR / STARTING BIT RJM CPF CLEAR SPECIAL REQUEST BITS IN *PUT* RJM CFM ENSURE *FORMAT PENDING* CLEARED IN MST SEC5 LJM SECX RETURN SEO SPACE 4,15 ** SEO - SET EST ORDINAL. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (CB) = CBT ORDINAL. * * EXIT (A) = (EO) = EST ORDINAL. * * USES EO, CW - CW+4. * * CALLS DRT. * * MACROS CBTE, PUTE. SEO1 LDD CW+1 GET EST ORDINAL FROM *PUT* SEO2 STD EO SET EST ORDINAL SEO SUBR ENTRY/EXIT LDI DI ERRNZ PUTO CODE DEPENDS ON VALUE SHN PUTLS PUTE * ADC UNCT FETCH UNIT CONTROL WORD CRD CW RJM DRT DETERMINE REQUEST TYPE ZJN SEO1 IF NOT I/O REQUEST LDD CB *CBT* ORDINAL SHN CBTLS CBTE * ADC FSTC CRD CW GET EST ORDINAL FROM *CBT* LDD CW UJN SEO2 SET EST ORDINAL AND RETURN SEP SPACE 4,30 ** SEP - SET ERROR PROCESSING INTERLOCK. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * EXIT (A) .EQ. 0, IF INTERLOCK SET FOR THIS DEVICE. * (A) .NE. 0, IF ALREADY SET FOR A DIFFERENT DEVICE. * (ERFL) = DEVICE STATE TABLE OF DEVICE WITH ERROR. * TO *CMP10*, IF RESTORE IN PROGRESS ON OTHER MF. * * USES T1, CM - CM+4. * * CALLS CBI, CDS, CMR, DAS, LNE, SEO, UBP. * * MACROS DELAY, SMSTF, MONITOR. SEP CON 0 ENTRY LDML SEP SAVE RETURN ADDRESS STML SEPR,DI SEP1 LDM ERFL ZJN SEP3 IF ERROR PROCESSING FLAG NOT SET SEP2 LDML SEPR,DI GET RETURN ADDRESS STDL T1 LDM ERFL RETURN (A) = 0 IF ERROR IS ON THIS DEVICE LMD DI LJM 0,T1 RETURN * SET MMF ERROR PROCESSING INTERLOCKS, IF REQUIRED. SEP3 LDML DVTP,DI SHN 21-11 PJN SEP6 IF NOT SHARED DEVICE LDN 0 INITIALIZE PARTITION SEARCH SEP4 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN SEP6 IF NO MORE PARTITIONS TO PROCESS RJM CDS CHECK DEVICE STATUS MJP SEP10 IF DEVICE NOT RECOVERED * DEVICE RECOVERED. SET ERROR INTERLOCK IN *BDT*. LDD EO SET EST ORDINAL STD CM+4 LDN SEPS SET ERROR PROCESSING INTERLOCK IN *BDT* STD CM+1 MONITOR MTEM LDD CM+4 NJP SEP13 IF NOT SUCCESSFUL LDN 1 SET FLAG THAT SAYS THIS MF HAS INTERLOCK STD CM+2 LDN 26 BIT TO CHANGE RJM UBP UPDATE *BDLL* PARAMETER SEP5 LDD EO UJN SEP4 PROCESS NEXT PARTITION SEP6 LDD DI SET ERROR PROCESSING FLAG STM ERFL * SET ERROR PROCESSING FLAG(S) IN THE MST(S). SEP7 LDN 0 INITIALIZE PARTITION SEARCH SEP8 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJP SEP2 IF NO MORE PARTITIONS RJM CDS CHECK DEVICE STATUS MJN SEP9 IF DEVICE NOT RECOVERED SMSTF GDER SET *ERROR RECOVERY IN PROGRESS* FLAG SEP9 LDD EO UJN SEP8 CHECK FOR NEXT PARTITION * DEVICE NOT RECOVERED. SET RECOVERY ERROR INTERLOCK. SEP10 LDN SRIS SET RECOVERY ERROR PROCESSING INTERLOCK SEP11 STD CM+1 MONITOR MTEM LDD CM+4 SBN 2 ZJN SEP13 IF REJECT (ANOTHER DRIVER HOLDS INTERLOCK) LDD DI STM ERFL SET ERROR PROCESSING FLAG STM ERMF SET RECOVERY INTERLOCK FLAG LDD CM+4 NJN SEP12 IF CONFLICTING INTERLOCKS SET RJM SEO RESTORE ORIGINAL EST ORDINAL UJN SEP7 RETURN SUCCESSFUL STATUS * THE RECOVERY ERROR PROCESSING INTERLOCK WAS SET SUCCESSFULLY, * BUT ONE OR MORE CONFLICTING *BDT* INTERLOCKS ARE STILL SET. * *SEP* MUST WAIT, PERIODICALLY ISSUING *MTEM*/*GRIS* REQUESTS, * UNTIL ALL CONFLICTING INTERLOCKS HAVE BEEN RELEASED. SEP12 RJM DAS PROCESS ACTIVITY ON OTHER DEVICES DELAY RJM CMR CHECK FOR MMF *RESTORE* FLAGS NJN SEP14 IF RESTORE IN PROGRESS ON OTHER MF LDN GRIS GET RECOVERY INTERLOCK STATUS UJN SEP11 CHECK FOR CONFLICTING INTERLOCKS * INTERLOCK ATTEMPT UNSUCCESSFUL. THIS MEANS THAT ANOTHER MF * HOLDS THE INTERLOCK (OR SOME OF THE INTERLOCKS) REQUIRED. * TO AVOID A DEADLOCK, THIS MF MUST RELEASE ANY INTERLOCK * THAT IT HOLDS, AND THEN RETRY THE INTERLOCK ATTEMPT LATER. SEP13 RJM CBI CLEAR *BDT* ERROR PROCESSING INTERLOCKS RJM DAS PROCESS ACTIVITY ON OTHER DEVICES DELAY RJM CMR CHECK FOR MMF *RESTORE* FLAGS NJN SEP14 IF RESTORE IN PROGRESS ON OTHER MF LJM SEP1 RETRY INTERLOCK SEP14 LJM CMP10 ABANDON REQUEST (RETRY LATER) ERFL CON 0 ERROR PROCESSING FLAG ERMF CON 0 RECOVERY INTERLOCK FLAG SFP SPACE 4,10 ** SFP - SET COMMON FORMAT PARAMETERS. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (FC) = 0 IF DRIVE DECLUSTERED. * (CN) = CONTROLLER NUMBER. * (DN) = DRIVE NUMBER. * * CALLS SOU. SFP SUBR ENTRY/EXIT LDC C280E+1S17 FORMAT OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDC P02D5 PARAMETER TO SELECT DRIVE STML CPBF+FCP LDM PHYD,DI SHN 10 STML CPBF+FCP+1 DRIVE TO FORMAT LDC 0#1E5 STML CPBF+FCP+2 DO NOT READ HEADERS LDD FC ZJN SFPX IF DRIVE DECLUSTERED LDD CN SHN 10 ADD DN STML CPBF+CUN LOGICAL ADDRESS UJP SFPX RETURN SFR SPACE 4,15 ** SFR - SEARCH FOR CONSECUTIVE REQUEST. * * ENTRY (A) = CURRENT *CBT* ORDINAL. * (DI) = DEVICE STATE TABLE ADDRESS. * (DT) = DRIVE TYPE. * * EXIT (NB) = 0 IF NO CONSECUTIVE REQUEST FOUND. * = *CBT* ORDINAL OF NEXT REQUEST. * (NR - NR+4) = PHYSICAL ADDRESS OF NEXT REQUEST. * * USES NB, CM - CM+4, NR - NR+4, T1 - T6. * * MACROS CBTE. SFR9 LDN 0 STD NB SFR SUBR ENTRY/EXIT SHN CBTLS CBTE * ADC PAD1 FETCH SEEK PARAMETERS FROM *CBT* CRD CM ADN IOLK-PAD1 (T1) = I/O LINK-UP FLAGS CRD T1 LDM ERCT,DI NJN SFR9 IF IN ERROR RECOVERY LDML PSBF,DT SET NUMBER OF SECTORS PER BUFFER SHN -14 STD T0 LDM CYLN,DI SFR1 SBM MC,DT MJN SFR1.1 IF IN THE CORRECT PARTITION SBN 1 PJN SFR1 IF NOT AT MAINTENANCE TRACK SFR1.1 ADN 7 PJN SFR1.2 IF WITHIN LAST 8 CYLINDERS LDML PSCY,DT SET SECTOR COUNT FOR 8 CYLINDERS SHN 3 UJN SFR2 CONTINUE SFR1.2 LDM STS,DT SET SECTOR COUNT FOR .LT. 8 CYLINDERS LPC 777 SFR2 SBM CSCT,DI SBD T0 LESS NUMBER OF SECTORS PER BUFFER ZJN SFR3 IF TIME TO CURTAIL STREAMING LDD T1+2 ZJN SFR3 IF NO REQUEST AVAILABLE STD NB SHN CBTLS CBTE * ADC PAD1 PHYSICAL ADDRESS OF NEXT REQUEST CRD NR ADN IOLK-PAD1 I/O LINK-UP WORD OF NEXT REQUEST CRD T2 LDD T2 COMPARE LINK-UP FLAGS LMD T1 LPC DRFM+ILFM ZJN SFR5 IF SAME DIRECTION AND INTERLOCKED SFR3 UJP SFR9 RETURN SFR5 LDML PSBF,DT CALCULATE NEXT SECTOR SHN -14 RAD CM+2 LDD NR+1 CHECK SEEK PARAMETERS SBD CM+1 ZJN SFR6 IF SAME CYLINDER SBN 1 NJN SFR3 IF NOT NEXT CYLINDER LDD CM+2 CALCULATED NEXT SECTOR SBM LSOC,DT PJN SFR7 IF END OF CYLINDER REACHED UJN SFR3 RETURN WITH NO CONSECUTIVE REQUEST SFR6 LDD CM+2 CHECK NEXT SECTOR LMD NR+2 ZJN SFR8 IF NEXT SECTOR ON SAME TRACK LDD CM+2 LPN 77 SBM PSPT,DT MJN SFR3 IF NOT AT END OF TRACK LMD CM+2 LPN 77 LMD CM+2 ADD HN SET NEXT TRACK SFR7 LMD NR+2 NJN SFR3 IF NOT NEXT SECTOR ON CONSECUTIVE TRACKS SFR8 LJM SFRX RETURN SLB SPACE 4,15 ** SLB - SET LINKAGE BITS. * * ENTRY (A) = *CBT* ORDINAL. * (RW) = READ / WRITE STATUS. * * EXIT LINKAGE BITS SET IN *CBT* ENTRY / UEM BUFFER. * * USES PB, T1, T2, T5, T6, UA, UA+1, CM - CM+4. * * CALLS RLB, SUA, WLB. * * MACROS CBTE. SLB SUBR ENTRY/EXIT STD PB RJM SUA SET UEM ADDRESS LDN PAD1 STD T2 LDN 5 UEM WORD COUNT STD T5 LDML SLBB,RW SET PROCESSOR ADDRESS STML SLBA SLB1 LRD UA LOAD *R* REGISTER LDD PB SHN CBTLS READ CONTROL BUFFER WORD CBTE * ADC 0 FWA OF *CBT* ADD T2 CRD CM LDC SBUF-4 SET BUFFER ADDRESS STDL T1 LDC 1S17 READ START OF BUFFER SEGMENT CRML SBUF,T5 LDN CM+3 SET *CBT* ENTRY ADDRESS STD T6 RJM 0 MOVE LINKAGE BITS SLBA EQU *-1 LDN 10 ADVANCE *R* REGISTER IMAGE RAD UA+1 SHN -14 RAD UA AOD T2 ADVANCE CONTROL BUFFER WORD LMN PAD4+1 NJN SLB1 IF NOT COMPLETE UJP SLBX RETURN SLBB CONL RLB CONL WLB SMD SPACE 4,15 ** SMD - SKIP MEDIA DEFECT DURING RESTORE. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (T5) = PHYSICAL TRACK. * (T6) = PHYSICAL SECTOR. * (DT) = DRIVE TYPE. * * EXIT (A) = 0 IF NOT RESTORE. * * USES T5, T6. SMD4 LDN 0 SMD SUBR ENTRY/EXIT LDML RPBF+OPC LMC CE005 NJN SMD4 IF NOT RESTORE * SET RCYL, RTSN TO THE PHYSICAL SECTOR AFTER THE FAILING ONE. AOD T6 PHYSICAL SECTOR SHN 14 ADD T5 PHYSICAL TRACK SHN 6 STM RTSN AOD T5 LDM LSOC,DT SHN -6 SBD T5 MJN SMD1 IF LAST TRACK LDD T6 SBM PSPT,DT MJN SMD2 IF NEXT RESTORE ADDRESS ALREADY SET SHN 14 POTENTIAL RESIDUAL SECTOR NUMBER ADD T5 SHN 6 STM RTSN UJN SMD2 SET REQUESTS TO MULTIPLEX SMD1 LDM RTSN SBM LSOC,DT MJN SMD2 IF NEXT RESTORE ADDRESS ALREADY SET STM RTSN AOM RCYL SMD2 LDML RMUX SHN 21-17 MJN SMD3 IF MULTIPLEXING I/O REQUESTS DISABLED LDN IRBR STML RMUX I/O REQUESTS BEFORE NEXT RESTORE SMD3 UJP SMDX RETURN SOC SPACE 4,10 ** SOC - SET OPERATION CODE AND CONTROLLER. * * ENTRY (A) = OPERATION CODE. * (CN) = CONTROLLER NUMBER. SOC SUBR ENTRY/EXIT STML CPBF+OPC LDD CN SHN 10 LMC 0#FF STM CPBF+CUN UJN SOCX RETURN SOU SPACE 4,15 ** SOU - SET OPERATION CODE AND UNIT. * * ENTRY (A) = 1/X, 17/YY. * WHERE X = 0 IF (DN) IS THE DRIVE NUMBER. * = 1 IF (PHYD,DI) IS THE DRIVE NUMBER. * YY = OPERATION CODE. * (CN) = CONTROLLER NUMBER. * (DN) = DRIVE NUMBER. * (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT (A) = UNIT NUMBER FOR COMMAND PACKET. SOU SUBR ENTRY/EXIT STML CPBF+OPC MJN SOU1 IF USING PHYSICAL DRIVE LDD CN MERGE CONTROLLER + DRIVE NUMBERS SHN 10 LMD DN UJN SOU2 SET FACILITY ADDRESS SOU1 LDD CN MERGE CONTROLLER + DRIVE NUMBERS SHN 10 ADM PHYD,DI SOU2 STM CPBF+CUN UJN SOUX RETURN SRF SPACE 4,10 ** SRF - SET DRIVER RELOAD FLAG. * * EXIT (A) = 0. * * USES CM+1 - CM+4. * * CALLS DCR. * * MACROS MONITOR, CHTE. SRF SUBR ENTRY/EXIT RJM DCR DROP CHANNEL RESERVATION * LDN 0 STD CM+2 CLEAR UNUSED BYTE CHTE * LDC CTALL*2 ADDRESS OF CHANNEL CONTROLWARE TABLE ENTRY STD CM+4 SHN -14 STD CM+3 LDN 1 SET NUMBER OF REQUESTS STD CM+1 LDD MA STORE REQUEST IN MESSAGE BUFFER CWM SRFA,CM+1 MONITOR UTEM SET RELOAD FLAG * LDN 0 UJN SRFX RETURN SRFA VFD 1/0,5/0,6/1,6/,42/1 SRI SPACE 4,30 ** SRI - SET SLAVE RESET INTERLOCK. * * IN A MMF ENVIRONMENT, DAS MUST BE CONFIGURED WITH MORE * THAN ONE DRIVER ACCESSING EACH CONTROLLER. TO PREVENT AN * ENDLESS SEQUENCE OF SLAVE RESETS UNDER SOME ERROR CONDITIONS, * AN EXTENDED MEMORY FLAG REGISTER INTERLOCK IS USED TO ENSURE * THAT ONLY ONE DRIVER TRIES TO PERFORM A SLAVE RESET AT ANY * ONE TIME. IF *1DA* ATTEMPTS TO SET THIS INTERLOCK AND * DETERMINES THAT IT IS HELD BY ANOTHER DRIVER, IT WILL WAIT * UNTIL THE INTERLOCK IS CLEAR, AND THEN CLEAR THE BUFFER COUNT * AND COMPLETE THE CURRENT REQUEST. THE REQUEST WILL BE * RETRIED ON A SUBSEQUENT PASS THROUGH THE MAIN LOOP. * * ENTRY (RW) = 0, IF SLAVE RESET. * (CRIB) .NE. 0, IF SLAVE RESET INTERLOCK ALREADY SET. * * EXIT INTERLOCK SET, IF FIRST *IFR* CALL SUCCESSFUL. * (CRIB) .NE. 0, IF SLAVE RESET INTERLOCK SET. * TO *CMP10*, IF FIRST *IFR* CALL UNSUCCESSFUL. * * CALLS IFR. * * MACROS DELAY. SRI SUBR ENTRY/EXIT SRIA LDD RW * UJN SRIX (NO SHARED BUFFERED DEVICES CONFIGURED) NJN SRIX IF NOT SLAVE RESET STM SRIB CLEAR *UNSUCCESSFUL IFR CALL* FLAG LDM CRIB NJN SRIX IF SLAVE RESET INTERLOCK ALREADY SET SRI1 LDN /MMF/DSRI SET *DAS SLAVE RESET INTERLOCK* FLAG BIT RJM IFR NJN SRI3 IF NOT SUCCESSFUL LDC 0 * LDC NONZERO (AT LEAST ONE UNSUCCESSFUL *IFR* CALL) SRIB EQU *-1 NJN SRI2 IF NOT SUCCESSFUL ON FIRST TRY LDN 1 SET *SLAVE RESET INTERLOCK SET* FLAG STM CRIB UJN SRIX RETURN SRI2 LCN /MMF/DSRI CLEAR *DAS SLAVE RESET INTERLOCK* FLAG BIT RJM IFR LJM CMP10 ABANDON REQUEST (RETRY LATER) SRI3 STM SRIB SET *UNSUCCESSFUL IFR CALL* FLAG DELAY 20B DELAY TWO MILLISECONDS UJN SRI1 RETRY INTERLOCK ATTEMPT SRP SPACE 4,10 ** SRP - SEARCH RESPONSE PACKET. * * ENTRY (A) = PARAMETER ID TO SEARCH FOR. * * EXIT (A) .EQ. 0 IF ID FOUND. * (A) .LT. 0 IF ID NOT FOUND. * (RPBF+5,T3) .EQ. THE PARAMETER. * * USES T1 - T3. SRP1 LDML RPBF+5,T3 EXTRACT PARAMETER BLOCK LENGTH SHN -10-1 ADN 1 CONVERT OCTET COUNT TO BYTE COUNT STD T0 RAD T3 ADVANCE BUFFER INDEX LDD T2 SBD T0 SRP2 MJN SRPX IF END OF RESPONSE PACKET STD T2 LDM RPBF+5,T3 CHECK NEXT PARAMETER BLOCK LMD T1 LPC 377 NJN SRP1 IF NOT REQUESTED ID SRP SUBR ENTRY/EXIT STD T1 LDN 0 INITIALIZE INDEX STD T3 LDM RPBF+PLN PACKET LENGTH ADN 1 SHN -1 CONVERT TO PP WORD COUNT SBN 5 UJN SRP2 CHECK MINIMUM PACKET LENGTH SSS SPACE 4,15 ** SSS - SET SUSPECT STATE ON DEVICE. * * THIS ROUTINE ALSO SAVES THE FAILING DRIVE IN WORD *PILL* * SO THAT THE ALTERNATE CHANNEL DRIVER CAN INCLUDE THE CORRECT * UNIT NUMBER IN THE BML MESSAGE IF THE ERROR IS RECOVERED. * * ENTRY (EO) = EST ORDINAL. * * USES T6, T7, CM+1 - CM+4. * * CALLS REE. * * MACROS MONITOR, PUTE. SSS SUBR ENTRY/EXIT RJM REE READ EST ENTRY LDD CM CHECK DEVICE STATUS LPN 2 NJN SSSX IF DEVICE *OFF* OR *DOWN* LDD EO STD CM+1 SET EST ORDINAL LDD IR+4 STD CM+3 INSERT CHANNEL NUMBER LDN SSES STD CM+2 SET SUSPECT STATE ON DEVICE MONITOR SEQM * SAVE FAILING DRIVE IN WORD *PILL* FOR THE ALTERNATE CHANNEL. LDC PILL*100+6 STD T6 6/WORD, 6/BITS TO CHANGE LDC 52*100 STD T7 LOW ORDER BIT TO CHANGE LDM PHYD,DI STD CM+2 NEW VALUE LDD MA CWD T6 STORE MESSAGE BUFFER PARAMETERS LDN 1 STD CM+1 PARAMETER WORD COUNT LDI DI ERRNZ PUTO CODE DEPENDS ON VALUE SHN PUTLS PUTE * ADC 0 SET BASE *PUT* ENTRY ADDRESS STD CM+4 SHN -14 STD CM+3 MONITOR UTEM SAVE FAILING DRIVE IN *PUT* UJP SSSX RETURN STF SPACE 4,15 ** STF - REQUEST TRACK FLAW. * * ENTRY (CB) = CURRENT *CBT* ORDINAL. * (EO) = EST ORDINAL. * (T4) = CYLINDER NUMBER. * (T5) = PHYSICAL TRACK. * (T7) = LOGICAL SECTOR WITHIN PHYSICAL TRACK. * * USES T4, CM - CM+4. * * CALLS CDA, C2D, IDM, REE. * * MACROS MONITOR. STF SUBR ENTRY/EXIT RJM REE READ EST ENTRY LDD CM+4 GET PARTITION CYLINDER OFFSET SHN 3 ADK SCYL CRD CM LDD T4 CONVERT ABSOLUTE TO RELATIVE CYLINDER SBD CM+2 STD T4 RJM CDA CONVERT DISK ADDRESS LDD T6 STD CM+2 TRACK NUMBER FOR MONITOR REQUEST RJM C2D SET TRACK NUMBER IN MESSAGE STM STFB+5 LDD T6 SHN -6 RJM C2D SET TRACK NUMBER IN MESSAGE STM STFB+4 LDD EO SHN -3 CONVERT EST ORDINAL RJM C2D STM STFB+1 SET ORDINAL IN MESSAGE LDD EO STD CM+1 LPN 7 SHN 6 CONVERT LOW ORDER DIGIT ADC 2R0, STM STFB+2 LDK SFTS INSERT SUBFUNCTION STD CM+3 MONITOR SMDM SET TRACK FLAW REQUEST IN MST LDD CM+1 NJN STF1 IF THIS FLAW ALREADY REQUESTED LDC STFA STML MAD1 ISSUE ERROR LOG MESSAGE RJM IDM STF1 LJM STFX RETURN STFA VFD 24/0 RESERVED VFD 12/1 ERRLOG ALERT FLAG VFD 12/STFAL MESSAGE LENGTH VFD 12/ELDY ERRLOG DAYFILE STFB DATA C*EQXXX,TKNNNN, MEDIA DEFECT ENCOUNTERED.* .1 SET *-STFA+4 STFAL EQU .1/5 STO SPACE 4,10 ** STO - SET TIMEOUT. * * ENTRY (A) = TIMEOUT VALUE (IN SECONDS). * * USES CM - CM+4, T5 - T7. * * MACROS FTTE. STO SUBR ENTRY/EXIT STD T6 LDC RTCL FETCH CURRENT TIME CRD CM LDD T6 RAD CM+1 SET TIME LIMIT SHN -14 RAD CM LDM STO SET CALLERS ADDRESS STD T7 LDN 0 STD T5 LDI DI ERRNZ PUTO CODE DEPENDS ON VALUE SHK FTTLS FTTE * ADC 0 STORE *FTT* ENTRY CWD T5 UJN STOX RETURN SUA SPACE 4,10 ** SUA - SET UEM ADDRESS. * * ENTRY (A) = *CBT* ORDINAL. * * EXIT (UA - UA+1) = UEM ADDRESS / 100. * * USES UA, UA+1, CM - CM+4. * * MACROS CBTE. SUA SUBR ENTRY/EXIT SHN CBTLS CBTE * ADC IOLK READ *CBT* ENTRY CRD CM LDD CM+4 EXTRACT RELATIVE UEM ADDRESS ADC 0 SUAA EQU *-1 SHN -6 STD UA+1 SET ABSOLUTE ADDRESS / 100 LDD CM+3 ADC 0 SUAB EQU *-1 SHN 6 RAD UA+1 SHN -14 STD UA UJN SUAX RETURN SUD SPACE 4,10 ** SUD - SPIN UP DRIVE. * * ENTRY (OUPD,DI) = PHYSICAL DRIVE TO SPIN UP. * (DI) = DEVICE STATE TABLE ADDRESS. * (EO) = EST ORDINAL. * * EXIT (A) = 0 IF COMMAND SUCCESSFUL. * (PHYD,DI) = PHYSICAL DRIVE. * * CALLS ATT, SOU, WCB. SUD SUBR ENTRY/EXIT LDM OUPD,DI SET PHYSICAL DRIVE TO SPIN UP STM PHYD,DI SHN 10 STML CPBF+FCP+1 DRIVE TO SPIN UP LDC P02D5 STML CPBF+FCP PHYSICAL DRIVE PARAMETER LDC C0301 REPORT CONDITION OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDN 12 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND BLOCK LDN CMSS RJM ATT PROCESS ATTENTION NJP SUD2 IF ERROR LDML RPBF+6 SHN 21-7 MJN SUD2 IF DRIVE NOT OPERATIONAL LDC C0700 SET OPERATING MODE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDC P02D5 STML CPBF+FCP PHYSICAL DRIVE PARAMETER LDM OUPD,DI PHYSICAL DRIVE SHN 10 STML CPBF+FCP+1 DRIVE TO SPIN UP LDC P0351 STML CPBF+FCP+2 LDC 0#8000 STML CPBF+FCP+3 PARAMETER TO SELECT SPIN UP LDN 16 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION SUD2 UJP SUDX RETURN SUI SPACE 4,15 ** SUI - SET UNIT INTERLOCK. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT (A) = 0 IF *PUT* ENTRY INTERLOCKED. * (UC) = UNIT ACTIVITY COUNT INCREMENTED. * (CM+1) = *BIOM* STATUS. * * USES CM+1, CM+2, UC. * * MACROS MONITOR. SUI SUBR ENTRY/EXIT LDI DI SET *PUT* ORDINAL ERRNZ PUTO CODE DEPENDS ON VALUE STD CM+2 LDN SUIS SET SUBFUNCTION STD CM+1 MONITOR BIOM INTERLOCK DEVICE LDD CM+1 NJN SUIX IF INTERLOCK NOT ACQUIRED AOD UC ADVANCE UNIT ASSIGNED COUNT LDC 4000 STM RQLN,DI SET UNIT INTERLOCKED LDN 0 UJN SUIX RETURN TMSE SPACE 4,10 ** TMSE - TABLE OF MASS STORAGE ERROR CODES. * * INDEXED BY FAULT CODE / 4. TMSE BSS 0 LOC 0 CON CHPE CHANNEL PARITY CON CHFE CHANNEL FAILURE CON FTOE FUNCTION TIMEOUT CON PARE DATA PARITY (MEDIA) CON NRDE DEVICE NOT READY CON IDTE DATA TRANSFER CON DSTE DEVICE STATUS CON DSTE DEVICE STATUS CON DSTE DEVICE STATUS CON DSTE DEVICE STATUS CON DSTE DEVICE STATUS CON DDFE DIAGNOSTIC FAILURE CON RAME CONTROLLER MEMORY CON RAME CONTROLLER MEMORY CON DRVE DRIVE RESERVE CON RAME CONTROLLER MEMORY CON DSTE DEVICE STATUS LOC *O TMSK SPACE 4,10 ** TMSK - TABLE OF CONTROLLER MASKS. * * INDEXED BY CONTROLLER NUMBER. SPACE 2 TMSK BSS 0 LOC 0 CON 001 CON 002 CON 004 CON 010 CON 020 CON 040 CON 100 CON 200 LOC *O UBP SPACE 4,20 ** UBP - UPDATE *BDLL* PARAMETER. * * THIS ROUTINE CHANGES A BIT IN WORD *BDLL* OF THE MST. * * ENTRY (A) = BIT TO CHANGE. * (EO) = EST ORDINAL. * (CM+2) = NEW VALUE. * * USES T6, T7, CM - CM+4. * * CALLS REE. * * MACROS MONITOR. UBP SUBR ENTRY/EXIT SHN 6 STD T7 BIT NUMBER * 100B LDN 1 STD T6 NUMBER OF BITS TO CHANGE LDD MA CWD T6 STORE MESSAGE BUFFER PARAMETERS RJM REE READ EST ENTRY LDD CM+4 SHN 3 ADN BDLL SET ADDRESS OF *BDLL* STD CM+4 SHN -14 STD CM+3 LDN 1 STD CM+1 PARAMETER WORD COUNT MONITOR UTEM UJN UBPX RETURN UEC SPACE 4,15 ** UEC - UPDATE MST ERROR COUNT. * * ENTRY (EO) = EST ORDINAL. * (BMLM+1) = BML MESSAGE SYMPTOM CODE. * (MISC - BIT 0) = 1 IF UNRECOVERED ERROR. * * USES CM+1 - CM+3. * * MACROS MONITOR. UEC SUBR ENTRY/EXIT LDM BMLM+1 LMC D"DN"*400+HD0111 NJN UECX IF NOT COMPLETION MESSAGE LDD EO STD CM+1 SET EST ORDINAL LDM MISC LPN 1 SET BYTE NUMBER ADN 3 STD CM+2 LDN ICTS INCREMENT ERROR COUNT STD CM+3 MONITOR SMDM UJN UECX RETURN UHD SPACE 4,15 ** UHD - UNPACK HEX DATA. * * STATUS READ FROM THE IPI CHANNEL AND RESPONSES RECEIVED * FROM THE CONTROLLER ARE IN 16-BIT WORDS. THIS ROUTINE * MOVES CONSECUTIVE 16-BIT WORDS TO CONSECUTIVE 12-BIT * WORDS. THUS, 3 16-BIT WORDS WOULD BE UNPACKED AND STORED * IN 4 12-BIT WORDS IN PP MEMORY. * * ENTRY (A) = DESTINATION DATA ADDRESS. * (T2) = SOURCE DATA ADDRESS. * (T4) = 16-BIT WORD COUNT OF HEX DATA. * * EXIT (A) = CM WORD COUNT OF 12 BIT DATA. * * USES T2 - T5. * * CALLS DV5. UHD3 AODL T3 SET END OF 12 BIT DATA STML UHDA LDN ZERL ENSURE ZERO FILL TO CM WORD BOUNDARY CRM *,ON UHDA EQU *-1 LDDL T3 SET BYTE COUNT OF 12 BIT DATA SBDL T5 RJM DV5 CONVERT TO CM WORD COUNT UHD SUBR ENTRY/EXIT STDL T3 STDL T5 PRESERVE DESTINATION BUFFER ADDRESS UHD1 LDIL T2 SHN 16 STI T3 UNPACK N+3RD BYTE SHN -6 SCN 77 STM 1,T3 AODL T3 SOD T4 UHD2 ZJN UHD3 IF END OF HEX DATA AODL T2 LDIL T2 SHN -10 RAI T3 UNPACK N+4TH BYTE AODL T3 LDIL T2 SHN 4 SCN 17 STI T3 SOD T4 ZJN UHD2 IF END OF HEX DATA AODL T2 LDIL T2 STM 1,T3 SHN -14 RAI T3 UNPACK N+5TH BYTE AODL T3 SOD T4 ZJN UHD2 IF END OF HEX DATA AODL T2 AODL T3 UJP UHD1 CONTINUE UNPACK UPD SPACE 4,25 ** UPD - UDPATE PHYSICAL DRIVE NUMBER. * * THIS ROUTINE UPDATES (PHYD,DI) TO THE NEXT PHYSICAL DRIVE * OF THE LOGICAL UNIT. THE PHYSICAL DRIVE PROGRESSION IS AS * FOLLOWS, WHERE X IS THE CABINET RANK. * * TYPE PROGRESSION * * 1 NX. (N = 0-3) * 1P 0X, 3X. * 2 0X, 1X. * 2P 0X, 1X, 3X. * 3 0X, 1X, 2X. * 3P 0X, 1X, 2X, 3X. * 4 0X, 1X, 2X, 3X. * * ENTRY (DT) = DRIVE TYPE. * (DI) = DEVICE STATE TABLE ADDRESS. * (DD) = NUMBER OF DATA DRIVES IN DEVICE. * (PD) = NUMBER OF PARITY DRIVES IN DEVICE. * * EXIT (A) = 0 IF (PHYD,DI) IS THE LAST PHYSICAL * DRIVE OF THE LOGICAL UNIT. NO UPDATE IS * MADE IN THIS CASE. UPD2 LDN 0 EXIT WITH NO UPDATE UPD SUBR ENTRY/EXIT LDM PHYD,DI SHN -3 ADN 1 SBD DD MJN UPD4 IF NORMAL UPDATE NJN UPD2 IF NO UPDATE NECESSARY LDD PD ZJN UPDX IF NO UPDATE NECESSARY LDN 4 SBD DD SHN 3 UJN UPD5 UPDATE TO PARITY DRIVE UPD4 LDN 10B UPDATE TO NEXT STRING UPD5 RAM PHYD,DI UJP UPDX RETURN VDA SPACE 4,10 ** VDA - VERIFY DRIVE ATTRIBUTES. * * ENTRY (DT) = DRIVE TYPE. * * EXIT TO *ERR* IF ERROR. * * USES T1. * * CALLS ATT, IDT, SOU, WCB. VDA11 RJM ATT WAIT FOR COMPLETION RESPONSE VDA SUBR ENTRY/EXIT * RESTORE DRIVE ATTRIBUTES. LDC C0202 RESTORE ATTRIBUTES OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDN 6 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJP VDA10 IF NOT SUCCESSFUL * CHECK ATTRIBUTE 6E. LDC C0200 REPORT ATTRIBUTE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDC P036C STML CPBF+FCP REPORT ATTRIBUTE 6E LDC 0#806E STML CPBF+FCP+1 LDN 12 COMMAND PACKET LENGTH RJM IDT INPUT DATA TO PP LDML ATTB+1 LMC 0#C080 NJN VDA1 IF ATTRIBUTE INCORRECT RJM ATT WAIT FOR COMPLETION RESPONSE UJP VDA3 CHECK ATTRIBUTE 6F VDA1 RJM ATT WAIT FOR COMPLETION RESPONSE LDC C0209 LOAD ATTRIBUTE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDC 0#46E STML CPBF+FCP PARAMETER 6E LDC 0#C080 FOR PARITY DRIVES THIS ENABLES PARITY STML CPBF+FCP+1 CORRECTION BEFORE ECC CORRECTION LDN 0 STML CPBF+FCP+2 LDN 14 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJN VDA2 IF NOT SUCCESSFUL LDC C020A SAVE ATTRIBUTE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDN 6 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION VDA2 NJP VDA10 IF NOT SUCCESSFUL * CHECK ATTRIBUTE PARAMETER 6F. VDA3 LDC C0200 RJM SOU SET OPERATION CODE AND UNIT LDC P036C STML CPBF+FCP REPORT ATTRIBUTE 6F LDC 0#806F STML CPBF+FCP+1 LDN 12 COMMAND PACKET LENGTH RJM IDT INPUT DATA TO PP LDML ATTB+13 LMC BPB NJN VDA4 IF BURST SIZE NOT CORRECT RJM ATT WAIT FOR COMPLETION RESPONSE UJP VDA7 CHECK ATTRIBUTE D8 VDA4 RJM ATT WAIT FOR COMPLETION RESPONSE LDN 0 STD T1 VDA5 LCN 0 PARAMETERS WITH FFFF WILL NOT BE CHANGED STML CPBF+FCP,T1 AOD T1 LMN 24 NJN VDA5 IF MORE WORDS TO INITIALIZE STM CPBF+FCP+10 STM CPBF+FCP+12 LDC BPB*2 SET INTERRUPT SIZE STML CPBF+FCP+11 SHN -1 SET BURST SIZE STML CPBF+FCP+13 LDC C0209 LOAD ATTRIBUTE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDC 0#276F STML CPBF+FCP PARAMETER 6F LDN 46D COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJN VDA6 IF NOT SUCCESSFUL LDC C020A SAVE ATTRIBUTE OPERATION CODE RJM SOU SET OPERATION CODE AND UNT LDN 6 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION VDA6 NJN VDA8 IF NOT SUCCESSFUL * CHECK ATTRIBUTE D8. VDA7 LDD DT IFNE EQEA,0,2 SBN EQEA MJN VDA7.1 IF NOT SOLID STATE 5832 SBN EQEC-EQEA MJP VDAX IF INTERRUPT SIZE NOT USED VDA7.1 LDC C0200 REPORT ATTRIBUTE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDC P036C REPORT PARAMETER D8 STML CPBF+FCP LDC 0#80D8 STML CPBF+FCP+1 LDN 12 COMMAND PACKET LENGTH RJM IDT INPUT DATA TO PP LDML ATTB LMC 0#9D8 VDA8 NJP VDA10 IF RESPONSE INCORRECT LDC BPB SET INTERRUPT SIZE LMML ATTB+2 NJN VDA9 IF INTERRUPT SIZE WRONG LDML ATTB+4 LMC BPB ZJP VDA11 IF BURST SIZE CORRECT VDA9 RJM ATT WAIT FOR COMPLETION RESPONSE LDN 0 STML CPBF+FCP+1 STML CPBF+FCP+3 LDC BPB*2 SELECT INTERRUPT SIZE STML CPBF+FCP+2 SHN -1 SET BURST SIZE STML CPBF+FCP+4 LDC 0#09D8 STML CPBF+FCP PARAMETER D8 LDC C0209 LOAD ATTRIBUTE OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDN 20 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJN VDA10 IF NOT SUCCESSFUL LDC C020A SAVE ATTRIBUTES OPERATION CODE RJM SOU SET OPERATION CODE AND UNIT LDN 6 COMMAND PACKET LENGTH RJM WCB WRITE COMMAND PACKET LDN CMSS RJM ATT PROCESS ATTENTION NJN VDA10 IF NOT SUCCESSFUL LJM VDAX RETURN VDA10 LCN ERDA REPORT DRIVE ATTRIBUTES ERROR RJM ERR PROCESS ERROR VIS SPACE 4,15 ** VIS - VERIFY INTERRUPT SOURCE. * * ENTRY (A) .LT. 0 IF ASYNC INTERRUPT FROM CONTROLLER. * * EXIT (A) = 0 IF INTERRUPT FOR INACTIVE DRIVE. * = RETURN ADDRESS TO PROCESSOR. * (DI) = DEVICE STATE TABLE ADDRESS. * * USES DI. * * CALLS CCO, DCM, LDP. VIS4 RJM CCO CHECK FOR CONTROLLER OVER TEMPERATURE LDM SRSA ZJN VISX IF NO RESET IN PROGRESS STD DI UJN VIS1 LOAD DEVICE PARAMETERS VIS SUBR ENTRY/EXIT MJN VIS4 IF ASYNCH FOR CONTROLLER LDM RPBF+CRN CHECK COMMAND NUMBER STD DI VIS1 RJM LDP LOAD DEVICE PARAMETERS LDM RQLN,DI SHN 21-13 PJN VIS2 IF UNIT NOT INTERLOCKED LDML ATTN,DI NJN VISX IF EXPECTED RESPONSE VIS2 LDDL RT LMN XFNT NJN VIS3 IF NOT TRANSFER NOTIFICATION RJM DCM DESELECT CONTROLLER VIS3 LDN 0 UJN VISX RETURN WAC SPACE 4,25 ** WAC - WAIT FOR OTHER ACTIVITY TO COMPLETE. * * WAIT UNTIL ALL OTHER ACTIVITY ON THIS CONTROLLER IS COMPLETE. * THE FACT THAT *ERFL* IS SET WILL PREVENT NEW ACTIVITY. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * * USES DI, T1. * * CALLS LND, LDP. WAC CON 0 ENTRY LDML WAC SAVE RETURN ADDRESS STML SEPR,DI LDC WAC1 STML ADDR,DI RETURN ADDRESS IF NO RESPONSE WAC1 LDN 1 WAC2 LMN 1 RJM LND LOCATE DRIVE ZJN WAC3 IF NO MORE DRIVES ON CONTROLLER LDML ADDR,T7 ZJN WAC2 IF NO ACTIVITY ON DRIVE LDD T7 LMD DI ZJN WAC2 IF CURRENT DRIVE LDD T7 STD DI RJM LDP LOAD DEVICE PARAMETERS LJM 0,PA CHECK FOR TIMEOUT ON ACTIVE DRIVE WAC3 LDML SEPR,DI GET RETURN ADDRESS STDL T1 LJM 0,T1 RETURN WLB SPACE 4,10 ** WLB - WRITE LINKAGE BITS. * * ENTRY (T6) = ADDRESS FOR LINKAGE. * (T1) = DATA BUFFER ADDRESS. * (T5) = NUMBER OF WORDS TO WRITE. * (CM - CM+4) = *PAD* WORD OF *CBT* ENTRY. * * EXIT SECTOR LINKAGE SET IN DATA BUFFER. * * USES T1, T6. WLB1 LDN 10+4 ADVANCE BUFFER ADDRESS RADL T1 LDI T6 EXTRACT LINKAGE FROM *CBT* ENTRY SHN -10 * LPN 17 SHN 14 POSITION FOR DATA BUFFER LMI T1 STIL T1 WLB2 LDI T6 EXTRACT LINKAGE FROM *CBT* ENTRY SHN -4 LPN 17 SHN 14 POSITION FOR DATA BUFFER LMM 4,T1 STML 4,T1 LDI T6 EXTRACT LINKAGE FROM *CBT* ENTRY * SHN 0 LPN 17 SHN 14 POSITION FOR DATA BUFFER LMM 10,T1 STML 10,T1 AOD T6 ADVANCE *CBT* WORD ADDRESS LMN CM+5 NJN WLB1 IF MORE LINKAGE LDC 1S17 CWML SBUF,T5 UPDATE DATA BUFFER WLB SUBR ENTRY/EXIT UJN WLB2 MOVE SECTOR LINKAGE WMC SPACE 4,10 ** WMC - WAIT MAINTENANCE CHANNEL EMPTY. * * EXIT (A) .EQ. 0 IF CHANNEL EMPTY. * (A) .NE. 0 IF CHANNEL HUNG FULL. WMC2 LDN 0 INDICATE CHANNEL EMPTY WMC SUBR ENTRY/EXIT LDD TH WMC1 EJM. WMC2,MR IF TRANSMISSION COMPLETE SBN 1 NJN WMC1 IF NOT TIMED OUT DCN. MR+40 CCF. *+2,MR CLEAR CHANNEL FLAG LDD CP ADN MS2W STORE CP MESSAGE CWM WMCA,TR UJN WMCX RETURN WMCA DATA C*MR ERROR.* TITLE CHANNEL SUBROUTINES. BCS SPACE 4,10 ** BCS - DEFINE INFORMATION TRANSFER. * * ENTRY (A) = BUS *A* BITS 7 AND 6. * * EXIT TO *ERR* IF ERROR. * * CALLS RSR. BCS1 LDDL LF FETCH LAST FUNCTION LMN 0#32 RJM RSR DROP SYNC OUT BCS SUBR ENTRY/EXIT SHN 17-1 ADK F005B SET SYNC OUT RJM RSR READ SLAVE RESPONSE LPC 377 ZJN BCS1 IF BUS ACKNOWLEDGE CORRECT LDN EBAE BUS ACKNOWLEDGE ERROR RJM ERR PROCESS ERROR CFE SPACE 4,10 ** CFE - CHECK FOR I/O ERROR. * * ENTRY (A) = RESIDUAL WORD COUNT. * AT *CFE1* FROM *DCT* IF ERROR FLAG SET. * * EXIT (A) = 0. * TO *ERR* IF ERROR. CFE4 NJN CFE3 IF INCOMPLETE DATA TRANSFER CFE SUBR ENTRY/EXIT CFM CFE4,CH IF CHANNEL ERROR FLAG CLEAR CFE1 LDN ECIE IPI CHANNEL ERROR FLAG CFE2 RJM ERR PROCESS CHANNEL ERROR CFE3 LDN EIDT INCOMPLETE DATA TRANSFER UJN CFE2 PROCESS ERROR CRC SPACE 4,10 ** CRC - COMMON READ CODE. * * ENTRY (A) = LENGTH FOR INPUT. * (T0) = WORDS NOT TRANSFERRED. * * EXIT TO *ERR* IF ERROR. * * USES T1. * * CALLS GSS. CRC2 LDN 0 RJM GSS GET ENDING STATUS CRC SUBR ENTRY/EXIT SBD T0 STD T1 WORDS NOT TRANSFERRED LDC 50000D CRC1 IJM CRC2,CH IF SLAVE IN SBN 1 NJN CRC1 IF TIMEOUT NOT EXPIRED LCN ECNR SLAVE/SYNC IN SIGNAL ERROR RJM ERR PROCESS ERROR CTC SPACE 4,15 ** CTC - CHECK TRANSFER COMPLETE. * * ENTRY (RW) = 0 IF READ. * * EXIT (A) = 0 TO CALLER IF NO ERROR. * TO *PIO2* IF ENDING STATUS INDICATES PAUSE AND * NO DATA WAS READ. * TO *PIO6* IF ENDING STATUS INDICATES NO MORE DATA * AND NOT ALL DATA WAS TRANSFERRED. * TO *ERR* IF ERROR. * * USES T1. * * CALLS DCM, FAN, FCN, GSS, RCR, RDR, RTR, SCD. CTC SUBR ENTRY/EXIT LDC 7700D STDL T1 CTC1 LDC F0700 RJM FCN REQUEST OPERATIONAL STATUS ACN CH EJM CTC2,CH IF ERROR IAN CH READ STATUS LPN 1 ZJN CTCX IF TRANSFER COMPLETE CTC2 SODL T1 NJN CTC1 IF NOT TIMEOUT RJM RTR READ T REGISTER LDD CT ZJN CTC2.1 IF 10 MB CHANNEL * THE DMA TERMINATE FUNCTION DOES NOT CLEAR DMA MODE * IN THE 25 MB CHANNEL. SFM CTC2.0,CH CLEAR ERROR FLAG ON 25MB CHANNEL CTC2.0 LDC F0E00 RJM FAN CLEAR T REGISTER CTC2.1 LDC F0800 DMA TERMINATE FUNCTION RJM FAN SEND THE FUNCTION LDC F00E1 READ STATUS REGISTER FUNCTION RJM RDR READ REGISTER SHN 6 PJN CTC3 IF SLAVE IN DROPPED LDN ECNR SLAVE/SYNC IN SIGNAL ERROR RJM ERR PROCESS ERROR CTC3 LDN 0 NO MASTER TERMINATE * STD T1 SO LENGTH ERROR NOT REPORTED IN *CFE* RJM GSS GET ENDING STATUS LPN 60B LMN 20B ZJN CTC5 IF NO MORE DATA * IF MULTIPLE PHYSICAL DRIVES PER LOGICAL UNIT, AND THERE * IS A MEDIA ERROR FOR AT LEAST 2 DRIVES AT THE SAME SECTOR, * THE CONTROLLER WILL TRANSFER NO DATA THEN RETURN AN ENDING * STATUS INDICATING PAUSE, AND EXPECT THE HOST TO REREAD * THE DATA IF IT SENDS A TRANSFER NOTIFICATION RESPONSE. LDDL RW NJN CTC4 IF WRITE LDML EDBF+TREG LMC BPB NJN CTC4 IF NOT 0-BYTE TRANSFER RJM RCR RESET CHANNEL REGISTERS LJM PIO2 WAIT FOR ANOTHER RESPONSE CTC4 LDN EIDT INCOMPLETE DATA TRANSFER RJM ERR PROCESS ERROR * THE CONTROLLER MAY DROP SLAVE IN ANYTIME DURING THE TRANSFER * AND RETURN 90 HEX AS ENDING STATUS. THIS INDICATES COMMAND * COMPLETE. THE RESPONSE PACKET SHOULD REPORT AN ERROR. *CTC5 LDN 0 CTC5 RJM SCD CLEAR CHANNEL ACTIVE FOR *CPD* RJM DCM DESELECT THE CONTROLLER LCN 0 TO GUARANTEE AN ERROR IS REPORTED LJM PIO6 WAIT FOR A RESPONSE DCM SPACE 4,10 ** DCM - DESELECT CONTROLLER. * * CALLS FCN, RSR. DCM SUBR ENTRY/EXIT LDC F0071 RJM RSR WAIT FOR SLAVE IN TO DROP CFM DCMX,CH IF ERROR FLAG NOT SET * ON A 25 MB IPI CHANNEL, A DESELECT SEQUENCE COULD RESULT * IN A CHANNEL SEQUENCE ERROR. THE FOLLOWING CODE CLEARS * SUCH AN ERROR STATUS. LDC F0100 RJM FCN CLEAR THE DMA ERROR UJN DCMX RETURN DCT SPACE 4,10 ** DCT - DETERMINE CHANNEL TYPE. * * EXIT (CT) = 0 IF 10 MB CHANNEL. * 1 IF 25 MB CHANNEL. * * CALLS FCN. DCT1 STDL CT DCT SUBR ENTRY/EXIT LDC F0102 RJM FCN READ IPI REVISION REGISTER ACN CH LDN 0 EJM DCT1,CH IF 10 MB/S IPI CHANNEL LDN 1 UJN DCT1 RETURN DTM SPACE 4,15 ** DTM - DETERMINE TRANSFER MODE. * * ENTRY (A) = CONTROLLER NUMBER. * (T6) = 0 IF STREAMING COMMANDS/RESPONSES. * (T6) = 200(16) IF INTERLOCKING COMMANDS/RESPONSES. * * EXIT (A) = CONTROLLER NUMBER + TRANSFER MODE CHANGE. * * USES T4. * * CALLS FCN, RSR. DTM SUBR ENTRY/EXIT SHN 14 STDL T4 SET CONTROLLER NUMBER IN RESPONSE LMC F8025 RJM RSR REQUEST TRANSFER SETTINGS LPN 0#10 LMN 0#10 COMPLEMENT TRANSFER MODE SHN 11-4 LMDL T6 MASK FOR INTERLOCK DATA SHN 2 RADL T4 APPEND TRANSFER MODE TO RESPONSE SFM CFE1,CH IF ERROR FLAG SET LDDL LF LMC 0#54 DROP MASTER OUT RJM RSR ENSURE SLAVE IN DROPPED CFM DTM1,CH IF ERROR FLAG NOT SET * ON A 25 MB IPI CHANNEL, A REQUEST TRANSFER SETTINGS SEQUENCE * COULD RESULT IN A CHANNEL SEQUENCE ERROR. THE FOLLOWING CODE * CLEARS SUCH AN ERROR STATUS. LDC F0100 RJM FCN CLEAR THE DMA ERROR DTM1 LDDL T4 UJP DTMX RETURN FAN SPACE 4,10 ** FAN - SEND A FUNCTION TO THE IPI CHANNEL. * * NOTE - THE CHANNEL MAY HAVE BEEN LEFT ACTIVE BY A MASTER * CLEAR, A ROUTINE SUCH AS DCM, OR AFTER A REPORTED * ERROR. * * ENTRY (A) = FUNCTION TO ISSUE. FAN SUBR ENTRY/EXIT DCN CH+40 ENSURE THE CHANNEL IS INACTIVE FAN CH SEND THE FUNCTION UJN FANX RETURN FCN SPACE 4,10 ** FCN - ISSUE FUNCTION. * * ENTRY (A) = FUNCTION CODE. * * EXIT (A) .NE. 0. * (LF) = FUNCTION CODE. * TO *ERR* IF FUNCTION TIMEOUT. FCN SUBR ENTRY/EXIT DCN CH+40 FAN CH ISSUE FUNCTION STDL LF IJM FCNX,CH IF FUNCTION ACCEPTED RJM LDP LOAD DEVICE PARAMETERS LDN ETFN CHANNEL FUNCTION TIMEOUT RJM ERR PROCESS ERROR GIS SPACE 4,10 ** GIS - GET INTERRUPT STATUS. * * EXIT (A) = (GISA) = INTERRUPT STATUS. * * CALLS FCN. * INTERRUPTS MUST BE ENABLED AT LEAST 6 MICROSECONDS BEFORE * THE FOLLOWING INPUT. GIS1 IAN CH READ INTERRUPT STATUS GIS2 STML GISA LDC F0711 NEGATE MASTER OUT RJM FCN LDML GISA RETURN WITH (A) = STATUS GIS SUBR ENTRY/EXIT ACN CH+40 FJM GIS1,CH LDN 0 UJN GIS2 SET NULL STATUS GISA CON 0 GSS SPACE 4,15 ** GSS - GET SLAVE STATUS. * * ENTRY (A) = 0 IF STATUS W/O MASTER TERMINATE. * = MASTER TERMINATE OPTION. * (T1) = RESIDUAL BYTE COUNT. * * EXIT (A) = (PIOC) = ENDING STATUS IF TRANSFER SUCCESSFUL. * (GSSA) = ENDING STATUS AS READ FROM CONTROLLER. * TO *ERR* IF ERROR. * * CALLS RRP, RSR. GSS5 LDML GSSA ENDING STATUS STML PIOC GSS SUBR ENTRY/EXIT SHN 10 ADC F8039 INDICATE TRANSFER SUCCESSFUL RJM RSR GET ENDING STATUS STML GSSA SFM GSS3,CH IF ERROR FLAG SET SHN 21-7 PJN GSS1 IF TRANSFER NOT SUCCESSFUL LDD T1 ZJN GSS5 IF ALL WORDS TRANSFERRED LDN EIDT INCOMPLETE DATA TRANSFER UJN GSS4 PROCESS ERROR GSS1 SHN 10 LPC 117 LMN 3 NJN GSS2 IF NOT COMMAND REJECT * IF CONTROLLER OVER TEMPERATURE OCCURS BEFORE THE COMMAND IS * ISSUED, A COMMAND REJECT ERROR COULD OCCUR. A LOGICAL RESET * WOULD CAUSE THE OVER TEMPERATURE STATUS TO BE LOST. RJM RRP READ RESPONSE PACKET LCN EUST SUCCESSFUL NOT SET IN ENDING STATUS UJN GSS4 PROCESS ERROR GSS2 LDN EUST SUCCESSFUL NOT SET IN ENDING STATUS UJN GSS4 PROCESS ERROR GSS3 LDN ECIE IPI CHANNEL ERROR FLAG GSS4 RJM ERR PROCESS ERROR GSSA CON 0 ENDING STATUS IDT SPACE 4,15 ** IDT - INPUT DATA TO PP. * * ENTRY (A) = COMMAND PACKET LENGTH. * (TM) = TRANSFER MODE. * (DI) = DEVICE STATE TABLE ADDRESS. * * EXIT ATTRIBUTE DATA STARTS AT ATTB. * * USES T1. * * CALLS ATT, BCS, CRC, DCM, FCN, WCB. IDT1 LCN ERDA REPORT DRIVE ATTRIBUTES ERROR RJM ERR PROCESS ERROR IDT CON 0 ENTRY RJM WCB WRITE COMMAND PACKET LDML IDT STML IDTR,DI SAVE RETURN ADDRESS LDN XFNT EXPECT TRANSFER NOTIFICATION RESPONSE RJM ATT PROCESS ATTENTION NJP IDT1 IF ERROR LDN DAIN DATA TRANSFER IN RJM BCS BUS CONTROL SEQUENCE LDI T0 DELAY 750 NANOSECONDS LDDL TM TRANSFER MODE SHN 11-0 LMC F0281 RJM FCN TELL DMA LOGIC TO READ ACN CH LDC ATTBL IAM ATTB,CH INPUT ATTRIBUTE DATA STD T0 WORDS NOT TRANSFERRED LDM RPBF+MST+3 BYTE LENGTH OF TRANSFER ADN 1 IN CASE OF ODD BYTE LENGTH SHN -1 EXPECTED WORDS TO TRANSFER RAD T0 LDC ATTBL RJM CRC COMMON READ CODE RJM DCM DESELECT CONTROLLER LDML IDTR,DI STDL T1 LJM 0,T1 RETURN TO CALLER RCR SPACE 4,10 ** RCR - RESET CHANNEL REGISTERS. THIS LEAVES THE IPI * CHANNEL IN AN IDLE STATE. * * ENTRY (MF) = 0 IF PREVIOUS MASTER CLEAR SUCCESSFUL. * * USES MF, T1. * * CALLS DCT, FCN, WTC. * * MACROS WAIT. RCR2 LDN 0 STD MF INDICATE MASTER CLEAR COMPLETE RCR SUBR ENTRY/EXIT LDD MF NJN RCR2 IF MASTER CLEAR FAILED AOD MF LDN F0000 RJM FCN MASTER CLEAR THE ADAPTER WAIT 100 * MASTER CLEAR DOES NOT CLEAR ERROR FLAG ON THE 25 MB CHANNEL, * SO THE SFM INSTRUCTION MUST BE USED TO CLEAR IT. SFM RCR1,CH *RCR1 LDN 0 SET DEVICE NOT SELECTED RCR1 ADK F0000-0 ENSURE NO SEQUENCE ERROR RJM FCN RJM DCT DETERMINE CHANNEL TYPE LDML TRAT,CT RJM FCN SET IPI CHANNEL TRANSFER RATE LDC F0300 RJM FCN WRITE CONTROL REGISTER FUNCTION ACN CH LDML EDC,CT ENABLE DOUBLE CMI SLOT IF 25 MB CHANNEL STDL T1 LDN 1 OAM T1,CH RJM WTC WAIT TRANSFER COMPLETE UJP RCR2 SET COMPLETE AND RETURN RDR SPACE 4,10 ** RDR - READ REGISTER. * * ENTRY (A) = FUNCTION CODE. * * EXIT (A) = VALUE OF REGISTER OR 0 IF ERROR. * * CALLS FAN. RDR1 LDN 0 RDR SUBR ENTRY/EXIT RJM FAN SEND FUNCTION AJM RDR1,CH IF NO FUNCTION REPLY ACN CH+40B EJM RDR1,CH IF WORD COULD NOT BE READ IAN CH UJN RDRX RETURN RIF SPACE 4,15 ** RIF - RESET INTERFACE. * * ENTRY (RW) = 0 TO RESET SLAVE INTERFACE. * = 1 TO RESET LOGICAL INTERFACE. * (CN) = CONTROLLER NUMBER. * * EXIT (RF) = 1. * * USES RF. * * CALLS FCN, RCR, SAP. * * MACROS WAIT. RIF SUBR ENTRY/EXIT AOD RF FLAG RESET IN PROGRESS RJM RCR RESET CHANNEL RJM SAP SELECT ADAPTER PORT LDD CN SHN 14 FORM RESET FUNCTION LMML RIFA,RW RJM FCN ISSUE LOGICAL RESET WAIT 20 LDDL LF LMN 2 SET SYNC OUT RJM FCN WAIT 10 LDDL LF NEGATE SYNC OUT SCN 2 RJM FCN LDDL LF CLEAR MASTER OUT SCN 4 RJM FCN UJP RIFX RETURN RIFA BSS 0 RESET FUNCTION CODES CONL F8415 CONL F8215 RRP SPACE 4,10 ** RRP - READ RESPONSE PACKET. * * ENTRY (T6) = 0 IF STREAMING MODE FOR RESPONSES. * * CALLS BCS, CRC, FCN. RRP SUBR ENTRY/EXIT LDN RIIN RJM BCS INITIATE BUS EXCHANGE (RESPONSE IN) LDDL T6 STREAMING OR INTERLOCK MODE LMC F0281 READ RJM FCN RAISE MASTER OUT ACN CH LDN RPBFL TRANSFER RESPONSE PACKET IAM RPBF,CH STD T0 SAVE RESIDUE SBN RPBFL-4 PJN RRP1 IF INVALID PACKET LENGTH LDM RPBF+PLN ADN 3 CONVERT OCTET COUNT TO BYTE COUNT SHN -1 RAD T0 RRP1 LDK RPBFL COMPARE LENGTH WITH DATA READ RJM CRC COMMON READ CODE UJN RRPX RETURN RSR SPACE 4,10 ** RSR - READ SLAVE RESPONSE. * * ENTRY (A) = FUNCTION TO ISSUE. * * EXIT (A) = SLAVE RESPONSE. * TO *ERR* IF ERROR. * * CALLS FCN. RSR2 IAN CH READ SLAVE RESPONSE RSR SUBR ENTRY/EXIT RJM FCN LDC 2000 ACN CH RSR1 FJM RSR2,CH IF SLAVE IN DROPPED SBN 1 NJN RSR1 IF NOT TIMED OUT LDN ECNR SLAVE/SYNC IN SIGNAL ERROR RJM ERR PROCESS ERROR RTR SPACE 4,10 ** RTR - READ T REGISTER. * * USES T2, T3. * * CALLS FAN. RTR SUBR ENTRY/EXIT LDC F0A00 READ T REGISTER FUNCTION STD T2 RJM FAN LDN 0 STML EDBF+TREG STML EDBF+TREG+1 CLEAR T REGISTER BUFFER STML EDBF+TREG+2 STD T3 ACN CH+40B ACTIVATE CHANNEL * THE ONE WORD INPUT IS NECESSARY TO PREVENT THE CHANNEL * FROM HANGING ON A 170 DMA CHANNEL. RTR1 SOD T2 ZJN RTRX IF TIMEOUT IJM RTRX,CH IF ERROR EJM RTR1,CH IF CHANNEL NOT FULL YET IAN CH STML EDBF+TREG,T3 SAVE WORD FROM T REGISTER AOD T3 LMN 3 ZJN RTRX IF TRANSFER COMPLETE UJN RTR1 INPUT NEXT WORD SAP SPACE 4,10 ** SAP - SELECT ADAPTER PORT. * * ENTRY (DI) = DEVICE STATE TABLE ADDRESS. * (CT) = 0 IF 10 MB CHANNEL. * * CALLS FCN. SAP SUBR ENTRY/EXIT LDM PNUN,DI SHN 0-11 ISOLATE PORT NUMBER SHN 13-0 ERRNZ F0062+4000-F0862 CODE DEPENDS ON VALUE ADML PAS,CT RJM FCN UJN SAPX RETURN SCM SPACE 4,15 ** SCM - SELECT CONTROLLER. * * ENTRY (SF) = 1 IF DEVICE PREVIOUSLY SELECTED. * (CI) = CONTROLLER STATE TABLE INDEX. * (CN) = CONTROLLER NUMBER. * (DI) = DEVICE STATE TABLE ADDRESS. * (T6) = 0 IF STREAMING COMMANDS/RESPONSES. * * EXIT TO *ERR* IF ERROR. * * USES T6. * * CALLS DTM, RSR, SAP. SCM SUBR ENTRY/EXIT RJM SAP SELECT ADAPTER PORT LDML CTST,CI SHN -15 ZJN SCM1 IF STREAMING COMMANDS/RESPONSES LDC 0#200 SCM1 STDL T6 LDD CN RJM DTM DETERMINE TRANSFER MODE LMN F0029 SET SELECT OUT RJM RSR READ BIT SIGNIFICANT RESPONSE LPML TMSK,CN NJN SCMX IF CORRECT CONTROLLER LDN ETSL SELECT TIMEOUT RJM ERR PROCESS ERROR WCB SPACE 4,15 ** WCB - WRITE COMMAND BLOCK (PACKET). * * ENTRY (A) = COMMAND PACKET LENGTH. * (DI) = DEVICE STATE TABLE ADDRESS. * (T6) = 0 IF STREAMING MODE. * (DT) = DRIVE TYPE. * * EXIT TO *ERR* IF ERROR. * * USES T1. * * CALLS BCS, DCM, FCN, GSS, SCM, STO. WCB2 LDN 0 GET STATUS RJM GSS RJM DCM DESELECT CONTROLLER LDML CPBF+OPC OPERATION CODE SHN -10 SBN 7 NJN WCB3 IF NOT SPIN UP/DOWN LDC SUTO SPIN UP TIMEOUT UJN WCB5 SET COMMAND TIMEOUT WCB3 SBN 0#28-7 NJN WCB4 IF NOT FORMAT LDML CPBF LMN 0#E ZJN WCB4 IF NOT FULL PACK FORMAT LDC FMTO UJN WCB5 SET COMMAND TIMEOUT WCB4 LDC CBTO WCB5 RJM STO SET TIMEOUT WCB SUBR ENTRY/EXIT STM CPBF+PLN LDML CPBF+OPC STML LCMD,DI SAVE LAST COMMAND LDD DI SET COMMAND REFERENCE NUMBER STM CPBF+CRN RJM SCM SELECT CONTROLLER LDN CIOT RJM BCS INITIATE BUS EXCHANGE (COMMAND OUT) LDDL T6 STREAM OR INTERLOCK MODE LMC F0381 WRITE RJM FCN RAISE MASTER OUT ACN CH LDM CPBF+PLN CONVERT OCTET COUNT TO BYTE COUNT ADN 3 SHN -1 TRANSFER COMMAND PACKET OAM CPBF,CH STD T1 SAVE RESIDUAL BYTE COUNT FOR *GSS* LDC 50000D WCB1 IJM WCB2,CH IF SLAVE IN DROPPED SBN 1 NJN WCB1 IF NOT TIMED OUT LDN ECNR SLAVE/SYNC IN SIGNAL ERROR RJM ERR PROCESS ERROR WTC SPACE 4,10 ** WTC - WAIT TRANSMISSION COMPLETE. * * EXIT TO *ERR* IF ERROR. * * CALLS CFE. WTC1 DCN CH+40 DEACTIVATE CHANNEL WTC SUBR ENTRY/EXIT RJM CFE CHECK FOR ERROR EJM WTC1,CH IF LAST WORD TAKEN OFF CHANNEL LDN ECHF CHANNEL HUNG FULL RJM ERR PROCESS CHANNEL ERROR WTR SPACE 4,10 ** WTR - WRITE T REGISTER. * * ENTRY (CB) = *CBT* ORDINAL. * (RW) = 0 IF READ. * * CALLS FCN, SLB, SUA, WTC. WTR SUBR ENTRY/EXIT LDD RW ZJN WTR1 IF READ REQUEST LDD CB RJM SLB SET LINKAGE BITS WTR1 LDD CB RJM SUA GET UEM BUFFER ADDRESS LDD UA+1 SHN 11 FORMAT ADDRESS SCN 7 STML WTRA+2 SET ABSOLUTE ADDRESS LDD UA SHN 14 COMPLETE BUFFER ADDRESS LMD UA+1 SHN 11-20 INSERT IN REGISTER IMAGE STM WTRA+1 LDML WTRB,RW ISSUE DMA FUNCTION RJM FCN LDN 3 SET BLOCK LENGTH ACN CH OAM WTRA,CH OUTPUT BUFFER PARAMETERS RJM WTC UJP WTRX RETURN WTRA BSS 0 T REGISTER BUFFER CONL BPB BYTE LENGTH OF I/O TRANSFER CONL 0,0 UEM ADDRESS OF BUFFER WTRB BSS 0 DMA I/O FUNCTIONS CONL F0C00 CONL F0D00 TITLE COMMON DECKS. SPACE 4,10 ** COMMON DECKS. *CALL COMPCHD *CALL COMPC2D RND$ EQU 0 DEFINE ROUNDING FOR *COMPDV5* *CALL COMPDV5 EST$ EQU 0 ASSEMBLE *EST* ACCESS ROUTINE IFP$ EQU 0 FORCE REMOTE ASSEMBLY OF *IFP* *CALL COMPGFP *CALL COMPIFR M8K$ EQU 1 USE LONG INSTRUCTIONS *CALL COMPIMB QUAL TEO QUAL$ EQU 0 DO NOT FURTHER QUALIFY COMMON DECKS T5 EQU EO USE *EO* FOR EST ORDINAL IN COMMON DECKS *CALL COMPTGB *CALL COMPTLB QUAL * TGB EQU /TEO/TGB TLB EQU /TEO/TLB TITLE BUFFERS. SPACE 4,10 ** BUFFERS. RPBF BSS 0 RESPONSE PACKET BUFFER CPBF EQU RPBF+1 COMMAND PACKET BUFFER ATTB EQU RPBF+10 ATTRIBUTE BUFFER ATTBL EQU 0#8A RBUF EQU ATTB+ATTBL REGISTER BUFFER RBUFL EQU 2*4 SBUF EQU RBUF+RBUFL SCRATCH BUFFER SBUFL EQU 4*5 EDBF EQU 20000-400-RTEDL ERROR DATA BUFFER ERRNG 400-EDBFL+RTEDL CODE DEPENDS ON VALUE MSGP EQU EDBF+EMBF MESSAGE PREFIX MSGL EQU MSGP+2 MESSAGE LENGTH MSGT EQU MSGL+2 MESSAGE TYPE BMLM EQU MSGT+1 BML MESSAGE HEADER MSID EQU BMLM MESSAGE ID PPCH EQU MSID+2 PP NUMBER / CHANNEL NUMBER UNIT EQU PPCH+1 UNIT NUMBER PORT EQU UNIT+1 PORT NUMBER ESTO EQU PORT+1 EST ORDINAL MISC EQU ESTO+1 RETRY COUNT / WRITE + RECOVERY FLAGS MFID EQU MISC+2 MAINFRAME ID SPACE 4,10 * CHECK FOR BUFFER OVERLAP. ERRNG EDBF-SBUF-SBUFL *SBUF* OVERFLOWS INTO *EDBF* TITLE PRESET. * PRESET DATA LOCATIONS. CPCH CON 0 6/CPP NUMBER, 6/CHANNEL NUMBER PUTA CON 0,0 FWA OF *PUT* PUTN CON 0 NUMBER OF *PUT* ENTRIES OVLP EQU *+5 ORIGIN FOR OVERLAY *3DZ* PRS SPACE 4,15 ** PRS - PRESET DRIVER FOR PROCESSING. * * ENTRY AT *PRS* WHEN DRIVER LOADED. * * EXIT TO *3DZ*. * * USES CR, CT, PA, UC, CM - CM+4, T2 - T7, WB - WB+4. * * CALLS CCP, IFP, MCI, SCT, SPA, STA. * * MACROS EXECUTE. PRS BSS 0 ENTRY LDD IR+2 SAVE *CCT* ORDINAL STM PRSA RJM IFP INITIALIZE *COMPGFP* LDN 0 STD UC SET NO UNITS RESERVED STD PA SET NO REQUEST IN PROGRESS STD CT DEFAULT TO 10 MB CHANNEL RJM MCI MODIFY CHANNEL INSTRUCTIONS * LDN 0 STD CR SET CHANNEL NOT RESERVED RJM SPA SET PP EXCHANGE PACKAGE ADDRESSES * SET TIME FOR NEXT GLOBAL MST CHECK, BASED ON CPP NUMBER. LDK RTCL GET CURRENT CLOCK CRD CM LDD CM+1 CURRENT TIME (SECONDS) SBD T4 ADJUST BY CPP NUMBER PJN PRS1 IF NO UNDERFLOW LDD T4 PRS1 STM CETB PRESET TIME OF PREVIOUS GLOBAL MST CHECK RJM SCT SET CHANNEL TABLE ADDRESSES LDK BIOL CRD CM READ BUFFERED I/O POINTERS LDD CM+1 SHN 14 LMD CM+2 ADN FTTP READ *FTT* POINTER CRD T6 SBN FTTP-CCTP READ *CCT* POINTER CRD T4 ADN CBTP-CCTP READ *CBT* POINTER CRD WB SBN CBTP-PUTP READ *PUT* POINTER CRD T2 LDD T2+3 SAVE *PUT* ADDRESS LPN 77 STM PUTA LDD T2+4 STM PUTA+1 AOD T2 STM PUTN SAVE NUMBER OF *PUT* ENTRIES LDC T5*20000+TPUT SET *PUT* ADDRESSES RJM STA LDC ** ADJUST CHANNEL CONTROL TABLE POINTER PRSA EQU *-1 SCN 77 SHN CCTLS-6 RAD CM SHN -14 RAD T7 LDC T7*20000+TCCT SET *CCT* ADDRESSES RJM STA .CM1 EQU CM+1 LDC .CM1*20000+TFTT SET *FTT* ADDRESSES RJM STA .WB3 EQU WB+3 LDC .WB3*20000+TCBT SET *CBT* ADDRESSES RJM STA LDN EMBP FETCH *EMB* POINTER CRD CM LDC .CM1*20000+TEMB SET *EMB* ADDRESSES RJM STA LDK ESTP SET ENDING EST ORDINAL FOR EST SEARCH CRD CM LDD CM+3 STM LNEA LDK UEML CRD CM READ UEM POINTERS LDD CM SHN 11 * SHN 11+EMSC SCN 77 STM SUAA SET FWA OF UEM LDD CM SHN -3 * SHN EMSC-3 STM SUAB RJM CCP CHECK CALLING PROGRAM EXECUTE 3DZ CONTINUE PRESET TITLE PRESET SUBROUTINES. CCP SPACE 4,10 ** CCP - CHECK CALLING PROGRAM. * * EXIT (A) = 0. * TO *PPR* IF UNAUTHORIZED CALL. * * USES CM - CM+4. * * CALLS DFM. * * MACROS MONITOR. CCP SUBR ENTRY/EXIT LDK NCPL CRD CM GET NUMBER OF CONTROL POINTS AOD CM+1 SHN 7 LMD CP ZJN CCPX IF DRIVER AT SYSTEM CP LDD MA MOVE MESSAGE BELOW ADDRESS 10000 CWM CCPA,TR LDD MA CRM CSTB,TR ERRNG 10000-CSTB MESSAGE BUFFER MUST BE IN FIRST 4K OF PP ERRNG CSTB-MSFW MESSAGE BUFFER MUST NOT DESTROY PPR LDC CSTB RJM DFM ISSUE DAYFILE MESSAGE MONITOR ABTM LJM PPR EXIT TO PP RESIDENT CCPA DATA C* 1DA - UNAUTHORIZED CALL.* IFP SPACE 4,10 ** IFP - INITIALIZE MANAGED TABLE PROCESSORS. LIST G IFP HERE LIST * MCI SPACE 4,15 ** MCI - MODIFY CHANNEL INSTRUCTIONS. * * ENTRY (IR+4) = CONCURRENT CHANNEL NUMBER. * * EXIT (A) = 0. * * USES T1 - T3. * * CALLS C2D. * * MACROS CHTL. MCI1 RAIL T2 MODIFY CHANNEL INSTRUCTION AOD T1 MCI2 LDML TCHA,T1 EXTRACT NEXT ADDRESS STDL T2 LDD T3 CHECK END OF LIST CHTL * SBN CH NJN MCI1 IF MORE INSTRUCTIONS TO MODIFY MCI SUBR ENTRY/EXIT LDD IR+4 LPN 37 EXTRACT CHANNEL NUMBER STD T3 RJM C2D CONVERT FOR OPERATOR MESSAGES STM SRSG+13 STM ERCR+10 STM ERCD+16 STM ERCE+16 LDN 0 INITIALIZE REMOTE TABLE INDEX STD T1 UJN MCI2 ENTER LOOP SCT SPACE 4,10 ** SCT - SET CHANNEL TABLE ENTRY ADDRESSES. * * ENTRY (IR+4) = CHANNEL NUMBER. * * USES T1, T2, CM - CM+4. * * CALLS C2D, STA. SCT SUBR ENTRY/EXIT LDD IR+4 STD T1 SET CHANNEL NUMBER STM DCEB+3 RAM CPCH RJM C2D CONVERT FOR ERROR MESSAGE STM LMRA+6 LCN 0 WORD OFFSET STD T2 SCT1 AOD T2 INCREMENT WORD OFFSET LCN 5 RAD T1 PJN SCT1 IF CHANNEL NOT IN THIS WORD ADN 5 STD T1 RAM RCTA SET BYTE OFFSET LDD T1 SHN 1 BYTE OFFSET * 2 ADD T1 BYTE OFFSET * 3 SHN 2 BYTE OFFSET * 12 SBN 59D (BYTE OFFSET * 12) - 59 LMC -0 59 - (BYTE OFFSET * 12) SBN 2 SHN 6 STM SRFA+1 SET DRIVER FLAG BIT POSITION LDK CHTP CRD CM LDD T2 SET ADDRESS OF WORD IN CHANNEL TABLE RAD CM+3 SHN -14 RAD CM+2 .CM2 EQU CM+2 LDC .CM2*20000+TCHT SET CHANNEL TABLE ADDRESSES RJM STA LJM SCTX RETURN SPA SPACE 4,10 ** SPA - SET PP EXCHANGE PACKAGE ADDRESSES. * * EXIT (T4) = CPP NUMBER. * * USES CM - CM+4, T1 - T5. * * CALLS STA. SPA SUBR ENTRY/EXIT LDN PXPP CRD CM FETCH FWA OF PP EXCHANGE PACKAGE AREA ADN 1 CRM AMEA,ON SET FIRST WORD OF PP EXCHANGE PACKAGE ADN PPCP-PXPP-2 CRD T1 READ PP COMMUNICATION AREA POINTER LDD IA STM AMEA+4 SET (B0) NON-ZERO FOR EXCHANGE TEST SBD T1+4 SHN -3 PP NUMBER SBN 24 CPP NUMBER STD T4 SHN 6 STM CPCH SAVE CPP NUMBER FOR BML MESSAGE SHN -6 ADN 24-2 STD T1 PP NUMBER - 2 SHN 4 ADD T1 (PP NUMBER - 2) * 21B RAD CM+4 SHN -14 RAD CM+3 .CM3 EQU CM+3 LDC .CM3*20000+TEXP SET EXCHANGE PACKAGE ADDRESSES RJM STA LJM SPAX RETURN STA SPACE 4,10 ** STA - SET TABLE ADDRESSES. * * ENTRY (A) = 5/ TP, 13/ TA. * (TP) = TABLE POINTER. * (TA) = INSTRUCTION TABLE ADDRESS. * * EXIT (A) = 0. * * USES T1 - T3. STA1 STDL T2 SET INSTRUCTION ADDRESS LDM 1,T1 RAM 1,T2 SET LOWER 12 BITS OF ADDRESS SHN -14 ADI T1 SET UPPER 6 BITS OF ADDRESS LPN 37 RAI T2 AODL T3 ADVANCE INSTRUCTION LIST STA2 LDIL T3 NJN STA1 IF NOT END OF TABLE STA SUBR ENTRY/EXIT STDL T3 SHN -15 SET ADDRESS POINTER STD T1 LDDL T3 LPC 17777 STDL T3 UJN STA2 ENTER LOOP TITLE INSTRUCTION MODIFICATION TABLES. TCHA SPACE 4,10 ** TABLE OF CHANNEL INSTRUCTIONS ADDRESSES. TCHA CHTB RSTC RESTORE CHANNEL INSTRUCTIONS TCBT SPACE 4,10 ** TABLE OF INSTRUCTIONS REQUIRING FWA OF *CBT*. TCBT BSS 0 TCBT HERE CON 0 TERMINATE TABLE TCCT SPACE 4,10 ** TABLE OF INSTRUCTIONS REQUIRING ADDRESS OF *CCT* ENTRY. TCCT BSS 0 TCCT HERE CON 0 TERMINATE TABLE TCHT SPACE 4,10 ** TABLE OF INSTRUCTIONS REQUIRING FWA OF CHANNEL TABLE. TCHT BSS 0 TCHT HERE CON 0 TERMINATE TABLE TEMB SPACE 4,10 ** TABLE OF INSTRUCTIONS REQUIRING FWA OF *EMB*. TEMB BSS 0 QUAL COMPIMB TEMB HERE QUAL * CON 0 TERMINATE TABLE TEXP SPACE 4,10 ** TABLE OF INSTRUCTIONS REQUIRING FWA OF PP EXCHANGE PACKAGE. TEXP BSS 0 TEXP HERE CON 0 TERMINATE TABLE TFTT SPACE 4,10 ** TABLE OF INSTRUCTIONS REQUIRING FWA OF *FTT*. TFTT BSS 0 TFTT HERE CON 0 TERMINATE TABLE TPUT SPACE 4,10 ** TABLE OF INSTRUCTIONS REQUIRING FWA OF *PUT*. TPUT BSS 0 TPUT HERE CON 0 TERMINATE TABLE SPACE 4,10 * CHECK FOR OVERFLOW. ERRNG 17777-*-5 OVERFLOW PAST END OF PP SPACE 4,10 TTL 1DA/3DZ - *DAS* DRIVER PRESET (PART 2). TITLE IDENT 3DZ,OVLP *DAS* DRIVER PRESET (PART 2). *COMMENT 1DA - *DAS* DRIVER PRESET (PART 2). COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1995. ORG OVLP QUAL 3DZ BST SPACE 4,15 ** BST - BUILD STATE TABLES AND BML ERROR MESSAGE BUFFER. * * ENTRY (CPCH) = CPP NUMBER AND CHANNEL NUMBER. * (PUTA - PUTA+1) = ADDRESS OF *PUT*. * (PUTN) = NUMBER OF *PUT* ENTRIES. * * EXIT TO *MRS* WHEN PRESET COMPLETE. * TO *DAS6* IF CHANNEL DOWN. * * USES T4. * * CALLS CFD, DHE, IST, SMC. BST SUBR ENTRY * NOTE - THE FOLLOWING CALL TO *IST* DESTROYS *PPR* IN THIS PP. * NO CALLS TO *PPR* MAY BE MADE AFTER THIS POINT. RJM IST INITIALIZE DEVICE/CONTROLLER STATE TABLES RJM DHE DETERMINE HIGHEST EST ORDINAL RJM SMC SET MMF CONSTANTS RJM CFD CLEAR FLAGS AT DEADSTART * PRESET BML ERROR MESSAGE BUFFER. LDC EDBF STDL T4 LDN 0 BST1 STI T4 AODL T4 ADVANCE BUFFER ADDRESS SHN 0-15 ZJN BST1 IF NOT END OF BUFFER LDM CPCH SET CPP NUMBER AND CHANNEL NUMBER STM PPCH LDN MLDY SET DAYFILE CODE STM MSGT LDC ** (MAINFRAME ID) BSTA EQU *-1 STM MFID * RESERVE CHANNEL AND INITIATE DRIVER. LDM DASB CHECK IF ANY DEVICES FOUND LMC DSTB ZJN BST3 IF NO DEVICES FOR THIS DRIVER LJM CCR2 RESERVE CHANNEL (RETURN TO *BST2*) BST2 NJN MRS IF CHANNEL NOT DOWN BST3 LJM DAS6 DROP CPP TITLE SUBROUTINES. MRS SPACE 4,10 ** MRS - MASTER RESET SLAVES. * * EXIT TO *CMP* IF RESET SUCCESSFUL. * TO *DAS1* IF NO UNIT COULD BE INTERLOCKED. * * USES DI, T1. * * CALLS FCN, IDU, LDP, RCR. * * MACROS WAIT. MRS BSS 0 ENTRY LDC DSTB-DSTBE FIRST DEVICE TABLE ADDRESS STD DI MRS1 LDN DSTBE RAD DI LMM DASB ZJP DAS1 IF NO UNIT COULD BE INTERLOCKED RJM LDP LOAD DEVICE PARAMETERS RJM IDU INTERLOCK DISK UNIT NJN MRS1 IF UNIT NOT INTERLOCKED RJM RCR MASTER CLEAR CHANNEL LDN 1 STD T1 SHN 13-0 POSITION PORT NUMBER MRS3 LMML PAS,CT RJM FCN SELECT ADAPTER PORT LDC F9213 RJM FCN ISSUE MASTER RESET WAIT 10 LDDL LF LAST FUNCTION SCN 2 RJM FCN CLEAR SYNC OUT SOD T1 ZJN MRS3 IF ANOTHER PORT TO PROCESS LJM CMP EXIT/CLEAR UNIT INTERLOCK SPACE 4,10 * CHECK FOR OVERFLOW. ERRNG EDBF-* OVERFLOW INTO BML ERROR MESSAGE BUFFER TITLE OVERLAYABLE SUBROUTINES. CFD SPACE 4,15 ** CFD - CLEAR FLAGS AT DEADSTART. * * CLEAR FLAGS THAT ARE LEFT SET AFTER LEVEL 3 DEADSTART. * THE CORRESPONDING *BDT* INTERLOCKS ARE CLEARED BY *MTE*. * * EXIT FLAGS CLEARED IN *BDLL* AND *ACGL*. * * USES DI, T4, UC, CM - CM+4, CW - CW+4. * * CALLS CDS, CMC, IDU, IMR, LDP, LNE, RBD, UBP. * * MACROS CMSTF, MONITOR. CFD SUBR ENTRY/EXIT LDC DSTB-DSTBE STD DI CFD1 LDN DSTBE PROCESS NEXT DEVICE RAD DI LMM DASB ZJN CFDX IF NO MORE DEVICES TO PROCESS RJM LDP LOAD DEVICE PARAMETERS LDN 0 INITIALIZE PARTITION SEARCH CFD2 RJM LNE LOCATE NEXT EST FOR THIS DEVICE ZJN CFD1 IF NO MORE PARTITIONS RJM CDS CHECK DEVICE STATUS MJN CFD3 IF DEVICE NOT RECOVERED RJM RBD READ *BDLL* LDD CM+3 CHECK FLAGS FOR ERROR/RESTORE INTERLOCKS SHN 0-11 LPN 3 NJN CFD4 IF EITHER FLAG IS SET CFD3 LJM CFD12 PROCESS NEXT PARTITION * INTERLOCK DEVICE AND RECHECK FLAGS. CFD4 RJM IDU INTERLOCK DEVICE NJN CFD1 IF INTERLOCK NOT AVAILABLE RJM RBD READ *BDLL* LDD CM+3 CHECK FLAGS FOR ERROR/RESTORE INTERLOCKS SHN 0-11 LPN 3 ZJP CFD11 IF NEITHER FLAG IS SET STD T4 SAVE STATUS LDN ZERL CLEAR *BDT* ENTRY BUFFER CRD CW LDML DVTP,DI SHN 21-11 PJN CFD5 IF NOT SHARED DEVICE * GET *BDT* ENTRY FROM *MTE*. LDD EO SET EST ORDINAL STD CM+4 LDN GBDS GET *BDT* ENTRY STD CM+1 MONITOR MTEM LDD MA READ *BDT* ENTRY CRD CW * PROCESS ERROR PROCESSING FLAG. CFD5 LDD T4 LPN 2 ZJN CFD8 IF *BDLL* ERROR PROCESSING FLAG NOT SET LDD CW CHECK IF *BDT* ERROR INTERLOCK SET ZJN CFD6 IF NOT SET LPN 77 LMN ** (MACHINE INDEX) CFDA EQU *-1 NJN CFD7 IF SET FOR A DIFFERENT MF UJN CFD8 DO NOT CLEAR FLAGS CFD6 CMSTF GDER CLEAR *ERROR RECOVERY IN PROGRESS* FLAG CFD7 LDN 0 CLEAR FLAG THAT SAYS THIS MF HAS INTERLOCK STD CM+2 LDN 26 BIT TO CHANGE RJM UBP UPDATE *BDLL* PARAMETER * PROCESS RESTORE FLAG. CFD8 LDD T4 LPN 1 ZJN CFD11 IF *BDLL* RESTORE FLAG NOT SET LDD CW+1 CHECK IF *BDT* RESTORE SET ZJN CFD9 IF NOT SET LPN 77 LMN ** (MACHINE INDEX) CFDB EQU *-1 NJN CFD10 IF SET FOR A DIFFERENT MF UJN CFD11 DO NOT CLEAR FLAGS CFD9 CMSTF GDUR CLEAR *RESTORE IN PROGRESS* FROM *ACGL* CMSTF GDRI CLEAR *RESTORE INITIATION* FROM *ACGL* LDD EO SET EST ORDINAL STD CM+1 LDN 0 STD CM+2 LDN SRCS CLEAR REMAINING CYLINDERS / 100B IN *ACGL* STD CM+3 MONITOR STBM CFD10 LDN 0 CLEAR FLAG THAT SAYS THIS MF HAS INTERLOCK STD CM+2 LDN 25 BIT TO CHANGE RJM UBP UPDATE *BDLL* PARAMETER * CLEAR UNIT INTERLOCK. CFD11 LDN 0 RELEASE UNIT INTERLOCK STD WB+4 LDC 4000 STD WB+3 LDN DCBS RJM IMR * LDN 0 CLEAR UNIT INTERLOCKED FLAG STM RQLN,DI SOD UC ADJUST UNIT ACTIVITY COUNT RJM CMC CHECK MONITOR COMPLETE CFD12 LDD EO LJM CFD2 PROCESS NEXT PARTITION DHE SPACE 4,10 ** DHE - DETERMINE HIGHEST EST ORDINAL. * * ENTRY (LNEA) = HIGHEST MASS STORAGE EST ORDINAL (+1). * * EXIT (LNEA) = HIGHEST EST ORDINAL FOR THIS DRIVER (+1). * * USES DI. * * CALLS LDP, LNE. DHE SUBR ENTRY/EXIT LDC DSTB STD DI DHE1 RJM LDP LOAD DEVICE PARAMETERS LDN 0 INITIALIZE PARTITION SEARCH DHE2 RJM LNE LOCATE NEXT EST ORDINAL ZJN DHE4 IF NO MORE PARTITIONS SBM DHEA MJN DHE3 IF NOT NEW HIGHEST EST ORDINAL LDD EO SET HIGHEST EST ORDINAL STM DHEA DHE3 LDD EO UJN DHE2 PROCESS NEXT PARTITION DHE4 LDN DSTBE ADVANCE DEVICE STATE TABLE ADDRESS RAD DI LMM DASB NJN DHE1 IF NOT END OF DEVICE STATE TABLE LDM DHEA SET HIGHEST EST ORDINAL FOR THIS DRIVER ADN 1 STM LNEA UJN DHEX RETURN DHEA CON 0 HIGHEST EST ORDINAL FOR THIS DRIVER IST SPACE 4,15 ** IST - INITIALIZE DEVICE STATE TABLE. * * ENTRY (PUTA - PUTA+1) = ADDRESS OF *PUT*. * (PUTN) = NUMBER OF *PUT* ENTRIES. * * USES CI, DI, FC, T1, T2, T5, CM - CM+4, CW - CW+4, * WB - WB+4. * * MACROS SFA. IST11 LDD DI DEFINE END OF DEVICE STATE TABLE STM DASB IST SUBR ENTRY/EXIT LDC CSTBL-1 STDL DI IST1 LDN 0 CLEAR DEVICE AND CONTROLLER STATE TABLES STI DI SOD DI LMC DSTB NJN IST1 IF MORE TO CLEAR * LDN 0 STD FC UNITS NOT CHECKED FOR FORMAT REQUEST STD T5 INITIALIZE *PUT* ORDINAL * PROCESS NEXT *PUT* ENTRY. IST2 AOD T5 CHECK NEXT *PUT* ENTRY LMM PUTN NUMBER OF *PUT* ENTRIES ZJN IST11 IF END OF PHYSICAL UNIT TABLE LDD T5 SHN PUTLS CALCULATE *PUT* ADDRESS STD T1 LDM PUTA FWA OF *PUT* SHN 14 LMM PUTA+1 ADD T1 ADK UNCT GET UNIT CONTROL WORD CRD WB SFA EST,WB+1 FETCH EST ENTRY ADK EQDE CRD CM ADK EQAE-EQDE CRD CW LDD CM+1 CHECK FIRST CHANNEL STD T1 LMD IR+4 LPN 77 ZJN IST3 IF CHANNEL FOR THIS DRIVER LDD CM+2 CHECK SECOND CHANNEL STD T1 ZJN IST2 IF SECOND CHANNEL NOT DEFINED LMD IR+4 LPN 77 NJN IST2 IF NOT CHANNEL FOR THIS DRIVER * CREATE DEVICE STATE TABLE ENTRY FOR THIS DEVICE. IST3 LDD T5 SET *PUT* ORDINAL IN STATE TABLE STI DI ERRNZ PUTO CODE DEPENDS ON VALUE LDD T1 LPC 200 SET PORT NUMBER SHN 11-7 STM PNUN,DI LDD WB GET EQUIPMENT AND UNIT NUMBERS LPC 777 RAM PNUN,DI APPEND TO PORT NUMBER LDN EQNS DETERMINE DEVICE TYPE STD T1 IST4 SOD T1 CHECK NEXT DEVICE MNEMONIC LDM DM,T1 LMD CM+3 NJN IST4 IF DEVICE MNEMONIC DOES NOT MATCH LDD T1 SET DEVICE TYPE INDEX LMC 1S13 SET *CHECK DRIVE TYPE* FLAG STML DVTP,DI LDD CM CHECK FOR SHARED DEVICE LPC 1000 ZJN IST5 IF NOT SHARED DEVICE RAML DVTP,DI SET *MMF SHARED DEVICE* FLAG LDML DM,T1 SHN 0-17 NONZERO IF PARITY DEVICE SHN 12-0 RAML DVTP,DI SET *ENABLE MMF PARITY DEVICE ACCESS* FLAG IST5 LDD CW+3 SHN 0-13 NONZERO IF PARTITIONED DEVICE SHN 17-0 RAML DVTP,DI SET *PARTITIONED DEVICE* FLAG * FIND CONTROLLER STATE TABLE ENTRY FOR THIS DEVICE. LDN 0 INITIALIZE CONTROLLER STATE TABLE INDEX STD T1 IST6 LDD T1 CHECK NEXT CONTROLLER SHN 2 ERRNZ CSTBE-4 CODE DEPENDS ON VALUE ADC CSTB STD CI SET CONTROLLER STATE TABLE ADDRESS LDML CTST,CI NJN IST7 IF CONTROLLER ALREADY IDENTIFIED LDD DI SET *DSTB* ADDRESS OF FIRST DEVICE LMC 1S14 SET *INITIAL RESET REQUIRED* FLAG STML CTST,CI UJN IST8 SET CONTROLLER STATE TABLE INDEX IST7 LPC 7777 *DSTB* OF FIRST DEVICE ON CONTROLLER STD T2 LDM PNUN,T2 COMPARE CONTROLLER AND PORT NUMBERS LMM PNUN,DI SHN -6 ZJN IST8 IF SAME CONTROLLER AND PORT NUMBERS AOD T1 CHECK NEXT CONTROLLER LMN MXCN NJN IST6 IF NOT END OF CONTROLLER STATE TABLE STI DI CLEAR DEVICE STATE TABLE ENTRY ERRNZ PUTO CODE DEPENDS ON VALUE STM PNUN,DI STM DVTP,DI UJN IST9 IGNORE DEVICE AND PROCESS NEXT *PUT* IST8 LDD T1 SET CONTROLLER STATE TABLE INDEX SHN 14 RAML PNUN,DI LDN DSTBE ADVANCE DEVICE STATE TABLE ADDRESS RAD DI LMC DSTBL ZJN IST10 IF DEVICE STATE TABLE IS FULL IST9 LJM IST2 PROCESS NEXT *PUT* ENTRY IST10 LJM IST11 DEFINE END OF DEVICE STATE TABLE SMC SPACE 4,10 ** SMC - SET MMF CONSTANTS. * * PERFORM CODE MODIFICATION FOR MMF OPERATION. * * USES CM - CM+4. * * MACROS ISTORE. SMC SUBR ENTRY/EXIT LDK MMFL GET MMF WORD CRD CM LDD CM SET MAINFRAME ID STM BSTA LDD CM+1 SHN 21-11 MJN SMC1 IF SHARED BUFFERED DEVICES CONFIGURED ISTORE CRIA,(UJN CRIX) DISABLE MMF SLAVE RESET INTERLOCK ISTORE SRIA,(UJN SRIX) ISTORE CAAA,(UJN CAA8) DISABLE CHECK FOR MMF PARITY RESTORE ISTORE CETA,(UJN CETX) UJN SMCX RESERVE CHANNEL SMC1 LDD CM+3 SET MACHINE MASKS RAM IPRB LPN 77 RAM CABA LDD CM+4 SET MACHINE INDEX RAM CFDA STM CFDB LDD CM+4 MACHINE INDEX ADN GPDA-1 *ACGL* BIT NUMBER LMC LCNI STM DMPA LMC LDNI&LCNI STM EMPA UJP SMCX RETURN SPACE 4,10 * CHECK FOR OVERFLOW. ERRNG 17777-*-5 OVERFLOW PAST END OF PP QUAL * TTL 1DA - DISK ARRAY SUBSYSTEM (DAS) DRIVER. END