/* Begin include file ...... ioi_data.incl.pl1 */ /****^ HISTORY COMMENTS: 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), audit(85-12-09,CLJones), install(86-03-21,MR12.0-1033): Support for FIPS and IMU. 2) change(86-05-16,Kissel), approve(86-07-30,MCR7461), audit(86-07-31,Coren), install(86-08-19,MR12.0-1120): Changed the value of IOI_DEFAULT_MAX_BOUND from 4096 to 1024. This corrects a problem when RCP tries to set the maximum workspace size if it is less than 4096. Since ioi_ (actually grab_aste) touched all the pages at assignment time, the current length is 4, and trying to set the max length to less than 4 (e.g. because the max unprivileged workspace size in RCP for a special device is 1) returns an error. END HISTORY COMMENTS */ /* Rewritten May 1982 by C. Hornig for new ioi_ */ /* Rewrite finished March 1983 by Chris Jones */ /* Extended for reconfiguration April 1983 by Chris Jones. */ /* Modified November 1983 by Chris Jones to separate items in the dte protected by different locks. */ /* Modified January 1984 by Chris Jones to add ite's. */ /* Modified Feb 1984 by Rich Fawcett to add ipc and fips */ /* Modified Sept 1985 by Paul Farley to add controller flag to dte. */ /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ dcl idp ptr; /* pointer to IOI data structure */ dcl gtep ptr; /* pointer to channel/device group entry */ dcl ctep ptr; /* pointer to channel table entry */ dcl dtep ptr; /* pointer to wired device table entry */ dcl itep ptr; /* pointer to I/O multiplexer entry */ dcl (ioi_subsystems, ioi_devices, ioi_channels, ioi_multiplexers) fixed bin; dcl ioi_data$ external; /* IOI data segment */ dcl 1 ioi_data based (idp) aligned, /* I/O Interfacer data structure */ 2 ngt fixed bin, /* number of groups */ 2 nct fixed bin, /* number of channels */ 2 ndt fixed bin, /* number of devices */ 2 nit fixed bin, /* number of IOMs */ 2 spurious_interrupts fixed bin (35), /* interrupts with no status */ 2 reconfig_lock like lock, /* lock for reconfiguring devices, channels, etc. */ 2 flags, 3 setup bit (1) unal, /* "1"b => ioi_init has run */ 3 pad1 bit (35) unal, 2 rss_idcw bit (36), /* reset status IDCW */ 2 pad2 (6) fixed bin (35), /* pad to 16 words */ 2 dt (ioi_devices refer (ioi_data.ndt)) like dte aligned, /* device table */ 2 gt (ioi_subsystems refer (ioi_data.ngt)) like gte aligned, /* channel/device group table */ 2 ct (ioi_channels refer (ioi_data.nct)) like cte aligned, /* channel table */ 2 it (ioi_multiplexers refer (ioi_data.nit)) like ite aligned; /* multiplexer table */ %include hc_lock; dcl 1 ite based (itep) aligned, /* I/O multiplexer table entry */ 2 model char (4), /* which flavor we are */ 2 flags, ( 3 deleting bit (1), 3 deleted bit (1) ) unaligned, 2 pad1 bit (16) unaligned, 2 iom_table_idx fixed bin (17) unaligned, 2 tag fixed bin (3), 2 pad2 (5) bit (36); dcl 1 gte based (gtep) aligned, /* channel/device group table entry */ 2 lock bit (36), /* (0) loop lock */ 2 name char (4), /* (1) subsystem name */ 2 dtep bit (18) unaligned, /* (2) rel ptr to device just serviced */ 2 ctep bit (18) unaligned, /* (2) rel ptr to thread of channel table entries */ 2 detailed_status_cmd bit (6) unal, /* (3) idcw command to read detailed status */ 2 flags unaligned, /* (3) */ 3 psia bit (1), /* "1"b if channel is PSIA */ 3 suspend_devices bit (1), /* "1"b if device I/O suspended */ 3 dual_controller bit (1), /* "1"b if dual controller subsystem (disk only) */ 3 ascii_dtst bit (1), /* "1"b if detailed status sent in ASCII mode */ 3 mplex bit (1), /* "1"b if channels are multiplexed among devices */ 3 ipc bit (1), /* "1"b if devices are on an IMU */ 3 fips bit (1), /* "1"b if devices start at zero */ 3 pad bit (23), 2 n_devices fixed bin, /* (4) number of devices in device table thread */ 2 pending_connects fixed bin, /* (5) count of pending connect requests */ 2 io_log_info_index fixed bin, /* (6) index into io_log_status_info table */ 2 disk_data_subsystem_idx fixed bin; /* (7) index into disk_data.array for disks */ dcl 1 cte based (ctep) aligned, /* channel table entry */ 2 next_ctep bit (18) unaligned, /* (0) rel ptr to next channel table entry */ 2 gtep bit (18) unaligned, /* (0) rel ptr to channel/device group table entry */ 2 flags1 unaligned, /* (1) */ 3 ioi_use bit (1), /* "1"b if channel currently being used */ 3 connected bit (1), /* "1"b if channel is connected */ 3 toss_status bit (1), /* "1"b if status is to be ignored */ 3 quiescing bit (1), /* "1"b if the channel is just finishing what it's doing */ 3 direct bit (1), /* "1"b if this is a direct channel */ 3 pad1 bit (4), 2 disktab_ctx fixed bin (9) uns unal, /* (1) index into disktab.chantab for this channel */ 2 cur_dtep bit (18) unaligned, /* (1) current device table entry */ 2 chanid char (8), /* (2) io_manager's name for channel */ 2 statusp ptr unal, /* (4) pointer to first word of status */ 2 chx fixed bin (35), /* (5) channel index for io_manager */ 2 time_limit fixed bin (71), /* (6) connect time limit */ 2 saved_status unaligned, /* (8) status repository while reading detailed status */ 3 word1 bit (36), 3 word2 bit (36), 3 word4 bit (36), 3 next_lpw_offset bit (18), 3 command bit (6), 2 pad3 bit (12) unaligned, /* (11) */ 2 base_ctep bit (18) unaligned, /* (12) rel ptr to base logical chan. of physical chan. */ 2 itep bit (18) unaligned, /* (12) rel ptr to itep */ 2 flags2 unaligned, /* (13) */ 3 deleting bit (1), /* "1"b if attempting to delete this channel */ 3 deleted bit (1), /* "1"b if channel deleted */ 2 pad4 bit (16) unaligned, /* (13) */ 2 channel_table_idx fixed bin (17) unaligned, 2 pad5 (2) bit (36); /* (14) pad to 8 word boundary */ dcl 1 dte based (dtep) aligned, /* wired device table entry */ 2 next_dtep bit (18) unaligned, /* (0) rel ptr to next entry in thread */ 2 gtep bit (18) unaligned, /* (0) rel ptr to channel/device group table entry */ 2 cur_ctep bit (18) unaligned, /* (1) rel ptr to channel in use */ 2 flags1 unaligned, /* (1) flags protected by gte lock */ 3 connected bit (1), /* "1"b if device has a channel */ 3 log_status_cnt bit (1), /* "1"b if count in log_status is valid */ 3 reading_detailed_status bit (1), /* "1"b if read of detailed device status in progress */ 3 pad1 bit (15), 2 channel_required char (8), /* (2) channel name of required channel */ 2 ev_chn fixed bin (71), /* (4) event ID for status wakeups */ 2 workspace_ptr ptr, /* (6) workspace pointer */ 2 workspace_astep ptr, /* (8) workspace ASTE ptr */ 2 workspace_sdw fixed bin (71), /* (10) SDW of workspace segment */ 2 ptp ptr, /* (12) device page table */ 2 max_bound fixed bin (19), /* (14) largest allowable bound of workspace segment */ 2 bound fixed bin (19), /* (15) bound of workspace */ 2 process_id bit (36), /* (16) ID of process owning device */ 2 ring fixed bin (3), /* (17) highest ring allowed to access device */ 2 device bit (6) unal, /* (18) device code */ 2 flags2 unal, /* (18) constant or protected by dte lock */ 3 priv bit (1), /* "1"b if privileged user */ 3 in_use bit (1), /* "1"b if device is to be used */ 3 deleting bit (1), /* "1"b if trying to delete this device */ 3 deleted bit (1), /* "1"b if this device is deleted */ 3 suspended bit (1), /* "1"b if device isn't to be used temporarily */ 3 workspace_wired bit (1), /* "1"b if workspace is wired */ 3 direct bit (1), /* "1"b if device is connected to a direct channel */ 3 controller bit (1), /* "1"b if dte for the devices controller */ 3 pad2 bit (4), 2 device_table_idx fixed bin (17) unaligned, 2 listx uns fixed bin (18) unal, /* (19) DCW list index for connect */ 2 idcw_listx uns fixed bin (18) unal, /* (19) DCW list index of IDCW */ 2 timeout fixed bin (35), /* (20) time limit for I/O completion (usec) */ 2 max_timeout fixed bin (35), /* (21) maximum allowable timeout grace time (usec) */ 2 unwire_time fixed bin (71), /* (22) when to unwire the workspace */ 2 pcw bit (36), /* (24) peripheral control word (PCW) */ 2 status_control, /* (25) */ 3 status_offset fixed bin (18) unsigned unaligned, /* offset of status queue in user workspace */ 3 status_entries fixed bin (9) unsigned unaligned, /* number of entries in status queue */ 3 status_entry_idx fixed bin (9) unsigned unaligned, /* next entry to be used */ 2 idcw bit (36), /* (26) instruction DCW (KEEP ON EVEN WORD BOUNDARY) */ 2 tdcw bit (36), /* (27) transfer DCW to remainder of list */ 2 special_status bit (36), /* (28) special interrupt status */ 2 lock like lock, /* (29) wait lock */ 2 log_status, /* (32) */ ( 3 level fixed bin (3) unsigned, 3 time_out bit (1), 3 type bit (2), 3 command bit (6), 3 count fixed bin (6) unsigned, 3 channel bit (18), 3 status bit (36) ) unaligned, 2 ptx fixed bin, /* (34) index of page table */ 2 active bit (1), /* (35) "1"b if device running or to run */ 2 special_interrupt bit (1), /* (36) "1"b if special interrupt received */ 2 detailed_status_valid bit (1), /* (37) "1"b if detailed status read sucessfully */ 2 last_log_time fixed bin (71), /* (38) when status was last logged */ 2 detailed_status (8) bit (36), /* (40) (buffer for reading most recent detailed status */ 2 log_detailed_status (8) bit (36); /* (48) copy of last detailed status logged */ /**** Defaults for various I/O parameters */ dcl IOI_DEFAULT_MAX_BOUND fixed bin (19) static options (constant) init (1024); dcl IOI_DEFAULT_MAX_TIMEOUT fixed bin (35) static options (constant) init (30000000); dcl IOI_DEFAULT_TIMEOUT fixed bin (35) static options (constant) init (30000000); dcl IO_STATUS_ERROR_MASK bit (36) static options (constant) init ("370000770000"b3); dcl IO_CHANNEL_LOCK_TEMPLATE char (2) int static options (constant) init ("ch"); dcl IOI_DEVICE_LOCK_EVENT_TEMPLATE char (2) static options (constant) init ("dv"); /* End of include file ...... ioi_data.incl.pl1 */ */ ----------------------------------------------------------- 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 */