1 /* BEGIN include file toehold_save_dcls_.incl.pl1 */
  2 
  3 
  4 /****^  HISTORY COMMENTS:
  5   1) change(83-08-01,Margulies), approve(), audit(), install():
  6      Initial coding by Margulies and Loepere.
  7   2) change(85-01-09,Fawcett), approve(85-09-09,MCR6979),
  8      audit(86-01-31,GDixon), install(86-03-21,MR12.0-1033):
  9      Support of FIPS 3380 cylinder size.
 10                                                    END HISTORY COMMENTS */
 11 
 12 
 13 /* structures that desribe data in the toehold and the save partition */
 14 /* format: style4,indattr,ifthenstmt,ifthen,idind33,^indcomtxt */
 15 
 16 /* WARNING - this include file has an alm counterpart maintained by
 17 convert_include_file, as well as a simplified version (toe_hold.incl.pl1)
 18 and its convert_include_file maintained alm counterpart.
 19 Exclude prn, prv and pad when converting to the alm version. */
 20 
 21 dcl  toehold_ptr                      ptr;
 22 dcl  toehold$                         (2048) bit (36) external;
 23 
 24 dcl  1 toehold                        aligned based (toehold_ptr),
 25        2 entry_sequences              (0:15) bit (72) aligned,
 26        2 flagbox                      (64) bit (36) aligned,
 27        2 handler_mc                   aligned like mc,
 28        2 paths                        (4) like io_path,
 29        2 n_paths_used                 fixed bin,
 30        2 memory_state                 fixed bin,
 31        2 bce_dbr                      bit (72) aligned,
 32        2 bce_mode_reg                 bit (36) aligned,     /* double word pair with bce_cache_mode_reg */
 33        2 bce_cache_mode_reg           bit (36) aligned,
 34        2 esd_segnum                   fixed bin (15),
 35 
 36        2 dcw_list_size                fixed bin (17) unaligned, /* the size of the dcw_list used by toehold.alm (upper half) */
 37        2 dcws_per_cyl                 fixed bin (17) unaligned, /* number of dcws needed to write 1 pages on 1 cyl*/
 38        2 seeks_used                   fixed bin,            /* number of cyls needed to write 512 records     */
 39                                                             /*   plus 1 for seek at 256K boundary.            */
 40        2 save_dcws                    (260) fixed bin (35), /* Region for dcw_list adjusted to RPV devtype.   */
 41                                                             /*   Writes Multics low memory (512K) into bce    */
 42                                                             /*   partition prior to invoking bce; or reads    */
 43                                                             /*   from partition back into memory prior to     */
 44                                                             /*   return to Multics.                           */
 45        2 handler_dcws                 (260) fixed bin (35), /* Region for dcw_list adjusted to RPV devtype.   */
 46                                                             /*   Reads/writes bce low memory from/to bce      */
 47                                                             /*   partition when invoking/returning from bce.  */
 48 
 49        2 pad2                         (255) bit (36) aligned,
 50        2 handler_code                 (288) fixed bin (71),
 51        2 multics_state                like mc_state;
 52 ^L
 53 /* *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * */
 54 /*                                                                           */
 55 /* 512 records (pages) of low-order memory must be exchanged between memory  */
 56 /* and disk when Multics transfers to bce or vice versa.  Device types hold  */
 57 /* different numbers of records per cylinder (see fs_dev_types.incl.pl1).    */
 58 /* Thus, a different number of cylinders is needed to hold 512 records for   */
 59 /* each type of device.  Because there must be a dcw for every 4 records     */
 60 /* (pages) of data written to disk, the shape of the dcw_list varies         */
 61 /* depending upon the type of device used for the RPV.                       */
 62 /*                                                                           */
 63 /* A second consideration is that there must be a separate seek operation    */
 64 /* after writing the 256th page of the low memory region in absolute mode.   */
 65 /*                                                                           */
 66 /* Also the iom_mailbox and toehold area is not saved nor is it restored.    */
 67 /* This skip of memory locations causes an additional seek.                  */
 68 /*                                                                           */
 69 /* Thus, room for an extra two seeks must be added to the cylinder counts    */
 70 /* computed below.                                                           */
 71 /*                                                                           */
 72 /* Note that a separate connect operation is done for each seek.             */
 73 /*                                                                           */
 74 /* The table below shows the shape for each supported device type.           */
 75 /*   recs_per_cyl           comes from fs_dev_types.incl.pl1.                */
 76 /*   cyls_per_512k          = ceil (512 / recs_per_cyl)                      */
 77 /*   seeks_per_512k         = cyls_per_512k + 1 seek_at_256k_boundary        */
 78 /*                            + 1 seek_after_skip
 79 /*   dcws_per_cyl           = ceil (recs_per_cyl / 4 recs_per_dcw)           */
 80 /*   currentsize(dcw_list)  is the PL/I builtin function result.  This       */
 81 /*                          size must fit within the 260 words allocated     */
 82 /*                          above for save_dcws and handler_dcws.            */
 83 /*                                                                           */
 84 /*  DEVICE   RECORDS  CYL PER   SEEKS    DCWS PER  currentsize               */
 85 /*   TYPE    PER CYL    512K   PER 512K     CYL     (dcw_list)               */
 86 /*  ------   -------  -------  --------  --------  -----------               */
 87 /* 400,451,                                                                  */
 88 /*    500       47       11       13         12        208 =13*(12+4)        */
 89 /*                                                                           */
 90 /*    501       80        7        9         20        216 = 9*(20+4)        */
 91 /*                                                                           */
 92 /*   3380      127        5        7         32        252 = 7*(32+4)        */
 93 /*                                                                           */
 94 /* *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * */
 95 
 96 dcl  dcw_list_ptr                     ptr;
 97 dcl  1 dcw_list                       (toehold.seeks_used) aligned based (dcw_list_ptr),
 98        2 seek_addresses               fixed bin (35),       /* This array overlays toehold.save_dcws and      */
 99        2 seek_idcw                    bit (36) aligned,     /*   .handler_dcws                                */
100        2 seek_dcw                     bit (36) aligned,
101        2 data_idcw                    bit (36) aligned,
102        2 data_dcws                    (toehold.dcws_per_cyl) bit (36) aligned;
103 
104 %page; %include bce_partition_layout;
105 %page; %include toe_hold;
106 
107 /* END include file toehold_save_dcls_.incl.pl1 */