/* START OF: oc_data.incl.pl1 * * * * * * * * * * * * * * * * * * * */ /****^ HISTORY COMMENTS: 1) change(85-11-14,Farley), approve(85-11-14,MCR6979), audit(85-11-14,Fawcett), install(86-03-21,MR12.0-1033): Add support for MCA and IMU. 2) change(85-12-03,Farley), approve(85-12-03,MCR7306), audit(85-12-03,Fawcett), install(86-03-21,MR12.0-1033): Fix bugs found while doing Dipper changes. 3) change(85-12-03,Farley), approve(85-12-03,MCR7312), audit(85-12-03,Fawcett), install(86-03-21,MR12.0-1033): Add BCE MCA lock and unlock. 4) change(86-08-07,Farley), approve(86-10-07,MCR7523), audit(86-10-03,Fawcett), install(86-10-09,MR12.0-1181): Removed timeout_factor, as it is nolonger needed. 5) change(89-08-28,Farley), approve(89-09-18,MCR8132), audit(89-10-10,WAAnderson), install(89-10-11,MR12.3-1091): Increased MAX_IO_LENGTH from 132 to 256 to be consistent with oc_trans_output_. This also affects the size of oc_data structures. Trace entries have been reduced from 168 to 130. END HISTORY COMMENTS */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* Purpose: */ /* */ /* This include file describes the contents of the oc_data segment as well various other */ /* static values utilized to interface operator's consoles. Changes to this structure that */ /* would affect the size of the oc_data segment will require a change in the size of oc_data */ /* as specified in the MST header. This is true because the segment is fabricated at boot */ /* time and the size must be known prior to fabrication. */ /* */ /* This include file was recoded from its original version to add support for multiple */ /* consoles. */ /* */ /* Re-written: 05/01/83 */ /* */ /* Author: E. A. Ranzenbach (Ranzenbach.Multics@M) */ /* Location: System-M. */ /* Release: MR10.2 */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* Modifications: */ /* */ /* Date Author Reason */ /* */ /* 840410 Edward A. Ranzenbach Cut size of I/O's to 132 chars... */ /* 840427 Edward A. Ranzenbach Added "off" console state..." */ /* 850111 Edward A. Ranzenbach Added lost special interrupt protection. */ /* 850215 Paul K Farley Add pcw_ignored flag in oc_entry. */ /* 850522 Paul K Farley Add MCA lock/unlock info. */ /* 850827 Paul K Farley Add more info to event trace. */ /* 850913 Paul K Farley Add timeout_factor variable to oc_entry. */ /* 851114 Paul K Farley Remove pcw_ignored flag, imu flag will do. */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* format: off */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* The DCW list consists of an array of sixteen single word Device Control Words that are used to */ /* drive the console devices. These DCWs are listed in their stored order followed by the effects */ /* that they produce: */ /* */ /* 1 = reset status IDCW -> Reset the console channel... */ /* 2 = write alert IDCW -> Output a bell character to the console... */ /* 3 = write IDCW -> Put console in output mode... */ /* 4 = write DCW -> Describes intended outgoing data transfer... */ /* 5 = write IDCW - newline -> Put console in output mode... */ /* 6 = write DCW - newline -> Describes newline transfer... */ /* 7 = read IDCW -> Put the console in input mode... */ /* 8 = read DCW -> Describes intended data transfer... */ /* 9 = read_unechoed IDCW -> Put the console in unechoed input mode... */ /* 10 = read_unechoed DCW -> Describes intended data transfer... */ /* 11 = write IDCW - prompt */ /* 12 = write DCW - prompt */ /* 13 = write IDCW - discard -> Put console in output mode... */ /* 14 = write DCW - discard -> Describes discard notice... */ /* 15 = lock MCA IDCW -> Disable MCA input from console... */ /* 16 = unlock MCA IDCW -> Enable MCA input from console... */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ dcl oc_data$ external; /* so we can find it... */ dcl 1 oc_data aligned based (oc_data_ptr), 2 lock bit (36), /* global lock for all of oc_data... */ 2 version char (4), /* should equal oc_data_version... */ 2 console_cnt fixed bin (17) unaligned, /* number of configured consoles... */ 2 bootload_console_idx fixed bin (17) unaligned, /* index into opc of bootload console...*/ 2 flags, 3 in_service bit (1) unaligned, /* ON => at least one usable console... */ 3 crash_on_crf bit (1) unaligned, /* ON => crash on recovery failure... */ 3 mc_io_enabled bit (1) unaligned, /* ON => MC is handling I/O... */ 3 list_consoles bit (1) unaligned, /* ON => list the console assignments...*/ 3 printer_on bit (1) unaligned, /* ON => echo read characters... */ 3 write_q_full bit (1) unaligned, /* ON => the write queue is full... */ 3 must_have_console bit (1) unaligned, /* ON => we must have a real console... */ 3 pad_oc_data_flags bit (29) unaligned, /* pad to word boundry... */ 2 no_lock_flags, /* these flags can be modified without */ /* lock protection... */ 3 got_special_int bit (1) unaligned, /* we could not process this special... */ 3 pad_no_lock_flags bit (35) unaligned, 2 pad_misc fixed bin (35), /* to preserve even word alignment... */ 2 prompt char (8), /* string used to prompt for input... */ 2 discard_notice char (24), /* displayed at BREAK condition... */ 2 write_return bit (36), /* newline string = PAD PAD CR NL... */ 2 abs_addr fixed bin (26), /* absolute address of oc_data$... */ 2 status_ptr ptr, /* points to IOM status word... */ 2 io_ptr ptr, /* -> I/O being processed... */ 2 last_read_queued fixed bin (71), /* last time a READ was queued... */ 2 last_write_queued fixed bin (71), /* last time a WRITE was queued... */ 2 last_poll_time fixed bin (71), /* last time of timeout poll by pxss... */ 2 max_computed_io_time fixed bin (71), /* maximum time an I/O could take... */ 2 err_event_cid fixed bin (71), /* channel used to signal inop state... */ 2 err_event_pid bit (36), /* ID of process handling inop states...*/ 2 reader_process_id bit (36), /* only process allowed to read... */ 2 next_free_write fixed bin (17) unaligned, /* index of the next free WRITE slot... */ 2 next_event fixed bin (17) unaligned, /* next event index... */ 2 stacked_read_cnt fixed bin (17) unaligned, /* READ stack... */ 2 pad_oc_data bit (18) unaligned, 2 priority_io like console_io, /* oc_data|42(8)... */ 2 read_io like console_io, /* oc_data|154(8)... */ 2 write_queue (WRITE_QUEUE_SIZE) /* oc_data|266(8)... */ like console_io, 2 meters, /* metering cell at oc_data|1406... */ 3 pushed_read_cnt fixed bin (35), /* count of times read stack was used...*/ 3 write_q_full_cnt fixed bin (35), /* count of WRITE fails for no room... */ 3 queued_special_int_count fixed bin (35), 3 pad_meters(7) fixed bin (35), /* for future use... */ 2 opc (MAX_OPC_CNT) /* oc_data|1420, 1454, 1510, 1544, 1600...*/ like oc_entry, /* 1634, 1670, 1724... */ 2 event (EVENT_QUEUE_SIZE) /* oc_data|1760 thru oc_data|3777... */ like oc_event; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* The following structure describes a configured console. */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ dcl 1 oc_entry aligned based (oc_entry_ptr), /* one for each console 34(8) words... */ 2 name char (4), /* name of this console, i.e. "opca"... */ 2 opc_idx fixed bin (17) unaligned, /* index of this entry in opc array... */ 2 model fixed bin (17) unaligned, /* model of the console... */ 2 flags, 3 active bit (1) unaligned, /* ON => this entry is in use... */ 3 assigned bit (1) unaligned, /* ON => io_manager knows device... */ 3 bootload_console bit (1) unaligned, /* ON => this is the bootload console...*/ 3 alternate bit (1) unaligned, /* ON => console used if active fails...*/ 3 inop_device bit (1) unaligned, /* ON => console is inoperative... */ 3 io_device bit (1) unaligned, /* ON => console is not available to us.*/ 3 no_device bit (1) unaligned, /* ON => console has been deleted... */ 3 config_change bit (1) unaligned, /* ON => config change has occurred... */ 3 prompt bit (1) unaligned, /* ON => prompt for input... */ 3 pcw_io bit (1) unaligned, /* ON => use PCW's instead of IDCW's... */ 3 io_in_progress bit (1) unaligned, /* ON => I/O op is in progress... */ 3 got_special_int bit (1) unaligned, /* ON => RE(TURN QUEST) key was hit... */ 3 oper_request bit (1) unaligned, /* ON => operator has hit request key...*/ 3 discard bit (1) unaligned, /* ON => discard output... */ 3 discarded bit (1) unaligned, /* ON => (output discarded) printed... */ 3 read_unechoed_option /* ON => read_unechoed option installed.*/ bit (1) unaligned, /* option must not be installed... */ 3 imu bit (1) unaligned, /* ON => console located in an IMU... */ 3 pad_flag bit (19) unaligned, /* pad to word boundry... */ 2 channel char (8), /* name of this console's channel... */ 2 device_idx fixed bin (35), /* operator's console device id... */ 2 line_leng fixed bin (17) unaligned, /* line length of the console... */ 2 dcw_list_idx fixed bin (17) unaligned, /* DCW list in progess... */ 2 retry_cnt fixed bin (17) unaligned, /* times I/O op has been retried... */ 2 RESERVED_PAD fixed bin (17) unaligned, /* pad to oc_entry + 10(8)... */ 2 io_time fixed bin (71), /* time last I/O began... */ 2 status_word bit (36), /* last valid status word received... */ 2 dcw_list (16) bit (36), /* DCWs used to drive the console... */ 2 pad_oc_entry_end bit (36); /* pad to 34(8) words... */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* This is the format of a console I/O. A pointer to this structure is passed to us by the process */ /* wishing to perform a console I/O. The caller will fill in the following things for a read I/O: */ /* */ /* console_io.event_chan - Will be an event channel to wake the user on when the */ /* I/O completes. */ /* */ /* console_io.read - Set to "1"b indicating a read. */ /* */ /* For a write the following information is supplied: */ /* */ /* console_io.alert - Set to "1"b if the console alarm is to be on for the */ /* write. */ /* */ /* console_io.read - Set to "0"b. */ /* */ /* console_io.sequence_no - Set to the syserr sequence number for syserr calls. */ /* */ /* console_io.leng - Set to the word length of the message to be written. */ /* */ /* console_io.text - Set to the text of the message. */ /* */ /* In all cases ocdcm_ will properly reset those items not necessary to the type of I/O being */ /* performed. */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ dcl 1 console_io aligned based (console_io_ptr), /* format of a I/O, 112(8) words... */ 2 time_queued fixed bin (71), /* 0 indicates a free entry... */ 2 event_chan fixed bin (71), /* to send wakeup to when I/O completes.*/ 2 process_id bit (36), /* of the caller... */ 2 console char (4), /* name of the console the I/O went to..*/ 2 flags, /* start at console_io + 6(8)... */ 3 alert bit (1) unaligned, /* ON => ring bell first... */ 3 read bit (1) unaligned, /* ON => this is a read request... */ 3 alerted bit (1) unaligned, /* ON => we have successfully alerted...*/ 3 prompted bit (1) unaligned, /* ON => we have successfully prompted..*/ 3 in_progress bit (1) unaligned, /* ON => I/O has been started... */ 3 completed bit (1) unaligned, /* ON => the I/O has completed... */ 3 retry_reset bit (1) unaligned, /* ON => I/O was reset by retry_io... */ 3 pad_flag bit (29) unaligned, /* pad to word boundry... */ 2 sequence_no fixed bin (35), /* syserr sequence number... */ 2 leng fixed bin (17) unaligned, /* in words of the I/O... */ 2 MBZ fixed bin (17) unaligned, /* reserved for future use... */ 2 pad_text fixed bin (35), /* I/O must start on even word boundry..*/ 2 text char (MAX_IO_LENGTH); /* the actual I/O... */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* The following structure is used to log an event occurring in in the console software. */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ dcl 1 oc_event aligned based (oc_event_ptr), /* each event is 10(8) words long... */ 2 time fixed bin (71), /* time event took place... */ 2 opc_name char (4), /* bootload console at time of event... */ 2 opc_flags like oc_entry.flags, /* bootload console flags... */ 2 process_id bit (36), /* process logging the event... */ 2 event_number fixed bin (35), /* number of the event being logged... */ 2 event_io_ptr ptr; /* ptr to I/O in progress during event..*/ dcl ( /* indices for ease of use... */ RESET_DCW init (1), ALERT_DCW init (2), WRITE_DCW init (3), NEWLINE_DCW init (5), READ_DCW init (7), READ_UNECHOED_DCW init (9), PROMPT_DCW init (11), DISCARD_DCW init (13), LOCK_MCA_DCW init (15), UNLOCK_MCA_DCW init (16) ) fixed bin (17) internal static options (constant); dcl ( /* list of event numbers... */ INIT_OC_DATA init (1), GOT_SPECIAL_INT init (2), PRIORITY_OUTPUT init (3), QUEUED_READ init (4), QUEUED_WRITE init (5), STARTED_READ init (6), STARTED_UNECHOED_READ init (7), STARTED_WRITE init (8), RESET_CHANNEL init (9), SENT_ALERT init (10), SENT_NEWLINE init (11), SENT_PROMPT init (12), TERMINATED_RESET init (13), TERMINATED_ALERT init (14), TERMINATED_NEWLINE init (15), TERMINATED_PROMPT init (16), TERMINATED_READ init (17), TERMINATED_WRITE init (18), SENT_WAKEUP init (19), READ_PICKUP init (20), PUSHED_READ init (21), POPPED_READ init (22), READ_NOT_IN_PROGRESS init (23), LOGGED_ERROR init (24), IO_TIMEOUT init (25), RETRY_IO init (26), GOT_LOCK init (27), FREED_LOCK init (28), DISCARDED_OUTPUT init (29), SENT_MC_IO init (30), SENT_MC_PRIORITY_IO init (31), MC_IO_PICKUP init (32), MC_IO_FAILURE init (33), LOCK_MCA_IO init (34), UNLOCK_MCA_IO init (35), TERMINATED_MCA_LOCK init (36), TERMINATED_MCA_UNLOCK init (37) ) fixed bin (35) internal static options (constant); dcl oc_data_version char (4) init ("1.3") /* for general information... */ static internal options (constant); dcl ( oc_data_ptr, oc_entry_ptr, oc_event_ptr, console_io_ptr ) ptr; dcl ( MAX_OPC_CNT init (8), /* maximum number of consoles... */ MAX_RETRIES init (2), /* we retry I/O ops this many times... */ EVENT_QUEUE_SIZE init (130), /* use up the rest of the 2 pages... */ WRITE_QUEUE_SIZE init (8) /* number of queued writes allowed... */ ) fixed bin (17) internal static options (constant); dcl MAX_IMU_IO_TIME fixed bin (17) /* longest possible IMU I/O time... */ internal static options (constant) init (150); /* 2 minutes 30 seconds... */ dcl MAX_IO_TIME (16) fixed bin (17) /* maximum time the associated I/O */ internal static options (constant) /* operation is allowed to take in */ init /* seconds... */ ( 1, /* RESET_STATUS... */ 1, /* WRITE ALERT... */ 10, /* WRITE DATA... */ 0, /* DUMMY for WRITE DATA DCW... */ 2, /* WRITE CR, NL... */ 0, /* DUMMY for WRITE CR, NL DCW... */ 90, /* READ DATA... */ 0, /* DUMMY for READ DATA DCW... */ 90, /* READ_UNECHOED DATA... */ 0, /* DUMMY for READ_UNECHOED DATA DCW... */ 1, /* WRITE PROMPT... */ 0, /* DUMMY for WRITE PROMPT DCW... */ 10, /* DISCARD DCW... */ 0, /* DUMMY for DISCARD DCW... */ 30, /* LOCK MCA IO... */ 30 /* UNLOCK MCA IO... */ ); dcl MAX_IO_LENGTH fixed bin (17) internal static options (constant) init (256); /* in characters... */ dcl MAX_MAX_IO_TIME fixed bin (17) /* longest possible I/O time... */ internal static options (constant) init (150); /* should be the same as the longest... */ /* END OF: oc_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 */