COMPILATION LISTING OF SEGMENT fnp_util 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 1030.4 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 13 14 /****^ HISTORY COMMENTS: 15* 1) change(86-06-05,GJohnson), approve(86-06-05,MCR7387), 16* audit(86-06-10,Martinson), install(86-07-11,MR12.0-1091): 17* Correct error message documentation. 18* END HISTORY COMMENTS */ 19 20 21 /* format: style4,delnl,insnl,^ifthendo */ 22 fnp_util: 23 procedure; 24 25 /* This procedure contains entries called through hphcs_ used to load and dump an 26* * FNP. The "wire" entry is used to wire the segment containing the core image so that 27* * DIA I/O will be possible; the "load" entry initiates the bootload I/O; the 28* * "release" entry releases the aste of the coreimage. 29* * The "fdump" entry dumps all of FNP memory into a segment supplied 30* * by the caller. 31* * 32* * Written 5/19/76 by Robert S. Coren 33* * Modified 10/28/76 by Robert S. Coren to save version number and report core image name 34* * Modified 04/15/77 by Robert S. Coren to correct bug in queue buffer freeing 35* * Modified 9/27/78 by J. Stern for multiplexing changes 36* * Modified 79 May 14 by Art Beattie to get memory size and FNP type from caller for fdump entry. 37* * Modified April 1981 by Chris Jones for io_manager conversion 38* * Modified February 1982 by C. Hornig for MR10 io_manager. 39* * Modified 830714 BIM to remove the release entrypoint. abort is suffcient. 40* * Modified 83-12-20 BIM for reconfiguration. 41* * Modified 84-05-18 BIM for better maintenance of io_manager_assigned bit. 42* * Modified 1984-08-02 BIM for code return from load. 43* * Modified 1984-07-26 BIM for paged I/O on loads. 44* * Modified 1985-01-29, BIM: fix dump_mpx to leave chn unassigned. 45* * Modified 1985-03-12, E. Swenson to fix unitialized timeout flag to 46* * prevent spurious timeout errors. 47**/ 48 49 50 /* PARAMETERS */ 51 52 dcl a_devx fixed bin; /* ioam release param */ 53 dcl a_fnp_no fixed bin; 54 dcl a_fnp_mem_size fixed bin; /* FNP memory size in 1024 18-bit words */ 55 dcl a_fnp_type fixed bin; 56 dcl a_ptr ptr; 57 dcl a_load_info_ptr ptr; 58 dcl a_count fixed bin; /* number of words to wire */ 59 dcl a_code fixed bin (35); /* OUTPUT */ 60 dcl a_ev_chan fixed bin (71); 61 dcl a_absadr fixed bin (24); /* OUTPUT from wire and info, INPUT to load */ 62 dcl a_version char (4); /* INPUT MCS version number */ 63 dcl a_image_name char (168); /* INPUT core image name */ 64 dcl norm_int_cell fixed bin; /* OUTPUT */ 65 dcl emergency_int_cell fixed bin; /* OUTPUT */ 66 dcl a_ints bit (2) aligned; /* OUTPUT rcvd interrupts */ 67 dcl a_level fixed bin (3); /* INPUT level on which to interrupt fnp */ 68 dcl a_fnp_addr fixed bin (15); /* INPUT data address in fnp */ 69 70 /* AUTOMATIC */ 71 72 dcl auto_absadr fixed bin (24); 73 dcl dia_timeout bit (1) aligned; 74 dcl fnp_no fixed bin; 75 dcl fnp_mem_size fixed bin; 76 dcl fnp_type fixed bin; 77 dcl fnp_addr fixed bin (15); 78 dcl chanid char (8) aligned; 79 dcl opcode bit (6) aligned; 80 dcl temp_fnp_name char (32); 81 dcl fnp_size fixed bin; 82 dcl segptr ptr; 83 dcl nwords fixed bin; 84 dcl code fixed bin (35); 85 dcl iom_channel_number fixed bin (7); 86 dcl devx fixed bin; 87 dcl i fixed bin; 88 dcl data_ptr ptr; 89 dcl offset fixed bin; 90 dcl fnp_tally fixed bin; 91 dcl start_time fixed bin (71); 92 dcl version char (4); 93 dcl cur_la_no bit (3); 94 dcl cur_slot_no fixed bin (6); 95 dcl load_info_ptr ptr; 96 dcl locked bit (1) aligned init ("0"b); 97 dcl config_locked bit (1) aligned init ("0"b); 98 99 declare message fixed bin (71); 100 declare 1 auto_fnp_msg aligned like fnp_msg; 101 102 /* BUILTINS */ 103 104 dcl (addr, addrel, baseno, bit, clock, fixed, min, null, ptr, string, substr) builtin; 105 106 107 /* ENTRIES */ 108 109 dcl config_$find_2 entry (character (4) aligned, character (4) aligned, pointer); 110 dcl fnp_multiplexer$assign entry (fixed binary, fixed binary (35)); 111 dcl fnp_multiplexer$unassign entry (fixed binary, fixed binary (35)); 112 dcl fnp_multiplexer$fnp_lock entry (pointer, fixed binary (35)); 113 dcl fnp_multiplexer$fnp_unlock entry (pointer); 114 dcl get_fnp_name_ entry (fixed bin) returns (char (32)); 115 dcl grab_aste$grab_aste_io entry (ptr, fixed bin, fixed bin (35)) returns (ptr); 116 dcl grab_aste$release_io entry (ptr); 117 dcl ioam_$assign entry (fixed bin, entry, fixed bin (35)); 118 dcl ioam_$unassign entry (fixed bin, fixed bin (35)); 119 dcl priv_channel_manager$get_devx entry (char (*), fixed bin, fixed bin (35)); 120 dcl dn355_util$compute_parity entry (bit (36)) returns (bit (36)); 121 dcl absadr entry (ptr, fixed bin (35)) returns (fixed bin (24)); 122 dcl ioi_page_table$get entry (fixed binary (19), fixed binary, fixed binary (35)); 123 dcl ioi_page_table$fill entry (fixed binary, pointer, fixed binary (35)); 124 dcl ioi_page_table$ptx_to_ptp entry (fixed binary) returns (pointer); 125 dcl ioi_page_table$put entry (fixed binary, fixed binary (35)); 126 dcl pxss$notify entry (fixed bin); 127 dcl pxss$addevent entry (fixed bin); 128 dcl pxss$delevent entry (fixed bin); 129 dcl pxss$wait entry; 130 dcl pxss$ring_0_wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin (35)); 131 dcl get_ptrs_$given_segno entry (fixed bin) returns (ptr); 132 dcl dn355$interrupt entry; 133 dcl syserr entry options (variable); 134 dcl syserr$error_code entry options (variable); 135 dcl lock$wait entry (ptr, char (4) aligned, fixed bin (35)); 136 dcl lock$lock_fast entry (pointer); 137 dcl lock$unlock_fast entry (pointer); 138 dcl lock$unlock entry (ptr, char (4) aligned); 139 dcl ( 140 pc_abs$wire_abs, 141 pc_abs$wire_abs_contig 142 ) entry (ptr, fixed bin, fixed bin, fixed bin (35)); 143 dcl pc_abs$unwire_abs entry (ptr, fixed bin, fixed bin); 144 145 /* EXTERNAL STATIC */ 146 147 dcl ( 148 error_table_$io_no_permission, 149 error_table_$invalid_state, 150 error_table_$bad_mpx_load_data, 151 error_table_$no_io_interrupt, 152 error_table_$rqover, 153 error_table_$bad_segment, 154 error_table_$noalloc, 155 error_table_$action_not_performed, 156 error_table_$io_configured, 157 error_table_$io_not_configured, 158 error_table_$io_assigned, 159 error_table_$io_not_assigned, 160 error_table_$io_not_defined 161 ) fixed bin (35) ext static; 162 163 dcl pds$processid bit (36) ext static; 164 dcl pds$process_group_id char (32) ext static; 165 dcl tc_data$initializer_id bit (36) aligned external static; 166 dcl tty_buf$fnp_config_flags (1:8) bit (1) unaligned external static; 167 dcl tty_buf$lct_ptr pointer external static; 168 dcl sst$astsize fixed bin external; 169 dcl sys_info$page_size fixed bin external; 170 dcl sys_info$seg_size_256K fixed bin (19) external; 171 172 /* INTERNAL STATIC */ 173 174 dcl ( 175 FNP_DOWN init (2) 176 ) fixed bin int static options (constant); 177 178 dcl fdump_seg_event char (4) aligned init ("fnpd") static options (constant); 179 dcl cleanup condition; 180 dcl record_quota_overflow condition; 181 182 183 /* BASED */ 184 185 dcl tally_words (fnp_tally) bit (36) aligned based; 186 187 dcl 1 dump_355_control aligned based (data_ptr), /* word used to supply 355 address and tally for fdump */ 188 2 address_mode bit (3) unaligned, /* always 36-bit addressing ("001"b) */ 189 2 fnp_address bit (15) unaligned, 190 2 tally fixed bin (17) unaligned; 191 192 dcl 1 dump_6670_control aligned based (data_ptr), /* word used to supply DN6670 address and tally for fdump */ 193 2 fnp_address fixed bin (18) unsigned unaligned, 194 2 unpaged bit (1) unaligned, 195 2 mbz bit (5) unaligned, 196 2 tally fixed bin (12) unsigned unaligned; 197 198 dcl 1 load_info aligned based (load_info_ptr), /* used to assign baud rates and line types at bootload time */ 199 2 no_entries fixed bin, 200 2 entries (0 refer (load_info.no_entries)), 201 3 devx fixed bin, 202 3 baud_rate fixed bin, 203 3 line_type fixed bin; 204 205 206 207 wire: 208 entry (a_fnp_no, a_ptr, a_absadr, a_count, a_code); 209 210 /* entry called to wire a_count words for segment at a_ptr */ 211 /* This does not require lock protection. If we miss a deconfig, tough */ 212 213 fnp_no = a_fnp_no; /* copy args */ 214 segptr = a_ptr; 215 nwords = a_count; 216 217 call validate_fnp_ret ("wire"); 218 call validate_assigned_ret ("wire"); 219 220 if fnp_info.wired /* Someone did it already? */ 221 then do; 222 a_code = 0; /* be gracious */ 223 if datanet_info.trace 224 then call syserr (ANNOUNCE, "fnp_util$wire: FNP ^a already wired.", fnp_info.fnp_tag); 225 /* but note for debugging */ 226 return; 227 end; 228 229 astep = grab_aste$grab_aste_io (segptr, nwords, code); 230 /* make segment stay active */ 231 232 if code ^= 0 233 then go to wire_error_return; 234 235 fnp_info.astep = astep; 236 fnp_info.n_pages_wired = divide (nwords + sys_info$page_size - 1, sys_info$page_size, 17, 0); 237 238 call pc_abs$wire_abs (astep, 0, fnp_info.n_pages_wired, code); 239 /* no contig -- we will use a page table! */ 240 if code ^= 0 241 then do; 242 call grab_aste$release_io (astep); /* couldn't wire, so let aste go */ 243 go to wire_error_return; 244 end; 245 call fill_bootload_page_table; /* sets the variable absadr */ 246 if datanet_info.trace 247 then call syserr (ANNOUNCE, "fnp_util$wire: seg: ^p n_pages: ^d astep ^p", segptr, fnp_info.n_pages_wired, 248 astep); 249 250 a_absadr = auto_absadr; /* relative to page table its 0 */ 251 fnp_info.wired = "1"b; 252 253 wire_error_return: 254 if code ^= 0 & (datanet_info.trace | datanet_info.debug_stop) 255 then do; 256 call syserr$error_code (ANNOUNCE, code, "fnp_util$wire: failed."); 257 call STOP_CHECK ("wire"); 258 end; 259 a_code = code; 260 return; 261 262 263 load: 264 entry (a_fnp_no, a_absadr, a_ev_chan, a_version, a_image_name, a_fnp_mem_size, a_load_info_ptr, a_code); 265 266 /* entry to initiate bootload I/O for loading an FNP */ 267 /* This cannot lock until it has the dump seg wired */ 268 269 fnp_no = a_fnp_no; 270 fnp_mem_size = a_fnp_mem_size; 271 auto_absadr = a_absadr; 272 call validate_fnp_ret ("load"); 273 call validate_assigned_ret ("load"); 274 275 if datanet_info.trace 276 then call syserr (ANNOUNCE, "fnp_util$load: FNP ^d ADDR ^o", fnp_no, auto_absadr); 277 278 if fnp_info.bootloading 279 then do; /* we can't do it while it's already happening */ 280 code = error_table_$invalid_state; 281 call syserr (ANNOUNCE, "fnp_util$load: FNP load already in progress for FNP ^a.", fnp_info.fnp_tag); 282 go to load_return; 283 end; 284 285 if ^fnp_info.wired 286 then do; 287 code = error_table_$invalid_state; 288 if datanet_info.trace 289 then call syserr (ANNOUNCE, "fnp_util$load: FNP ^a not wired.", fnp_info.fnp_tag); 290 go to load_return; 291 end; 292 293 if fnp_info.running 294 then do; 295 code = error_table_$invalid_state; 296 if datanet_info.trace 297 then call syserr (ANNOUNCE, "fnp_util$load: FNP ^a is running.", fnp_info.fnp_tag); 298 go to load_return; 299 end; 300 301 if fnp_info.t_and_d_in_progress 302 then do; 303 code = error_table_$invalid_state; 304 if datanet_info.trace 305 then call syserr (ANNOUNCE, "fnp_util$load: FNP ^a is running T&D.", fnp_info.fnp_tag); 306 go to load_return; 307 end; 308 309 /* process the load_info data */ 310 311 load_info_ptr = a_load_info_ptr; 312 if load_info.no_entries ^= fnp_info.no_of_channels 313 then do; 314 code = error_table_$bad_mpx_load_data; 315 go to load_return; 316 end; 317 318 cur_la_no = "7"b3; /* no current line adaptor */ 319 n_pcbs = load_info.no_entries; 320 do i = 1 to load_info.no_entries; /* get baud rates to store in pcbs */ 321 pcbp = addr (fnp_info.pcb_array_ptr -> pcb_array (i)); 322 if load_info (i).devx ^= pcb.devx /* load_info does not match pcb_array */ 323 then do; 324 code = error_table_$bad_mpx_load_data; 325 go to load_return; 326 end; 327 pcb.baud_rate = load_info (i).baud_rate; 328 pcb.line_type = load_info (i).line_type; 329 330 if ^pcb.is_hsla /* this pcb is for an lsla subchannel */ 331 then do; /* must figure out its slot number */ 332 if pcb.la_no ^= cur_la_no /* starting a new line adaptor */ 333 then do; 334 cur_la_no = pcb.la_no; 335 cur_slot_no = 1; 336 end; 337 338 pcb.slot_no = bit (cur_slot_no, 6); 339 if pcb.baud_rate <= 110 340 then cur_slot_no = cur_slot_no + 1; /* this subchan uses 1 time slot */ 341 else if pcb.baud_rate <= 150 342 then cur_slot_no = cur_slot_no + 2; /* this subchan uses 2 time slots */ 343 else cur_slot_no = cur_slot_no + 3; /* this subchan uses 3 time slots */ 344 end; 345 end; 346 347 /* it's okay to try to load */ 348 349 call lock_fnp; 350 if ^fnp_info.io_manager_assigned /* lost race with deconfig */ 351 then do; /* or even T&D */ 352 call unlock_fnp; 353 code = error_table_$io_not_assigned; /* perhaps deconfigured, but ... */ 354 go to load_return; 355 end; 356 version = a_version; 357 call syserr (ANNOUNCE, "Loading FNP ^a, ^a ^a", fnp_info.fnp_tag, a_image_name, version); 358 359 fnp_info.boot_ev_chan = a_ev_chan; 360 fnp_info.boot_process_id = pds$processid; 361 fnp_info.version = version; 362 fnp_info.fnp_mem_size = fnp_mem_size * 1024; 363 fnp_info.bootloading = "1"b; 364 datanet_mbx.mailbox_requests = 0; /* clear fields in mbx for this load */ 365 datanet_mbx.term_inpt_mpx_wd = "0"b; 366 datanet_mbx.last_mbx_req_count = 0; 367 string (datanet_mbx.mbx_used_flags) = "0"b; 368 369 datanet_mbx.crash_data.fault_code = 0; 370 datanet_mbx.crash_data.ic = 0; 371 datanet_mbx.crash_data.iom_fault_status = 0; 372 datanet_mbx.crash_data.fault_word = 0; 373 374 auto_absadr = sys_info$page_size * FIRST_BOOTLOAD_PAGEX; 375 376 call mask_dia; /* Mask the IOM channel to initialize it */ 377 call connect_to_dia_paged (auto_absadr, 0, "72"b3, dia_timeout); 378 /* 72 (8), bootload command */ 379 380 if dia_timeout 381 then code = error_table_$no_io_interrupt; 382 else code = 0; /* all is well so far */ 383 call unlock_fnp; /* however, deconfigure has a problem if bootloading is on! */ 384 385 load_return: 386 if code ^= 0 & (datanet_info.trace | datanet_info.debug_stop) 387 then do; 388 call syserr$error_code (ANNOUNCE, code, "fnp_util$load: Error loading FNP ^a.", fnp_info.fnp_tag); 389 call STOP_CHECK ("load"); 390 end; 391 a_code = code; 392 return; 393 394 395 info: 396 entry (a_fnp_no, a_absadr, norm_int_cell, emergency_int_cell, a_code); 397 398 /* entry called to return address of mailbox area and FNP interrupt cells */ 399 400 fnp_no = a_fnp_no; 401 call validate_fnp_ret ("info"); 402 403 a_absadr = absadr (fnp_info.mbx_pt, code); 404 if code = 0 405 then do; /* provided everything's ok */ 406 norm_int_cell = 3; /* customary assignments */ 407 emergency_int_cell = 7; 408 end; 409 410 a_code = code; 411 return; 412 413 fill_page_table: 414 entry (a_fnp_no, a_code); 415 416 fnp_no = a_fnp_no; 417 call validate_fnp_ret ("fill_page_table"); 418 call validate_assigned_ret ("fill_page_table"); 419 if fnp_info.ptx ^= -1 | fnp_info.ptp ^= null () 420 then do; 421 call syserr (ANNOUNCE, "fnp_util$fill_page_table: page table already assigned for FNP ^a.", 422 fnp_info.fnp_tag); 423 call STOP_CHECK ("fill_page_table"); 424 end; 425 call get_page_table (code); 426 if code ^= 0 & (datanet_info.trace | datanet_info.debug_stop) 427 then do; 428 call syserr$error_code (ANNOUNCE, code, "fnp_util$fill_page_table: ioi_page_table$get failed for FNP ^a.", 429 fnp_info.fnp_tag); 430 call STOP_CHECK ("fill_page_table"); 431 end; 432 a_code = code; 433 return; 434 435 free_page_table: 436 entry (a_fnp_no, a_code); 437 438 fnp_no = a_fnp_no; 439 call validate_fnp_ret ("free_page_table"); 440 if fnp_info.ptx = -1 441 then do; 442 call syserr (ANNOUNCE, "fnp_util$free_page_table: no page table assigned for FNP ^a.", fnp_info.fnp_tag); 443 go to ret_bad_code; 444 end; 445 call ioi_page_table$put (fnp_info.ptx, code); 446 fnp_info.ptx = -1; 447 fnp_info.ptp = null (); 448 a_code = code; 449 return; 450 451 452 unwire: 453 entry (a_fnp_no, a_code); 454 455 /* entry called to abort bootload or cleanup from successful bootload */ 456 /* no locking for same reason as wire */ 457 458 fnp_no = a_fnp_no; 459 call validate_fnp_ret ("unwire"); 460 461 /* Don't demand assigned so that loads aborted by deconfig can unwire */ 462 463 call internal_unwire; 464 fnp_info.bootloading = "0"b; 465 466 if code ^= 0 & (datanet_info.trace | datanet_info.debug_stop) 467 then do; 468 call syserr$error_code (ANNOUNCE, code, "fnp_util$unwire: Unwire failed for FNP ^a.", fnp_info.fnp_tag); 469 call STOP_CHECK ("unwire"); 470 end; 471 a_code = code; 472 return; 473 474 475 /* RECONFIGURATION ENTRYPOINTS */ 476 477 /* Configure -- add a FNP to the available collection for assignment */ 478 479 configure: 480 entry (a_fnp_no, a_code); 481 482 fnp_no = a_fnp_no; 483 call validate_fnp_ret ("configure"); 484 call lock_fnp; 485 if fnp_info.available 486 then do; 487 code = error_table_$io_configured; 488 if datanet_info.trace | datanet_info.debug_stop 489 then call syserr (ANNOUNCE, "fnp_util$configure: FNP ^a already configured.", fnp_info.fnp_tag); 490 call STOP_CHECK ("configure"); 491 go to configure_return; 492 end; 493 fnp_info.available = "1"b; 494 fnp_info.io_manager_assigned = "0"b; /* clean up */ 495 fnp_info.flags = "0"b; /* state information */ 496 configure_return: 497 call unlock_fnp; 498 if code = 0 499 then do; 500 call config_$find_2 ("prph", "fnp" || fnp_info.fnp_tag, prph_fnp_cardp); 501 prph_fnp_card.state = "on"; 502 call syserr (ANNOUNCE, "fnp_util: FNP ^a added to configuration^[ by ^a^].", fnp_info.fnp_tag, 503 pds$processid ^= tc_data$initializer_id, pds$process_group_id); 504 end; 505 a_code = code; 506 return; 507 508 /**** Deconfigure -- remove from configuration. 509* This entrypoint causes a FNP crash for the selected FNP. 510**/ 511 512 deconfigure: 513 entry (a_fnp_no, a_code); 514 515 fnp_no = a_fnp_no; 516 call validate_fnp_ret ("deconfigure"); 517 call lock_fnp; 518 519 if ^fnp_info.available 520 then do; 521 code = error_table_$io_not_configured; 522 go to deconfigure_return; 523 end; 524 525 fnp_info.available = "0"b; /* throttle init_multiplexer */ 526 527 if ^fnp_info.io_manager_assigned 528 then go to deconfigure_return; 529 530 /*** here is the interesting part. What we do depends on who is active */ 531 532 if fnp_info.t_and_d_in_progress 533 then do; 534 call unlock_fnp; /* must lock in correct order */ 535 call release_t_and_d; /* unassigns channel */ 536 go to deconfigure_return_unlocked; 537 end; 538 else do; 539 call mask_dia; /* stop it from writing to us or sending stuff */ 540 call fnp_multiplexer$unassign (fnp_no, (0)); /* has to succeed, we are under lock */ 541 /*** turns off io_manager_assigned for us, nailing io_manager callers */ 542 auto_fnp_msg.fnp_no = fnp_info.fnp_number; 543 auto_fnp_msg.state = FNP_DOWN; 544 auto_fnp_msg.flags = "0"b; 545 auto_fnp_msg.deconfigured = "1"b; 546 unspec (message) = unspec (auto_fnp_msg); 547 call pxss$ring_0_wakeup (fnp_info.boot_process_id, fnp_info.boot_ev_chan, message, (0)); 548 end; 549 550 /*** all callers of io_manager must hold LCTE lock and check io_manager_assigned */ 551 552 deconfigure_return: 553 call unlock_fnp; 554 deconfigure_return_unlocked: 555 if code = 0 556 then do; 557 call config_$find_2 ("prph", "fnp" || fnp_info.fnp_tag, prph_fnp_cardp); 558 prph_fnp_card.state = "off"; 559 call syserr (ANNOUNCE, "fnp_util: FNP ^a deleted from configuration^[ by ^a^].", fnp_info.fnp_tag, 560 pds$processid ^= tc_data$initializer_id, pds$process_group_id); 561 end; 562 a_code = code; 563 return; 564 565 566 567 568 fdump: 569 entry (a_fnp_no, a_fnp_type, a_fnp_mem_size, a_ptr, a_code); 570 571 /* entry to read in contents of FNP core for fdump_fnp_. It is passed a pointer 572* * to the segment in which the dump is supposed to be put. The one-page fnp_dump_seg 573* * is wired down, and FNP core is read into it in chunks. 574**/ 575 576 /* Like load, locking must follow wiring of fnp dump seg */ 577 578 fnp_no = a_fnp_no; 579 fnp_type = a_fnp_type; 580 fnp_mem_size = a_fnp_mem_size; 581 segptr = a_ptr; 582 583 call validate_fnp_ret ("fdump"); 584 585 if fnp_info.running | fnp_info.bootloading | fnp_info.t_and_d_in_progress 586 then do; 587 code = error_table_$invalid_state; /* nope */ 588 go to ret_bad_code; 589 end; 590 591 fnp_dump_ptr = addr (fnp_dump_seg$); 592 on cleanup 593 begin; 594 if fnp_dump_seg.lock = pds$processid 595 then call lock$unlock (addr (fnp_dump_seg.lock), fdump_seg_event); 596 end; 597 call lock$wait (addr (fnp_dump_seg.lock), fdump_seg_event, code); 598 if code ^= 0 599 then go to ret_bad_code; 600 601 call wire_dump_seg; 602 if code ^= 0 603 then go to unlock_dump_seg; 604 605 fnp_dump_seg.flags = "0"b; /* aggregately */ 606 call assign_interrupt (dump_interrupt, code); /* we will handle DIA interrupts for this */ 607 if code ^= 0 /* checks to make sure we haven't been forcible unassigned */ 608 then go to unwire_buffer; 609 610 data_ptr = addr (fnp_dump_seg.data); 611 if fnp_type = DN6670 612 then dump_6670_control.unpaged = "1"b; /* absolute 36-bit addressing for DIA */ 613 else dump_355_control.address_mode = "001"b; /* 36-bit addressing for DIA */ 614 fnp_size = fnp_mem_size * 512; /* size of FNP core in 36-bit words */ 615 616 /* before we start, set up handler for record-quota overflow */ 617 618 on record_quota_overflow 619 begin; 620 code = error_table_$rqover; 621 go to restore_interrupts; 622 end; 623 624 /* loop reading chunks of FNP memory */ 625 626 fnp_addr = 0; 627 do offset = 0 to fnp_size by 1021; /* 3 words less than a page */ 628 fnp_tally = min (1021, fnp_size - offset); 629 call setup_dump_ctl_word; 630 call fdump_seg_io ("fdump", "75"b3, code); /* test data xfer */ 631 if code ^= 0 632 then go to restore_interrupts; 633 634 /* Now copy the data into the permanent seg */ 635 636 ptr (segptr, offset) -> tally_words = addr (fnp_dump_seg.data (2)) -> tally_words; 637 /* word 0 and 1 are control words */ 638 end; 639 640 restore_interrupts: 641 call unassign_interrupt; 642 unwire_buffer: 643 call unwire_dump_seg; /* and unwire buffer */ 644 unlock_dump_seg: 645 call lock$unlock (addr (fnp_dump_seg.lock), fdump_seg_event); 646 ret_bad_code: 647 a_code = code; 648 return; 649 650 651 fdump_seg_io: 652 proc (caller, a_diaop, code); 653 654 dcl caller char (32); 655 dcl a_diaop bit (6) aligned; 656 dcl code fixed bin (35); 657 658 start_time = clock (); 659 if datanet_info.trace 660 then call syserr (ANNOUNCE, "fnp_util$fdump_seg_io: ^2.3b for ^a.", a_diaop, caller); 661 call lock_fnp; /* must be locked to connect */ 662 if ^fnp_info.io_manager_assigned 663 then do; 664 call unlock_fnp; 665 code = error_table_$io_not_assigned; 666 return; 667 end; 668 669 fnp_dump_seg.fdump = "1"b; /* so notify can be done */ 670 call pxss$addevent (tty_ev); 671 call connect_to_dia (auto_absadr, 0, a_diaop, dia_timeout); 672 call unlock_fnp; 673 if ^dia_timeout 674 then do; 675 call pxss$wait; /* wait for interrupt */ 676 if datanet_info.trace 677 then call syserr (ANNOUNCE, "fnp_util (fdump_seg_io): returned from first wait."); 678 end; 679 else do; 680 call pxss$delevent (tty_ev); 681 if datanet_info.trace 682 then call syserr (ANNOUNCE, "fnp_util (fdump_seg_io): DIA timeout."); 683 code = error_table_$no_io_interrupt; 684 return; 685 end; 686 687 do while (fnp_dump_seg.fdump); /* when we get notify, make sure it's the right one */ 688 if clock () - start_time > 5 * 1000 * 1000 /* if it's been more than 5 seconds */ 689 then do; /* punt */ 690 if datanet_info.trace 691 then call syserr (ANNOUNCE, "fnp_util (fdump_seg_io): FNP timeout."); 692 code = error_table_$no_io_interrupt; 693 return; 694 end; 695 696 call pxss$addevent (tty_ev); 697 if fnp_info.t_and_d_in_progress 698 then if fnp_info.t_and_d_lev_3_occurred | fnp_info.t_and_d_lev_7_occurred 699 then do; 700 code = 0; 701 return; 702 end; 703 if fnp_dump_seg.fdump /* it wasn't */ 704 then call pxss$wait; /* wait some more */ 705 else call pxss$delevent (tty_ev); /* otherwise we needn't have added event */ 706 end; 707 code = 0; 708 end fdump_seg_io; 709 710 dump_interrupt: 711 entry (a_fnp_no, a_level, a_dummy); 712 713 /* this is our temporary FNP interrupt handler while doing fdump i/o */ 714 715 dcl a_dummy bit (36) aligned parameter; 716 717 fnp_dump_ptr = addr (fnp_dump_seg$); 718 infop = addr (dn355_data$); 719 if datanet_info.trace 720 then call syserr (ANNOUNCE, 721 "fnp_util (dump_interrupt): Interrupt for FNP ^d level ^d. fnp_dump_seg.fdump = ""^b""b", a_fnp_no, 722 a_level, fnp_dump_seg.fdump); 723 if fnp_dump_seg.fdump /* if we're really interested in this one */ 724 then do; 725 fnp_dump_seg.fdump = "0"b; /* so we'll recognize notify */ 726 call pxss$notify (tty_ev); 727 end; 728 return; 729 730 fnp_tandd_setup: 731 entry (a_fnp_no, a_ev_chan, a_code); 732 733 fnp_no = a_fnp_no; 734 call validate_fnp_ret ("fnp_tandd_setup"); 735 736 /* Must set up lcte ptr first if not done already, or lock 737* won't work. Chicken/egg problem notwithstanding, this will 738* work, because other guy doing same thing. */ 739 740 temp_fnp_name = get_fnp_name_ (fnp_no); 741 if fnp_info.lcte_ptr = null 742 then do; 743 call priv_channel_manager$get_devx (temp_fnp_name, devx, code); 744 if code ^= 0 745 then go to ret_bad_code; 746 fnp_info.lcte_ptr = addr (tty_buf$lct_ptr -> lct.lcte_array (devx)); 747 end; 748 749 call lock_fnp; 750 751 if fnp_info.bootloading | fnp_info.running | fnp_info.t_and_d_in_progress 752 then do; 753 code = error_table_$invalid_state; 754 go to tandd_setup_loses_unlock; 755 end; 756 757 call fnp_multiplexer$assign (fnp_no, code); 758 if code ^= 0 759 then do; 760 call syserr$error_code (ANNOUNCE, code, "fnp_util: channel assignment failed for FNP ^a.", 761 fnp_info.fnp_tag); 762 go to tandd_setup_loses_unlock; 763 end; 764 765 call ioam_$assign ((fnp_info.io_manager_chx), fnp_tandd_release_handler, code); 766 if code ^= 0 767 then do; 768 call syserr$error_code (ANNOUNCE, code, "fnp_util: ioam_$assign failed for FNP ^a.", fnp_info.fnp_tag); 769 go to tandd_setup_loses_unlock; 770 end; 771 fnp_info.boot_process_id = pds$processid; 772 fnp_info.t_and_d_lev_3_occurred, fnp_info.t_and_d_lev_7_occurred = "0"b; 773 call syserr (ANNOUNCE, "fnp_util: assigned FNP ^a to ^a for T & D.", temp_fnp_name, pds$process_group_id); 774 fnp_info.t_and_d_in_progress = "1"b; 775 776 tandd_setup_loses_unlock: 777 if code = 0 778 then fnp_info.boot_ev_chan = a_ev_chan; 779 call unlock_fnp; 780 a_code = code; 781 return; 782 783 fnp_tandd_release_handler: 784 entry (a_devx, a_code); 785 786 devx = a_devx; 787 infop = addr (dn355_data$); 788 fnp_dump_ptr = addr (fnp_dump_seg$); 789 on cleanup 790 begin; 791 if fnp_dump_seg.lock = pds$processid 792 then call lock$unlock (addr (fnp_dump_seg.lock), fdump_seg_event); 793 end; 794 do fnp_no = 1 to datanet_info.no_of_355s; 795 fnpp = addr (datanet_info.per_datanet (fnp_no)); 796 if devx = fnp_info.io_manager_chx 797 then if fnp_info.t_and_d_in_progress 798 then call release_t_and_d; 799 end; 800 return; 801 802 /**** T and D does not have to worry about force deconfiguration, 803* since it is completely released at deconfigure time. 804* Validate_fnp_tandd_ret will generate an error code if 805* deconfiguration has stolen the FNP. */ 806 807 808 fnp_tandd_detach: 809 entry (a_fnp_no, a_code); 810 fnp_no = a_fnp_no; 811 812 call validate_fnp_tandd_ret ("fnp_tandd_detach"); 813 call lock_fnp; 814 call validate_assigned_ret ("fnp_tandd_detach"); 815 816 call mask_dia; 817 818 fnp_info.boot_process_id = "000000000000"b3; 819 fnp_info.t_and_d_in_progress = "0"b; 820 fnp_info.t_and_d_lev_3_occurred, fnp_info.t_and_d_lev_7_occurred = "0"b; 821 call ioam_$unassign ((fnp_info.io_manager_chx), (0)); 822 call fnp_multiplexer$unassign (fnp_no, code); 823 if code ^= 0 824 then call syserr$error_code (ANNOUNCE, code, "fnp_util: io channel unassignment failed for FNP ^a.", 825 fnp_info.fnp_tag); 826 call syserr (ANNOUNCE, "fnp_util: releasing FNP ^a from ^a", fnp_info.fnp_id.fnp_tag, pds$process_group_id); 827 call unlock_fnp; 828 a_code = 0; 829 return; 830 831 fnp_tandd_mask: 832 entry (a_fnp_no, a_code); 833 fnp_no = a_fnp_no; 834 call validate_fnp_tandd_ret ("fnp_tandd_mask"); 835 call lock_fnp; 836 call validate_assigned_ret ("fnp_tandd_mask"); 837 838 call mask_dia; 839 call unlock_fnp; 840 a_code = 0; 841 return; 842 843 fnp_tandd_send_int: 844 entry (a_fnp_no, a_level, a_code); 845 fnp_no = a_fnp_no; 846 call validate_fnp_tandd_ret ("fnp_tandd_send_int"); 847 call lock_fnp; 848 call validate_assigned_ret ("fnp_tandd_send_int"); 849 850 fnp_info.t_and_d_lev_3_occurred, fnp_info.t_and_d_lev_7_occurred = "0"b; 851 call connect_to_dia (0, a_level, "71"b3, dia_timeout); 852 call unlock_fnp; 853 if dia_timeout 854 then a_code = error_table_$no_io_interrupt; 855 a_code = 0; 856 return; 857 858 fnp_tandd_get_ints: 859 entry (a_fnp_no, a_ints, a_code); 860 fnp_no = a_fnp_no; 861 call validate_fnp_tandd_ret ("fnp_tandd_get_ints"); 862 call lock_fnp; 863 call validate_assigned_ret ("fnp_tandd_get_ints"); 864 a_ints = fnp_info.t_and_d_lev_3_occurred || fnp_info.t_and_d_lev_7_occurred; 865 fnp_info.t_and_d_lev_3_occurred, fnp_info.t_and_d_lev_7_occurred = "0"b; 866 call unlock_fnp; 867 a_code = 0; 868 return; 869 870 fnp_tandd_read: 871 entry (a_fnp_no, a_ptr, a_count, a_fnp_addr, a_fnp_type, a_code); 872 opcode = "75"b3; 873 go to fnp_t_and_d_rw_merge; 874 875 fnp_tandd_write: 876 entry (a_fnp_no, a_ptr, a_count, a_fnp_addr, a_fnp_type, a_code); 877 opcode = "76"b3; 878 fnp_t_and_d_rw_merge: 879 /**** To avoid LONG delays in deconfiguration, this does not lock 880* the LCTE lock except around the connects themselves. */ 881 fnp_no = a_fnp_no; 882 segptr = a_ptr; 883 nwords = a_count; 884 fnp_type = a_fnp_type; 885 fnp_addr = a_fnp_addr; 886 fnp_dump_ptr = addr (fnp_dump_seg$); 887 call validate_fnp_tandd_ret ("fnp_tandd_rw"); 888 889 on cleanup 890 begin; 891 if fnp_dump_seg.lock = pds$processid 892 then call lock$unlock (addr (fnp_dump_seg.lock), fdump_seg_event); 893 end; 894 895 data_ptr = addr (fnp_dump_seg.data); 896 897 call lock$wait (addr (fnp_dump_seg.lock), fdump_seg_event, code); 898 if code ^= 0 899 then go to ret_bad_code; 900 if fnp_type = DN6670 901 then dump_6670_control.unpaged = "1"b; 902 else dump_355_control.address_mode = "1"b3; 903 offset = 0; 904 do while (nwords > 0); 905 fnp_tally = min (308, nwords); 906 nwords = nwords - fnp_tally; 907 call setup_dump_ctl_word; 908 if opcode = "76"b3 /* WRITE */ 909 then addr (fnp_dump_seg.data (2)) -> tally_words = addrel (segptr, offset) -> tally_words; 910 call wire_dump_seg; 911 if code ^= 0 912 then go to unlock_dump_seg; 913 fnp_info.t_and_d_lev_3_occurred, fnp_info.t_and_d_lev_7_occurred = "0"b; 914 fnp_info.t_and_d_notify_requested = "1"b; 915 916 call fdump_seg_io ("fnp_tandd_rw", opcode, code); 917 918 fnp_info.t_and_d_lev_3_occurred, fnp_info.t_and_d_lev_7_occurred = "0"b; 919 call unwire_dump_seg; 920 if code ^= 0 921 then go to unlock_dump_seg; 922 if opcode = "75"b3 /* READ */ 923 then addrel (segptr, offset) -> tally_words = addr (fnp_dump_seg.data (2)) -> tally_words; 924 925 offset = offset + fnp_tally; 926 end; 927 code = 0; 928 go to unlock_dump_seg; 929 930 931 validate_assigned_ret: 932 procedure (caller); 933 934 declare caller char (32); 935 936 if ^fnp_info.io_manager_assigned 937 then do; 938 code = error_table_$io_not_assigned; 939 if datanet_info.trace | datanet_info.debug_stop 940 then call syserr$error_code (ANNOUNCE, code, 941 "fnp_util$validate_assigned_ret (^a): IO manager assignment lacking.", caller); 942 call STOP_CHECK ("validate_assigned_ret"); 943 call unlock_fnp; 944 go to ret_bad_code; 945 end; 946 return; 947 end validate_assigned_ret; 948 949 950 validate_fnp_ret: 951 procedure (caller); 952 953 declare caller char (32); 954 955 /* internal procedure to ensure that FNP number is reasonable */ 956 957 infop = addr (dn355_data$); 958 959 if fnp_no <= 0 | fnp_no > max_no_355s 960 then do; 961 code = error_table_$io_not_defined; 962 ERROR: 963 if datanet_info.trace | datanet_info.debug_stop 964 then call syserr$error_code (ANNOUNCE, code, "fnp_util$^a: Invalid call for FNP ^d.", caller, fnp_no); 965 call STOP_CHECK (caller); 966 go to ret_bad_code; 967 end; 968 969 if ^tty_buf$fnp_config_flags (fnp_no) 970 then do; 971 fnpp = null; 972 code = error_table_$io_not_defined; 973 go to ERROR; 974 end; 975 976 code = 0; 977 fnpp = addr (datanet_info.per_datanet (fnp_no)); 978 mbxp = fnp_info.mbx_pt; 979 if datanet_info.trace 980 then call syserr (ANNOUNCE, "fnp_util$^a: Tracing call for fnp ^a.", caller, fnp_info.fnp_tag); 981 982 return; 983 984 end validate_fnp_ret; 985 986 987 988 validate_fnp_tandd_ret: 989 proc (caller); 990 991 declare caller char (32); 992 993 call validate_fnp_ret (caller); 994 if ^fnp_info.t_and_d_in_progress 995 then code = error_table_$invalid_state; 996 else if fnp_info.boot_process_id ^= pds$processid 997 then code = error_table_$io_no_permission; 998 if code ^= 0 999 then do; 1000 if (datanet_info.trace | datanet_info.debug_stop) 1001 then call syserr$error_code (ANNOUNCE, code, "fnp_util$^a: Invalid call.", caller); 1002 go to ret_bad_code; 1003 end; 1004 return; /* validate_fnp_ret did trace */ 1005 end validate_fnp_tandd_ret; 1006 1007 setup_dump_ctl_word: 1008 proc; 1009 1010 if fnp_type = DN6670 1011 then do; 1012 dump_6670_control.fnp_address = fnp_addr + 2 * offset; 1013 dump_6670_control.tally = fnp_tally; 1014 end; 1015 else do; 1016 dump_355_control.fnp_address = bit (fixed (fnp_addr + 2 * offset, 15), 15); 1017 dump_355_control.tally = fnp_tally; 1018 end; 1019 end; 1020 1021 wire_dump_seg: 1022 proc; 1023 1024 astep = get_ptrs_$given_segno (fixed (baseno (fnp_dump_ptr), 17)); 1025 call pc_abs$wire_abs_contig (astep, 0, 1, code); /* wire a page */ 1026 if code = 0 1027 then auto_absadr = absadr (addr (fnp_dump_seg.data), code); 1028 /* fdump_seg_io needs this */ 1029 end; 1030 1031 unwire_dump_seg: 1032 proc; 1033 1034 astep = get_ptrs_$given_segno (fixed (baseno (fnp_dump_ptr), 17)); 1035 call pc_abs$unwire_abs (astep, 0, 1); 1036 return; 1037 end unwire_dump_seg; 1038 1039 1040 assign_interrupt: 1041 proc (handler, code); 1042 1043 /* internal procedure to set handler for IOM interrupt to our proc. */ 1044 1045 dcl handler entry; 1046 1047 dcl iom_code fixed bin (35); 1048 dcl code fixed bin (35); 1049 1050 call lock_fnp; /* discourage reconfiguration */ 1051 if ^fnp_info.io_manager_assigned /* already deconfigured? */ 1052 then if ^fnp_info.available /* already deconfigured! */ 1053 then do; 1054 code = error_table_$io_not_configured; 1055 return; 1056 end; 1057 1058 /**** It may already be unassigned, as in dump of down MPX */ 1059 1060 if fnp_info.io_manager_assigned 1061 then do; 1062 call io_manager$unassign (fnp_info.io_manager_chx, code); 1063 if code ^= 0 1064 then call syserr$error_code (CRASH, code, "fnp_util: Could not unassign FNP ^a at reassign_interrupt.", 1065 fnp_info.fnp_tag); 1066 fnp_info.io_manager_assigned = "0"b; 1067 end; /* now make new assignment */ 1068 1069 call io_manager$assign (fnp_info.io_manager_chx, fnp_info.io_chanid, handler, (fnp_no), (null ()), iom_code); 1070 call unlock_fnp; 1071 if code = 0 /* if there wasn't anything more interesting to report */ 1072 then do; 1073 code = iom_code; /* then report this */ 1074 fnp_info.io_manager_assigned = "1"b; 1075 end; 1076 1077 return; 1078 1079 end assign_interrupt; 1080 1081 unassign_interrupt: 1082 procedure; 1083 1084 call io_manager$unassign (fnp_info.io_manager_chx, (0)); 1085 fnp_info.io_manager_assigned = "0"b; 1086 return; 1087 end unassign_interrupt; 1088 1089 1090 1091 connect_to_dia: 1092 proc (address, level, cmd, timeout); 1093 1094 /* internal procedure to do DIA i/o */ 1095 1096 dcl old_pcw bit (36) aligned; 1097 dcl timeout bit (1) aligned; 1098 dcl address fixed bin (24); 1099 dcl level fixed bin (3); 1100 dcl cmd bit (6) aligned; 1101 dcl 1 ima aligned like io_manager_arg; 1102 dcl paged bit (1) aligned; 1103 dcl 1 a_dia_pcw aligned based (mbxp), /* better declaration than the one used when MCS is running */ 1104 2 address fixed bin (18) unsigned unaligned, 1105 2 error bit (1) unaligned, 1106 2 pad1 bit (3) unaligned, 1107 2 parity bit (1) unaligned, 1108 2 pad2 bit (1) unaligned, 1109 2 pad3 bit (3) unaligned, /* if we used address extension this would be important */ 1110 2 interrupt_level fixed bin (3) unsigned unaligned, 1111 2 command bit (6) unaligned; 1112 1113 paged = "0"b; 1114 go to common; 1115 1116 connect_to_dia_paged: 1117 entry (address, level, cmd, timeout); 1118 1119 paged = "1"b; 1120 1121 common: 1122 unspec (a_dia_pcw) = ""b; 1123 if address > sys_info$seg_size_256K 1124 then call syserr (CRASH, "fnp_util (connect_to_dia): address > 256K"); 1125 a_dia_pcw.address = address; 1126 a_dia_pcw.interrupt_level = level; 1127 a_dia_pcw.command = cmd; 1128 if datanet_info.trace | datanet_info.debug_stop 1129 then call syserr (ANNOUNCE, "fnp_util (connect): ^[ paged PTP ^p^;^s^] PCW ^w", paged, fnp_info.ptp, 1130 unspec (datanet_mbx.dia_pcw)); 1131 if datanet_info.debug_stop 1132 then do; 1133 call syserr (ANNOUNCE, "fnp_util: stop before connect."); 1134 call syserr (CRASH, " ptp: ^p astep: ^p", fnp_info.ptp, fnp_info.astep); 1135 end; 1136 1137 /* parity on pcw REQUIRED */ 1138 1139 string (datanet_mbx.dia_pcw) = dn355_util$compute_parity (string (datanet_mbx.dia_pcw)); 1140 1141 ima.chx = fnp_info.io_manager_chx; 1142 if paged 1143 then ima.ptp = fnp_info.ptp; 1144 else ima.ptp = null (); 1145 old_pcw = unspec (a_dia_pcw); 1146 call io_manager$connect_direct (ima); 1147 do i = 1 to 100000 while (unspec (a_dia_pcw) = old_pcw); 1148 end; 1149 if a_dia_pcw.error | old_pcw = unspec (a_dia_pcw) 1150 then do; 1151 call syserr (ANNOUNCE, 1152 "fnp_util (connect_to_dia): DIA mailbox PCW ^[error^;timeout^] for channel ^a, FNP ^a. PCW was ^w.", 1153 a_dia_pcw.error, fnp_info.io_chanid, fnp_info.fnp_tag, old_pcw); 1154 timeout = "1"b; 1155 end; 1156 else timeout = "0"b; 1157 return; 1158 end connect_to_dia; 1159 1160 1161 mask_dia: 1162 procedure; 1163 call io_manager$mask (fnp_info.io_manager_chx); /* mask the channel to initialize it */ 1164 end mask_dia; 1165 1166 internal_unwire: 1167 procedure; 1168 1169 declare px fixed bin; 1170 1171 /* internal procedure to undo work of wire entry */ 1172 1173 if fnpp = null 1174 then return; 1175 if ^fnp_info.wired 1176 then return; 1177 1178 ioptp = fnp_info.ptp; 1179 if ioptp ^= null () 1180 then do px = FIRST_BOOTLOAD_PAGEX to FIRST_BOOTLOAD_PAGEX + fnp_info.n_pages_wired; 1181 unspec (page_table.ptw (px)) = ""b; /* as of next connect, no more references */ 1182 end; 1183 1184 astep = fnp_info.astep; 1185 call pc_abs$unwire_abs (astep, 0, fnp_info.n_pages_wired); 1186 call grab_aste$release_io (astep); 1187 fnp_info.wired = "0"b; 1188 return; 1189 1190 end internal_unwire; 1191 1192 release_t_and_d: 1193 procedure; 1194 1195 declare unlock_dump_seg bit (1) aligned; 1196 1197 call lock$wait (addr (fnp_dump_seg.lock), fdump_seg_event, code); 1198 /* wait for finish */ 1199 unlock_dump_seg = (code = 0); /* if user held lock for other reason, leave it locked ? */ 1200 call syserr (0, "fnp_util: force detaching FNP ^a from process ^w.", fnp_info.fnp_id.fnp_tag, 1201 fnp_info.boot_process_id); 1202 call lock_fnp; /* hold the LCTE lock (or the config lock) */ 1203 fnp_info.boot_process_id = "000000000000"b3; 1204 fnp_info.boot_ev_chan = 0; 1205 fnp_info.t_and_d_in_progress = "0"b; 1206 fnp_info.t_and_d_lev_3_occurred, fnp_info.t_and_d_lev_7_occurred = "0"b; 1207 call fnp_multiplexer$unassign (fnp_no, code); 1208 if code ^= 0 1209 then call syserr$error_code (ANNOUNCE, code, "fnp_util: io channel unassignment failed for FNP ^a.", 1210 fnp_info.fnp_tag); 1211 call unlock_fnp; 1212 if unlock_dump_seg 1213 then call lock$unlock (addr (fnp_dump_seg.lock), fdump_seg_event); 1214 return; 1215 end release_t_and_d; 1216 1217 1218 lock_fnp: 1219 procedure; 1220 1221 declare code fixed bin (35); 1222 1223 if locked | config_locked 1224 then call syserr (CRASH, "fnp_util: lock_fnp called with lock locked."); 1225 locked, config_locked = "0"b; 1226 1227 call lock$lock_fast (addr (datanet_info.configuration_lock)); 1228 config_locked = "1"b; /* LCTE cannot get initialized after this point */ 1229 if fnp_info.lcte_ptr = null () 1230 then return; /* that is the whole story */ 1231 else if ^fnp_info.lcte_ptr -> lcte.initialized /* no mpx in the house */ 1232 then return; /* and the config lock locks out T&D I/O */ 1233 1234 /*** here, there is a multiplexer, so we have to lock against it */ 1235 1236 call fnp_multiplexer$fnp_lock (fnpp, code); 1237 if code = 0 1238 then do; 1239 locked = "1"b; /* lcte was initialized, and we now own it */ 1240 call lock$unlock_fast (addr (datanet_info.configuration_lock)); 1241 /* if init_multiplexer finds the LCTE initialized, it aborts */ 1242 /* so all we are protecting against is ourselves */ 1243 config_locked = "0"b; 1244 end; 1245 return; 1246 1247 unlock_fnp: 1248 entry; 1249 1250 if locked 1251 then call fnp_multiplexer$fnp_unlock (fnpp); 1252 locked = "0"b; 1253 if config_locked 1254 then call lock$unlock_fast (addr (datanet_info.configuration_lock)); 1255 config_locked = "0"b; 1256 return; 1257 end lock_fnp; 1258 1259 1260 STOP_CHECK: 1261 procedure (Tracer); 1262 declare Tracer char (*); 1263 1264 if datanet_info.debug_stop 1265 then call syserr (CRASH, "fnp_util$^a: Debugging stop (type go to continue).", Tracer); 1266 return; 1267 end STOP_CHECK; 1268 1269 1270 get_page_table: 1271 procedure (code); 1272 1273 declare pagex fixed bin; 1274 declare px fixed bin; 1275 declare 1 seg_pt (0:255) aligned like l68_core_ptw based (ptp); 1276 declare ptp pointer; 1277 declare code fixed bin (35); 1278 1279 io_page_table_size = 256; /* always, for datanet */ 1280 call ioi_page_table$get (io_page_table_size * sys_info$page_size, fnp_info.ptx, code); 1281 /* Direct channel has no bounds check so we need all 256 */ 1282 if code ^= 0 1283 then return; 1284 fnp_info.ptp, ioptp = ioi_page_table$ptx_to_ptp (fnp_info.ptx); 1285 1286 unspec (page_table) = ""b; 1287 1288 /**** leave page zero invalid */ 1289 1290 /**** First, dn355_mailbox */ 1291 1292 do px = 1 to 3; 1293 io_ptwp = addr (page_table.ptw (px)); 1294 io_ptw.address = px; /* absolute page number */ 1295 io_ptw.write = "1"b; 1296 io_ptw.valid = "1"b; 1297 end; 1298 1299 /**** Now, tty_buf */ 1300 1301 astep = get_ptrs_$given_segno (segno (addr (tty_buf$))); 1302 pagex = FIRST_TTY_BUF_PAGEX; 1303 ptp = addwordno (astep, sst$astsize); 1304 do px = 0 to bin (aste.csl, 9) - 1; /* no null pages here */ 1305 io_ptwp = addr (page_table.ptw (pagex)); 1306 io_ptw.address = seg_pt (px).frame; 1307 io_ptw.write = "1"b; 1308 io_ptw.valid = "1"b; 1309 pagex = pagex + 1; 1310 end; /* tty_buf is now described to the channel */ 1311 return; 1312 1313 fill_bootload_page_table: 1314 entry; /* fill in io ptws for bootload segment */ 1315 1316 /**** astep is already set to the bootload image aste */ 1317 1318 pagex = FIRST_BOOTLOAD_PAGEX; 1319 ptp = addwordno (astep, sst$astsize); 1320 auto_absadr = pagex * sys_info$page_size; 1321 ioptp = fnp_info.ptp; 1322 1323 do px = 0 to fnp_info.n_pages_wired - 1; 1324 io_ptwp = addr (page_table.ptw (pagex)); 1325 io_ptw.address = seg_pt (px).frame; 1326 io_ptw.write = "0"b; 1327 io_ptw.valid = "1"b; 1328 pagex = pagex + 1; 1329 end; 1330 1331 if datanet_info.trace 1332 then do px = 0 to 255; 1333 if unspec (page_table.ptw (px)) ^= ""b 1334 then call syserr (ANNOUNCE, " ^4o ^w", px, unspec (page_table.ptw (px))); 1335 end; 1336 1337 return; 1338 1339 end get_page_table; 1340 1341 1342 /* format: off */ 1343 1344 /* INCLUDE FILES */ 1345 /* BEGIN INCLUDE FILE ...aste.incl.pl1 ... */ 1 2 1 3 /* Template for an AST entry. Length = 12 words. */ 1 4 1 5 /* Words 0 to 7, and 11 are read by PC; they are read and modified by SC. 1 6* Words 8, 9 and 10 are modified by PC; they should never be modified without locking the PC lock */ 1 7 /* Modified January 1985 by Keith Loepere for multi_class. */ 1 8 1 9 dcl astep ptr; 1 10 1 11 dcl 1 aste based (astep) aligned, 1 12 1 13 (2 fp bit (18), /* forward used list rel pointer */ 1 14 2 bp bit (18), /* backward used list rel pointer */ 1 15 1 16 2 infl bit (18), /* ptr to NEXT in list of ASTE's of my brothers */ 1 17 2 infp bit (18), /* ptr to FIRST in list of ASTE's of my children */ 1 18 1 19 2 strp bit (18), /* rel pointer to process trailer */ 1 20 2 par_astep bit (18), /* rel pointer to parent aste */ 1 21 1 22 2 uid bit (36), /* segment unique id */ 1 23 1 24 2 msl bit (9), /* maximum segment length in 1024 word units */ 1 25 2 pvtx fixed bin (8), /* physical volume table index */ 1 26 2 vtocx fixed bin (17), /* vtoc entry index */ 1 27 1 28 2 usedf bit (1), /* ast entry is being used if non-zero */ 1 29 2 init bit (1), /* used bit - insure 1 lap */ 1 30 2 gtus bit (1), /* global transparent usage switch */ 1 31 2 gtms bit (1), /* global transparent modified switch */ 1 32 2 hc bit (1), /* hard core segment */ 1 33 2 hc_sdw bit (1), /* aste with sdw for hardcore seg if non-zero */ 1 34 2 any_access_on bit (1), /* any sdw allows access, unless write_access_on */ 1 35 2 write_access_on bit (1), /* any sdw allows write access */ 1 36 2 inhibit_cache bit (1), /* flag not to reset above bits */ 1 37 2 explicit_deact_ok bit (1), /* set if user can deactivate seg */ 1 38 2 deact_error bit (1), /* set if error occurred while deactivating */ 1 39 2 hc_part bit (1), /* set if pages are in a hardcore partition */ 1 40 2 fm_damaged bit (1), /* set if filemap checksum was ever bad */ 1 41 2 multi_class bit (1), /* set if page_control should watch state changes to this segment */ 1 42 2 pad1 bit (2), /* OO */ 1 43 2 dius bit (1), /* dumper in use switch */ 1 44 2 nid bit (1), /* if on prevents addtion to incremental dump map */ 1 45 2 dmpr_pad bit (1), 1 46 2 ehs bit (1), /* entry hold switch */ 1 47 2 nqsw bit (1), /* no quota switch - no checking for pages of this seg */ 1 48 2 dirsw bit (1), /* directory switch */ 1 49 2 master_dir bit (1), /* master dir - a root for the log volume */ 1 50 2 volmap_seg bit (1), /* volmap_seg for some volume */ 1 51 2 tqsw (0:1) bit (1), /* terminal quota switch - (0) for non dir pages */ 1 52 2 pad_ic bit (10), /* Used to be aste.ic */ 1 53 1 54 2 dtu bit (36), /* date and time segment last used */ 1 55 1 56 2 dtm bit (36), /* date and time segment last modified */ 1 57 1 58 1 59 2 quota (0:1) fixed bin (18) unsigned, /* sec storage quota - (0) for non dir pages */ 1 60 1 61 2 used (0:1) fixed bin (18) unsigned, /* sec storage used - (0) for non dir pages */ 1 62 1 63 2 csl bit (9), /* current segment length in 1024 words units */ 1 64 2 fmchanged bit (1), /* turned on by page if file map changed */ 1 65 2 fms bit (1), /* file modified switch */ 1 66 2 npfs bit (1), /* no page fault switch */ 1 67 2 gtpd bit (1), /* global transparent paging device switch */ 1 68 2 dnzp bit (1), /* don't null out if zero page switch */ 1 69 2 per_process bit (1), /* use master quota for this entry */ 1 70 2 ddnp bit (1), /* don't deposit nulled pages */ 1 71 2 pad2 bit (2), 1 72 2 records bit (9), /* number of records used by the seg in sec storage */ 1 73 2 np bit (9), /* number of pages in core */ 1 74 1 75 1 76 2 ht_fp bit (18), /* hash table forward rel pointer */ 1 77 2 fmchanged1 bit (1), /* value of "fmchanged" saved by pc$get_file_map */ 1 78 2 damaged bit (1), /* PC declared segment unusable */ 1 79 2 pack_ovfl bit (1), /* page fault on seg would cause pack overflow */ 1 80 2 synchronized bit (1), /* Data Management synchronized segment */ 1 81 2 pad3 bit (6), /* OOOOOOOOO */ 1 82 2 ptsi bit (2), /* page table size index */ 1 83 2 marker bit (6)) unaligned; /* marker to indicate last word of ASTE */ 1 84 1 85 1 86 dcl asta (0 : 8000) bit (36*12 /* sst-> sst.astsize */) based aligned; 1 87 1 88 1 89 dcl 1 aste_part aligned based (astep), 1 90 1 91 2 one bit (36) unaligned, /* fp and bp */ 1 92 2 two bit (36*11 - 8) unaligned, /* part that has to be zeroed when ASTE is freed */ 1 93 2 three bit (8) unaligned; /* ptsi and marker */ 1 94 1 95 1 96 dcl 1 seg_aste based (astep) aligned, /* Overlay because quota is only for dirs */ 1 97 2 pad1 bit (8*36), 1 98 2 usage fixed bin (35), /* page fault count: overlays quota */ 1 99 2 pad2 bit (3*36); 1 100 1 101 /* END INCLUDE FILE ... aste.incl.pl1 */ 1345 1346 /* BEGIN INCLUDE FILE ... config_prph_fnp_card.incl.pl1 BIM 1983 */ 2 2 /* format: style3 */ 2 3 2 4 dcl prph_fnp_cardp ptr; /* Pointer to a PRPH fnpx card. */ 2 5 2 6 dcl 1 prph_fnp_card based (prph_fnp_cardp) aligned, 2 7 /* PRPH fnpx card declaration */ 2 8 2 word char (4), /* "prph" */ 2 9 2 name char (4), /* "fnpX" */ 2 10 2 iom fixed bin (3), /* IOM number */ 2 11 2 chan fixed bin (8), /* channel number */ 2 12 2 model fixed bin, /* model number */ 2 13 2 state char (4) aligned, /* ON/OFF */ 2 14 2 pad (9) bit (36) aligned, 2 15 2 type_word aligned, 2 16 3 field_type (14) bit (2) unaligned, /* type of each field; see config_deck.incl.pl1 */ 2 17 3 pad1 bit (4) unaligned, 2 18 3 n_fields fixed bin (4) unsigned unaligned; 2 19 /* number of fields used on card */ 2 20 2 21 /* END INCLUDE FILE ... config_prph_fnp_card.incl.pl1 */ 1346 1347 /* BEGIN dn355_mailbox.incl.pl1 */ 3 2 3 3 /* Date Last Modified and Reason 3 4* Created 07/25/74 by R. B. Snyder for new ttydim. 3 5* Modified 08/20/75 by Mike Grady to prepare for multiple 355's 3 6* Modified 11/08/78 by Robert Coren to introduce FNP-controlled mailboxes 3 7* Modified 02/19/80 by Robert Coren to specify format of accept_input mailbox 3 8* Modified 04/23/80 by Robert Coren to replace lock with num_in_use 3 9* Modified 09/21/82 by Robert Coren to make subfields of crash_data be fixed bin (18) unsigned 3 10* */ 3 11 3 12 dcl 1 datanet_mbx aligned based (mbxp), /* declaration of 355 mailbox */ 3 13 2 dia_pcw aligned, /* Peripheral Control Word for DIA */ 3 14 3 zero bit (18) unaligned, 3 15 3 error bit (1) unaligned, /* set to "1"b if error on connect */ 3 16 3 pad1 bit (5) unaligned, 3 17 3 mbx_no bit (6) unaligned, /* number of submbx being sent to 355 */ 3 18 3 command bit (6) unaligned, /* always 71 (octal) */ 3 19 2 mailbox_requests fixed bin, /* 0 mod 256K cnt of mbx requests by 355 */ 3 20 2 term_inpt_mpx_wd bit (36) aligned, /* terminate interrupt multiplex word */ 3 21 2 last_mbx_req_count fixed bin, /* previous value of mailbox_requests */ 3 22 2 num_in_use fixed bin, /* number of submailboxes currently in use */ 3 23 2 mbx_used_flags, /* one bit for each mailbox */ 3 24 3 used (0:7) bit (1) unaligned, /* "1"b means this mbx is being used */ 3 25 3 pad2 bit (28) unaligned, 3 26 2 crash_data, /* data for 355 emergency interrupt */ 3 27 3 fault_code fixed bin (18) unal unsigned, 3 28 3 ic fixed bin (18) unal unsigned, 3 29 3 iom_fault_status fixed bin (18) unal unsigned, 3 30 3 fault_word fixed bin (18) unal unsigned, /* contains either faulting instruction or iomchannel no */ 3 31 2 dn355_sub_mbxes (0:7) aligned, /* 8 CS-initiated submailboxes */ 3 32 3 pad4 (8) fixed bin, /* eight words each */ 3 33 2 fnp_sub_mbxes (0:3) aligned, /* 4 FNP-initiated mailboxes */ 3 34 3 pad5 (28) fixed bin; /* 28 words each */ 3 35 3 36 dcl 1 sub_mbx aligned based (subp), /* declaration of a submailbox */ 3 37 2 dn355_no bit (3) unaligned, /* 355 number */ 3 38 2 pad1 bit (5) unaligned, 3 39 2 line_number unaligned, /* line number assigned by 355 */ 3 40 3 is_hsla bit (1) unaligned, /* on if hsla, off if lsla */ 3 41 3 la_no bit (3) unaligned, /* line adapter (high or low speed) number */ 3 42 3 slot_no bit (6) unaligned, /* physical slot/subchannel number */ 3 43 2 terminal_id bit (18) unaligned, /* not used */ 3 44 3 45 2 terminal_type bit (9) unaligned, /* unused */ 3 46 2 cmd_data_len fixed bin (8) unaligned, /* no. of 6 bit chars in command data */ 3 47 2 op_code fixed bin (8) unaligned, /* op code */ 3 48 2 io_cmd fixed bin (8) unaligned, /* i/o cmd */ 3 49 3 50 2 command_data (3) bit (36) unaligned, /* data associated with op code */ 3 51 3 52 2 address unal, /* dcw buffer or circular queue address */ 3 53 3 data_addr bit (18) unaligned, /* data address */ 3 54 3 word_cnt fixed bin (18) unsigned unaligned, /* data length */ 3 55 2 pad3 bit (72) unaligned; 3 56 3 57 /* The structure below defines the long form of submailbox used by the FNP. Note that 3 58* the declaration of command_data and input_data is that used for the input_in_mailbox 3 59* operation; other FNP-initiated operations use the command_data format described by 3 60* the above (short mailbox) structure 3 61**/ 3 62 3 63 dcl 1 fnp_sub_mbx aligned based (subp), /* format used for FNP-controlled mailbox */ 3 64 2 dn355_no bit (3) unaligned, /* as above */ 3 65 2 pad1 bit (5) unaligned, 3 66 2 line_number unaligned, /* as above */ 3 67 3 is_hsla bit (1) unaligned, 3 68 3 la_no bit (3) unaligned, 3 69 3 slot_no bit (6) unaligned, 3 70 2 n_free_buffers fixed bin (17) unaligned, /* number of free blocks in FNP at present */ 3 71 3 72 2 pad3 bit (9) unaligned, 3 73 2 n_chars fixed bin (9) unsigned unaligned, /* number of data characters (if input) */ 3 74 2 op_code fixed bin (9) unsigned unaligned, /* as above */ 3 75 2 io_cmd fixed bin (9) unsigned unaligned, /* as above */ 3 76 3 77 2 input_data char (100) unaligned, /* input characters for input_in_mailbox op */ 3 78 2 command_data bit (36) unaligned; /* shouldn't need more than one word */ 3 79 3 80 /* The structure below defines the format of a long submailbox used for an accept_input operation 3 81* when the data is too long to fit directly in the mailbox. command_data and n_chars occupy the same position as for input_in_mailbox, above. 3 82**/ 3 83 3 84 dcl 1 input_sub_mbx aligned based (subp), 3 85 2 pad1 bit (8) unaligned, 3 86 2 line_number unaligned like sub_mbx.line_number, 3 87 2 n_free_buffers fixed bin (17) unaligned, /* number of free blocks in FNP at present */ 3 88 3 89 2 n_chars fixed bin (17) unaligned, /* total number of data characters */ 3 90 2 op_code fixed bin (9) unsigned unaligned, 3 91 2 io_cmd fixed bin (9) unsigned unaligned, 3 92 3 93 2 n_buffers fixed bin, /* number of buffers in this input chain */ 3 94 2 dcw (24), /* "pseudo-DCWs" used to specify buffer addresses and tallies */ 3 95 3 abs_addr bit (24) unaligned, /* supplied by CS */ 3 96 3 tally fixed bin (12) unsigned unaligned, /* in characters, supplied by FNP */ 3 97 2 command_data bit (36) unaligned; /* as above */ 3 98 3 99 dcl subp pointer; 3 100 dcl mbxp pointer; 3 101 3 102 /* END dn355_mailbox.incl.pl1 */ 1347 1348 /* BEGIN INCLUDE FILE ... lct.incl.pl1 */ 4 2 4 3 /* Created by J. Stern 7/26/78 */ 4 4 /* Metering information added by C. Hornig, March 1980. */ 4 5 /* Unwired saved meters added by Robert Coren, December 1980 */ 4 6 4 7 dcl lctp ptr; /* ptr to logical channel table */ 4 8 dcl lctep ptr; /* ptr to logical channel table entry */ 4 9 dcl lct_size fixed bin; /* size of lcte_array when allocated */ 4 10 4 11 dcl 1 lct aligned based (lctp), /* logical channel table */ 4 12 2 max_no_lctes fixed bin, /* maximum number of lct entries */ 4 13 2 cur_no_lctes fixed bin, /* current number of lct entries used */ 4 14 2 lcnt_ptr ptr, /* ptr to logical channel name table */ 4 15 2 queue_lock bit (36), /* lock used to serialize queueing operations */ 4 16 2 pad (11) fixed bin, 4 17 2 lcte_array (lct_size refer (lct.max_no_lctes)) like lcte; /* lct entries */ 4 18 4 19 4 20 dcl 1 lcte aligned based (lctep), /* logical channel table entry */ 4 21 2 lock bit (36), /* channel lock */ 4 22 2 data_base_ptr ptr unal, /* ptr to channel data base */ 4 23 2 channel_type fixed bin (8) unal, /* identifies channel manager program */ 4 24 2 flags unal, 4 25 3 entry_in_use bit (1) unal, /* ON if this entry in use */ 4 26 3 initialized bit (1) unal, /* ON if this channel initialized */ 4 27 3 notify_reqd bit (1) unal, /* ON if must notify when unlocking this channel */ 4 28 3 locked_for_interrupt bit (1) unal, /* ON if lock set by interrupt handler */ 4 29 3 space_needed bit (1) unal, /* ON if this channel needs buffer space */ 4 30 3 special_lock bit (1) unal, /* ON if lock is managed by multiplexer */ 4 31 3 trace_force bit (1) unal, /* ON to trace based on next bit only */ 4 32 /* OFF to XOR next bit with tty_buf.default_tracing */ 4 33 3 trace bit (1) unal, /* ON to trace this channel */ 4 34 3 unused bit (1) unal, 4 35 2 physical_channel_devx fixed bin (17) unal, /* devx of physical chan from which logical chan is derived */ 4 36 2 major_channel_info, 4 37 3 major_channel_devx fixed bin unal, /* major channel device index */ 4 38 3 subchannel fixed bin (17) unal, /* subchannel id (or data ptr) wrt major channel */ 4 39 2 queue_entries, 4 40 3 queue_head bit (18) unal, /* ptr to first queue entry for this channel */ 4 41 3 queue_tail bit (18) unal, /* ptr to last queue entry for this channel */ 4 42 2 word_counts, 4 43 3 input_words fixed bin (17) unal, /* number of input words charged to this channel */ 4 44 3 output_words fixed bin (17) unal, /* number of output words charged to this channel */ 4 45 4 46 2 meters, 4 47 3 in_bytes fixed bin (35), 4 48 3 out_bytes fixed bin (35), 4 49 3 in, 4 50 4 calls fixed bin (35), 4 51 4 interrupts fixed bin (35), 4 52 4 call_time fixed bin (71), 4 53 4 interrupt_time fixed bin (71), 4 54 3 out like lcte.meters.in, 4 55 3 control like lcte.meters.in, 4 56 2 saved_meters_ptr ptr, /* pointer to unwired copy of meters saved at last dialup */ 4 57 4 58 2 timer_offset bit (18) aligned, /* Head of list of timers for this channel */ 4 59 4 60 2 pad (3) fixed bin (35); 4 61 4 62 4 63 dcl lcntp ptr; /* ptr to logical channel name table */ 4 64 4 65 dcl 1 lcnt aligned based (lcntp), /* logical channel name table */ 4 66 2 names (lct.max_no_lctes) char (32) unal; /* channel names */ 4 67 4 68 dcl 1 saved_meters aligned based like lcte.meters; /* meters saved at dialup, allocated in tty_area */ 4 69 4 70 4 71 /* END INCLUDE FILE ... lct.incl.pl1 */ 1348 1349 /* BEGIN dn355_data.incl.pl1 */ 5 2 5 3 5 4 5 5 /****^ HISTORY COMMENTS: 5 6* 1) change(88-06-15,Berno), approve(88-07-13,MCR7928), 5 7* audit(88-06-15,Parisek), install(88-07-19,MR12.2-1061): 5 8* Add data needed for the uncp multiplexer (DSA gateway) interface 5 9* implementation. 5 10* 2) change(89-03-20,Parisek), approve(89-06-06,MCR8110), 5 11* audit(89-10-09,Farley), install(89-10-25,MR12.3-1100): 5 12* Add support of protocol mpx. 5 13* END HISTORY COMMENTS */ 5 14 5 15 5 16 /* Date Last Modified and Reason 5 17* 5 18* Created 07/25/74 by R. B. Snyder for new ttydim. 5 19* Modified 06/23/77 by J. Stern to add channel_work_reqd and cwork_count 5 20* Modified 08/14/78 by Robert Coren to remove devx_tab and invent PCBs 5 21* Modified 79 May 14 by Art Beattie to add fnp_mem_size 5 22* Modified December 1979 by Robert Coren to add FNP queue lock 5 23* Modified January 1980 by Larry Johnson to increase max number of FNPs to 8 5 24* Modified 02/12/80 by Robert Coren to add dcw_list_array_ptr 5 25* Modified 03/06/80 by Robert Coren to add some metering info 5 26* Modified 12/10/80 by Robert Coren to add get_meters_waiting flag 5 27* Modified 83-12-16 BIM to use a chanid instead of iom/channel fb's. 5 28* Modified 1984-07-26 BIM for paged iom. 5 29* Modified in September 1985 for the DN7100 version interim. 5 30**/ 5 31 5 32 /* LOCKING RULES: A fnp is locked by its LCTE unless its LCTE is uninitialized. 5 33* In that case, the configuration_lock must be held. 5 34* if tty_lock$lock_lcte returns io_no_permission, then the caller must 5 35* lock$lock_fast the configuration lock and retry the LCTE lock. If 5 36* the lcte is now initialized, too bad. Otherwise, the config lock protects. 5 37* 5 38* Configuration locking is interesting to init_multiplexer and 5 39* all of fnp t&d and reconfiguration. The guts of the multiplexer 5 40* pay no attention to it. Thus, if the LCTE can be locked, it MUST be 5 41* locked before changing the io_manager_assigned flag. */ 5 42 5 43 /* format: style4,delnl,insnl,^ifthendo */ 5 44 5 45 dcl max_no_355s fixed bin int static init (8) options (constant); 5 46 /* max no of 355s we can handle (arbitrary) */ 5 47 dcl dn355_data$ external fixed bin; 5 48 5 49 dcl infop pointer; 5 50 dcl fnpp ptr; 5 51 5 52 dcl 1 datanet_info aligned based (infop), 5 53 2 configuration_lock aligned, 5 54 3 pid bit (36) aligned, 5 55 3 event bit (36) aligned, 5 56 3 flags aligned, 5 57 4 notify_sw bit (1) unaligned, 5 58 4 pad bit (35) aligned, 5 59 2 no_of_355s fixed bin, /* no. of FNP's */ 5 60 2 trace bit (1) aligned, /* watch events on console */ 5 61 2 debug_stop bit (1) aligned, /* crash on errors */ 5 62 2 uncp_bufp ptr, /* pointer to the circular buffer */ 5 63 2 protocol_datap ptr, /* pointer to protocol_mpx data */ 5 64 2 pad1 (6) bit (36) aligned, 5 65 2 per_datanet (max_no_355s) aligned like fnp_info; /* data per datanet */ 5 66 5 67 dcl 1 fnp_info aligned based (fnpp), /* structure for each FNP */ 5 68 2 mbx_pt pointer, /* pointer to mailbox NULL if not in config */ 5 69 2 pcb_array_ptr pointer, /* pointer to array of physical channel blocks */ 5 70 2 dcw_list_array_ptr pointer, /* pointer to array of space reserved for output DCW lists */ 5 71 2 no_of_channels fixed bin, /* number of channels on this FNP */ 5 72 2 fnp_id, 5 73 3 fnp_tag char (1) unaligned, /* letter identifying FNP */ 5 74 3 fnp_number fixed bin (9) unsigned unaligned, /* sequence number of FNP */ 5 75 3 padc bit (18) unaligned, 5 76 2 io_chanid char (8) aligned, 5 77 2 io_manager_chx fixed bin (35), /* devx for DIA on iom */ 5 78 2 lsla_idx (0:5) fixed bin aligned, /* index into PCB array for lsla lines */ 5 79 2 hsla_idx (0:2) fixed bin aligned, /* index into PCB array for hsla lines */ 5 80 2 count fixed bin, /* number of items in delay queue */ 5 81 2 cur_ptr fixed bin, /* offset in tty_buf of next delay queue element */ 5 82 2 last_ptr fixed bin, /* offset in tty_buf of last delay queue element */ 5 83 2 bleft_355 fixed bin, /* number of free buffers in this 355 */ 5 84 2 flags, 5 85 3 work_reqd bit (1) unaligned, /* mailbox messages queued up */ 5 86 3 bootloading bit (1) unaligned, /* currently being bootloaded */ 5 87 3 running bit (1) unaligned, /* this FNP is running */ 5 88 3 wired bit (1) unaligned, /* bootload buffer is wired */ 5 89 3 dump_patch_in_progress bit (1) unaligned, /* a dump or patch order is in progress */ 5 90 3 level_3_pending bit (1) unaligned, /* level 3 interrupt pending */ 5 91 3 level_7_pending bit (1) unaligned, /* level 7 interrupt pending */ 5 92 3 dump_patch_disabled bit (1) unaligned, /* dump & patch orders disabled because of timeout */ 5 93 3 t_and_d_in_progress bit (1) unaligned, /* T & D using FNP */ 5 94 3 t_and_d_lev_3_occurred bit (1) unaligned, /* A level 3 occurred */ 5 95 3 t_and_d_lev_7_occurred bit (1) unaligned, 5 96 3 t_and_d_notify_requested bit (1) unaligned, 5 97 3 t_and_d_assigned bit (1) unaligned, /* AS has given fnp to process */ 5 98 3 get_meters_waiting bit (1) unaligned, /* waiting for meter copy to complete */ 5 99 3 padb bit (7) unaligned, 5 100 3 active_dial unaligned, 5 101 4 active_bit (15) bit (1) unaligned, /* ON if the process is active */ 5 102 2 lcte_ptr ptr, /* pointer to this FNP's LCT entry */ 5 103 2 astep ptr, /* pointer to aste of wired bootload buffer */ 5 104 2 boot_ev_chan fixed bin (71), /* event channel over which to signal bootload completion */ 5 105 2 boot_process_id bit (36), /* process that initiated bootload */ 5 106 2 version char (4), /* version id of core image */ 5 107 2 fnp_mem_size fixed bin (18) unsigned, /* memory size of this FNP in 18-bit words */ 5 108 2 queue_lock bit (36) aligned, /* lock for interrupt queue */ 5 109 2 dump_patch_lock bit (36), /* lock for fnp_dump or _patch operation */ 5 110 2 q_entries_made fixed bin (35), /* count of delay queue entries made */ 5 111 2 input_reject_count fixed bin, /* number of times input rejected */ 5 112 2 processed_from_q fixed bin (35), /* number of interrupts processed from queue */ 5 113 2 fnp_channel_locked fixed bin (35), /* number of times dn355 found per-FNP lock locked */ 5 114 2 input_data_transactions fixed bin (35), /* number of mailbox transactions for input */ 5 115 2 output_data_transactions fixed bin (35), /* number of mailbox transactions for output */ 5 116 2 input_control_transactions fixed bin (35), /* number of mailbox transactions for inbound control info */ 5 117 2 output_control_transactions fixed bin (35), /* number of mailbox transactions for outbound control info */ 5 118 2 cumulative_mbx_in_use fixed bin (35), /* cumulative count of number of outbound mailboxes in use */ 5 119 2 max_mbx_in_use fixed bin, /* maximum number of mailboxes in use at any given time */ 5 120 2 mbx_in_use_updated fixed bin (35), /* number of increments to cumulative_mbx_in_use */ 5 121 2 mbx_unavailable fixed bin (35), /* number of times had to queue mailbox transaction because none available */ 5 122 2 free_size fixed bin (35), /* cumulative amount of bleft_355 */ 5 123 2 free_count fixed bin, /* number of adds to above */ 5 124 2 fnp_space_restricted_output fixed bin (35), /* number of times available FNP space restricted amount of output sent */ 5 125 2 tandd_pcbx fixed bin, /* index of PCB for COLTS channel */ 5 126 2 n_pages_wired fixed bin, /* pages wired for loading */ 5 127 2 config_flags aligned, 5 128 3 available bit (1) unaligned, /* reconfig says "yes" */ 5 129 3 io_manager_assigned bit (1) unaligned, /* We have channel assigned to us */ 5 130 3 pad bit (34) unaligned, 5 131 2 uncp_pcbx1 fixed bin (17) unaligned, /* For the DN7100 */ 5 132 2 uncp_pcbx2 fixed bin (17) unaligned, /* For the DN7100 */ 5 133 2 ptx fixed bin, /* page table index, used only at bootload */ 5 134 2 ptp pointer unaligned; /* page table for this FNP */ 5 135 5 136 /**** The following named constants are used to lay out the 5 137* iom page tables. Each FNP has to have its own page 5 138* table because there is not enough room to have eight different 5 139* bootload images of 32 K and > 64 K of tty_buf 5 140* 5 141* THE MAX TTY BUF LENGTH IS 192 K words. We could have another 16 K 5 142* easily, and then after that it would get hard. */ 5 143 5 144 /**** The layout 5 145* 5 146* Page I/O address Memory address Comments 5 147* ---- ------ -------------- -------- 5 148* 0 0 xxxxxx invalid PTW 5 149* 1 2000 2000 write-enabled (mailbox) 5 150* 2 4000 4000 write-enabled (mailbox) 5 151* 3 6000 6000 write-enabled (mailbox) 5 152* 4 10000 as needed bootload image segment page 0 5 153* .... .... .... .... 5 154* 35 110000 as needed bootload image segment page 31 5 155* 36 112000 xxxxxx invalid PTW 5 156* ... .... .... .... 5 157* 63 160000 .... invalid PTW 5 158* 64 200000 as needed tty_buf page 0 5 159* ... .... .... .... 5 160* 127 260000 as needed tty_buf page 63 5 161* 255 ...... ..... tty_buf page 191 5 162**/ 5 163 5 164 /**** We assume that the page table starts at all zeros. */ 5 165 5 166 declare FIRST_BOOTLOAD_PAGEX fixed bin init (4) int static options (constant); 5 167 declare FIRST_TTY_BUF_PAGEX fixed bin init (64) int static options (constant); 5 168 5 169 /* End include file dn355_data.incl.pl1 */ 1349 1350 /* BEGIN INCLUDE FILE ... pcb.incl.pl1 */ 6 2 6 3 6 4 6 5 /****^ HISTORY COMMENTS: 6 6* 1) change(88-06-15,Berno), approve(88-07-13,MCR7928), 6 7* audit(88-06-15,Parisek), install(88-07-19,MR12.2-1061): 6 8* Add data needed for the uncp multiplexer (DSA gateway) interface 6 9* implementation. 6 10* END HISTORY COMMENTS */ 6 11 6 12 6 13 /* Created 08/14/78 by Robert S. Coren */ 6 14 /* Modified 02/19/80 by Robert S. Coren to add read_first & read_last */ 6 15 /* Modified 12/10/80 by Robert S. Coren to add metering stuff */ 6 16 /* Modified May 1981 by Robert S.Coren to add tandd_attached flag */ 6 17 /* Modified in February 1982 to add: dumpout, turn, enter_receive_pending, 6 18* connection_type, send_lf, extra_nl,lfecho flags for DN7100 */ 6 19 6 20 /* Describes physical channel blocks for FNP channels */ 6 21 6 22 dcl n_pcbs fixed bin; 6 23 dcl pcbp ptr; 6 24 6 25 dcl 1 pcb_array (n_pcbs) based aligned like pcb; 6 26 6 27 dcl 1 pcb aligned based (pcbp), /* physical channel block declaration */ 6 28 2 channel_desc unaligned, 6 29 3 devx fixed bin (17), /* index of LCT entry */ 6 30 3 subchan fixed bin (7) unaligned, /* logical subchannel/lsla slot # correspondence */ 6 31 3 line_number unal, /* regular line number */ 6 32 4 is_hsla bit (1) unaligned, /* on if hsla, off if lsla */ 6 33 4 la_no bit (3) unaligned, /* line adapter (high or low speed) number */ 6 34 4 slot_no bit (6) unaligned, /* physical slot or subchannel number */ 6 35 2 write_first fixed bin (17) unaligned, /* offset of first buffer in output chain */ 6 36 2 write_last fixed bin (17) unaligned, /* offset of last buffer in output chain */ 6 37 2 baud_rate fixed bin (17) unaligned, /* baud rate of channel */ 6 38 2 line_type fixed bin (17) unaligned, /* line type */ 6 39 2 max_buf_size fixed bin (17) unaligned, /* largest buffer to be allocated for output */ 6 40 2 write_cnt fixed bin (17) unaligned, /* number of characters in write chain */ 6 41 2 flags unaligned, 6 42 3 listen bit (1), /* channel is ready for dialup */ 6 43 3 dialed bit (1), /* channel is dialed up or connected */ 6 44 3 send_output bit (1), /* channel is ready for output */ 6 45 3 high_speed bit (1), /* needs large send_out threshold */ 6 46 3 sync_line bit (1), /* synchronous channel */ 6 47 3 end_frame bit (1), /* channel is waiting for formfeed */ 6 48 3 hndlquit bit (1), /* channel in hndlquit mode */ 6 49 3 breakall_enabled bit (1), /* breakall mode allowed for this channel */ 6 50 3 output_mbx_pending bit (1), /* A wtx mbx has been sent, but not relinquished */ 6 51 3 copied_meters_ready bit (1), /* copy_meters operation has completed */ 6 52 3 get_meters_waiting bit (1), /* waiting for get_meters operation to complete */ 6 53 3 tandd_attached bit (1), /* this channel is in use by T & D */ 6 54 3 enter_receive_pending bit (1), /* enter_receive is waiting for send */ 6 55 3 turn bit (1), /* Multics owns the turn */ 6 56 3 extra_nl bit (1), /* add NL at end of buffer (read) */ 6 57 3 send_lf bit (1), /* send lf after read */ 6 58 3 lfecho bit (1), /* Validate lfecho mode */ 6 59 3 dumpout bit (1), /* To purge first write after special dial */ 6 60 3 buffer_flag bit (1), /* Utilisation of a buffer in place of the circular buffer. */ 6 61 3 connection_type bit (2), /* For full-duplex */ 6 62 3 padb bit (6), 6 63 3 uncp_pcbx fixed bin (9) unal uns, /* To manage the full duplex with the datanet 7100 */ 6 64 2 read_first fixed bin (18) unsigned unaligned, /* head of read chain (while reading from FNP) */ 6 65 2 read_last fixed bin (18) unsigned unaligned, /* tail of read chain (likewise) */ 6 66 2 saved_meters_ptr pointer unaligned, /* pointer to (unwired) copy of meters at last dialup */ 6 67 2 copied_meters_offset fixed bin (18) unsigned; /* offset in tty_buf of buffer meters copied to */ 6 68 6 69 /* END INCLUDE FILE ... pcb.incl.pl1 */ 1350 1351 /* BEGIN INCLUDE FILE ... fnp_dump_seg.incl.pl1 */ 7 2 7 3 /* Defines format of segment used for dumping and patching FNP memory */ 7 4 /* Created 2/27/76 by Robert S. Coren */ 7 5 7 6 dcl fnp_dump_ptr ptr; 7 7 7 8 dcl fnp_dump_seg$ ext static; 7 9 7 10 dcl 1 fnp_dump_seg aligned based (fnp_dump_ptr), 7 11 2 lock bit (36), /* to prevent multiple use */ 7 12 2 flags, 7 13 3 in_use bit (1) unaligned, /* turned off when transaction completed */ 7 14 3 fdump bit (1) unaligned, /* used during fdump i/o */ 7 15 3 pad bit (34) unaligned, 7 16 2 data (0:2043) bit (18) unaligned; /* place where dumped/patched words are placed */ 7 17 7 18 /* END INCLUDE FILE ... fnp_dump_seg.incl.pl1 */ 1351 1352 /* BEGIN INCLUDE FILE ... fnp_types.incl.pl1 */ 8 2 8 3 8 4 8 5 /****^ HISTORY COMMENTS: 8 6* 1) change(88-06-15,Berno), approve(88-07-13,MCR7928), 8 7* audit(88-06-15,Parisek), install(88-07-19,MR12.2-1061): 8 8* Add data needed for the uncp multiplexer (DSA gateway) interface 8 9* implementation. 8 10* END HISTORY COMMENTS */ 8 11 8 12 8 13 /* Values for fnpe.type field */ 8 14 /* 8 15* Created 79 May 14 by Art Beattie by splitting information out from cdt.incl.pl1 8 16* Added in March 1982 - DN7100.fd. 8 17**/ 8 18 8 19 dcl (DN355 init (1), /* a DataNet 355 FNP */ 8 20 DN6600 init (2), /* a DataNet 6600 FNP */ 8 21 DN6670 init (3), /* a Honeywell Bull Network Processor (18x) */ 8 22 DN7100 init (4) /* The DSA Datanet architecture (DN7) */ 8 23 ) fixed bin internal static options (constant); 8 24 8 25 dcl fnp_types (4) char (8) int static options (constant) 8 26 init ("DN355", "DN6600", "DN6670", "DN7100"); 8 27 8 28 dcl fnp_models (4) fixed bin (17) int static options (constant) 8 29 init (355, 6600, 6670, 7100); 8 30 8 31 dcl supported_fnp (4) bit (1) int static options (constant) 8 32 init ("0"b, "0"b, "1"b, "1"b); 8 33 8 34 8 35 /* END INCLUDE FILE ... fnp_types.incl.pl1 */ 1352 1353 /* Begin include file io_manager_dcls.incl.pl1 */ 9 2 9 3 /* Written by Charles Hornig, late 1980 and early 1981 */ 9 4 /* Modified for MR10 interface, February 1982 */ 9 5 /* Channel reconfiguration entries added by Chris Jones, January 1984 */ 9 6 9 7 /* These entries are callable on unwired stacks. */ 9 8 9 9 /* call io_manager$assign (Chx, Channel, Handler, Index, Statusp, Code); */ 9 10 dcl io_manager$assign 9 11 entry (fixed bin (35), char (8) aligned, entry (fixed bin (35), fixed bin (3), bit (36) aligned), 9 12 fixed bin (35), ptr, fixed bin (35)); 9 13 9 14 /* call io_manager$assign_add (Chx, Channel, Handler, Index, Statusp, Code); */ 9 15 dcl io_manager$assign_add 9 16 entry (fixed bin (35), char (8) aligned, entry (fixed bin (35), fixed bin (3), bit (36) aligned), 9 17 fixed bin (35), ptr, fixed bin (35)); 9 18 9 19 /* call io_manager$unassign (Chx, Code); */ 9 20 dcl io_manager$unassign entry (fixed bin (35), fixed bin (35)); 9 21 9 22 /* call io_manager$unassign_delete (Chx, Code); */ 9 23 dcl io_manager$unassign_delete entry (fixed bin (35), fixed bin (35)); 9 24 9 25 /* call io_manager$connect (Io_manager_arg); */ 9 26 dcl io_manager$connect entry (1 aligned like io_manager_arg); 9 27 9 28 /* call io_manager$connect_abs (Io_manager_arg); */ 9 29 dcl io_manager$connect_abs entry (1 aligned like io_manager_arg); 9 30 9 31 /* call io_manager$connect_direct (Io_manager_arg); */ 9 32 dcl io_manager$connect_direct entry (1 aligned like io_manager_arg); 9 33 9 34 /* call io_manager$get_status (Chx, Io_status_entry_ptr); */ 9 35 dcl io_manager$get_status entry (fixed bin (35), ptr); 9 36 9 37 /* call io_manager$mask (Chx); */ 9 38 dcl io_manager$mask entry (fixed bin (35)); 9 39 9 40 /* call io_manager$ignore_interrupt (); */ 9 41 dcl io_manager$ignore_interrupt entry (fixed bin (35), fixed bin (3), bit (36) aligned); 9 42 9 43 /* call io_manager$data_tdcw (Io_manager_arg); 9 44* dcl io_manager$data_tdcw entry (1 aligned like io_manager_arg); 9 45* 9 46* /* call io_manager$workspace_tdcw (Io_manager_arg); */ 9 47 dcl io_manager$workspace_tdcw entry (1 aligned like io_manager_arg); 9 48 9 49 dcl io_manager_arg_ptr ptr; 9 50 dcl 1 io_manager_arg aligned based (io_manager_arg_ptr), 9 51 2 chx fixed bin (35), /* channel index from io_manager$assign */ 9 52 2 bound fixed bin (19), /* workspace size */ 9 53 2 pcw bit (36) aligned, /* or IDCW */ 9 54 2 listx fixed bin (18), /* DCW list offset */ 9 55 2 ptp ptr, /* page table pointer */ 9 56 2 listp ptr, /* DCW list pointer */ 9 57 2 dcw_pair_ptr ptr; /* DCW pair pointer */ 9 58 9 59 /* End include file io_manager_dcls.incl.pl1 */ 1353 1354 /* START OF: io_page_tables.incl.pl1 * * * * * * * * * * * * * * * * */ 10 2 10 3 /* Definition of the I/O page table segment. For details of how this is manipulated, see io_page_table.pl1. */ 10 4 /* Written April 1983 by Chris Jones */ 10 5 /* Modified 1985-01-02, BIM: removed include of hc_lock. */ 10 6 10 7 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 10 8 dcl io_page_table_seg$ external; 10 9 10 10 dcl io_page_table_seg_ptr ptr; 10 11 10 12 dcl 1 io_page_tables aligned based (io_page_table_seg_ptr), 10 13 2 lock like hc_fast_lock, /* (0) standard fast lock */ 10 14 2 free_64_ptx fixed bin (9) unsigned unaligned, 10 15 /* (3) index of first free 64 word pt */ 10 16 2 free_256_ptx fixed bin (9) unsigned unaligned, 10 17 /* (3) pointer to first free 256 word pt */ 10 18 2 n_pages_wired fixed bin (9) unsigned unaligned, 10 19 /* (3) how many pages are in use now */ 10 20 2 pad1 bit (9) unaligned, 10 21 2 pt_info (5:256), /* (4) one for each page table */ 10 22 3 size bit (1) unaligned, 10 23 3 in_use bit (1) unaligned, 10 24 3 pad1 bit (25) unaligned, 10 25 3 next_pt fixed bin (9) unsigned unaligned; 10 26 10 27 /* This include file requires hc_fast_lock.incl.pl1 */ 10 28 10 29 dcl ioptp ptr; 10 30 dcl io_page_table_size fixed bin; 10 31 10 32 dcl 1 page_table (0:io_page_table_size - 1) aligned based (ioptp), 10 33 2 ptw like io_ptw; 10 34 11 1 /* Begin include file io_ptw.incl.pl1 */ 11 2 11 3 dcl io_ptwp ptr; 11 4 dcl 1 io_ptw aligned based (io_ptwp), 11 5 2 pad1 bit (2) unaligned, 11 6 2 address uns fixed bin (16) unaligned, 11 7 2 pad2 bit (13) unaligned, 11 8 2 write bit (1) unaligned, 11 9 2 housekeeping bit (1) unaligned, 11 10 2 valid bit (1) unaligned, 11 11 2 pad3 bit (2) unaligned; 11 12 11 13 /* End include file io_ptw.incl.pl1 */ 10 35 10 36 10 37 dcl IO_PAGE_TABLE_LOCK_EVENT 10 38 char (4) static options (constant) init ("iopt"); 10 39 dcl MAX_IO_PAGE_TABLE_SEG_PAGES 10 40 fixed bin (9) static options (constant) init (16); 10 41 dcl PT_64_SIZE bit (1) static options (constant) init ("0"b); 10 42 dcl PT_256_SIZE bit (1) static options (constant) init ("1"b); 10 43 dcl PTS_PER_PAGE fixed bin static options (constant) init (16); 10 44 dcl SMALL_PT_SIZE fixed bin (19) static options (constant) init (65536); 10 45 10 46 /* END OF: io_page_tables.incl.pl1 * * * * * * * * * * * * * * * * */ 1354 1355 /* START OF: io_chnl_util_dcls.incl.pl1 * * * * * * * * * * * * * * * * */ 12 2 12 3 /* Written by Charles Hornig, 1st quarter 1981 */ 12 4 /* Canonicalization entry added by Chris Jones, January 1984 */ 12 5 12 6 /* chanid = canonicalize_chanid (chanid); */ 12 7 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 12 8 dcl io_chnl_util$canonicalize_chanid 12 9 entry (char (8) aligned) returns (char (8) aligned); 12 10 12 11 /* call iom_to_name (iomno, channo, name, code); */ 12 12 dcl io_chnl_util$iom_to_name 12 13 entry (fixed bin (3), fixed bin (7), char (8) aligned, fixed bin (35)); 12 14 12 15 /* call name_to_iom (name, iomno, channo, code); */ 12 16 dcl io_chnl_util$name_to_iom 12 17 entry (char (8) aligned, fixed bin (3), fixed bin (7), fixed bin (35)); 12 18 12 19 /* END OF: io_chnl_util_dcls.incl.pl1 * * * * * * * * * * * * * * * * */ 1355 1356 /* BEGIN INCLUDE FILE ... ptw.l68.incl.pl1 ... 02/26/81, for ADP conversion */ 13 2 /* Note: This include file has an ALM counterpart made with cif. Keep it up to date */ 13 3 13 4 dcl 1 l68_core_ptw aligned based (ptp), /* In-core page descriptor */ 13 5 2 frame fixed bin (14) unsigned unaligned, /* Core frame number */ 13 6 2 pad1 bit (4) unaligned, 13 7 2 flags unaligned like l68_ptw_flags; 13 8 13 9 dcl 1 l68_ptw aligned based (ptp), /* General declaration for out-of-core PTW */ 13 10 2 add bit (18) unaligned, 13 11 2 flags like l68_ptw_flags unaligned; 13 12 13 13 dcl 1 l68_special_ptw aligned based (ptp) like l68_ptw; /* Page is somewhere peculiar -- add_type = "01"b */ 13 14 dcl 1 l68_real_disk_ptw aligned based (ptp) like l68_ptw; /* PTW for page actually on disk -- add_type = "10"b */ 13 15 dcl 1 l68_null_disk_ptw aligned based (ptp) like l68_ptw; /* PTW for page not yet on disk -- add_type = "11"b */ 13 16 13 17 dcl 1 l68_ptw_flags unaligned based, /* Various software/hardware flags */ 13 18 (2 add_type bit (4), /* 0000=null, 1000=core, 0100=disk, 0010=pd, 0001=swap */ 13 19 2 first bit (1), /* the page has not yet been written out */ 13 20 2 er bit (1), /* error on last page I/O (also used by post-purge as temp) */ 13 21 13 22 2 pad1 bit (1), 13 23 2 unusable1 bit (1), /* can't be used because hardware resets this bit */ 13 24 2 phu bit (1), /* page has been used bit */ 13 25 13 26 2 phm1 bit (1), /* Cumulative OR of hardware phm's */ 13 27 2 nypd bit (1), /* must be moved to paging device */ 13 28 2 phm bit (1), /* page has been modified bit */ 13 29 13 30 2 phu1 bit (1), /* page has been used in the quantum */ 13 31 2 wired bit (1), /* page is to remain in core */ 13 32 2 os bit (1), /* page is out-of-service (I/O in progress) */ 13 33 2 valid bit (1), /* directed fault if this is 0 (page not in core) */ 13 34 2 df_no bit (2)) unaligned; /* directed fault number for page faults */ 13 35 13 36 /* END INCLUDE FILE ... ptw.l68.incl.pl1 */ 1356 1357 declare ptp pointer; 1358 /* BEGIN INCLUDE FILE syserr_constants.incl.pl1 ... 11/11/80 W. Olin Sibert */ 14 2 /* 85-02-12, EJ Sharpe - Added sorting class constants, removed AIM_MESSAGE, added new action code names. */ 14 3 /* 85-04-24, G. Palter - Renamed SYSERR_UNUSED_10 to SYSERR_RING1_ERROR to reflect its actual use. */ 14 4 14 5 /* This include file has an ALM version. Keep 'em in sync! */ 14 6 14 7 dcl ( 14 8 14 9 /* The following constants define the message action codes. This indicates 14 10*how a message is to be handled. */ 14 11 14 12 SYSERR_CRASH_SYSTEM init (1), 14 13 CRASH init (1), /* Crash the system, and bleat plaintively. */ 14 14 14 15 SYSERR_TERMINATE_PROCESS init (2), 14 16 TERMINATE_PROCESS init (2), /* Terminate the process, print the message, and beep. */ 14 17 14 18 SYSERR_PRINT_WITH_ALARM init (3), 14 19 BEEP init (3), /* Beep and print the message on the console. */ 14 20 14 21 SYSERR_PRINT_ON_CONSOLE init (0), 14 22 ANNOUNCE init (0), /* Just print the message on the console. */ 14 23 14 24 SYSERR_LOG_OR_PRINT init (4), 14 25 LOG init (4), /* Log the message, or print it if it can't be logged */ 14 26 14 27 SYSERR_LOG_OR_DISCARD init (5), 14 28 JUST_LOG init (5), /* Just try to log the message, and discard it if it can't be */ 14 29 14 30 14 31 /* The following constants are added to the normal severities to indicate 14 32*different sorting classes of messages. */ 14 33 14 34 SYSERR_SYSTEM_ERROR init (00), /* indicates a standard level system error */ 14 35 SYSERR_RING1_ERROR init (10), /* indicates an error detected in ring 1 (mseg_, RCP) */ 14 36 SYSERR_COVERT_CHANNEL init (20), /* indicates covert channel audit trail message */ 14 37 SYSERR_UNSUCCESSFUL_ACCESS init (30), /* indicates access denial audit trail message */ 14 38 SYSERR_SUCCESSFUL_ACCESS init (40) /* indicates access grant audit trail message */ 14 39 ) fixed bin internal static options (constant); 14 40 14 41 /* END INCLUDE FILE syserr_constants.incl.pl1 */ 1358 1359 /* BEGIN INCLUDE FILE ... tty_buf.incl.pl1 */ 15 2 15 3 /* Date Last Modified and Reason 15 4* Created 04/19/77 by J. Stern (from part of tty.incl.pl1) 15 5* Modified January 1978 by Robert Coren and Larry Johnson for variable-size buffers 15 6* Modified 2/6/78 by Robert Coren to make circular_queue size settable 15 7* Modified Aug 78 by J. Nicholls to move the buffer block format to a file of its own 15 8* and wtcb to its own plus other modification for ring 0 multiplexing, tty_buffer_block.incl.pl1 15 9* Modified 7/17/79 by B. Greenberg for echo negotiation meters. 15 10* Modified November 1979 by C. Hornig for MCS tracing. 15 11* Modified December 1979 by Robert Coren to add FNP channel lock meter 15 12* Modified February 1980 by Robert Coren to remove all references to circular buffer 15 13* Modified March 1980 by Robert Coren to reorganize metering information 15 14* Modified December 1980 by Robert Coren to add FNP-specific events 15 15* Modified 24 March 1982, W. Olin Sibert, to add mcs_timer support, recoverable_error_severity 15 16* Modified November 1984 by Robert Coren to add tty_area_lock 15 17**/ 15 18 15 19 dcl ttybp ptr, 15 20 tty_buf$ ext static, /* tty buffer segment */ 15 21 tty_ev fixed bin int static options (constant) init (57), /* event used for wait and notify */ 15 22 abs_buf_limit fixed bin (18) static options (constant) init (64), /* minimum number of words we will leave free */ 15 23 input_bpart fixed bin (18) static options (constant) init (2), /* fraction of bleft we will allow for input */ 15 24 output_bpart fixed bin (18) static options (constant) init (4); /* fraction of bleft we will allow for output */ 15 25 15 26 15 27 dcl qblock_size fixed bin int static options (constant) init (16); /* size in words of a delay queue block */ 15 28 dcl bsizec fixed bin int static options (constant) init (60); /* number of characters in smallest buffer */ 15 29 dcl buf_per_second fixed bin int static options (constant) init (10); /* for figuring out max. buffer size based on speed */ 15 30 15 31 dcl FNP_DUMP_PATCH_EVENT fixed bin int static options (constant) init (58); 15 32 dcl FNP_METER_EVENT fixed bin int static options (constant) init (59); 15 33 dcl TTY_AREA_LOCK_EVENT bit (36) aligned int static options (constant) init ("74"b3); 15 34 15 35 dcl 1 tty_buf aligned based (ttybp), /* declaration of tty buffer seg */ 15 36 2 slock bit (36), /* per system lock */ 15 37 2 absorig fixed bin (24), /* abs address of this seg */ 15 38 2 borig bit (18), /* index of start of buffer area */ 15 39 2 bleft fixed bin (18), /* words left in pool */ 15 40 2 free bit (18), /* pointer to start of free pool */ 15 41 2 fnp_config_flags (8) bit (1) unal, /* flag(i) ON if fnp(i) configured */ 15 42 2 padb1 bit (28) unaligned, 15 43 2 lct_ptr ptr, /* pointer to logical channel table */ 15 44 15 45 2 nrawread fixed bin (35), /* number of raw chars input, total */ 15 46 2 nrawwrite fixed bin (35), /* number of raw characters output */ 15 47 2 ninchars fixed bin (35), /* total input chars after conversion */ 15 48 2 noutchars fixed bin (35), /* total output chars before conversion */ 15 49 2 readblocked fixed bin (35), /* number of times go input blocked */ 15 50 2 nblocked fixed bin (35), /* number of times process output blocked */ 15 51 2 minbuf fixed bin (18), /* min output buffer size */ 15 52 2 totbuf fixed bin (35), /* divide by nblocked to get ave buffer size */ 15 53 15 54 2 preconverted fixed bin (35), /* number of converted chars held in tty_buf */ 15 55 2 input_restart fixed bin, /* number of times tty_read had to start over */ 15 56 2 output_restart fixed bin, /* number of times tty_write has had to start over */ 15 57 2 output_buffer_overflow fixed bin, /* number of times tty_write has run out of buffers */ 15 58 2 read_time fixed bin (71), /* total time spent in tty_read */ 15 59 2 write_time fixed bin (71), /* total time spent in tty_write */ 15 60 15 61 2 read_calls fixed bin (35), /* number of calls to tty_read */ 15 62 2 write_calls fixed bin (35), /* number of calls to tty_write */ 15 63 2 bfx fixed bin, /* used in calls to iobm */ 15 64 2 nquits fixed bin (35), /* number of quits */ 15 65 2 space_needed_data, 15 66 3 space_needed bit (1) unal, /* space_needed bit on in at least 1 lcte */ 15 67 3 space_needed_calls fixed bin (34) unal, /* meter of uses of this facility */ 15 68 2 space_lock_count fixed bin (35), /* count of times tty_buf.slock locked */ 15 69 2 space_lock_wait_count fixed bin (35), /* count of times necessary to loop to lock it */ 15 70 2 space_lock_wait_time fixed bin (35), /* total time looped trying to lock it */ 15 71 15 72 2 alloc_calls fixed bin (35), /* total number of allocations performed in tty_buf */ 15 73 2 free_calls fixed bin (35), /* total number of freeings in tty_buf */ 15 74 2 alloc_time fixed bin (35), /* time spent masked in tty_space_man$get entries */ 15 75 2 free_time fixed bin (35), /* time spent masked in tty_space_man$free entries */ 15 76 2 total_alloc_steps fixed bin (35), /* number of steps thru free chain while doing above */ 15 77 2 alloc_failures fixed bin (35), /* number of unsuccessful attempts to allocate space */ 15 78 2 cumulative_input_space fixed bin (71), /* cumulative amount of space allocated for input */ 15 79 15 80 2 cumulative_output_space fixed bin (71), /* cumulative amount of space allocated for output */ 15 81 2 cumulative_control_space fixed bin (71), /* cumulative amount of space allocated by tty_space_man$get_space */ 15 82 2 input_space_updates fixed bin (35), /* number of increments to cumulative_input_space */ 15 83 2 output_space_updates fixed bin (35), /* number of increments to cumulative_output_space */ 15 84 2 control_space_updates fixed bin (35), /* number of increments to cumulative_control_space */ 15 85 2 minimum_free_space fixed bin (18), /* smallest amount of free space ever available */ 15 86 15 87 2 current_input_space fixed bin (18), /* amount of space currently allocated for input */ 15 88 2 current_output_space fixed bin (18), /* amount of space currently allocated for output */ 15 89 2 current_control_space fixed bin (18), /* amount of space currently allocated by get_space */ 15 90 2 tty_lock_calls fixed bin (35), /* number of calls to tty_lock$lock entries */ 15 91 2 found_channel_locked fixed bin (35), /* number of times tty_lock found channel already locked */ 15 92 2 max_wait_time fixed bin (35), /* longest time waited for any channel lock */ 15 93 2 total_wait_time fixed bin (71), /* total amount of time spent waiting for channel locks */ 15 94 15 95 2 echo_neg_time fixed bin (71), /* cumulative time spent doing echo negotiation */ 15 96 2 echo_neg_interrupts fixed bin (35), /* Echo-negotiated shipments */ 15 97 2 echo_neg_r0_chars fixed bin (35), /* Chars echoed by ring 0 */ 15 98 2 echo_neg_mux_chars fixed bin (35), /* Chars echoed by mux */ 15 99 2 echo_neg_sndopt_restarts fixed bin (35), /* Echo reinits */ 15 100 2 echo_neg_mux_nonecho fixed bin (35), 15 101 2 echo_neg_entries fixed bin (35), /* Entries into negotiate */ 15 102 15 103 2 echo_neg_mux_inhibit bit (1) aligned, /* For testing */ 15 104 2 n_queued_interrupts fixed bin (35), /* number of interrupts queued by tty_lock */ 15 105 2 trace unaligned, /* tracing information */ 15 106 3 flags, 15 107 4 enable bit, /* global tracing control */ 15 108 4 default_mode bit, /* whether to trace channels by default */ 15 109 4 read bit, /* read */ 15 110 4 write bit, /* write */ 15 111 4 data bit, /* buffers on reads and writes */ 15 112 4 control bit, /* control, priv_control, and hpriv_control */ 15 113 4 modes bit, /* (get set check)_modes */ 15 114 4 interrupt bit, /* interrupt, interrupt_later */ 15 115 4 init bit, /* init_multiplexer, terminate_multiplexer */ 15 116 4 start bit, /* start, stop */ 15 117 4 shutdown bit, /* shutdown */ 15 118 4 space_man bit, /* tty_space_man$* */ 15 119 4 pad_flags bit (6), 15 120 3 data_offset bit (18), /* offset of tracing data */ 15 121 15 122 2 recoverable_error_severity fixed bin, /* Syserr severity for recoverable MCS errors */ 15 123 15 124 2 timer_lock bit (36) aligned, /* Lock owned by mcs_timer */ 15 125 2 next_timer_offset bit (18) aligned, /* Offset of next timer to come due */ 15 126 2 timer_count fixed bin, /* Number of timers outstanding */ 15 127 2 timer_process bit (36) aligned, /* Who is doing timers? */ 15 128 15 129 2 timer_ev_chn fixed bin (71), /* How get get him */ 15 130 2 timer_lock_wait_time fixed bin (71), /* CPU time spent spinning on timer lock */ 15 131 15 132 2 timer_lock_count fixed bin (35), /* Number of times timer lock locked */ 15 133 2 timer_lock_wait_count fixed bin (35), /* Number of times imer lock waited on */ 15 134 2 timer_call_time fixed bin (71), /* CPU time spent in call side timer operations */ 15 135 15 136 2 timer_polling_time fixed bin (71), /* CPU time spent polling (including channel_manager) */ 15 137 2 timer_set_calls fixed bin (35), /* Number of calls to mcs_timer$set, set_wired */ 15 138 2 timer_reset_calls fixed bin (35), /* Number of calls to mcs_timer$reset, reset_wired */ 15 139 15 140 2 timer_change_calls fixed bin (35), /* Number of calls to mcs_timer$change, change_wired */ 15 141 2 timer_poll_calls fixed bin (35), /* Number of calls to mcs_timer$poll */ 15 142 2 timer_error_calls fixed bin (35), /* Number of mcs_timer calls ending with recoverable errors */ 15 143 2 timer_duplicate_pollings fixed bin (35), /* Number of timer polling found in progress on other CPU */ 15 144 15 145 2 tty_area_lock like hc_fast_lock, /* to prevent contention in allocating/freeing in tty_area */ 15 146 15 147 2 pad2 (13) fixed bin (35), 15 148 15 149 2 free_space fixed bin; /* start of free space region */ 15 150 15 151 16 1 /* BEGIN INCLUDE FILE...hc_fast_lock.incl.pl1 */ 16 2 16 3 /* Created November 1984 by Robert Coren to replace hc_lock.incl.pl1 */ 16 4 16 5 /* Lock format suitable for use with lock$lock_fast, unlock_fast */ 16 6 16 7 /* format: style3 */ 16 8 16 9 declare lock_ptr pointer; 16 10 declare 1 hc_fast_lock aligned based (lock_ptr), 16 11 2 pid bit (36) aligned, /* holder of lock */ 16 12 2 event bit (36) aligned, /* event associated with lock */ 16 13 2 flags aligned, 16 14 3 notify_sw bit (1) unaligned, 16 15 3 pad bit (35) unaligned; /* certain locks use this pad, like dirs */ 16 16 16 17 /* END INCLUDE FILE...hc_fast_lock.incl.pl1 */ 15 152 15 153 15 154 /* END INCLUDE FILE ... tty_buf.incl.pl1 */ 1359 17 1 /* Begin include file fnp_mpx_msg_.incl.pl1 BIM 83-12-20 */ 17 2 /* Message from ring 0 fnp mpx to user ring mpx manager */ 17 3 /* format: style3 */ 17 4 17 5 dcl fnp_msg_ptr pointer; 17 6 dcl 1 fnp_msg aligned based (fnp_msg_ptr), 17 7 2 fnp_no fixed bin (17) unal, 17 8 2 state fixed bin (17) unal, 17 9 2 flags unaligned, 17 10 3 deconfigured bit, 17 11 3 pad bit (35); 17 12 17 13 /* End include file fnp_mpx_msg_.incl.pl1 */ 1360 1361 1362 1363 1364 1365 /* BEGIN MESSAGE DOCUMENTATION 1366* 1367* Message: 1368* Loading FNP X, CORE_IMAGE VERSION 1369* 1370* S: $info 1371* 1372* T: Answering service initialization and each subsequent FNP 1373* bootload. 1374* 1375* M: Loading of FNP X has begun with a core image named CORE_IMAGE 1376* (normally "mcs") of version number VERSION. 1377* 1378* A: $ignore 1379* 1380* 1381* Message: 1382* fnp_util$wire: FNP T already wired (trace) 1383* 1384* 1385* Message: 1386* fnp_util$wire: failed. REASON (trace) 1387* 1388* 1389* Message: 1390* fnp_util$load: FNP load already in progress for FNP T. 1391* 1392* 1393* Message: 1394* fnp_util$load: FNP T not wired. 1395* 1396* 1397* Message: 1398* fnp_util$load: FNP T is running. (trace) 1399* 1400* 1401* Message: 1402* fnp_util$load: FNP T is running T&D. 1403* 1404* 1405* Message: 1406* fnp_util$load: Error loading FNP T. REASON (trace) 1407* 1408* 1409* Message: 1410* fnp_util$unwire: Unwire failed for FNP T. REASON 1411* 1412* 1413* Message: 1414* fnp_util$configure: FNP T already configured. 1415* 1416* 1417* Message: 1418* fnp_util: FNP T added to configuration^[ by NAME^]. 1419* 1420* 1421* Message: 1422* FNP T deleted from configuration^[ by ^a^]. 1423* 1424* 1425* Message: 1426* fnp_util$fdump_seg_io: IO_OP for CALLER (trace) 1427* 1428* 1429* Message: 1430* fnp_util: channel assignment failed for FNP ^T REASON. (tandd) 1431* 1432* 1433* Message: 1434* fnp_util: ioam_$assign failed for FNP T. REASON (tandd) 1435* 1436* 1437* Message: 1438* fnp_util: assigned FNP T to NAME for T & D. 1439* 1440* 1441* Message: 1442* fnp_util: io channel unassignment failed for FNP T. (tandd) 1443* 1444* 1445* Message: 1446* fnp_util: releasing FNP T from NAME (tandd) 1447* 1448* 1449* Message: 1450* fnp_util$validate_assigned_ret (CALLER): IO manager assignment lacking. (trace) 1451* 1452* 1453* Message: 1454* fnp_util$ENTRY: Invalid call for FNP INDEX. (not in cdeck) 1455* 1456* 1457* Message: 1458* fnp_util$ENTRY: Tracing call for fnp T. 1459* 1460* 1461* Message: 1462* fnp_util$ENTRY: Invalid call. (trace) 1463* 1464* 1465* Message: 1466* fnp_util: Could not unassign FNP T at reassign_interrupt. 1467* 1468* 1469* Message: 1470* fnp_util: force detaching FNP T from process PID. 1471* 1472* 1473* Message: 1474* fnp_util: io channel unassignment failed for FNP T. (tandd) 1475* 1476* 1477* Message: 1478* fnp_util: lock_fnp called with lock locked. 1479* 1480* 1481* Message: 1482* fnp_util$ENTRY: Debugging stop (type go to continue). 1483* 1484* END MESSAGE DOCUMENTATION */ 1485 1486 1487 end fnp_util; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0825.4 fnp_util.pl1 >special_ldd>install>MR12.3-1114>fnp_util.pl1 1345 1 01/30/85 1523.9 aste.incl.pl1 >ldd>include>aste.incl.pl1 1346 2 10/31/84 1315.5 config_prph_fnp_card.incl.pl1 >ldd>include>config_prph_fnp_card.incl.pl1 1347 3 10/20/82 0938.5 dn355_mailbox.incl.pl1 >ldd>include>dn355_mailbox.incl.pl1 1348 4 11/08/82 1005.8 lct.incl.pl1 >ldd>include>lct.incl.pl1 1349 5 10/26/89 2011.9 dn355_data.incl.pl1 >ldd>include>dn355_data.incl.pl1 1350 6 07/21/88 2036.0 pcb.incl.pl1 >ldd>include>pcb.incl.pl1 1351 7 02/23/79 1435.2 fnp_dump_seg.incl.pl1 >ldd>include>fnp_dump_seg.incl.pl1 1352 8 07/21/88 2036.0 fnp_types.incl.pl1 >ldd>include>fnp_types.incl.pl1 1353 9 07/11/84 0937.3 io_manager_dcls.incl.pl1 >ldd>include>io_manager_dcls.incl.pl1 1354 10 01/06/85 1422.5 io_page_tables.incl.pl1 >ldd>include>io_page_tables.incl.pl1 10-35 11 05/13/82 1421.2 io_ptw.incl.pl1 >ldd>include>io_ptw.incl.pl1 1355 12 07/11/84 0937.3 io_chnl_util_dcls.incl.pl1 >ldd>include>io_chnl_util_dcls.incl.pl1 1356 13 03/27/82 0430.2 ptw.l68.incl.pl1 >ldd>include>ptw.l68.incl.pl1 1358 14 05/17/85 0615.7 syserr_constants.incl.pl1 >ldd>include>syserr_constants.incl.pl1 1359 15 01/06/85 1422.1 tty_buf.incl.pl1 >ldd>include>tty_buf.incl.pl1 15-152 16 01/06/85 1422.1 hc_fast_lock.incl.pl1 >ldd>include>hc_fast_lock.incl.pl1 1360 17 07/11/84 0937.3 fnp_mpx_msg_.incl.pl1 >ldd>include>fnp_mpx_msg_.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. ANNOUNCE 000063 constant fixed bin(17,0) initial dcl 14-7 set ref 223* 246* 256* 275* 281* 288* 296* 304* 357* 388* 421* 428* 442* 468* 488* 502* 559* 659* 676* 681* 690* 719* 760* 768* 773* 823* 826* 939* 962* 979* 1000* 1128* 1133* 1151* 1208* 1333* CRASH 000102 constant fixed bin(17,0) initial dcl 14-7 set ref 1063* 1123* 1134* 1223* 1264* DN6670 constant fixed bin(17,0) initial dcl 8-19 ref 611 900 1010 FIRST_BOOTLOAD_PAGEX constant fixed bin(17,0) initial dcl 5-166 ref 374 1179 1179 1318 FIRST_TTY_BUF_PAGEX constant fixed bin(17,0) initial dcl 5-167 ref 1302 FNP_DOWN constant fixed bin(17,0) initial dcl 174 ref 543 Tracer parameter char packed unaligned dcl 1262 set ref 1260 1264* a_absadr parameter fixed bin(24,0) dcl 61 set ref 207 250* 263 271 395 403* a_code parameter fixed bin(35,0) dcl 59 set ref 207 222* 259* 263 391* 395 410* 413 432* 435 448* 452 471* 479 505* 512 562* 568 646* 730 780* 783 808 828* 831 840* 843 853* 855* 858 867* 870 875 a_count parameter fixed bin(17,0) dcl 58 ref 207 215 870 875 883 a_devx parameter fixed bin(17,0) dcl 52 ref 783 786 a_dia_pcw based structure level 1 dcl 1103 set ref 1121* 1145 1147 1149 a_diaop parameter bit(6) dcl 655 set ref 651 659* 671* a_dummy parameter bit(36) dcl 715 ref 710 a_ev_chan parameter fixed bin(71,0) dcl 60 ref 263 359 730 776 a_fnp_addr parameter fixed bin(15,0) dcl 68 ref 870 875 885 a_fnp_mem_size parameter fixed bin(17,0) dcl 54 ref 263 270 568 580 a_fnp_no parameter fixed bin(17,0) dcl 53 set ref 207 213 263 269 395 400 413 416 435 438 452 458 479 482 512 515 568 578 710 719* 730 733 808 810 831 833 843 845 858 860 870 875 878 a_fnp_type parameter fixed bin(17,0) dcl 55 ref 568 579 870 875 884 a_image_name parameter char(168) packed unaligned dcl 63 set ref 263 357* a_ints parameter bit(2) dcl 66 set ref 858 864* a_level parameter fixed bin(3,0) dcl 67 set ref 710 719* 843 851* a_load_info_ptr parameter pointer dcl 57 ref 263 311 a_ptr parameter pointer dcl 56 ref 207 214 568 581 870 875 882 a_version parameter char(4) packed unaligned dcl 62 ref 263 356 absadr 000040 constant entry external dcl 121 ref 403 1026 addr builtin function dcl 104 ref 321 591 594 594 597 597 610 636 644 644 717 718 746 787 788 791 791 795 886 891 891 895 897 897 908 922 957 977 1026 1026 1197 1197 1212 1212 1227 1227 1240 1240 1253 1253 1293 1301 1301 1305 1324 addrel builtin function dcl 104 ref 908 922 address based fixed bin(18,0) level 2 in structure "a_dia_pcw" packed packed unsigned unaligned dcl 1103 in procedure "connect_to_dia" set ref 1125* address 0(02) based fixed bin(16,0) level 2 in structure "io_ptw" packed packed unsigned unaligned dcl 11-4 in procedure "fnp_util" set ref 1294* 1306* 1325* address parameter fixed bin(24,0) dcl 1098 in procedure "connect_to_dia" ref 1091 1116 1123 1125 address_mode based bit(3) level 2 packed packed unaligned dcl 187 set ref 613* 902* aste based structure level 1 dcl 1-11 astep 34 based pointer level 2 in structure "fnp_info" dcl 5-67 in procedure "fnp_util" set ref 235* 1134* 1184 astep 000164 automatic pointer dcl 1-9 in procedure "fnp_util" set ref 229* 235 238* 242* 246* 1024* 1025* 1034* 1035* 1184* 1185* 1186* 1301* 1303 1304 1319 auto_absadr 000100 automatic fixed bin(24,0) dcl 72 set ref 250 271* 275* 374* 377* 671* 1026* 1320* auto_fnp_msg 000146 automatic structure level 1 dcl 100 set ref 546 available 66 based bit(1) level 3 packed packed unaligned dcl 5-67 set ref 485 493* 519 525* 1051 baseno builtin function dcl 104 ref 1024 1024 1034 1034 baud_rate 2 based fixed bin(17,0) level 2 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "fnp_util" set ref 327* 339 341 baud_rate 2 based fixed bin(17,0) array level 3 in structure "load_info" dcl 198 in procedure "fnp_util" ref 327 bit builtin function dcl 104 ref 338 1016 boot_ev_chan 36 based fixed bin(71,0) level 2 dcl 5-67 set ref 359* 547* 776* 1204* boot_process_id 40 based bit(36) level 2 dcl 5-67 set ref 360* 547* 771* 818* 996 1200* 1203* bootloading 30(01) based bit(1) level 3 packed packed unaligned dcl 5-67 set ref 278 363* 464* 585 751 caller parameter char(32) packed unaligned dcl 654 in procedure "fdump_seg_io" set ref 651 659* caller parameter char(32) packed unaligned dcl 934 in procedure "validate_assigned_ret" set ref 931 939* caller parameter char(32) packed unaligned dcl 991 in procedure "validate_fnp_tandd_ret" set ref 988 993* 1000* caller parameter char(32) packed unaligned dcl 953 in procedure "validate_fnp_ret" set ref 950 962* 965* 979* channel_desc based structure level 2 packed packed unaligned dcl 6-27 chx 000334 automatic fixed bin(35,0) level 2 dcl 1101 set ref 1141* cleanup 000150 stack reference condition dcl 179 ref 592 789 889 clock builtin function dcl 104 ref 658 688 cmd parameter bit(6) dcl 1100 ref 1091 1116 1127 code parameter fixed bin(35,0) dcl 1277 in procedure "get_page_table" set ref 1270 1280* 1282 code 000123 automatic fixed bin(35,0) dcl 84 in procedure "fnp_util" set ref 229* 232 238* 240 253 256* 259 280* 287* 295* 303* 314* 324* 353* 380* 382* 385 388* 391 403* 404 410 425* 426 428* 432 445* 448 466 468* 471 487* 498 505 521* 554 562 587* 597* 598 602 606* 607 620* 630* 631 646 743* 744 753* 757* 758 760* 765* 766 768* 776 780 822* 823 823* 897* 898 911 916* 920 927* 938* 939* 961* 962* 972* 976* 994* 996* 998 1000* 1025* 1026 1026* 1197* 1199 1207* 1208 1208* code 000404 automatic fixed bin(35,0) dcl 1221 in procedure "lock_fnp" set ref 1236* 1237 code parameter fixed bin(35,0) dcl 656 in procedure "fdump_seg_io" set ref 651 665* 683* 692* 700* 707* code parameter fixed bin(35,0) dcl 1048 in procedure "assign_interrupt" set ref 1040 1054* 1062* 1063 1063* 1071 1073* command 0(30) based bit(6) level 2 packed packed unaligned dcl 1103 set ref 1127* config_$find_2 000010 constant entry external dcl 109 ref 500 557 config_flags 66 based structure level 2 dcl 5-67 config_locked 000143 automatic bit(1) initial dcl 97 set ref 97* 1223 1225* 1228* 1243* 1253 1255* configuration_lock based structure level 2 dcl 5-52 set ref 1227 1227 1240 1240 1253 1253 crash_data 6 based structure level 2 dcl 3-12 csl 12 based bit(9) level 2 packed packed unaligned dcl 1-11 ref 1304 cur_la_no 000135 automatic bit(3) packed unaligned dcl 93 set ref 318* 332 334* cur_slot_no 000136 automatic fixed bin(6,0) dcl 94 set ref 335* 338 339* 339 341* 341 343* 343 data 2 based bit(18) array level 2 packed packed unaligned dcl 7-10 set ref 610 636 895 908 922 1026 1026 data_ptr 000126 automatic pointer dcl 88 set ref 610* 611 613 895* 900 902 1012 1013 1016 1017 datanet_info based structure level 1 dcl 5-52 datanet_mbx based structure level 1 dcl 3-12 debug_stop 6 based bit(1) level 2 dcl 5-52 ref 253 385 426 466 488 939 962 1000 1128 1131 1264 deconfigured 1 000146 automatic bit(1) level 3 packed packed unaligned dcl 100 set ref 545* devx 000124 automatic fixed bin(17,0) dcl 86 in procedure "fnp_util" set ref 743* 746 786* 796 devx 1 based fixed bin(17,0) array level 3 in structure "load_info" dcl 198 in procedure "fnp_util" ref 322 devx based fixed bin(17,0) level 3 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "fnp_util" ref 322 dia_pcw based structure level 2 dcl 3-12 set ref 1128 1128 1139* 1139 1139 dia_timeout 000101 automatic bit(1) dcl 73 set ref 377* 380 671* 673 851* 853 dn355_data$ 000150 external static fixed bin(17,0) dcl 5-47 set ref 718 787 957 dn355_util$compute_parity 000036 constant entry external dcl 120 ref 1139 dump_355_control based structure level 1 dcl 187 dump_6670_control based structure level 1 dcl 192 emergency_int_cell parameter fixed bin(17,0) dcl 65 set ref 395 407* entries 1 based structure array level 2 dcl 198 error 0(18) based bit(1) level 2 packed packed unaligned dcl 1103 set ref 1149 1151* error_table_$bad_mpx_load_data 000112 external static fixed bin(35,0) dcl 147 ref 314 324 error_table_$invalid_state 000110 external static fixed bin(35,0) dcl 147 ref 280 287 295 303 587 753 994 error_table_$io_configured 000120 external static fixed bin(35,0) dcl 147 ref 487 error_table_$io_no_permission 000106 external static fixed bin(35,0) dcl 147 ref 996 error_table_$io_not_assigned 000124 external static fixed bin(35,0) dcl 147 ref 353 665 938 error_table_$io_not_configured 000122 external static fixed bin(35,0) dcl 147 ref 521 1054 error_table_$io_not_defined 000126 external static fixed bin(35,0) dcl 147 ref 961 972 error_table_$no_io_interrupt 000114 external static fixed bin(35,0) dcl 147 ref 380 683 692 853 error_table_$rqover 000116 external static fixed bin(35,0) dcl 147 ref 620 fault_code 6 based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3-12 set ref 369* fault_word 7(18) based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3-12 set ref 372* fdump 1(01) based bit(1) level 3 packed packed unaligned dcl 7-10 set ref 669* 687 703 719* 723 725* fdump_seg_event 000001 constant char(4) initial dcl 178 set ref 594* 597* 644* 791* 891* 897* 1197* 1212* fixed builtin function dcl 104 ref 1016 1024 1024 1034 1034 flags 30 based structure level 2 in structure "fnp_info" dcl 5-67 in procedure "fnp_util" set ref 495* flags 1 000146 automatic structure level 2 in structure "auto_fnp_msg" packed packed unaligned dcl 100 in procedure "fnp_util" set ref 544* flags 2(09) based structure level 2 in structure "lcte" packed packed unaligned dcl 4-20 in procedure "fnp_util" flags 1 based structure level 2 in structure "fnp_dump_seg" dcl 7-10 in procedure "fnp_util" set ref 605* fnp_addr 000105 automatic fixed bin(15,0) dcl 77 set ref 626* 885* 1012 1016 fnp_address based fixed bin(18,0) level 2 in structure "dump_6670_control" packed packed unsigned unaligned dcl 192 in procedure "fnp_util" set ref 1012* fnp_address 0(03) based bit(15) level 2 in structure "dump_355_control" packed packed unaligned dcl 187 in procedure "fnp_util" set ref 1016* fnp_dump_ptr 000202 automatic pointer dcl 7-6 set ref 591* 594 594 594 597 597 605 610 636 644 644 669 687 703 717* 719 723 725 788* 791 791 791 886* 891 891 891 895 897 897 908 922 1024 1024 1026 1026 1034 1034 1197 1197 1212 1212 fnp_dump_seg based structure level 1 dcl 7-10 fnp_dump_seg$ 000152 external static fixed bin(17,0) dcl 7-8 set ref 591 717 788 886 fnp_id 7 based structure level 2 dcl 5-67 fnp_info based structure level 1 dcl 5-67 fnp_mem_size 000103 automatic fixed bin(17,0) dcl 75 in procedure "fnp_util" set ref 270* 362 580* 614 fnp_mem_size 42 based fixed bin(18,0) level 2 in structure "fnp_info" unsigned dcl 5-67 in procedure "fnp_util" set ref 362* fnp_msg based structure level 1 dcl 17-6 fnp_multiplexer$assign 000012 constant entry external dcl 110 ref 757 fnp_multiplexer$fnp_lock 000016 constant entry external dcl 112 ref 1236 fnp_multiplexer$fnp_unlock 000020 constant entry external dcl 113 ref 1250 fnp_multiplexer$unassign 000014 constant entry external dcl 111 ref 540 822 1207 fnp_no 000146 automatic fixed bin(17,0) level 2 in structure "auto_fnp_msg" packed packed unaligned dcl 100 in procedure "fnp_util" set ref 542* fnp_no 000102 automatic fixed bin(17,0) dcl 74 in procedure "fnp_util" set ref 213* 269* 275* 400* 416* 438* 458* 482* 515* 540* 578* 733* 740* 757* 794* 795* 810* 822* 833* 845* 860* 878* 959 959 962* 969 977 1069 1207* fnp_number 7(09) based fixed bin(9,0) level 3 packed packed unsigned unaligned dcl 5-67 ref 542 fnp_size 000117 automatic fixed bin(17,0) dcl 81 set ref 614* 627 628 fnp_tag 7 based char(1) level 3 packed packed unaligned dcl 5-67 set ref 223* 281* 288* 296* 304* 357* 388* 421* 428* 442* 468* 488* 500 502* 557 559* 760* 768* 823* 826* 979* 1063* 1151* 1200* 1208* fnp_tally 000131 automatic fixed bin(17,0) dcl 90 set ref 628* 636 905* 906 908 922 925 1013 1017 fnp_type 000104 automatic fixed bin(17,0) dcl 76 set ref 579* 611 884* 900 1010 fnpp 000174 automatic pointer dcl 5-50 set ref 220 223 235 236 238 246 251 278 281 285 288 293 296 301 304 312 321 350 357 359 360 361 362 363 388 403 419 419 421 428 440 442 445 446 447 464 468 485 488 493 494 495 500 502 519 525 527 532 542 547 547 557 559 585 585 585 662 697 697 697 741 746 751 751 751 760 765 768 771 772 772 774 776 795* 796 796 818 819 820 820 821 823 826 850 850 864 864 865 865 913 913 914 918 918 936 971* 977* 978 979 994 996 1051 1051 1060 1062 1063 1066 1069 1069 1074 1084 1085 1128 1134 1134 1141 1142 1151 1151 1163 1173 1175 1178 1179 1184 1185 1187 1200 1200 1203 1204 1205 1206 1206 1208 1229 1231 1236* 1250* 1280 1284 1284 1321 1323 frame based fixed bin(14,0) array level 2 packed packed unsigned unaligned dcl 1275 ref 1306 1325 get_fnp_name_ 000022 constant entry external dcl 114 ref 740 get_ptrs_$given_segno 000062 constant entry external dcl 131 ref 1024 1034 1301 grab_aste$grab_aste_io 000024 constant entry external dcl 115 ref 229 grab_aste$release_io 000026 constant entry external dcl 116 ref 242 1186 handler parameter entry variable dcl 1045 set ref 1040 1069* hc_fast_lock based structure level 1 dcl 16-10 i 000125 automatic fixed bin(17,0) dcl 87 set ref 320* 321 322 327 328* 1147* ic 6(18) based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3-12 set ref 370* ima 000334 automatic structure level 1 dcl 1101 set ref 1146* in 30 based structure array level 4 in structure "lct" dcl 4-11 in procedure "fnp_util" in 10 based structure level 3 in structure "lcte" dcl 4-20 in procedure "fnp_util" in 2 based structure level 2 in structure "saved_meters" dcl 4-68 in procedure "fnp_util" infop 000172 automatic pointer dcl 5-49 set ref 223 246 253 253 275 288 296 304 385 385 426 426 466 466 488 488 659 676 681 690 718* 719 787* 794 795 939 939 957* 962 962 977 979 1000 1000 1128 1128 1131 1227 1227 1240 1240 1253 1253 1264 1331 initialized 2(10) based bit(1) level 3 packed packed unaligned dcl 4-20 ref 1231 interrupt_level 0(27) based fixed bin(3,0) level 2 packed packed unsigned unaligned dcl 1103 set ref 1126* io_chanid 10 based char(8) level 2 dcl 5-67 set ref 1069* 1151* io_manager$assign 000154 constant entry external dcl 9-10 ref 1069 io_manager$connect_direct 000160 constant entry external dcl 9-32 ref 1146 io_manager$mask 000162 constant entry external dcl 9-38 ref 1163 io_manager$unassign 000156 constant entry external dcl 9-20 ref 1062 1084 io_manager_arg based structure level 1 dcl 9-50 io_manager_assigned 66(01) based bit(1) level 3 packed packed unaligned dcl 5-67 set ref 350 494* 527 662 936 1051 1060 1066* 1074* 1085* io_manager_chx 12 based fixed bin(35,0) level 2 dcl 5-67 set ref 765 796 821 1062* 1069* 1084* 1141 1163* io_page_table_size 000206 automatic fixed bin(17,0) dcl 10-30 set ref 1279* 1280 1286 io_ptw based structure level 1 dcl 11-4 io_ptwp 000210 automatic pointer dcl 11-3 set ref 1293* 1294 1295 1296 1305* 1306 1307 1308 1324* 1325 1326 1327 ioam_$assign 000030 constant entry external dcl 117 ref 765 ioam_$unassign 000032 constant entry external dcl 118 ref 821 ioi_page_table$get 000042 constant entry external dcl 122 ref 1280 ioi_page_table$ptx_to_ptp 000044 constant entry external dcl 124 ref 1284 ioi_page_table$put 000046 constant entry external dcl 125 ref 445 iom_code 000314 automatic fixed bin(35,0) dcl 1047 set ref 1069* 1073 iom_fault_status 7 based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 3-12 set ref 371* ioptp 000204 automatic pointer dcl 10-29 set ref 1178* 1179 1181 1284* 1286 1293 1305 1321* 1324 1333 1333 1333 is_hsla 0(26) based bit(1) level 4 packed packed unaligned dcl 6-27 ref 330 l68_core_ptw based structure level 1 dcl 13-4 l68_ptw based structure level 1 dcl 13-9 l68_ptw_flags based structure level 1 packed packed unaligned dcl 13-17 la_no 0(27) based bit(3) level 4 packed packed unaligned dcl 6-27 ref 332 334 last_mbx_req_count 3 based fixed bin(17,0) level 2 dcl 3-12 set ref 366* lct based structure level 1 dcl 4-11 lcte based structure level 1 dcl 4-20 lcte_array 20 based structure array level 2 dcl 4-11 set ref 746 lcte_ptr 32 based pointer level 2 dcl 5-67 set ref 741 746* 1229 1231 level parameter fixed bin(3,0) dcl 1099 ref 1091 1116 1126 line_number 0(26) based structure level 3 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "fnp_util" line_number 0(08) based structure level 2 in structure "sub_mbx" packed packed unaligned dcl 3-36 in procedure "fnp_util" line_type 3 based fixed bin(17,0) array level 3 in structure "load_info" dcl 198 in procedure "fnp_util" ref 328 line_type 2(18) based fixed bin(17,0) level 2 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "fnp_util" set ref 328* load_info based structure level 1 dcl 198 load_info_ptr 000140 automatic pointer dcl 95 set ref 311* 312 319 320 322 327 328 lock based bit(36) level 2 dcl 7-10 set ref 594 594 594 597 597 644 644 791 791 791 891 891 891 897 897 1197 1197 1212 1212 lock$lock_fast 000072 constant entry external dcl 136 ref 1227 lock$unlock 000076 constant entry external dcl 138 ref 594 644 791 891 1212 lock$unlock_fast 000074 constant entry external dcl 137 ref 1240 1253 lock$wait 000070 constant entry external dcl 135 ref 597 897 1197 locked 000142 automatic bit(1) initial dcl 96 set ref 96* 1223 1225* 1239* 1250 1252* mailbox_requests 1 based fixed bin(17,0) level 2 dcl 3-12 set ref 364* max_no_355s constant fixed bin(17,0) initial dcl 5-45 ref 5-52 959 mbx_pt based pointer level 2 dcl 5-67 set ref 403* 978 mbx_used_flags 5 based structure level 2 dcl 3-12 set ref 367* mbxp 000170 automatic pointer dcl 3-100 set ref 364 365 366 367 369 370 371 372 978* 1121 1125 1126 1127 1128 1128 1139 1139 1139 1145 1147 1149 1149 1151 message 000144 automatic fixed bin(71,0) dcl 99 set ref 546* 547* meters 26 based structure array level 3 in structure "lct" dcl 4-11 in procedure "fnp_util" meters 6 based structure level 2 in structure "lcte" dcl 4-20 in procedure "fnp_util" min builtin function dcl 104 ref 628 905 n_pages_wired 65 based fixed bin(17,0) level 2 dcl 5-67 set ref 236* 238* 246* 1179 1185* 1323 n_pcbs 000176 automatic fixed bin(17,0) dcl 6-22 set ref 319* no_entries based fixed bin(17,0) level 2 dcl 198 ref 312 319 320 no_of_355s 4 based fixed bin(17,0) level 2 dcl 5-52 ref 794 no_of_channels 6 based fixed bin(17,0) level 2 dcl 5-67 ref 312 norm_int_cell parameter fixed bin(17,0) dcl 64 set ref 395 406* null builtin function dcl 104 ref 419 447 741 971 1069 1144 1173 1179 1229 nwords 000122 automatic fixed bin(17,0) dcl 83 set ref 215* 229* 236 883* 904 905 906* 906 offset 000130 automatic fixed bin(17,0) dcl 89 set ref 627* 628 636* 903* 908 922 925* 925 1012 1016 old_pcw 000332 automatic bit(36) dcl 1096 set ref 1145* 1147 1149 1151* opcode 000106 automatic bit(6) dcl 79 set ref 872* 877* 908 916* 922 page_table based structure array level 1 dcl 10-32 set ref 1286* paged 000346 automatic bit(1) dcl 1102 set ref 1113* 1119* 1128* 1142 pagex 000422 automatic fixed bin(17,0) dcl 1273 set ref 1302* 1305 1309* 1309 1318* 1320 1324 1328* 1328 pc_abs$unwire_abs 000104 constant entry external dcl 143 ref 1035 1185 pc_abs$wire_abs 000100 constant entry external dcl 139 ref 238 pc_abs$wire_abs_contig 000102 constant entry external dcl 139 ref 1025 pcb based structure level 1 dcl 6-27 pcb_array based structure array level 1 dcl 6-25 set ref 321 pcb_array_ptr 2 based pointer level 2 dcl 5-67 ref 321 pcbp 000200 automatic pointer dcl 6-23 set ref 321* 322 327 328 330 332 334 338 339 341 pds$process_group_id 000132 external static char(32) packed unaligned dcl 164 set ref 502* 559* 773* 826* pds$processid 000130 external static bit(36) packed unaligned dcl 163 ref 360 502 559 594 771 791 891 996 per_datanet 22 based structure array level 2 dcl 5-52 set ref 795 977 priv_channel_manager$get_devx 000034 constant entry external dcl 119 ref 743 prph_fnp_card based structure level 1 dcl 2-6 prph_fnp_cardp 000166 automatic pointer dcl 2-4 set ref 500* 501 557* 558 ptp 71 based pointer level 2 in structure "fnp_info" packed packed unaligned dcl 5-67 in procedure "fnp_util" set ref 419 447* 1128* 1134* 1142 1178 1284* 1321 ptp 4 000334 automatic pointer level 2 in structure "ima" dcl 1101 in procedure "connect_to_dia" set ref 1142* 1144* ptp 000424 automatic pointer dcl 1276 in procedure "get_page_table" set ref 1303* 1306 1319* 1325 ptr builtin function dcl 104 ref 636 ptw based structure array level 2 dcl 10-32 set ref 1181* 1293 1305 1324 1333 1333 1333 ptx 70 based fixed bin(17,0) level 2 dcl 5-67 set ref 419 440 445* 446* 1280* 1284* px 000423 automatic fixed bin(17,0) dcl 1274 in procedure "get_page_table" set ref 1292* 1293 1294* 1304* 1306* 1323* 1325* 1331* 1333 1333* 1333 1333* px 000364 automatic fixed bin(17,0) dcl 1169 in procedure "internal_unwire" set ref 1179* 1181* pxss$addevent 000052 constant entry external dcl 127 ref 670 696 pxss$delevent 000054 constant entry external dcl 128 ref 680 705 pxss$notify 000050 constant entry external dcl 126 ref 726 pxss$ring_0_wakeup 000060 constant entry external dcl 130 ref 547 pxss$wait 000056 constant entry external dcl 129 ref 675 703 record_quota_overflow 000156 stack reference condition dcl 180 ref 618 running 30(02) based bit(1) level 3 packed packed unaligned dcl 5-67 set ref 293 585 751 seg_pt based structure array level 1 dcl 1275 segptr 000120 automatic pointer dcl 82 set ref 214* 229* 246* 581* 636 882* 908 922 slot_no 0(30) based bit(6) level 4 packed packed unaligned dcl 6-27 set ref 338* sst$astsize 000142 external static fixed bin(17,0) dcl 168 ref 1303 1319 start_time 000132 automatic fixed bin(71,0) dcl 91 set ref 658* 688 state 5 based char(4) level 2 in structure "prph_fnp_card" dcl 2-6 in procedure "fnp_util" set ref 501* 558* state 0(18) 000146 automatic fixed bin(17,0) level 2 in structure "auto_fnp_msg" packed packed unaligned dcl 100 in procedure "fnp_util" set ref 543* string builtin function dcl 104 set ref 367* 1139* 1139 1139 sub_mbx based structure level 1 dcl 3-36 sys_info$page_size 000144 external static fixed bin(17,0) dcl 169 ref 236 236 374 1280 1320 sys_info$seg_size_256K 000146 external static fixed bin(19,0) dcl 170 ref 1123 syserr 000064 constant entry external dcl 133 ref 223 246 275 281 288 296 304 357 421 442 488 502 559 659 676 681 690 719 773 826 979 1123 1128 1133 1134 1151 1200 1223 1264 1333 syserr$error_code 000066 constant entry external dcl 134 ref 256 388 428 468 760 768 823 939 962 1000 1063 1208 t_and_d_in_progress 30(08) based bit(1) level 3 packed packed unaligned dcl 5-67 set ref 301 532 585 697 751 774* 796 819* 994 1205* t_and_d_lev_3_occurred 30(09) based bit(1) level 3 packed packed unaligned dcl 5-67 set ref 697 772* 820* 850* 864 865* 913* 918* 1206* t_and_d_lev_7_occurred 30(10) based bit(1) level 3 packed packed unaligned dcl 5-67 set ref 697 772* 820* 850* 864 865* 913* 918* 1206* t_and_d_notify_requested 30(11) based bit(1) level 3 packed packed unaligned dcl 5-67 set ref 914* tally 0(24) based fixed bin(12,0) level 2 in structure "dump_6670_control" packed packed unsigned unaligned dcl 192 in procedure "fnp_util" set ref 1013* tally 0(18) based fixed bin(17,0) level 2 in structure "dump_355_control" packed packed unaligned dcl 187 in procedure "fnp_util" set ref 1017* tally_words based bit(36) array dcl 185 set ref 636* 636 908* 908 922* 922 tc_data$initializer_id 000134 external static bit(36) dcl 165 ref 502 559 temp_fnp_name 000107 automatic char(32) packed unaligned dcl 80 set ref 740* 743* 773* term_inpt_mpx_wd 2 based bit(36) level 2 dcl 3-12 set ref 365* timeout parameter bit(1) dcl 1097 set ref 1091 1116 1154* 1156* trace 5 based bit(1) level 2 dcl 5-52 ref 223 246 253 275 288 296 304 385 426 466 488 659 676 681 690 719 939 962 979 1000 1128 1331 tty_buf$ 000164 external static fixed bin(17,0) dcl 15-19 set ref 1301 1301 tty_buf$fnp_config_flags 000136 external static bit(1) array packed unaligned dcl 166 ref 969 tty_buf$lct_ptr 000140 external static pointer dcl 167 ref 746 tty_ev 000000 constant fixed bin(17,0) initial dcl 15-19 set ref 670* 680* 696* 705* 726* unlock_dump_seg 000374 automatic bit(1) dcl 1195 set ref 1199* 1212 unpaged 0(18) based bit(1) level 2 packed packed unaligned dcl 192 set ref 611* 900* valid 0(33) based bit(1) level 2 packed packed unaligned dcl 11-4 set ref 1296* 1308* 1327* version 000134 automatic char(4) packed unaligned dcl 92 in procedure "fnp_util" set ref 356* 357* 361 version 41 based char(4) level 2 in structure "fnp_info" dcl 5-67 in procedure "fnp_util" set ref 361* wired 30(03) based bit(1) level 3 packed packed unaligned dcl 5-67 set ref 220 251* 285 1175 1187* write 0(31) based bit(1) level 2 packed packed unaligned dcl 11-4 set ref 1295* 1307* 1326* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. BEEP internal static fixed bin(17,0) initial dcl 14-7 DN355 internal static fixed bin(17,0) initial dcl 8-19 DN6600 internal static fixed bin(17,0) initial dcl 8-19 DN7100 internal static fixed bin(17,0) initial dcl 8-19 FNP_DUMP_PATCH_EVENT internal static fixed bin(17,0) initial dcl 15-31 FNP_METER_EVENT internal static fixed bin(17,0) initial dcl 15-32 IO_PAGE_TABLE_LOCK_EVENT internal static char(4) initial packed unaligned dcl 10-37 JUST_LOG internal static fixed bin(17,0) initial dcl 14-7 LOG internal static fixed bin(17,0) initial dcl 14-7 MAX_IO_PAGE_TABLE_SEG_PAGES internal static fixed bin(9,0) initial dcl 10-39 PTS_PER_PAGE internal static fixed bin(17,0) initial dcl 10-43 PT_256_SIZE internal static bit(1) initial packed unaligned dcl 10-42 PT_64_SIZE internal static bit(1) initial packed unaligned dcl 10-41 SMALL_PT_SIZE internal static fixed bin(19,0) initial dcl 10-44 SYSERR_COVERT_CHANNEL internal static fixed bin(17,0) initial dcl 14-7 SYSERR_CRASH_SYSTEM internal static fixed bin(17,0) initial dcl 14-7 SYSERR_LOG_OR_DISCARD internal static fixed bin(17,0) initial dcl 14-7 SYSERR_LOG_OR_PRINT internal static fixed bin(17,0) initial dcl 14-7 SYSERR_PRINT_ON_CONSOLE internal static fixed bin(17,0) initial dcl 14-7 SYSERR_PRINT_WITH_ALARM internal static fixed bin(17,0) initial dcl 14-7 SYSERR_RING1_ERROR internal static fixed bin(17,0) initial dcl 14-7 SYSERR_SUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 14-7 SYSERR_SYSTEM_ERROR internal static fixed bin(17,0) initial dcl 14-7 SYSERR_TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 14-7 SYSERR_UNSUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 14-7 TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 14-7 TTY_AREA_LOCK_EVENT internal static bit(36) initial dcl 15-33 abs_buf_limit internal static fixed bin(18,0) initial dcl 15-19 asta based bit(432) array dcl 1-86 aste_part based structure level 1 dcl 1-89 bsizec internal static fixed bin(17,0) initial dcl 15-28 buf_per_second internal static fixed bin(17,0) initial dcl 15-29 chanid automatic char(8) dcl 78 dn355$interrupt 000000 constant entry external dcl 132 error_table_$action_not_performed external static fixed bin(35,0) dcl 147 error_table_$bad_segment external static fixed bin(35,0) dcl 147 error_table_$io_assigned external static fixed bin(35,0) dcl 147 error_table_$noalloc external static fixed bin(35,0) dcl 147 fnp_models internal static fixed bin(17,0) initial array dcl 8-28 fnp_msg_ptr automatic pointer dcl 17-5 fnp_sub_mbx based structure level 1 dcl 3-63 fnp_types internal static char(8) initial array packed unaligned dcl 8-25 input_bpart internal static fixed bin(18,0) initial dcl 15-19 input_sub_mbx based structure level 1 dcl 3-84 io_chnl_util$canonicalize_chanid 000000 constant entry external dcl 12-8 io_chnl_util$iom_to_name 000000 constant entry external dcl 12-12 io_chnl_util$name_to_iom 000000 constant entry external dcl 12-16 io_manager$assign_add 000000 constant entry external dcl 9-15 io_manager$connect 000000 constant entry external dcl 9-26 io_manager$connect_abs 000000 constant entry external dcl 9-29 io_manager$get_status 000000 constant entry external dcl 9-35 io_manager$ignore_interrupt 000000 constant entry external dcl 9-41 io_manager$unassign_delete 000000 constant entry external dcl 9-23 io_manager$workspace_tdcw 000000 constant entry external dcl 9-47 io_manager_arg_ptr automatic pointer dcl 9-49 io_page_table_seg$ external static fixed bin(17,0) dcl 10-8 io_page_table_seg_ptr automatic pointer dcl 10-10 io_page_tables based structure level 1 dcl 10-12 ioi_page_table$fill 000000 constant entry external dcl 123 iom_channel_number automatic fixed bin(7,0) dcl 85 l68_null_disk_ptw based structure level 1 dcl 13-15 l68_real_disk_ptw based structure level 1 dcl 13-14 l68_special_ptw based structure level 1 dcl 13-13 lcnt based structure level 1 dcl 4-65 lcntp automatic pointer dcl 4-63 lct_size automatic fixed bin(17,0) dcl 4-9 lctep automatic pointer dcl 4-8 lctp automatic pointer dcl 4-7 lock_ptr automatic pointer dcl 16-9 output_bpart internal static fixed bin(18,0) initial dcl 15-19 ptp automatic pointer dcl 1357 qblock_size internal static fixed bin(17,0) initial dcl 15-27 saved_meters based structure level 1 dcl 4-68 seg_aste based structure level 1 dcl 1-96 subp automatic pointer dcl 3-99 substr builtin function dcl 104 supported_fnp internal static bit(1) initial array packed unaligned dcl 8-31 tty_buf based structure level 1 dcl 15-35 ttybp automatic pointer dcl 15-19 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR 005611 constant label dcl 962 ref 973 STOP_CHECK 007311 constant entry internal dcl 1260 ref 257 389 423 430 469 490 942 965 assign_interrupt 006177 constant entry internal dcl 1040 ref 606 common 006363 constant label dcl 1121 ref 1114 configure 002652 constant entry external dcl 479 configure_return 003021 constant label dcl 496 ref 491 connect_to_dia 006353 constant entry internal dcl 1091 ref 671 851 connect_to_dia_paged 006357 constant entry internal dcl 1116 ref 377 deconfigure 003120 constant entry external dcl 512 deconfigure_return 003234 constant label dcl 552 ref 522 527 deconfigure_return_unlocked 003235 constant label dcl 554 ref 536 dump_interrupt 003635 constant entry external dcl 710 ref 606 606 fdump 003336 constant entry external dcl 568 fdump_seg_io 005207 constant entry internal dcl 651 ref 630 916 fill_bootload_page_table 007534 constant entry internal dcl 1313 ref 245 fill_page_table 002311 constant entry external dcl 413 fnp_t_and_d_rw_merge 004774 constant label dcl 878 ref 873 fnp_tandd_detach 004341 constant entry external dcl 808 fnp_tandd_get_ints 004647 constant entry external dcl 858 fnp_tandd_mask 004517 constant entry external dcl 831 fnp_tandd_read 004727 constant entry external dcl 870 fnp_tandd_release_handler 004235 constant entry external dcl 783 ref 765 765 fnp_tandd_send_int 004556 constant entry external dcl 843 fnp_tandd_setup 003731 constant entry external dcl 730 fnp_tandd_write 004753 constant entry external dcl 875 fnp_util 001132 constant entry external dcl 22 free_page_table 002457 constant entry external dcl 435 get_page_table 007354 constant entry internal dcl 1270 ref 425 info 002235 constant entry external dcl 395 internal_unwire 006714 constant entry internal dcl 1166 ref 463 load 001441 constant entry external dcl 263 load_return 002160 constant label dcl 385 ref 282 290 298 306 315 325 354 lock_fnp 007154 constant entry internal dcl 1218 ref 349 484 517 661 749 813 835 847 862 1050 1202 mask_dia 006702 constant entry internal dcl 1161 ref 376 539 816 838 release_t_and_d 007003 constant entry internal dcl 1192 ref 535 796 restore_interrupts 003611 constant label dcl 640 ref 621 631 ret_bad_code 003626 constant label dcl 646 set ref 443 588 598 744 898 944 966 1002 setup_dump_ctl_word 006026 constant entry internal dcl 1007 ref 629 907 tandd_setup_loses_unlock 004222 constant label dcl 776 ref 754 762 769 unassign_interrupt 006333 constant entry internal dcl 1081 ref 640 unlock_dump_seg 003613 constant label dcl 644 ref 602 911 920 928 unlock_fnp 007261 constant entry internal dcl 1247 ref 352 383 496 534 552 664 672 779 827 839 852 866 943 1070 1211 unwire 002554 constant entry external dcl 452 unwire_buffer 003612 constant label dcl 642 ref 607 unwire_dump_seg 006142 constant entry internal dcl 1031 ref 642 919 validate_assigned_ret 005517 constant entry internal dcl 931 ref 218 273 418 814 836 848 863 validate_fnp_ret 005576 constant entry internal dcl 950 ref 217 272 401 417 439 459 483 516 583 734 993 validate_fnp_tandd_ret 005737 constant entry internal dcl 988 ref 812 834 846 861 887 wire 001146 constant entry external dcl 207 wire_dump_seg 006063 constant entry internal dcl 1021 ref 601 910 wire_error_return 001367 constant label dcl 253 ref 232 243 NAMES DECLARED BY CONTEXT OR IMPLICATION. addwordno builtin function ref 1303 1319 bin builtin function ref 1304 divide builtin function ref 236 segno builtin function ref 1301 1301 unspec builtin function set ref 546 546 1121* 1128 1128 1145 1147 1149 1181* 1286* 1333 1333 1333 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 11046 11234 10015 11056 Length 12206 10015 166 736 1031 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME fnp_util 858 external procedure is an external procedure. on unit on line 592 72 on unit on unit on line 618 64 on unit fdump_seg_io internal procedure shares stack frame of external procedure fnp_util. on unit on line 789 72 on unit on unit on line 889 72 on unit validate_assigned_ret internal procedure shares stack frame of external procedure fnp_util. validate_fnp_ret internal procedure shares stack frame of external procedure fnp_util. validate_fnp_tandd_ret internal procedure shares stack frame of external procedure fnp_util. setup_dump_ctl_word internal procedure shares stack frame of external procedure fnp_util. wire_dump_seg internal procedure shares stack frame of external procedure fnp_util. unwire_dump_seg internal procedure shares stack frame of external procedure fnp_util. assign_interrupt internal procedure shares stack frame of external procedure fnp_util. unassign_interrupt internal procedure shares stack frame of external procedure fnp_util. connect_to_dia internal procedure shares stack frame of external procedure fnp_util. mask_dia internal procedure shares stack frame of external procedure fnp_util. internal_unwire internal procedure shares stack frame of external procedure fnp_util. release_t_and_d internal procedure shares stack frame of external procedure fnp_util. lock_fnp internal procedure shares stack frame of external procedure fnp_util. STOP_CHECK internal procedure shares stack frame of external procedure fnp_util. get_page_table internal procedure shares stack frame of external procedure fnp_util. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME fnp_util 000100 auto_absadr fnp_util 000101 dia_timeout fnp_util 000102 fnp_no fnp_util 000103 fnp_mem_size fnp_util 000104 fnp_type fnp_util 000105 fnp_addr fnp_util 000106 opcode fnp_util 000107 temp_fnp_name fnp_util 000117 fnp_size fnp_util 000120 segptr fnp_util 000122 nwords fnp_util 000123 code fnp_util 000124 devx fnp_util 000125 i fnp_util 000126 data_ptr fnp_util 000130 offset fnp_util 000131 fnp_tally fnp_util 000132 start_time fnp_util 000134 version fnp_util 000135 cur_la_no fnp_util 000136 cur_slot_no fnp_util 000140 load_info_ptr fnp_util 000142 locked fnp_util 000143 config_locked fnp_util 000144 message fnp_util 000146 auto_fnp_msg fnp_util 000164 astep fnp_util 000166 prph_fnp_cardp fnp_util 000170 mbxp fnp_util 000172 infop fnp_util 000174 fnpp fnp_util 000176 n_pcbs fnp_util 000200 pcbp fnp_util 000202 fnp_dump_ptr fnp_util 000204 ioptp fnp_util 000206 io_page_table_size fnp_util 000210 io_ptwp fnp_util 000314 iom_code assign_interrupt 000332 old_pcw connect_to_dia 000334 ima connect_to_dia 000346 paged connect_to_dia 000364 px internal_unwire 000374 unlock_dump_seg release_t_and_d 000404 code lock_fnp 000422 pagex get_page_table 000423 px get_page_table 000424 ptp get_page_table THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as r_ne_as call_ext_out_desc call_ext_out return_mac tra_ext_1 enable_op ext_entry int_entry clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. absadr config_$find_2 dn355_util$compute_parity fnp_multiplexer$assign fnp_multiplexer$fnp_lock fnp_multiplexer$fnp_unlock fnp_multiplexer$unassign get_fnp_name_ get_ptrs_$given_segno grab_aste$grab_aste_io grab_aste$release_io io_manager$assign io_manager$connect_direct io_manager$mask io_manager$unassign ioam_$assign ioam_$unassign ioi_page_table$get ioi_page_table$ptx_to_ptp ioi_page_table$put lock$lock_fast lock$unlock lock$unlock_fast lock$wait pc_abs$unwire_abs pc_abs$wire_abs pc_abs$wire_abs_contig priv_channel_manager$get_devx pxss$addevent pxss$delevent pxss$notify pxss$ring_0_wakeup pxss$wait syserr syserr$error_code THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dn355_data$ error_table_$bad_mpx_load_data error_table_$invalid_state error_table_$io_configured error_table_$io_no_permission error_table_$io_not_assigned error_table_$io_not_configured error_table_$io_not_defined error_table_$no_io_interrupt error_table_$rqover fnp_dump_seg$ pds$process_group_id pds$processid sst$astsize sys_info$page_size sys_info$seg_size_256K tc_data$initializer_id tty_buf$ tty_buf$fnp_config_flags tty_buf$lct_ptr LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 96 001125 97 001126 22 001131 207 001140 213 001165 214 001170 215 001173 217 001175 218 001202 220 001207 222 001213 223 001214 226 001243 229 001244 232 001261 235 001263 236 001266 238 001274 240 001311 242 001313 243 001322 245 001323 246 001324 250 001362 251 001364 253 001367 256 001376 257 001422 259 001427 260 001431 263 001432 269 001460 270 001463 271 001465 272 001467 273 001474 275 001501 278 001533 280 001537 281 001542 282 001565 285 001566 287 001571 288 001574 290 001622 293 001623 295 001626 296 001631 298 001657 301 001660 303 001663 304 001666 306 001714 311 001715 312 001721 314 001724 315 001727 318 001730 319 001732 320 001733 321 001741 322 001746 324 001757 325 001762 327 001763 328 001766 330 001770 332 001773 334 002001 335 002002 338 002004 339 002011 341 002020 343 002025 345 002027 349 002031 350 002032 352 002036 353 002037 354 002042 356 002043 357 002050 359 002104 360 002107 361 002112 362 002114 363 002117 364 002121 365 002123 366 002124 367 002125 369 002126 370 002130 371 002132 372 002134 374 002136 376 002141 377 002142 380 002147 382 002156 383 002157 385 002160 388 002167 389 002220 391 002225 392 002227 395 002230 400 002250 401 002253 403 002260 404 002273 406 002275 407 002300 410 002302 411 002304 413 002305 416 002322 417 002325 418 002332 419 002337 421 002346 423 002372 425 002401 426 002403 428 002412 430 002443 432 002452 433 002454 435 002455 438 002470 439 002473 440 002500 442 002504 443 002530 445 002531 446 002542 447 002545 448 002547 449 002551 452 002552 458 002565 459 002570 463 002575 464 002576 466 002601 468 002610 469 002640 471 002645 472 002647 479 002650 482 002663 483 002666 484 002673 485 002674 487 002700 488 002703 490 002733 491 002743 493 002744 494 002746 495 002750 496 003021 498 003022 500 003024 501 003047 502 003052 505 003113 506 003115 512 003116 515 003131 516 003134 517 003141 519 003142 521 003146 522 003151 525 003152 527 003154 532 003157 534 003162 535 003163 536 003164 539 003165 540 003166 542 003200 543 003204 544 003206 545 003212 546 003214 547 003216 552 003234 554 003235 557 003237 558 003262 559 003265 562 003326 563 003330 568 003331 578 003355 579 003360 580 003362 581 003364 583 003367 585 003374 587 003400 588 003403 591 003404 592 003407 594 003423 596 003441 597 003442 598 003457 601 003461 602 003462 605 003464 606 003473 607 003501 610 003503 611 003506 613 003514 614 003520 618 003523 620 003537 621 003542 626 003545 627 003546 628 003555 629 003563 630 003564 631 003573 636 003575 638 003606 640 003611 642 003612 644 003613 646 003626 648 003630 710 003631 717 003643 718 003646 719 003650 723 003707 725 003713 726 003715 728 003724 730 003725 733 003744 734 003747 740 003754 741 003765 743 003772 744 004013 746 004015 749 004025 751 004026 753 004032 754 004035 757 004036 758 004047 760 004051 762 004102 765 004103 766 004125 768 004127 769 004160 771 004161 772 004165 773 004171 774 004217 776 004222 779 004227 780 004230 781 004232 783 004233 786 004246 787 004251 788 004254 789 004256 791 004272 793 004310 794 004311 795 004321 796 004325 799 004334 800 004336 808 004337 810 004352 812 004355 813 004362 814 004363 816 004370 818 004371 819 004373 820 004375 821 004401 822 004415 823 004426 826 004461 827 004512 828 004513 829 004514 831 004515 833 004530 834 004533 835 004540 836 004541 838 004546 839 004547 840 004550 841 004551 843 004552 845 004567 846 004572 847 004577 848 004600 850 004605 851 004612 852 004632 853 004633 855 004641 856 004642 858 004643 860 004660 861 004663 862 004670 863 004671 864 004676 865 004712 866 004716 867 004717 868 004720 870 004721 872 004746 873 004750 875 004751 877 004772 878 004774 882 004777 883 005002 884 005004 885 005006 886 005010 887 005013 889 005020 891 005034 893 005052 895 005053 897 005056 898 005073 900 005075 902 005103 903 005107 904 005110 905 005112 906 005116 907 005120 908 005121 910 005136 911 005137 913 005141 914 005146 916 005150 918 005155 919 005162 920 005163 922 005165 925 005202 926 005204 927 005205 928 005206 651 005207 658 005211 659 005213 661 005247 662 005250 664 005254 665 005255 666 005261 669 005262 670 005265 671 005274 672 005312 673 005313 675 005316 676 005323 678 005346 680 005347 681 005356 683 005401 684 005405 687 005406 688 005412 690 005421 692 005444 693 005450 696 005451 697 005460 700 005467 701 005471 703 005472 705 005504 706 005513 707 005514 708 005516 931 005517 936 005521 938 005525 939 005530 942 005565 943 005573 944 005574 946 005575 950 005576 957 005600 959 005603 961 005607 962 005611 965 005652 966 005663 969 005664 971 005671 972 005673 973 005675 976 005676 977 005677 978 005702 979 005704 982 005736 988 005737 993 005741 994 005747 996 005757 998 005765 1000 005767 1002 006024 1004 006025 1007 006026 1010 006027 1012 006032 1013 006040 1014 006043 1016 006044 1017 006057 1019 006062 1021 006063 1024 006064 1025 006101 1026 006121 1029 006141 1031 006142 1034 006143 1035 006160 1036 006176 1040 006177 1050 006201 1051 006202 1054 006213 1055 006217 1060 006220 1062 006222 1063 006234 1066 006270 1069 006273 1070 006321 1071 006322 1073 006325 1074 006327 1077 006332 1081 006333 1084 006334 1085 006347 1086 006352 1091 006353 1113 006355 1114 006356 1116 006357 1119 006361 1121 006363 1123 006364 1125 006410 1126 006415 1127 006422 1128 006426 1131 006472 1133 006475 1134 006515 1139 006551 1141 006564 1142 006567 1144 006575 1145 006577 1146 006601 1147 006610 1148 006620 1149 006622 1151 006630 1154 006673 1155 006676 1156 006677 1157 006701 1161 006702 1163 006703 1164 006713 1166 006714 1173 006715 1175 006722 1178 006727 1179 006731 1181 006745 1182 006746 1184 006750 1185 006753 1186 006770 1187 006777 1188 007002 1192 007003 1197 007004 1199 007021 1200 007024 1202 007056 1203 007057 1204 007061 1205 007063 1206 007065 1207 007071 1208 007102 1211 007135 1212 007136 1214 007153 1218 007154 1223 007155 1225 007201 1227 007203 1228 007214 1229 007216 1231 007224 1236 007231 1237 007242 1239 007244 1240 007246 1243 007257 1245 007260 1247 007261 1250 007262 1252 007273 1253 007274 1255 007307 1256 007310 1260 007311 1264 007322 1266 007353 1270 007354 1279 007356 1280 007360 1282 007377 1284 007403 1286 007421 1292 007431 1293 007437 1294 007441 1295 007445 1296 007447 1297 007451 1301 007453 1302 007472 1303 007474 1304 007501 1305 007513 1306 007516 1307 007524 1308 007526 1309 007530 1310 007531 1311 007533 1313 007534 1318 007535 1319 007537 1320 007544 1321 007547 1323 007552 1324 007563 1325 007566 1326 007574 1327 007576 1328 007600 1329 007601 1331 007603 1333 007613 1335 007650 1337 007652 ----------------------------------------------------------- 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