1 /* ***********************************************************
  2    *                                                         *
  3    * Copyright, (C) Honeywell Bull Inc., 1987                *
  4    *                                                         *
  5    * Copyright, (C) Honeywell Information Systems Inc., 1984 *
  6    *                                                         *
  7    * Copyright (c) 1972 by Massachusetts Institute of        *
  8    * Technology and Honeywell Information Systems, Inc.      *
  9    *                                                         *
 10    *********************************************************** */
 11 
 12 
 13 /* SCS - The System Communications Segment
 14    modified 3/27/77 by Noel I. Morris
 15    last modified 4/26/78 by J. A. Bush for processor testing
 16    Modified 2/79 by BSG for 8-cpu port expander
 17    Modified 9/16/80 by J. A. Bush for the DPS8/70M CPU
 18    Modified 1/09/81 W. Olin Sibert to remove all initializations to scs_and_clock_init
 19    Modified 01/16/81 W. Olin Sibert, to add scs$port_data
 20    Modified Jabuary 1981 by C. Hornig for new I/O.
 21    Modified 2/22/81 by J. Bongiovanni for fast connect code
 22    Modified 4/23/81 by J. Bongiovanni for cycle_priority_template
 23    Modified 4/09/82 by J. Bongiovanni for switch 0, processor_data_switch_value
 24    Modified 7/30/82 by J. Bongiovanni for trouble_processid
 25    Modified 4/11/83 by E. N. Kittlitz for drl_message_pointer.
 26    Modified 10/25/83 by Keith Loepere for start_of_scs
 27 */
 28 
 29 scs:
 30      procedure;
 31 
 32 /* Static */
 33 
 34 dcl exclude_pad (1) char (32) static options (constant) init ("pad*");
 35 
 36 /* Automatic */
 37 
 38 dcl code fixed bin (35);
 39 dcl 1 cdsa aligned like cds_args;
 40 dcl i fixed bin;
 41 
 42 /* Builtins */
 43 
 44 dcl (addr, bin, bit, null, size, string, unspec) builtin;
 45 
 46 /* Entries */
 47 
 48 dcl create_data_segment_ entry (ptr, fixed bin (35));
 49 %page;
 50 dcl 1 scs aligned,                                          /* Information about system controllers */
 51       2 start_of_scs fixed bin (71),
 52       2 controller_data (0:7) aligned like scs$controller_data,
 53                                                             /* per-controller info */
 54                                                             /* Information about CPUs */
 55       2 processor_data (0:7) aligned like scs$processor_data,
 56                                                             /* information about CPUs in the system */
 57       2 port_data (0:7) like scs$port_data aligned,         /* Info on what is connected to each SCU port */
 58       2 cow (0:7) like scs$cow,                             /* Actual COW's. */
 59       2 cow_ptrs (0:7) aligned like scs$cow_ptrs,           /* Rel pointers to COW's. */
 60       2 reconfig_general_cow aligned like scs$reconfig_general_cow,
 61                                                             /* Used for reconfiguration operations */
 62                                                             /* MASKS and PATTERNS */
 63       2 sys_level aligned bit (72),                         /* mask used while handling I/O interrupts */
 64       2 open_level aligned bit (72),                        /* mask used during normal operation */
 65       2 processor_start_mask aligned bit (72),              /* mask used when starting up a CPU */
 66       2 cpu_test_mask aligned bit (72),                     /* mask used for ISOLTS CPU testing */
 67       2 number_of_masks fixed bin,                          /* number of masks (starting at sys_level) */
 68       2 processor_start_pattern bit (36) aligned,           /* SMIC pattern used to send processor start interrupt */
 69       2 cpu_test_pattern bit (36) aligned,                  /* SMIC pattern used for ISOLTS processor testing */
 70       2 expanded_ports bit (1) unaligned dim (0:7),         /* Which ports have expanders */
 71                                                             /* CAM and CACHE clear info */
 72       2 cam_pair fixed bin (71),                            /* instructions XEDd when CAMing and clearing CACHE */
 73       2 cam_wait bit (8) aligned,                           /* Used when evicting pages from main memory */
 74       2 pad1 fixed bin,                                     /* MASKING INSTRUCTIONS & POINTERS */
 75       2 set_mask (0:7) bit (36) aligned,                    /* instructions to set mask (STAQ or SMCM) */
 76       2 read_mask (0:7) bit (36) aligned,                   /* instructions to read mask (LDAQ or RMCM) */
 77       2 mask_ptr (0:7) ptr unaligned,                       /* pointers for real or simulated masks */
 78                                                             /* MISCELLANEOUS */
 79       2 idle_aptep (0:7) ptr unaligned,                     /* pointer to idle process APTE for each processor */
 80       2 connect_lock bit (36) aligned,                      /* lock for sending connects */
 81       2 reconfig_lock bit (36) aligned,                     /* lock used during reconfiguration */
 82       2 trouble_flags bit (8) aligned,                      /* checkoff flags for sys_trouble stopping */
 83       2 bos_restart_flags bit (8) aligned,                  /* checkoff flags for restarting after sys_trouble */
 84       2 nprocessors fixed bin,                              /* number of processors online */
 85       2 bos_processor_tag fixed bin (3),                    /* CPU tag of processor running BOS */
 86       2 faults_initialized bit (1) aligned,                 /* ON after faults have been enabled */
 87       2 sys_trouble_pending bit (1) aligned,                /* sys_trouble event is pending in the system */
 88       2 fast_cam_pending (0:7) bit (36) aligned,            /* checkoff flags for cam connect */
 89       2 interrupt_controller fixed bin (3),                 /* port number of low order controller */
 90       2 cycle_priority_template bit (7) aligned,
 91       2 set_cycle_switches bit (1) aligned,
 92       2 processor_start_int_no fixed bin (5),               /* interrupt cell for starting a processor */
 93       2 processor bit (8) aligned,                          /* bits ON for online CPUs */
 94       2 processor_start_wait bit (8) aligned,               /* checkoff flags for waiting for new processor */
 95       2 trouble_processid bit (36) aligned,                 /* processid causing crash */
 96       2 drl_message_pointer ptr unal,                       /* pointer to DRL message text */
 97       2 processor_test_data aligned like scs$processor_test_data,
 98                                                             /* info for cpu testing */
 99       2 pad2 fixed bin,
100       2 trouble_dbrs (0:7) fixed bin (71),                  /* DBR values at system crash time */
101       2 port_addressing_word (0:7) bit (3) aligned,         /* active module port number for each controller */
102       2 cfg_data (0:7) fixed bin (71),                      /* RSCR-CFG data from each controller */
103       2 cfg_data_save fixed bin (71),                       /* RSCR-CFG save area for ISOLTS CPU testing */
104       2 processor_switch_data (0:4) bit (36) aligned,       /* actual processor RSW data */
105       2 processor_switch_template (0:4) bit (36) aligned,   /* expected data from RSW 0 thru 4 */
106       2 processor_switch_compare (0:4) bit (36) aligned,    /* discrepancies from expected data */
107       2 processor_switch_mask (0:4) bit (36) aligned,       /* masks for comparing switch data */
108       2 processor_data_switch_value bit (36) aligned,       /* Correct value of CPU data switches */
109                                                             /* Data used by init_sst and collect_free_core, from config cards. */
110       2 controller_config_size (0:7) fixed bin (14) aligned,/* config card-stated size of controller */
111       2 reconfig_locker_id char (32) aligned,               /* process group ID of process doing reconfiguration */
112       2 scas_page_table (0:31) bit (36) aligned,            /* Page table for SCAS */
113       2 end_of_scs fixed bin;                               /* For initialization */
114 %page;
115           unspec (scs) = "0"b;                              /* clear entire structure */
116 
117 /* Now set up for call to create_data_segment_ */
118 
119           cdsa.sections (1).p = addr (scs);
120           cdsa.sections (1).len = size (scs);
121           cdsa.sections (1).struct_name = "scs";
122 
123           cdsa.seg_name = "scs";
124           cdsa.num_exclude_names = 1;
125           cdsa.exclude_array_ptr = addr (exclude_pad);
126 
127           string (cdsa.switches) = "0"b;
128           cdsa.switches.have_text = "1"b;
129 
130           call create_data_segment_ (addr (cdsa), code);
131           return;
132 %page;
133 %include scs;
134 %include cds_args;
135 
136      end scs;