COMPILATION LISTING OF SEGMENT ioi_device 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 1017.9 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 6* * * 7* *********************************************************** */ 8 9 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 10 11 ioi_device: 12 procedure; 13 14 /* Written May 1982 by C. Hornig for new ioi_ */ 15 /* Finished March 1983 by Chris Jones */ 16 /* Modified April 1984 by Chris Jones to fix bug when unlocking after a dead process. */ 17 18 /****^ HISTORY COMMENTS: 19* 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), 20* audit(85-11-26,CLJones), install(86-03-21,MR12.0-1033): 21* Add support for FIPS. 22* 2) change(86-02-03,Farley), approve(86-07-18,MCR7439), 23* audit(86-08-18,Fawcett), install(86-10-20,MR12.0-1189): 24* Changed to execute in the BCE environment. 25* 3) change(86-11-18,Farley), approve(86-11-20,MECR0002), 26* audit(86-11-19,Fawcett), install(86-11-20,MR12.0-1222): 27* Corrected a race condition with the setting of dte.lock by validating that 28* the device is still assigned to the process AFTER getting the lock. (e.g. 29* the Initializer had the lock as part of doing a force unassignment of the 30* device and now the device table entry is initialized.) 31* 4) change(86-12-19,Farley), approve(86-12-19,MCR7587), 32* audit(86-12-19,Fawcett), install(87-01-05,MR12.0-1253): 33* Formal installation to close out above MECR0002. 34* END HISTORY COMMENTS */ 35 36 dcl p_code fixed bin (35) parameter; 37 dcl p_device bit (6) aligned parameter; 38 dcl p_controller bit (1) aligned parameter; 39 dcl p_devx fixed bin parameter; 40 dcl p_dtep ptr parameter; 41 dcl p_gtep ptr parameter; 42 43 dcl code fixed bin (35); 44 dcl device bit (6) aligned; 45 dcl controller bit (1) aligned; 46 dcl devx fixed bin; 47 dcl force_flag bit (1) aligned; 48 dcl test_processid bit (36) aligned; 49 50 dcl ioi_assignment$unassign 51 entry (fixed bin, fixed bin (35)); 52 dcl lock$lock_fast entry (ptr); 53 dcl lock$unlock_fast entry (ptr); 54 dcl tc_util$validate_processid 55 entry (bit (36) aligned, fixed bin (35)); 56 57 dcl error_table_$already_assigned 58 fixed bin (35) ext static; 59 dcl error_table_$bad_index fixed bin (35) ext static; 60 dcl error_table_$bad_ring_brackets 61 fixed bin (35) ext static; 62 dcl error_table_$dev_nt_assnd 63 fixed bin (35) ext static; 64 dcl error_table_$invalid_device 65 fixed bin (35) ext static; 66 dcl error_table_$process_unknown 67 fixed bin (35) ext static; 68 69 dcl pds$process_id bit (36) aligned external; 70 dcl pds$validation_level fixed bin (3) external; 71 72 dcl sys_info$service_system 73 bit (1) aligned external static; 74 75 dcl (addr, hbound, lbound, null, ptr, rel, stac, stacq) 76 builtin; 77 78 /* * * * * * * * * * GET_DTEP * * * * * * * * * */ 79 80 get_dtep: 81 entry (p_devx, p_dtep, p_code); 82 83 force_flag = "0"b; 84 goto get_dtep_join; 85 86 get_dtep_force: 87 entry (p_devx, p_dtep, p_code); 88 89 force_flag = "1"b; 90 get_dtep_join: 91 devx = p_devx; 92 p_dtep = null (); 93 p_code = 0; 94 95 idp = addr (ioi_data$); 96 if (devx < lbound (ioi_data.dt, 1)) | (devx > hbound (ioi_data.dt, 1)) then do; 97 p_code = error_table_$bad_index; 98 return; 99 end; 100 101 dtep, p_dtep = addr (ioi_data.dt (devx)); 102 103 if ^force_flag & (dte.process_id ^= pds$process_id) then do; 104 p_code = error_table_$dev_nt_assnd; 105 return; 106 end; 107 108 if ^force_flag & (dte.ring < pds$validation_level) then do; 109 p_code = error_table_$bad_ring_brackets; 110 return; 111 end; 112 113 if sys_info$service_system then do; 114 call lock$lock_fast (addr (dte.lock)); 115 if ^force_flag & (dte.process_id ^= pds$process_id) then do; 116 p_code = error_table_$dev_nt_assnd; /* lost the race */ 117 call lock$unlock_fast (addr (dte.lock)); 118 return; 119 end; 120 end; 121 return; 122 123 /* * * * * * * * * * UNLOCK * * * * * * * * * */ 124 125 unlock: 126 entry (p_dtep); 127 128 dtep = p_dtep; 129 if sys_info$service_system then 130 call lock$unlock_fast (addr (dte.lock)); 131 return; 132 133 /* * * * * * * * * * ASSIGN * * * * * * * * * */ 134 135 assign: 136 entry (p_gtep, p_device, p_controller, p_devx, p_code); 137 138 gtep = p_gtep; 139 device = p_device; 140 controller = p_controller; 141 idp = addr (ioi_data$); 142 call find_dte; 143 if dtep = null () then do; 144 p_code = error_table_$invalid_device; 145 return; 146 end; 147 148 /**** We now try to get control of this device by placing our process_id (PID) in the dte. If the PID is zero, 149* no one else has the device and we will be successful. If the PID in the dte is non-zero, we check to 150* see if the process which controls the device is still alive. If it is, we give up; the device is under the 151* control of that process. If the PID in the dte is for a non-existant process, we slam our PID on top 152* of it. We use gating instructions (stac and stacq) for all of this since another process on another 153* processor may be trying to do the same thing. ****/ 154 155 if ^sys_info$service_system then 156 dte.process_id = pds$process_id; /* If not UP force setting */ 157 else do while (^stac (addr (dte.process_id), pds$process_id)); 158 test_processid = dte.process_id; 159 call tc_util$validate_processid (test_processid, code); 160 if code ^= error_table_$process_unknown then do; 161 p_code = error_table_$already_assigned; 162 return; 163 end; 164 if stacq (dte.process_id, pds$process_id, test_processid) then do; 165 /* grab the device */ 166 call ioi_assignment$unassign (devx, code); 167 if code ^= 0 then do; 168 dte.process_id = ""b; /* could use stacq, but what if it fails? */ 169 p_code = code; 170 return; 171 end; 172 end; 173 end; 174 175 dte.ring = pds$validation_level; 176 p_devx = devx; 177 p_code = 0; 178 return; 179 180 /* * * * * * * * * * UNASSIGN * * * * * * * * * */ 181 182 unassign: 183 entry (p_dtep); 184 185 dtep = p_dtep; 186 gtep = ptr (dtep, dte.gtep); 187 dte.process_id = ""b; /* all necessary validation has already been done */ 188 return; 189 190 find_dte: 191 proc; 192 193 do devx = 1 to ioi_data.ndt; 194 dtep = addr (ioi_data.dt (devx)); 195 if dte.in_use & (rel (gtep) = dte.gtep) & (dte.device = device) & (dte.controller = controller) then 196 return; 197 end; 198 dtep = null (); /* couldn't find it */ 199 return; 200 201 end find_dte; 202 1 1 /* Begin include file ...... ioi_data.incl.pl1 */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), 1 6* audit(85-12-09,CLJones), install(86-03-21,MR12.0-1033): 1 7* Support for FIPS and 1 8* IMU. 1 9* 2) change(86-05-16,Kissel), approve(86-07-30,MCR7461), audit(86-07-31,Coren), 1 10* install(86-08-19,MR12.0-1120): 1 11* Changed the value of IOI_DEFAULT_MAX_BOUND from 4096 to 1024. This 1 12* corrects a problem when RCP tries to set the maximum workspace size if it 1 13* is less than 4096. Since ioi_ (actually grab_aste) touched all the pages 1 14* at assignment time, the current length is 4, and trying to set the max 1 15* length to less than 4 (e.g. because the max unprivileged workspace size in 1 16* RCP for a special device is 1) returns an error. 1 17* END HISTORY COMMENTS */ 1 18 1 19 /* Rewritten May 1982 by C. Hornig for new ioi_ */ 1 20 /* Rewrite finished March 1983 by Chris Jones */ 1 21 /* Extended for reconfiguration April 1983 by Chris Jones. */ 1 22 /* Modified November 1983 by Chris Jones to separate items in the dte protected by different locks. */ 1 23 /* Modified January 1984 by Chris Jones to add ite's. */ 1 24 /* Modified Feb 1984 by Rich Fawcett to add ipc and fips */ 1 25 /* Modified Sept 1985 by Paul Farley to add controller flag to dte. */ 1 26 1 27 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 28 1 29 dcl idp ptr; /* pointer to IOI data structure */ 1 30 dcl gtep ptr; /* pointer to channel/device group entry */ 1 31 dcl ctep ptr; /* pointer to channel table entry */ 1 32 dcl dtep ptr; /* pointer to wired device table entry */ 1 33 dcl itep ptr; /* pointer to I/O multiplexer entry */ 1 34 1 35 dcl (ioi_subsystems, ioi_devices, ioi_channels, ioi_multiplexers) 1 36 fixed bin; 1 37 dcl ioi_data$ external; /* IOI data segment */ 1 38 1 39 1 40 dcl 1 ioi_data based (idp) aligned, /* I/O Interfacer data structure */ 1 41 2 ngt fixed bin, /* number of groups */ 1 42 2 nct fixed bin, /* number of channels */ 1 43 2 ndt fixed bin, /* number of devices */ 1 44 2 nit fixed bin, /* number of IOMs */ 1 45 2 spurious_interrupts 1 46 fixed bin (35), /* interrupts with no status */ 1 47 2 reconfig_lock like lock, /* lock for reconfiguring devices, channels, etc. */ 1 48 2 flags, 1 49 3 setup bit (1) unal, /* "1"b => ioi_init has run */ 1 50 3 pad1 bit (35) unal, 1 51 2 rss_idcw bit (36), /* reset status IDCW */ 1 52 2 pad2 (6) fixed bin (35), /* pad to 16 words */ 1 53 2 dt (ioi_devices refer (ioi_data.ndt)) like dte aligned, 1 54 /* device table */ 1 55 2 gt (ioi_subsystems refer (ioi_data.ngt)) like gte aligned, 1 56 /* channel/device group table */ 1 57 2 ct (ioi_channels refer (ioi_data.nct)) like cte aligned, 1 58 /* channel table */ 1 59 2 it (ioi_multiplexers refer (ioi_data.nit)) like ite aligned; 1 60 /* multiplexer table */ 2 1 /* Begin include file hc_lock.incl.pl1 BIM 2/82 */ 2 2 /* Replaced by hc_fast_lock.incl.pl1 RSC 11/84 because name of structure 2 3* encourages name conflicts. 2 4* USE HC_FAST_LOCK INSTEAD! 2 5**/ 2 6 2 7 /* Lock format suitable for use with lock$lock_fast, unlock_fast */ 2 8 2 9 /* format: style3 */ 2 10 2 11 declare lock_ptr pointer; 2 12 declare 1 lock aligned based (lock_ptr), 2 13 2 pid bit (36) aligned, /* holder of lock */ 2 14 2 event bit (36) aligned, /* event associated with lock */ 2 15 2 flags aligned, 2 16 3 notify_sw bit (1) unaligned, 2 17 3 pad bit (35) unaligned; /* certain locks use this pad, like dirs */ 2 18 2 19 /* End include file hc_lock.incl.pl1 */ 1 61 1 62 1 63 dcl 1 ite based (itep) aligned, /* I/O multiplexer table entry */ 1 64 2 model char (4), /* which flavor we are */ 1 65 2 flags, 1 66 ( 3 deleting bit (1), 1 67 3 deleted bit (1) 1 68 ) unaligned, 1 69 2 pad1 bit (16) unaligned, 1 70 2 iom_table_idx fixed bin (17) unaligned, 1 71 2 tag fixed bin (3), 1 72 2 pad2 (5) bit (36); 1 73 1 74 dcl 1 gte based (gtep) aligned, /* channel/device group table entry */ 1 75 2 lock bit (36), /* (0) loop lock */ 1 76 2 name char (4), /* (1) subsystem name */ 1 77 2 dtep bit (18) unaligned, /* (2) rel ptr to device just serviced */ 1 78 2 ctep bit (18) unaligned, /* (2) rel ptr to thread of channel table entries */ 1 79 2 detailed_status_cmd 1 80 bit (6) unal, /* (3) idcw command to read detailed status */ 1 81 2 flags unaligned, /* (3) */ 1 82 3 psia bit (1), /* "1"b if channel is PSIA */ 1 83 3 suspend_devices bit (1), /* "1"b if device I/O suspended */ 1 84 3 dual_controller bit (1), /* "1"b if dual controller subsystem (disk only) */ 1 85 3 ascii_dtst bit (1), /* "1"b if detailed status sent in ASCII mode */ 1 86 3 mplex bit (1), /* "1"b if channels are multiplexed among devices */ 1 87 3 ipc bit (1), /* "1"b if devices are on an IMU */ 1 88 3 fips bit (1), /* "1"b if devices start at zero */ 1 89 3 pad bit (23), 1 90 2 n_devices fixed bin, /* (4) number of devices in device table thread */ 1 91 2 pending_connects fixed bin, /* (5) count of pending connect requests */ 1 92 2 io_log_info_index fixed bin, /* (6) index into io_log_status_info table */ 1 93 2 disk_data_subsystem_idx 1 94 fixed bin; /* (7) index into disk_data.array for disks */ 1 95 1 96 dcl 1 cte based (ctep) aligned, /* channel table entry */ 1 97 2 next_ctep bit (18) unaligned, /* (0) rel ptr to next channel table entry */ 1 98 2 gtep bit (18) unaligned, /* (0) rel ptr to channel/device group table entry */ 1 99 2 flags1 unaligned, /* (1) */ 1 100 3 ioi_use bit (1), /* "1"b if channel currently being used */ 1 101 3 connected bit (1), /* "1"b if channel is connected */ 1 102 3 toss_status bit (1), /* "1"b if status is to be ignored */ 1 103 3 quiescing bit (1), /* "1"b if the channel is just finishing what it's doing */ 1 104 3 direct bit (1), /* "1"b if this is a direct channel */ 1 105 3 pad1 bit (4), 1 106 2 disktab_ctx fixed bin (9) uns unal, /* (1) index into disktab.chantab for this channel */ 1 107 2 cur_dtep bit (18) unaligned, /* (1) current device table entry */ 1 108 2 chanid char (8), /* (2) io_manager's name for channel */ 1 109 2 statusp ptr unal, /* (4) pointer to first word of status */ 1 110 2 chx fixed bin (35), /* (5) channel index for io_manager */ 1 111 2 time_limit fixed bin (71), /* (6) connect time limit */ 1 112 2 saved_status unaligned, /* (8) status repository while reading detailed status */ 1 113 3 word1 bit (36), 1 114 3 word2 bit (36), 1 115 3 word4 bit (36), 1 116 3 next_lpw_offset bit (18), 1 117 3 command bit (6), 1 118 2 pad3 bit (12) unaligned, /* (11) */ 1 119 2 base_ctep bit (18) unaligned, /* (12) rel ptr to base logical chan. of physical chan. */ 1 120 2 itep bit (18) unaligned, /* (12) rel ptr to itep */ 1 121 2 flags2 unaligned, /* (13) */ 1 122 3 deleting bit (1), /* "1"b if attempting to delete this channel */ 1 123 3 deleted bit (1), /* "1"b if channel deleted */ 1 124 2 pad4 bit (16) unaligned, /* (13) */ 1 125 2 channel_table_idx fixed bin (17) unaligned, 1 126 2 pad5 (2) bit (36); /* (14) pad to 8 word boundary */ 1 127 1 128 dcl 1 dte based (dtep) aligned, /* wired device table entry */ 1 129 2 next_dtep bit (18) unaligned, /* (0) rel ptr to next entry in thread */ 1 130 2 gtep bit (18) unaligned, /* (0) rel ptr to channel/device group table entry */ 1 131 2 cur_ctep bit (18) unaligned, /* (1) rel ptr to channel in use */ 1 132 2 flags1 unaligned, /* (1) flags protected by gte lock */ 1 133 3 connected bit (1), /* "1"b if device has a channel */ 1 134 3 log_status_cnt bit (1), /* "1"b if count in log_status is valid */ 1 135 3 reading_detailed_status 1 136 bit (1), /* "1"b if read of detailed device status in progress */ 1 137 3 pad1 bit (15), 1 138 2 channel_required char (8), /* (2) channel name of required channel */ 1 139 2 ev_chn fixed bin (71), /* (4) event ID for status wakeups */ 1 140 2 workspace_ptr ptr, /* (6) workspace pointer */ 1 141 2 workspace_astep ptr, /* (8) workspace ASTE ptr */ 1 142 2 workspace_sdw fixed bin (71), /* (10) SDW of workspace segment */ 1 143 2 ptp ptr, /* (12) device page table */ 1 144 2 max_bound fixed bin (19), /* (14) largest allowable bound of workspace segment */ 1 145 2 bound fixed bin (19), /* (15) bound of workspace */ 1 146 2 process_id bit (36), /* (16) ID of process owning device */ 1 147 2 ring fixed bin (3), /* (17) highest ring allowed to access device */ 1 148 2 device bit (6) unal, /* (18) device code */ 1 149 2 flags2 unal, /* (18) constant or protected by dte lock */ 1 150 3 priv bit (1), /* "1"b if privileged user */ 1 151 3 in_use bit (1), /* "1"b if device is to be used */ 1 152 3 deleting bit (1), /* "1"b if trying to delete this device */ 1 153 3 deleted bit (1), /* "1"b if this device is deleted */ 1 154 3 suspended bit (1), /* "1"b if device isn't to be used temporarily */ 1 155 3 workspace_wired bit (1), /* "1"b if workspace is wired */ 1 156 3 direct bit (1), /* "1"b if device is connected to a direct channel */ 1 157 3 controller bit (1), /* "1"b if dte for the devices controller */ 1 158 3 pad2 bit (4), 1 159 2 device_table_idx fixed bin (17) unaligned, 1 160 2 listx uns fixed bin (18) unal, /* (19) DCW list index for connect */ 1 161 2 idcw_listx uns fixed bin (18) unal, /* (19) DCW list index of IDCW */ 1 162 2 timeout fixed bin (35), /* (20) time limit for I/O completion (usec) */ 1 163 2 max_timeout fixed bin (35), /* (21) maximum allowable timeout grace time (usec) */ 1 164 2 unwire_time fixed bin (71), /* (22) when to unwire the workspace */ 1 165 2 pcw bit (36), /* (24) peripheral control word (PCW) */ 1 166 2 status_control, /* (25) */ 1 167 3 status_offset fixed bin (18) unsigned unaligned, 1 168 /* offset of status queue in user workspace */ 1 169 3 status_entries fixed bin (9) unsigned unaligned, 1 170 /* number of entries in status queue */ 1 171 3 status_entry_idx fixed bin (9) unsigned unaligned, 1 172 /* next entry to be used */ 1 173 2 idcw bit (36), /* (26) instruction DCW (KEEP ON EVEN WORD BOUNDARY) */ 1 174 2 tdcw bit (36), /* (27) transfer DCW to remainder of list */ 1 175 2 special_status bit (36), /* (28) special interrupt status */ 1 176 2 lock like lock, /* (29) wait lock */ 1 177 2 log_status, /* (32) */ 1 178 ( 3 level fixed bin (3) unsigned, 1 179 3 time_out bit (1), 1 180 3 type bit (2), 1 181 3 command bit (6), 1 182 3 count fixed bin (6) unsigned, 1 183 3 channel bit (18), 1 184 3 status bit (36) 1 185 ) unaligned, 1 186 2 ptx fixed bin, /* (34) index of page table */ 1 187 2 active bit (1), /* (35) "1"b if device running or to run */ 1 188 2 special_interrupt bit (1), /* (36) "1"b if special interrupt received */ 1 189 2 detailed_status_valid 1 190 bit (1), /* (37) "1"b if detailed status read sucessfully */ 1 191 2 last_log_time fixed bin (71), /* (38) when status was last logged */ 1 192 2 detailed_status (8) bit (36), /* (40) (buffer for reading most recent detailed status */ 1 193 2 log_detailed_status 1 194 (8) bit (36); /* (48) copy of last detailed status logged */ 1 195 1 196 /**** Defaults for various I/O parameters */ 1 197 1 198 dcl IOI_DEFAULT_MAX_BOUND fixed bin (19) static options (constant) init (1024); 1 199 dcl IOI_DEFAULT_MAX_TIMEOUT 1 200 fixed bin (35) static options (constant) init (30000000); 1 201 dcl IOI_DEFAULT_TIMEOUT fixed bin (35) static options (constant) init (30000000); 1 202 1 203 dcl IO_STATUS_ERROR_MASK bit (36) static options (constant) init ("370000770000"b3); 1 204 1 205 dcl IO_CHANNEL_LOCK_TEMPLATE 1 206 char (2) int static options (constant) init ("ch"); 1 207 dcl IOI_DEVICE_LOCK_EVENT_TEMPLATE 1 208 char (2) static options (constant) init ("dv"); 1 209 1 210 /* End of include file ...... ioi_data.incl.pl1 */ 203 204 205 end ioi_device; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0801.3 ioi_device.pl1 >spec>install>1110>ioi_device.pl1 203 1 09/02/86 1552.9 ioi_data.incl.pl1 >ldd>include>ioi_data.incl.pl1 1-61 2 01/06/85 1422.1 hc_lock.incl.pl1 >ldd>include>hc_lock.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. addr builtin function dcl 75 ref 95 101 114 114 117 117 129 129 141 157 194 code 000100 automatic fixed bin(35,0) dcl 43 set ref 159* 160 166* 167 169 controller 22(13) based bit(1) level 3 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_device" ref 195 controller 000102 automatic bit(1) dcl 45 in procedure "ioi_device" set ref 140* 195 cte based structure level 1 dcl 1-96 device 000101 automatic bit(6) dcl 44 in procedure "ioi_device" set ref 139* 195 device 22 based bit(6) level 2 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_device" ref 195 devx 000103 automatic fixed bin(17,0) dcl 46 set ref 90* 96 96 101 166* 176 193* 194* dt 20 based structure array level 2 dcl 1-40 set ref 96 96 101 194 dte based structure level 1 dcl 1-128 dtep 000112 automatic pointer dcl 1-32 set ref 101* 103 108 114 114 115 117 117 128* 129 129 143 155 157 158 164 168 175 185* 186 186 187 194* 195 195 195 195 198* error_table_$already_assigned 000020 external static fixed bin(35,0) dcl 57 ref 161 error_table_$bad_index 000022 external static fixed bin(35,0) dcl 59 ref 97 error_table_$bad_ring_brackets 000024 external static fixed bin(35,0) dcl 60 ref 109 error_table_$dev_nt_assnd 000026 external static fixed bin(35,0) dcl 62 ref 104 116 error_table_$invalid_device 000030 external static fixed bin(35,0) dcl 64 ref 144 error_table_$process_unknown 000032 external static fixed bin(35,0) dcl 66 ref 160 flags2 22(06) based structure level 2 packed packed unaligned dcl 1-128 force_flag 000104 automatic bit(1) dcl 47 set ref 83* 89* 103 108 115 gte based structure level 1 dcl 1-74 gtep 000110 automatic pointer dcl 1-30 in procedure "ioi_device" set ref 138* 186* 195 gtep 0(18) based bit(18) level 2 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_device" ref 186 195 hbound builtin function dcl 75 ref 96 idp 000106 automatic pointer dcl 1-29 set ref 95* 96 96 101 141* 193 194 in_use 22(07) based bit(1) level 3 packed packed unaligned dcl 1-128 ref 195 ioi_assignment$unassign 000010 constant entry external dcl 50 ref 166 ioi_data based structure level 1 dcl 1-40 ioi_data$ 000042 external static fixed bin(17,0) dcl 1-37 set ref 95 141 ite based structure level 1 dcl 1-63 lbound builtin function dcl 75 ref 96 lock based structure level 1 dcl 2-12 in procedure "ioi_device" lock 35 based structure level 2 in structure "dte" dcl 1-128 in procedure "ioi_device" set ref 114 114 117 117 129 129 lock$lock_fast 000012 constant entry external dcl 52 ref 114 lock$unlock_fast 000014 constant entry external dcl 53 ref 117 129 ndt 2 based fixed bin(17,0) level 2 dcl 1-40 ref 96 193 null builtin function dcl 75 ref 92 143 198 p_code parameter fixed bin(35,0) dcl 36 set ref 80 86 93* 97* 104* 109* 116* 135 144* 161* 169* 177* p_controller parameter bit(1) dcl 38 ref 135 140 p_device parameter bit(6) dcl 37 ref 135 139 p_devx parameter fixed bin(17,0) dcl 39 set ref 80 86 90 135 176* p_dtep parameter pointer dcl 40 set ref 80 86 92* 101* 125 128 182 185 p_gtep parameter pointer dcl 41 ref 135 138 pds$process_id 000034 external static bit(36) dcl 69 ref 103 115 155 157 164 pds$validation_level 000036 external static fixed bin(3,0) dcl 70 ref 108 175 process_id 20 based bit(36) level 2 dcl 1-128 set ref 103 115 155* 157 158 164 168* 187* ptr builtin function dcl 75 ref 186 rel builtin function dcl 75 ref 195 ring 21 based fixed bin(3,0) level 2 dcl 1-128 set ref 108 175* stac builtin function dcl 75 ref 157 stacq builtin function dcl 75 ref 164 sys_info$service_system 000040 external static bit(1) dcl 72 ref 113 129 155 tc_util$validate_processid 000016 constant entry external dcl 54 ref 159 test_processid 000105 automatic bit(36) dcl 48 set ref 158* 159* 164 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. IOI_DEFAULT_MAX_BOUND internal static fixed bin(19,0) initial dcl 1-198 IOI_DEFAULT_MAX_TIMEOUT internal static fixed bin(35,0) initial dcl 1-199 IOI_DEFAULT_TIMEOUT internal static fixed bin(35,0) initial dcl 1-201 IOI_DEVICE_LOCK_EVENT_TEMPLATE internal static char(2) initial packed unaligned dcl 1-207 IO_CHANNEL_LOCK_TEMPLATE internal static char(2) initial packed unaligned dcl 1-205 IO_STATUS_ERROR_MASK internal static bit(36) initial packed unaligned dcl 1-203 ctep automatic pointer dcl 1-31 ioi_channels automatic fixed bin(17,0) dcl 1-35 ioi_devices automatic fixed bin(17,0) dcl 1-35 ioi_multiplexers automatic fixed bin(17,0) dcl 1-35 ioi_subsystems automatic fixed bin(17,0) dcl 1-35 itep automatic pointer dcl 1-33 lock_ptr automatic pointer dcl 2-11 NAMES DECLARED BY EXPLICIT CONTEXT. assign 000231 constant entry external dcl 135 find_dte 000412 constant entry internal dcl 190 ref 142 get_dtep 000023 constant entry external dcl 80 get_dtep_force 000043 constant entry external dcl 86 get_dtep_join 000061 constant label dcl 90 set ref 84 ioi_device 000011 constant entry external dcl 11 unassign 000370 constant entry external dcl 182 unlock 000175 constant entry external dcl 125 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 716 762 457 726 Length 1214 457 44 215 236 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ioi_device 103 external procedure is an external procedure. find_dte internal procedure shares stack frame of external procedure ioi_device. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ioi_device 000100 code ioi_device 000101 device ioi_device 000102 controller ioi_device 000103 devx ioi_device 000104 force_flag ioi_device 000105 test_processid ioi_device 000106 idp ioi_device 000110 gtep ioi_device 000112 dtep ioi_device THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out return_mac stac_mac ext_entry stacq_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. ioi_assignment$unassign lock$lock_fast lock$unlock_fast tc_util$validate_processid THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$already_assigned error_table_$bad_index error_table_$bad_ring_brackets error_table_$dev_nt_assnd error_table_$invalid_device error_table_$process_unknown ioi_data$ pds$process_id pds$validation_level sys_info$service_system LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 11 000010 80 000016 83 000037 84 000040 86 000041 89 000057 90 000061 92 000063 93 000065 95 000066 96 000071 97 000077 98 000101 101 000102 103 000110 104 000120 105 000122 108 000123 109 000131 110 000133 113 000134 114 000136 115 000147 116 000156 117 000160 118 000170 121 000171 125 000172 128 000205 129 000210 131 000223 135 000224 138 000243 139 000247 140 000252 141 000255 142 000260 143 000261 144 000265 145 000270 155 000271 157 000300 158 000310 159 000313 160 000323 161 000327 162 000331 164 000332 166 000340 167 000350 168 000352 169 000354 170 000355 173 000356 175 000357 176 000362 177 000364 178 000365 182 000366 185 000400 186 000403 187 000410 188 000411 190 000412 193 000413 194 000423 195 000427 197 000452 198 000454 199 000456 ----------------------------------------------------------- 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