COMPILATION LISTING OF SEGMENT rcp_mount_timer_ Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 0947.5 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 /* format: off */ 13 14 rcp_mount_timer_: procedure; 15 16 /* This program implements the RCP mount timer mechanism. 17* * Created on 11/02/76 by Bill Silver. 18* * $account_init by B. Greenberg 8/2/77 19**/ 20 21 22 /****^ HISTORY COMMENTS: 23* 1) change(87-02-10,Farley), approve(87-04-14,MCR7652), 24* audit(87-04-15,Lippard), install(87-04-28,MR12.1-1028): 25* Changed to attempt to locate the attachment RCSE for the device and if 26* found call rcp_comment_ to possibly display the user comment that was 27* displayed with the first mount message. 28* END HISTORY COMMENTS */ 29 30 31 /* This program has the following entry points: 32* * 1. init - called by a system process through the rcp_sys_ gate. 33* * It initializes the mount timer mechanism. 34* * 2. check - called by the system process that initialized the mount timer. 35* * It is called through the rcp_sys_ gate. It checks to see 36* * if a mount is pending for the specified drive. If a mount is 37* * pending the operator is told to check on this mount. 38* * 3. set - an internal interface called by rcp_tape_ and rcp_disk_. 39* * It turns ON the mount pending flag for a specified drive 40* * and signals the system process that will check on this mount. 41* * 4. reset - an internal interface called by rcp_tape_ and rcp_disk_. 42* * It turns OFF the mount pending flag for a specified drive. 43* 5. account_init - like $init. Called through rcp_sys_ to set up 44* accounting channel/PID. Here for convenience. 45**/ 46 47 /* ARGUMENTS */ 48 49 dcl arg_device_off bit (18) aligned; /* (I) RCPD device entry offset. */ 50 dcl arg_ecode fixed bin (35); /* (O) error_table_ code. */ 51 dcl arg_ev_chan fixed bin (71); /* (I) Mount timer IPC event channel. */ 52 dcl arg_recheck_flag bit (1) aligned; /* (O) ON => check this mount again. */ 53 dcl arg_write_flag bit (1) aligned; /* (I) ON => mounting for writing. */ 54 55 56 /* AUTOMATIC DATA */ 57 58 dcl caller_level fixed bin; /* Caller's validation level. */ 59 dcl device_off bit (18) aligned; /* RCPD device entry offset. */ 60 dcl ecode fixed bin (35); 61 dcl message_buffer fixed bin (71); /* Holds message send to system process. */ 62 dcl message_ptr ptr; /* Pointer for based message structure. */ 63 dcl recheck_flag bit (1); 64 dcl rcsx fixed bin; /* RCS index */ 65 66 67 /* BASED DATA */ 68 69 dcl 1 message based (message_ptr) aligned, /* Mount timer message. */ 70 2 key char (4), /* Must be "rcmt". */ 71 (2 device_off bit (18), /* RCPD device entry offset. */ 72 2 mbz bit (18)) unal; 73 74 75 /* INTERNAL STATIC DATA */ 76 77 dcl save_pid bit (36) aligned internal static init ("0"b); 78 79 80 /* EXTERNAL DATA */ 81 82 dcl (addr, fixed, mod, ptr, rel, size) builtin; 83 84 dcl error_table_$bad_index fixed bin (35) external; 85 dcl error_table_$bad_processid fixed bin (35) external; 86 87 dcl admin_gate_$syserr entry options (variable); 88 dcl cu_$level_get entry (fixed bin); 89 dcl cu_$level_set entry (fixed bin); 90 dcl get_process_id_ entry returns (bit (36) aligned); 91 dcl get_ring_ entry returns (fixed bin); 92 dcl hcs_$wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin (35)); 93 dcl rcp_comment_ entry (ptr); 94 dcl rcp_pointers_$com_seg entry returns (ptr); 95 dcl rcp_pointers_$data entry returns (ptr); 1 1 /* Begin include file ... rcp_data.incl.pl1 1 2* * 1 3* * Created on 09/06/74 by Bill Silver. 1 4* * This include file defines the Resource Control Package data base, rcp_data. 1 5* * It is initialized in ring 0 by rcp_init. It is maintained in ring 1 by RCP. 1 6* * It contains information about all of the devices and volumes managed by RCP. 1 7* * This include file references rcp_com_seg.incl.pl1. 1 8* 1 9* * Modified by R.J.C. Kissel on 10/5/77 to add the check_label bit. 1 10* * Modified by Michael R. Jordan on 04/24/78 to add modes and attached flag. 1 11* * Modified on 12/09/78 to add removable media bit. 1 12* * Modified 3/79 by Michael R. Jordan for MR7.0R. 1 13* * Modified 3/79 by C. D. Tavares for expandable RCP modes. 1 14* * Modified 11/84 by Paul Farley to add fips flag. 1 15* * Modified 02/85 by Paul Farley to add no_protect and opr_int_available flags. 1 16**/ 1 17 1 18 /****^ HISTORY COMMENTS: 1 19* 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), 1 20* audit(85-12-09,CLJones), install(86-03-21,MR12.0-1033): 1 21* Support FIPS and IMU. 1 22* END HISTORY COMMENTS */ 1 23 1 24 dcl rcpd_ptr ptr; /* Points to base of RCPD. */ 1 25 dcl dtype_ptr ptr; /* Points to a device type entry. */ 1 26 dcl device_ptr ptr; /* Points to a device entry. */ 1 27 dcl volume_ptr ptr; /* Points to a volume entry. */ 1 28 1 29 dcl 1 rcpd based (rcpd_ptr) aligned, /* Begin at word 0 of RCPD. */ 1 30 2 lock_info like lock_info, /* Data used to lock this segment. */ 1 31 2 init bit (1) unal, /* ON => rcp_ring1_init_ has executed */ 1 32 2 modes like rcp_init_flags unaligned, 1 33 2 tot_dtypes fixed bin, /* Number of known device types. */ 1 34 2 tot_devices fixed bin, /* Total number of devices configured. */ 1 35 2 tot_volumes fixed bin, /* Number of possible attached volumes. */ 1 36 2 last_volume fixed bin, /* The last volume entry currently in use. */ 1 37 2 mtimer_chan fixed bin (71), /* Event channel for mount timer. */ 1 38 2 mtimer_pid bit (36), /* ID of mount timer process. */ 1 39 2 accounting_chan fixed bin (71), /* Event channel for device accounting */ 1 40 2 accounting_pid bit (36), /* ID of accounting process */ 1 41 2 unload_sleep_time fixed bin (71), /* Number of microseconds to wait for unload completion. */ 1 42 2 pad (7) fixed bin, 1 43 2 dtype (0 refer (rcpd.tot_dtypes)) /* One entry per device type. */ 1 44 like dtype, /* See structure below. */ 1 45 2 device (0 refer (rcpd.tot_devices)) /* One entry per configured device. */ 1 46 like device, /* See structure below. */ 1 47 2 volume (0 refer (rcpd.tot_volumes)) /* One entry per possible attached volume. */ 1 48 like volume, /* See structure below. */ 1 49 2 end bit (36) aligned; /* End of rcp_data. */ 1 50 1 51 dcl 1 dtype based (dtype_ptr) aligned, /* Entry for one device type. */ 1 52 2 device_type char (32), /* Name of this device type. */ 1 53 2 max_concurrent fixed bin, /* Max number of concurrently assigned devices. */ 1 54 2 num_reserved fixed bin, /* Num of devices reserved for system processes. */ 1 55 2 num_devices fixed bin, /* Num of devices of this type that are configured. */ 1 56 2 first_off bit (18), /* Offset of first device entry. */ 1 57 2 histo_times (3) fixed bin; /* Used to compute histograms for this device type. */ 1 58 1 59 dcl 1 device based (device_ptr) aligned, /* Up to state must = rcs.rcse. */ 1 60 2 device_name char (8), /* Name of device associated with this entry. */ 1 61 2 volume_name char (32), /* Volume name. Blank => no volume. */ 1 62 2 dtypex fixed bin, /* Device type index. */ 1 63 2 model fixed bin, /* Device model number. */ 1 64 2 num_qualifiers fixed bin, /* Number of device qualifiers. */ 1 65 2 qualifiers (4) fixed bin (35), /* Device qualifiers. */ 1 66 2 state_time fixed bin (71), /* Time device put into current state. */ 1 67 2 state fixed bin, /* 0 => free, 1 => assigned, 2 => deleted, 1 68* 3 => storage system, 4 => reserved */ 1 69 1 70 /* * * * * ** Following fields are unique to device entry. */ 1 71 1 72 2 unassign_state fixed bin, /* State to return when unassigning. */ 1 73 2 acs_name char (12), /* Entry name of ACS for this device. */ 1 74 2 next_off bit (18), /* Offset of next entry for this device type. */ 1 75 2 iom_num fixed bin, /* IOM number for this device. */ 1 76 2 chan_num fixed bin, /* Channel number for this device. */ 1 77 2 num_channels fixed bin, /* Num channels that may address device. */ 1 78 2 flags, /* Special info flags. */ 1 79 (3 delete bit (1), /* ON => Delete device when it is unassigned. */ 1 80 3 priv bit (1), /* ON => Deleted device assigned for priv attach. */ 1 81 3 reservable bit (1), /* ON => may be reserved for system process. */ 1 82 3 reserved bit (1), /* ON => reserved to a reserved process. */ 1 83 3 mounting bit (1), /* ON => mount pending. */ 1 84 3 writing bit (1), /* ON => mounting for writing. */ 1 85 3 attached bit (1) unal, /* ON => device is attached. */ 1 86 3 not_removable_media bit (1), /* ON => cannot remove volume from device. */ 1 87 3 fips bit (1), /* ON => FIPS device. */ 1 88 3 no_protect bit (1), /* ON => device has no protect sw. */ 1 89 3 opr_int_available bit (1), /* ON => device connected to MPC with OI button. */ 1 90 3 unused bit (25)) unal, 1 91 2 process_id bit (36), /* ID of assigned process. */ 1 92 2 group_id char (32), /* Process group ID. */ 1 93 2 error_count fixed bin (35), /* Total error count. Defined by user ring. */ 1 94 2 num_assigns fixed bin (35), /* Total # of times device assigned & unassigned. */ 1 95 2 tot_assign_time fixed bin (71), /* Total time that device was assigned. */ 1 96 2 histogram (4) fixed bin, /* Assignment time histogram. */ 1 97 2 reservation_id fixed bin (71), 1 98 2 reserved_by char (32), /* Who made this reservation. */ 1 99 2 current_authorization bit (72) aligned; /* Authoization of process using this device. */ 1 100 1 101 dcl 1 volume based (volume_ptr) aligned, /* Entry for one volume. */ 1 102 2 process_id bit (36), /* "0"b => unassigned. */ 1 103 2 volume_name char (32), /* Volume name. */ 1 104 2 vtypex fixed bin, /* Volume type index. */ 1 105 2 group_id char (32), /* This is used for the reserved_for field. */ 1 106 2 reserved_by char (32), 1 107 2 reservation_id fixed bin (71), 1 108 2 state_time fixed bin (71), /* Same as for a device. */ 1 109 2 state fixed bin, /* Same as for a device. */ 1 110 2 unassign_state fixed bin, /* State to return when unassigning. */ 1 111 2 current_authorization bit (72) aligned; /* Authorization of process using this volume. */ 1 112 2 1 /* BEGIN INCLUDE FILE ... rcp_init_flags.incl.pl1 */ 2 2 2 3 /* Created on 04/24/78 by Michael R. Jordan */ 2 4 /* Modified 04/10/79 by C. D. Tavares */ 2 5 2 6 dcl rifp ptr; 2 7 2 8 dcl 1 rcp_init_flags based (rifp), 2 9 2 unload_on_detach bit (1) unaligned, /* ON => tape volumes are unloaded after detaching */ 2 10 2 pad1 bit (2) unaligned, /* obsolete */ 2 11 2 resource_mgmt_enabled bit (1) unaligned, /* ON => resource management has been enabled */ 2 12 2 auto_registration bit (1) unaligned, /* ON => auto registration allowed */ 2 13 2 pad2 bit (2) unaligned, /* future expansion, possibly of authentication_level */ 2 14 2 authentication_level fixed bin (2) unaligned unsigned; /* see below for values */ 2 15 2 16 dcl (No_authentication initial (0), 2 17 Nominal_authentication initial (1), 2 18 Automatic_authentication initial (2), 2 19 Manual_authentication initial (3)) fixed bin internal static options (constant); 2 20 2 21 dcl authentication_level_names (0:3) char (12) internal static options (constant) initial 2 22 ("none", "nominal", "automatic", "manual"); 2 23 2 24 /* END INCLUDE FILE ... rcp_init_flags.incl.pl1 */ 1 113 1 114 1 115 /* End of include file ... rcp_data.incl.pl1 */ 96 3 1 /* Begin include file ... rcp_com_seg.incl.pl1 3 2* * 3 3* * Created on 11/20/74 by Bill Silver. 3 4* * Modified on 09/19/77 by R.J.C. Kissel to add label authentication bits. 3 5* * Modified on 12/09/78 by Michael R. Jordan to add removable media bit and label_type. 3 6* * Modified 1/79 by R.J.C. Kissel to add disk label authentication bits. 3 7* * Modified 2/79 by Michael R. Jordan to add volume_density. 3 8* * Modified 11/84 by Paul Farley to add fips flag. 3 9* * Modified 1/3/85 by Fawcett to allow room for mca device type 3 10* * Modified 02/85 by Paul Farley to add no_protect and opr_int_available flags. 3 11* * This include file defines the Resource Control Package communication segment. 3 12* * This segment is used to communicate requests between the various internal 3 13* * parts of RCP. 3 14**/ 3 15 3 16 /****^ HISTORY COMMENTS: 3 17* 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), 3 18* audit(85-12-09,CLJones), install(86-03-21,MR12.0-1033): 3 19* Support MCA and FIPS. 3 20* END HISTORY COMMENTS */ 3 21 3 22 dcl lock_info_ptr ptr; /* Pointer to lock info structure. */ 3 23 dcl rcs_ptr ptr; /* Pointer to base of RCS. */ 3 24 dcl rcse_ptr ptr; /* Pointer to an RCS entry. */ 3 25 3 26 dcl 1 based_rcp_id based aligned, /* Overlay of an rcp_id. */ 3 27 (2 id_count fixed bin (17), /* Unique count index. */ 3 28 2 rcse_off bit (18)) unaligned; /* Offset of rcp_com_seg entry. */ 3 29 3 30 dcl 1 rcs based (rcs_ptr) aligned, /* Begin at word zero of rcp_com_seg. */ 3 31 2 lock_info like lock_info, /* Data used to lock this segment. */ 3 32 2 ws_maxs (8) fixed bin (19), /* Max IOI workspace size in words. */ 3 33 2 ws_pmaxs (8) fixed bin (19), /* Max IOI workspace size for priv attachments. */ 3 34 2 to_maxs (8) fixed bin (71), /* Max IOI time-out intervals in microseconds. */ 3 35 2 sys_directory char (32), /* Directory used to define a system process. */ 3 36 2 sys_acs char (32), /* Entry name used to define a system process. */ 3 37 2 acs_directory char (32), /* Directory containing device ACSs. */ 3 38 2 id_count fixed bin (35), /* Counter used to form rcp_id. */ 3 39 2 max_entries fixed bin, /* Maximum number of entries allowed. */ 3 40 2 num_entries fixed bin, /* Total number of entries. */ 3 41 2 first_free_off bit (18), /* Offset of first free entry. */ 3 42 2 entry (0 refer (rcs.num_entries)) /* Array of request entries. */ 3 43 like rcse, /* See structure below. */ 3 44 2 end bit (36); /* End of rcp_com_seg. */ 3 45 3 46 dcl 1 lock_info based (lock_info_ptr) aligned, /* Used to meter locking. */ 3 47 2 lock bit (36), /* The lock itself. */ 3 48 2 num_locks fixed bin (35), /* Number of times locked. */ 3 49 2 num_lock_waits fixed bin (35), /* Number of lock waits. */ 3 50 2 time_of_lock fixed bin (71), /* Time of last lock. */ 3 51 2 tot_lock_time fixed bin (71), /* Total time locked. */ 3 52 2 tot_wait_time fixed bin (71), /* Total time waiting for lock. */ 3 53 2 starting_time fixed bin (71); /* Time metering started. */ 3 54 3 55 dcl 1 rcse based (rcse_ptr) aligned, /* Up to state must = rcpd.device. */ 3 56 2 device_name char (8), /* Name of device associated with this entry. */ 3 57 2 volume_name char (32), /* Volume name. Blank => no volume. */ 3 58 2 dtypex fixed bin, /* Device type index. */ 3 59 2 model fixed bin, /* Device model number. */ 3 60 2 num_qualifiers fixed bin, /* Number of device qualifiers. */ 3 61 2 qualifiers (4) fixed bin (35), /* Device qualifiers. */ 3 62 2 state_time fixed bin (71), /* Time device put into current state. */ 3 63 2 state fixed bin, /* 0 - free 1 - assigning 2 - assigned */ 3 64 /* 3 - attaching 4 - attached 5 - completed. */ 3 65 3 66 /* * * * * ** Following fields are unique to RCS entry. */ 3 67 2 kind fixed bin, /* 1 => attach, 2 => assign */ 3 68 2 free_off bit (18), /* Offset of next free entry. 0 => not free. */ 3 69 2 user_off bit (18), /* Offset of next entry in user list. */ 3 70 2 device_off bit (18), /* Offset of device entry in RCPD. */ 3 71 2 volume_off bit (18), /* Offset of volume entry in RCPD. */ 3 72 2 rcse_off bit (18), /* Offset of associated RCS entry. */ 3 73 2 caller_level fixed bin, /* Caller's validation level. */ 3 74 2 disposition bit (1), /* ON => retain, OFF => unassign. */ 3 75 2 flags, /* Special info flags. */ 3 76 (3 device bit (1), /* ON => assigning a specific device. */ 3 77 3 priv bit (1), /* ON => attached with IOI privilege. */ 3 78 3 system bit (1), /* ON => assigned to a system process. */ 3 79 3 t_and_d bit (1), /* ON => T&D attachment. */ 3 80 3 volume bit (1), /* ON => volume associated with this device. */ 3 81 3 writing bit (1), /* ON => writing on volume. */ 3 82 3 have_auth bit (1), /* ON => tape volume authenticated. */ 3 83 3 need_auth bit (1), /* ON => tape volume needs authentication. */ 3 84 3 auth_set bit (1), /* ON => "have_auth" has been set. */ 3 85 3 preload_allowed bit (1), /* ON => preloading of volumes is allowed. */ 3 86 3 preloaded bit (1), /* ON => volume may be loaded on device. */ 3 87 3 not_removable_media bit (1), /* ON => cannot remove volume from device. */ 3 88 3 disk_ss_pack bit (1), /* ON => disk is a storage system volume. */ 3 89 3 disk_copy_of_ss_pack bit (1), /* ON => disk is a copy of a storage system volume. */ 3 90 3 disk_io_pack bit (1), /* ON => disk has label but is not storage system. */ 3 91 3 disk_unregistered bit (1), /* ON => disk is unregistered storage system volume. */ 3 92 3 disk_unreadable bit (1), /* ON => io error reading disk label. */ 3 93 3 must_auto_register bit (1), /* ON => unregistered volume requested */ 3 94 3 fips bit (1), /* ON => FIPS device. */ 3 95 3 no_protect bit (1), /* ON => device has no protect sw. */ 3 96 3 opr_int_available bit (1), /* ON => device connected to MPC with OI button. */ 3 97 3 unused bit (6), 3 98 3 volume_density_index fixed bin (3) unsigned, /* Density of volume */ 3 99 3 label_type fixed bin (6) unsigned)unaligned, /* Type of label read by RCP. */ 3 100 2 rcp_id bit (36), /* ID of this entry. */ 3 101 2 event_id fixed bin (71), /* Caller's event channel ID. */ 3 102 2 process_id bit (36), /* ID of calling process. */ 3 103 2 group_id char (32), /* Group ID of calling process. */ 3 104 2 ecode fixed bin (35), /* Assignment error code. */ 3 105 2 version_num fixed bin, /* Device info version number. */ 3 106 2 workspace_max fixed bin (19), /* Max size of IOI workspace buffer. */ 3 107 2 timeout_max fixed bin (71), /* Max IOI time-out interval. */ 3 108 2 ioi_index fixed bin, /* IOI device index. */ 3 109 2 workspace_ptr ptr, /* Pointer to IOI workspace buffer. */ 3 110 2 caller_comment char (64); /* Caller's comment. */ 3 111 3 112 /* End of include file ... rcp_com_seg.incl.pl1 */ 97 98 99 init: entry (arg_ev_chan, arg_ecode); 100 101 /* This entry point is called by the system process that will handle 102* * the mount timer wakeups. This entry just has to save the process 103* * ID of this process and the IPC event channel used for the mount timer 104* * wakeups. 105**/ 106 call cu_$level_get (caller_level); /* Save caller's validation level. */ 107 call cu_$level_set (get_ring_ ()); /* Set RCP's validation level. */ 108 109 rcpd_ptr = rcp_pointers_$data (); /* Get a pointer to RCP_DATA. */ 110 111 rcpd.mtimer_chan = arg_ev_chan; /* Save event channel and PID. */ 112 rcpd.mtimer_pid = get_process_id_ (); 113 save_pid = rcpd.mtimer_pid; /* Save process ID. */ 114 115 arg_ecode = 0; 116 call cu_$level_set (caller_level); /* Reset caller's validation level. */ 117 return; 118 119 account_init: entry (arg_ev_chan, arg_ecode); 120 121 /* This entry point is called by the system process that will handle 122* * the accounting wakeups. This entry just has to save the process ID 123* * of this process and the IPC event channel used for the accounting wakeups. 124* * It is in this program simply because of its similarity to the $init 125* * entry above: a convenience. 126**/ 127 128 call cu_$level_get (caller_level); /* Save/restor validation levels */ 129 call cu_$level_set (get_ring_ ()); 130 131 rcpd_ptr = rcp_pointers_$data (); /* Get a pointer to RCP_DATA. */ 132 133 rcpd.accounting_chan = arg_ev_chan; /* Copy params. */ 134 rcpd.accounting_pid = get_process_id_ (); 135 136 arg_ecode = 0; 137 call cu_$level_set (caller_level); 138 return; 139 140 check: entry (arg_device_off, arg_recheck_flag, arg_ecode); 141 142 /* This entry point is called by the system process that is handling 143* * mount timer wakeups. It passes in the RCPD device entry offset of 144* * the drive that it wants to check. This entry will check to see if 145* * a mount is now pending for this drive. If so, a message will be sent 146* * to the system operator asking that this mount be checked. The system 147* * process will be told to check on this mount again. 148**/ 149 call cu_$level_get (caller_level); /* Save callers validation level. */ 150 call cu_$level_set (get_ring_ ()); /* Set RCP validation level. */ 151 152 rcpd_ptr = rcp_pointers_$data (); /* Get pointer to RCPD. */ 153 device_off = arg_device_off; /* Copy argument. */ 154 155 ecode = 0; /* Initialize variables. */ 156 recheck_flag = "1"b; 157 158 if rcpd.mtimer_pid = "0"b /* Have we been initialized yet? */ 159 then goto CHECK_RETURN; /* No, just return. */ 160 161 if rcpd.mtimer_pid ^= save_pid /* Caller must be process that initialized. */ 162 then do; /* But it isn't. */ 163 ecode = error_table_$bad_processid; 164 goto CHECK_RETURN; 165 end; 166 167 /* Validate device entry offset. */ 168 if (device_off < rel (addr (rcpd.device))) | 169 (device_off >= rel (addr (rcpd.volume))) | 170 (mod ((fixed (device_off, 18) - fixed (rel (addr (rcpd.device)), 18)), size (device)) ^= 0) 171 then do; /* Offset not for a real entry. */ 172 ecode = error_table_$bad_index; 173 goto CHECK_RETURN; 174 end; 175 176 device_ptr = ptr (rcpd_ptr, device_off); /* Ok now to get ptr to device entry. */ 177 178 if device.dtypex > 2 /* Device must be a tape or disk drive. */ 179 then do; /* No, it is some other type of device. */ 180 ecode = error_table_$bad_index; 181 goto CHECK_RETURN;; 182 end; 183 184 recheck_flag = device.flags.mounting; /* ON => a mount is pending. */ 185 if recheck_flag then do; /* Is there a mount pending? */ 186 call admin_gate_$syserr (3, "RCP: Check Mount of ^[scratch^s^;^a^]^[ for writing^] on ^a for ^a", 187 (device.volume_name = ""), device.volume_name, device.flags.writing, device.device_name, device.group_id); 188 189 rcs_ptr = rcp_pointers_$com_seg (); 190 191 do rcsx = 1 to rcs.num_entries; 192 rcse_ptr = addr (rcs.entry (rcsx)); 193 194 if rcse.state ^= 0 then /* not free */ 195 if rcse.kind = 1 then /* attach entry */ 196 if rcse.device_name = device.device_name then do; 197 /* correct device */ 198 call rcp_comment_ (rcse_ptr); /* Type caller's comment. */ 199 goto CHECK_RETURN; 200 end; 201 end; 202 end; 203 204 CHECK_RETURN: 205 arg_recheck_flag = recheck_flag; /* Return arguments. */ 206 arg_ecode = ecode; 207 call cu_$level_set (caller_level); /* Reset validation level. */ 208 return; 209 210 set: entry (arg_device_off, arg_write_flag, arg_ecode); 211 212 /* This entry point is called by RCP within the mounting process. 213* * The mount pending flag is turned ON for the specified device. 214* * A wakeup is sent to the mount timer process. 215**/ 216 rcpd_ptr = rcp_pointers_$data (); /* Get pointer to RCPD. */ 217 device_off = arg_device_off; /* Get RCPD device entry offset. */ 218 device_ptr = ptr (rcpd_ptr, device_off); /* Now get pointer to device entry. */ 219 220 if rcpd.mtimer_chan = 0 /* Is mount timer process there? */ 221 then do; /* No, nothing to do. */ 222 arg_ecode = 0; 223 return; 224 end; 225 226 device.flags.writing = arg_write_flag; /* Remember if mounting for writing. */ 227 device.flags.mounting = "1"b; /* Turn ON mount pending flag. */ 228 229 message_ptr = addr (message_buffer); /* Set up mount timer message. */ 230 message.key = "rcmt"; /* Name of message. */ 231 message.device_off = device_off; /* RCPD devce entry offset. */ 232 message.mbz = "0"b; 233 234 call hcs_$wakeup (rcpd.mtimer_pid, rcpd.mtimer_chan, message_buffer, ecode); 235 236 arg_ecode = ecode; 237 return; 238 239 reset: entry (arg_device_off, arg_ecode); 240 241 /* This entry is called by RCP within the mounting process to turn OFF 242* * the mount pending flag. 243**/ 244 245 rcpd_ptr = rcp_pointers_$data (); /* Get pointer to RCPD. */ 246 device_ptr = ptr (rcpd_ptr, arg_device_off); 247 248 device.flags.mounting = "0"b; /* Mount no longer pending. */ 249 250 arg_ecode = 0; 251 return; 252 253 /* BEGIN MESSAGE DOCUMENTATION 254* 255* Message: 256* RCP: Check Mount of REELID {for writing} on DRIVE for PERSON.PROJ.T 257* 258* S: $beep 259* 260* T: $run 261* 262* M: The request to mount tape reel REELID has been unsatisfied for over 4 minutes. 263* 264* A: Mount the reel or use "x deny" to inform the user that the reel cannot be mounted. 265* 266* 267* END MESSAGE DOCUMENTATION */ 268 269 end rcp_mount_timer_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0807.0 rcp_mount_timer_.pl1 >spec>install>1111>rcp_mount_timer_.pl1 96 1 03/27/86 1120.0 rcp_data.incl.pl1 >ldd>include>rcp_data.incl.pl1 1-113 2 11/21/79 1458.3 rcp_init_flags.incl.pl1 >ldd>include>rcp_init_flags.incl.pl1 97 3 03/27/86 1120.0 rcp_com_seg.incl.pl1 >ldd>include>rcp_com_seg.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. accounting_chan 26 based fixed bin(71,0) level 2 dcl 1-29 set ref 133* accounting_pid 30 based bit(36) level 2 dcl 1-29 set ref 134* addr builtin function dcl 82 ref 168 168 168 192 229 admin_gate_$syserr 000016 constant entry external dcl 87 ref 186 arg_device_off parameter bit(18) dcl 49 ref 140 153 210 217 239 246 arg_ecode parameter fixed bin(35,0) dcl 50 set ref 99 115* 119 136* 140 206* 210 222* 236* 239 250* arg_ev_chan parameter fixed bin(71,0) dcl 51 ref 99 111 119 133 arg_recheck_flag parameter bit(1) dcl 52 set ref 140 204* arg_write_flag parameter bit(1) dcl 53 ref 210 226 caller_level 000100 automatic fixed bin(17,0) dcl 58 set ref 106* 116* 128* 137* 149* 207* cu_$level_get 000020 constant entry external dcl 88 ref 106 128 149 cu_$level_set 000022 constant entry external dcl 89 ref 107 116 129 137 150 207 device based structure level 1 dcl 1-59 in procedure "rcp_mount_timer_" set ref 168 device based structure array level 2 in structure "rcpd" dcl 1-29 in procedure "rcp_mount_timer_" set ref 168 168 device_name based char(8) level 2 in structure "rcse" dcl 3-55 in procedure "rcp_mount_timer_" ref 194 device_name based char(8) level 2 in structure "device" dcl 1-59 in procedure "rcp_mount_timer_" set ref 186* 194 device_off 000101 automatic bit(18) dcl 59 in procedure "rcp_mount_timer_" set ref 153* 168 168 168 176 217* 218 231 device_off 1 based bit(18) level 2 in structure "message" packed packed unaligned dcl 69 in procedure "rcp_mount_timer_" set ref 231* device_ptr 000114 automatic pointer dcl 1-26 set ref 168 176* 178 184 186 186 186 186 186 194 218* 226 227 246* 248 dtype based structure level 1 dcl 1-51 dtypex 12 based fixed bin(17,0) level 2 dcl 1-59 ref 178 ecode 000102 automatic fixed bin(35,0) dcl 60 set ref 155* 163* 172* 180* 206 234* 236 entry 110 based structure array level 2 dcl 3-30 set ref 192 error_table_$bad_index 000012 external static fixed bin(35,0) dcl 84 ref 172 180 error_table_$bad_processid 000014 external static fixed bin(35,0) dcl 85 ref 163 fixed builtin function dcl 82 ref 168 168 flags 35 based structure level 2 dcl 1-59 get_process_id_ 000024 constant entry external dcl 90 ref 112 134 get_ring_ 000026 constant entry external dcl 91 ref 107 107 129 129 150 150 group_id 37 based char(32) level 2 dcl 1-59 set ref 186* hcs_$wakeup 000030 constant entry external dcl 92 ref 234 key based char(4) level 2 dcl 69 set ref 230* kind 25 based fixed bin(17,0) level 2 dcl 3-55 ref 194 lock_info based structure level 1 dcl 3-46 mbz 1(18) based bit(18) level 2 packed packed unaligned dcl 69 set ref 232* message based structure level 1 dcl 69 message_buffer 000104 automatic fixed bin(71,0) dcl 61 set ref 229 234* message_ptr 000106 automatic pointer dcl 62 set ref 229* 230 231 232 mod builtin function dcl 82 ref 168 mounting 35(04) based bit(1) level 3 packed packed unaligned dcl 1-59 set ref 184 227* 248* mtimer_chan 22 based fixed bin(71,0) level 2 dcl 1-29 set ref 111* 220 234* mtimer_pid 24 based bit(36) level 2 dcl 1-29 set ref 112* 113 158 161 234* num_entries 106 based fixed bin(17,0) level 2 dcl 3-30 ref 191 ptr builtin function dcl 82 ref 176 218 246 rcp_comment_ 000032 constant entry external dcl 93 ref 198 rcp_init_flags based structure level 1 packed packed unaligned dcl 2-8 rcp_pointers_$com_seg 000034 constant entry external dcl 94 ref 189 rcp_pointers_$data 000036 constant entry external dcl 95 ref 109 131 152 216 245 rcpd based structure level 1 dcl 1-29 rcpd_ptr 000112 automatic pointer dcl 1-24 set ref 109* 111 112 113 131* 133 134 152* 158 161 168 168 168 176 216* 218 220 234 234 245* 246 rcs based structure level 1 dcl 3-30 rcs_ptr 000116 automatic pointer dcl 3-23 set ref 189* 191 192 rcse based structure level 1 dcl 3-55 rcse_ptr 000120 automatic pointer dcl 3-24 set ref 192* 194 194 194 198* rcsx 000111 automatic fixed bin(17,0) dcl 64 set ref 191* 192* recheck_flag 000110 automatic bit(1) packed unaligned dcl 63 set ref 156* 184* 185 204 rel builtin function dcl 82 ref 168 168 168 save_pid 000010 internal static bit(36) initial dcl 77 set ref 113* 161 size builtin function dcl 82 ref 168 state 24 based fixed bin(17,0) level 2 dcl 3-55 ref 194 tot_devices 16 based fixed bin(17,0) level 2 dcl 1-29 ref 168 tot_dtypes 15 based fixed bin(17,0) level 2 dcl 1-29 ref 168 168 168 volume based structure level 1 dcl 1-101 in procedure "rcp_mount_timer_" volume based structure array level 2 in structure "rcpd" dcl 1-29 in procedure "rcp_mount_timer_" set ref 168 volume_name 2 based char(32) level 2 dcl 1-59 set ref 186 186* writing 35(05) based bit(1) level 3 packed packed unaligned dcl 1-59 set ref 186* 226* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Automatic_authentication internal static fixed bin(17,0) initial dcl 2-16 Manual_authentication internal static fixed bin(17,0) initial dcl 2-16 No_authentication internal static fixed bin(17,0) initial dcl 2-16 Nominal_authentication internal static fixed bin(17,0) initial dcl 2-16 authentication_level_names internal static char(12) initial array packed unaligned dcl 2-21 based_rcp_id based structure level 1 dcl 3-26 dtype_ptr automatic pointer dcl 1-25 lock_info_ptr automatic pointer dcl 3-22 rifp automatic pointer dcl 2-6 volume_ptr automatic pointer dcl 1-27 NAMES DECLARED BY EXPLICIT CONTEXT. CHECK_RETURN 000535 constant label dcl 204 ref 158 164 173 181 199 account_init 000145 constant entry external dcl 119 check 000241 constant entry external dcl 140 init 000051 constant entry external dcl 99 rcp_mount_timer_ 000037 constant entry external dcl 14 reset 000652 constant entry external dcl 239 set 000554 constant entry external dcl 210 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1104 1144 705 1114 Length 1416 705 40 236 177 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rcp_mount_timer_ 144 external procedure is an external procedure. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 save_pid rcp_mount_timer_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME rcp_mount_timer_ 000100 caller_level rcp_mount_timer_ 000101 device_off rcp_mount_timer_ 000102 ecode rcp_mount_timer_ 000104 message_buffer rcp_mount_timer_ 000106 message_ptr rcp_mount_timer_ 000110 recheck_flag rcp_mount_timer_ 000111 rcsx rcp_mount_timer_ 000112 rcpd_ptr rcp_mount_timer_ 000114 device_ptr rcp_mount_timer_ 000116 rcs_ptr rcp_mount_timer_ 000120 rcse_ptr rcp_mount_timer_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as call_ext_out_desc call_ext_out return_mac mdfx1 ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. admin_gate_$syserr cu_$level_get cu_$level_set get_process_id_ get_ring_ hcs_$wakeup rcp_comment_ rcp_pointers_$com_seg rcp_pointers_$data THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_index error_table_$bad_processid LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 14 000036 99 000044 106 000061 107 000067 109 000105 111 000114 112 000120 113 000127 115 000133 116 000134 117 000142 119 000143 128 000155 129 000164 131 000202 133 000211 134 000215 136 000224 137 000225 138 000234 140 000235 149 000251 150 000260 152 000276 153 000305 155 000311 156 000312 158 000314 161 000317 163 000322 164 000324 168 000325 172 000366 173 000370 176 000371 178 000375 180 000400 181 000402 184 000403 185 000407 186 000410 189 000464 191 000473 192 000503 194 000507 198 000523 199 000532 201 000533 204 000535 206 000540 207 000542 208 000551 210 000552 216 000564 217 000573 218 000577 220 000602 222 000605 223 000606 226 000607 227 000614 229 000616 230 000620 231 000622 232 000624 234 000626 236 000643 237 000645 239 000646 245 000662 246 000671 248 000677 250 000701 251 000702 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved