COMPILATION LISTING OF SEGMENT ioi_masked 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 1015.3 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 6* * * 7* *********************************************************** */ 8 9 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 10 11 ioi_masked: 12 procedure; 13 14 /* This program contains all of IOI that must be run while wired and masked. */ 15 /* Finished March 1983 by Chris Jones, from what Charlie Hornig left me. */ 16 /* Changed once or twice since then by Chris Jones */ 17 /* Changed December 1983 by Chris Jones to handle timeout on device which cannot be identified by dental records */ 18 /* Modified 27 February 1984 by Chris Jones to initialize idp in reset_device. */ 19 /* Modified August 1984 by Chris Jones to ensure dtep is initialized from all paths to getwork_channel_proc */ 20 /* Modified 1984-08-10 BIM for direct channel support */ 21 /* Modified Nov. 2 1984 By Paul Farley to correct a bug where dtep was not 22* getting initialized. Also to only get detailed status if the command 23* opcode is ^= "0"b. */ 24 /* Modified 121784 by Paul Farley to only call ioi_wire$unwire if the 25* workspace_astep is non-null. */ 26 /* Modified February 1985 by Chris Jones to add $online_device_count */ 27 /* Modified 042585 by Paul Farley to put last bad status (and detailed status) 28* in the dte for priv attachments, but still not log the error. */ 29 /* Modified July 1985 by Paul Farley to reset dte.detailed_status before 30* processing current status. */ 31 32 /****^ HISTORY COMMENTS: 33* 1) change(85-06-24,Farley), approve(86-03-08,MCR6979), 34* audit(86-03-07,CLJones), install(86-03-21,MR12.0-1033): 35* Changed the mask_channel proc to have iom_connect set the PGE & ^PTP 36* flags in the second word of the PCW for the execution of the reset-status 37* IDCW, after doing the MASK. This will cause an IOM system-fault if the 38* channel tries to do a data-transfer. 39* 2) change(85-09-09,Farley), approve(85-09-09,MCR6979), 40* audit(86-03-07,CLJones), install(86-03-21,MR12.0-1033): 41* Support FIPS and IMU. 42* 3) change(85-11-06,Farley), approve(86-04-01,MCR7332), 43* audit(86-04-02,Fawcett), install(86-04-07,MR12.0-1036): 44* Changed mask_channel to leave channel masked if it times out on the first 45* unmask connect. 46* 4) change(86-03-04,CLJones), approve(86-07-30,MCR7461), 47* audit(86-07-31,Coren), install(86-08-19,MR12.0-1120): 48* Always zero unused fields in auto_istat and message; don't call 49* io_manager$get_status for direct channels, but do deliver status for 50* direct channels. 51* 5) change(86-09-17,Farley), approve(86-07-18,MCR7439), 52* audit(86-10-08,Fawcett), install(86-10-20,MR12.0-1189): 53* Changed to execute in the BCE environment. 54* 6) change(86-11-17,Farley), approve(86-11-20,MECR0002), 55* audit(86-11-19,Fawcett), install(86-11-20,MR12.0-1222): 56* Changed timer code to not operate on unassigned devices (dte.process_id = 57* ""b). 58* 7) change(86-12-19,Farley), approve(86-12-19,MCR7587), 59* audit(86-12-19,Fawcett), install(87-01-05,MR12.0-1253): 60* Formal installation to close out above MECR0002. 61* END HISTORY COMMENTS */ 62 63 dcl p_ctep ptr parameter; /* (I) pointer to a channel table entry */ 64 dcl p_dtep ptr parameter; /* (I) pointer to a device table entry */ 65 dcl p_cterp fixed bin (35) parameter; /* (I) offset of the channel table entry on interrupts */ 66 dcl p_level fixed bin (3) parameter; /* (I) interrupt level */ 67 dcl p_status bit (36) aligned parameter;/* (I) word of fault status or special status */ 68 dcl p_subsystem_name char (*) parameter; /* (I) name of subsystem we're interested in */ 69 70 dcl 1 auto_istat like istat aligned; 71 dcl broadcast bit (1) aligned; 72 dcl count fixed bin; 73 dcl done bit (1) aligned; 74 dcl ctx fixed bin; 75 dcl dtx fixed bin; 76 dcl gtx fixed bin; 77 dcl 1 ima aligned like io_manager_arg; 78 dcl level fixed bin (3); 79 dcl message fixed bin (71); 80 dcl status bit (36) aligned; 81 dcl 1 status_entry aligned like io_status_entry; 82 dcl wm_mask fixed bin (71); 83 dcl wm_ptwp ptr; 84 85 dcl ioi_abs_seg$ external; 86 dcl pds$process_id bit (36) aligned external static; 87 dcl sys_info$service_system 88 bit (1) aligned external static; 89 90 dcl absadr entry (ptr, fixed bin (35)) returns (fixed bin (26)); 91 dcl bce_ioi_post entry (fixed bin (71), fixed bin (71)); 92 dcl ioi_wire$unwire entry (ptr); 93 dcl pmut$swap_sdw entry (ptr, ptr); 94 dcl pmut$unwire_unmask entry (fixed bin (71), ptr); 95 dcl pmut$wire_and_mask entry (fixed bin (71), ptr); 96 dcl pxss$io_wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin (35)); 97 dcl pxss$notify entry (bit (36) aligned); 98 dcl syserr entry options (variable); 99 dcl syserr$binary entry options (variable); 100 101 dcl FIFTEEN_SECONDS fixed bin (71) static options (constant) init (15000000); 102 dcl MAX_LOG_STATUS_COUNT fixed bin (17) static options (constant) init (63); 103 dcl ME char (32) static options (constant) init ("ioi_masked"); 104 dcl ONE_MINUTE fixed bin (71) static options (constant) init (60000000); 105 106 dcl (addr, addrel, bin, bit, clock, hbound, lbound, length, null, ptr, rel, size, stac, stacq, string, substr, 107 unspec) builtin; 108 109 /**** getwork_device ****/ 110 111 /* This entry finds an available an unconnected channel for a given device. If no channels are available, the 112* count of pending connects in the group table entry is incremented. If a channel is found, it is connected. 113* This entry can be called while unmasked. It masks and unmasks itself. */ 114 115 getwork_device: 116 entry (p_dtep); 117 118 dtep = p_dtep; 119 idp = addr (ioi_data$); 120 gtep = ptr (idp, dte.gtep); 121 122 call mask; /* mask interrupts */ 123 call lock_gte; 124 125 gte.pending_connects = gte.pending_connects + 1; 126 127 if dte.direct & dte.active /* we can always send another */ 128 then do; 129 ctep = ptr (idp, dte.cur_ctep); 130 call connect; 131 gte.pending_connects = gte.pending_connects - 1; 132 call unlock_gte; 133 call unmask; 134 return; 135 end; 136 137 /*** Here is its indirect or not pre-bound. */ 138 139 dte.active = "1"b; 140 141 if ^dte.suspended then 142 do ctep = ptr (idp, gte.ctep) repeat ptr (idp, cte.next_ctep) while (rel (ctep)); 143 if cte.ioi_use & ^cte.deleting & ^cte.deleted & ^cte.connected & ^cte.quiescing 144 & (dte.channel_required = "" | (dte.channel_required = cte.chanid)) then do; 145 /* found a channel we can use */ 146 call connect; 147 gte.pending_connects = gte.pending_connects - 1; 148 call unlock_gte; 149 call unmask; 150 return; 151 end; 152 end; 153 154 call unlock_gte; 155 call unmask; 156 return; 157 158 /**** getwork_channel ****/ 159 /* This entry is analogous to getwork_device, but looks for work for a channel to do. */ 160 161 getwork_channel: 162 entry (p_ctep); 163 164 ctep = p_ctep; 165 idp = addr (ioi_data$); 166 gtep = ptr (idp, cte.gtep); 167 168 call mask; /* mask interrupts */ 169 call lock_gte; 170 dtep = null (); 171 call getwork_channel_proc; 172 call unlock_gte; 173 call unmask; 174 return; 175 176 /**** reset_device ****/ 177 178 reset_device: 179 entry (p_dtep); 180 181 idp = addr (ioi_data$); 182 dtep = p_dtep; 183 gtep = ptr (dtep, dte.gtep); 184 call mask; 185 call lock_gte; 186 if dte.connected then do; 187 ctep = ptr (dtep, dte.cur_ctep); 188 call mask_channel; 189 end; 190 else if dte.active then do; 191 gte.pending_connects = gte.pending_connects - 1; 192 dte.active = "0"b; 193 end; 194 call unlock_gte; 195 call unmask; 196 return; 197 198 /**** timer ****/ 199 200 /* This entry is called by pxss. It checks running channels to see if they've been running too long. If so, it masks 201* them and restarts them on new I/Os. It also checks to see if workspaces should be unwired. */ 202 203 timer: 204 entry; 205 206 idp = addr (ioi_data$); 207 if ^ioi_data.setup then 208 return; 209 do ctx = 1 to ioi_data.nct; 210 ctep = addr (ioi_data.ct (ctx)); 211 gtep = ptr (idp, cte.gtep); 212 call lock_gte; 213 if cte.ioi_use & ^cte.direct then 214 if cte.connected & (cte.time_limit ^= 0) & (clock () > cte.time_limit) then do; 215 if cte.cur_dtep = ""b then do; 216 dtep = null (); 217 call syserr (ANNOUNCE, "^a$timer: Timeout on channel ^a (no device).", ME, cte.chanid); 218 end; 219 else do; 220 dtep = ptr (ctep, cte.cur_dtep); 221 call syserr (ANNOUNCE, "^a$timer: Timeout on channel ^a (device ^a^[_^[0^]^d^]).", ME, 222 cte.chanid, gte.name, gte.mplex, bin (dte.device) < 10, bin (dte.device)); 223 end; 224 call mask_channel; /* stop the channel from touching memory any more */ 225 call setup_timeout_status; /* for delivery to the user */ 226 call getwork_channel_proc; 227 call deliver_status; 228 if dtep ^= null () then 229 call wakeup_user; 230 end; 231 call unlock_gte; 232 end; 233 do dtx = 1 to ioi_data.ndt; 234 dtep = addr (ioi_data.dt (dtx)); 235 if dte.in_use & ^dte.direct & dte.process_id ^= ""b then do; 236 /* if IOI is managing this device and it is assigned... */ 237 gtep = ptr (dtep, dte.gtep); 238 call lock_gte; 239 if clock () > dte.last_log_time + ONE_MINUTE then 240 call flush_status_proc; 241 call unlock_gte; 242 243 /**** Lock the device by hand. If we fail, don't even think about unwiring. ****/ 244 if stac (addr (dte.lock.pid), pds$process_id) then do; 245 if ^dte.active & dte.workspace_wired & (clock () > dte.unwire_time) then do; 246 if dte.workspace_astep ^= null () then 247 call ioi_wire$unwire (dtep); 248 else do; 249 call syserr (ANNOUNCE, 250 "^a$timer: Attempt to unwire NULL workspace. (device ^a^[_^[0^]^d^]).", ME, 251 gte.name, gte.mplex, bin (dte.device) < 10, bin (dte.device)); 252 dte.workspace_wired = "0"b; 253 end; 254 end; 255 256 /**** This code is stolen from lock$unlock_fast. If idle procs get block_lock_counts, it could be removed. ****/ 257 258 259 do while (^stacq (dte.lock.pid, "000000000000"b3, pds$process_id)); 260 end; 261 262 if dte.lock.notify_sw then do; 263 dte.lock.notify_sw = "0"b; 264 call pxss$notify (dte.lock.event); 265 end; 266 267 end; 268 end; 269 end; 270 return; 271 272 /**** interrupt ****/ 273 /* This is the interrupt handler for all IOI controlled devices. It handles waking up the user, logging errors, 274* reconnecting channels which have terminated, and in general, does the right things. */ 275 276 interrupt: 277 entry (p_cterp, p_level, p_status); 278 279 idp = addr (ioi_data$); 280 ctep = ptr (idp, p_cterp); /* point to cte of interrupting channel */ 281 gtep = ptr (idp, cte.gtep); /* and its gte */ 282 level = p_level; 283 status = p_status; 284 285 if level = IO_SPECIAL_INTERRUPT_LEVEL then do; /* special status, not necessarily in response to I/O */ 286 io_special_status_ptr = addr (status); /* base the proper structure */ 287 imp = addr (message); /* build the message for any wakeups we send */ 288 string (imess) = ""b; 289 imess.st = "1"b; 290 imess.level = bit (level, 3); 291 imess.status = status; 292 293 broadcast = /* tell everyone on this group if... */ 294 ^io_special_status.t | ^gte.mplex /* it's invalid (?) or not multiplexed */ 295 | (substr (io_special_status.byte2, 1, 1) & (io_special_status.device = "00"b3)); 296 /* or it's a controller interrupt */ 297 do gtx = 1 to ioi_data.ngt; 298 gtep = addr (ioi_data.gt (gtx)); 299 if special_could_come_from_channel (gtep, ctep) then do; 300 begin; 301 302 dcl done bit (1) aligned; 303 304 call lock_gte; 305 done = "0"b; /* so loop will loop */ 306 do dtep = ptr (idp, gte.dtep) repeat ptr (idp, dte.next_dtep) while (^done); 307 if (dte.process_id ^= ""b) & (broadcast | (dte.device = io_special_status.device)) 308 then do; 309 dte.special_status = status; 310 dte.special_interrupt = "1"b; 311 call wakeup_user; 312 end; 313 done = (dte.next_dtep = gte.dtep); 314 end; 315 call unlock_gte; 316 end; 317 end; 318 end; 319 end; 320 else do; /* system fault, terminate, or marker */ 321 call lock_gte; 322 if cte.direct then 323 unspec (status_entry) = ""b; 324 else call io_manager$get_status (cte.chx, addr (status_entry)); 325 if cte.toss_status | (cte.cur_dtep = ""b) then do; 326 cte.toss_status = "0"b; /* ignore this interrupt */ 327 cte.connected = "0"b; 328 dtep = null (); 329 call getwork_channel_proc; 330 call unlock_gte; 331 goto DISMISS_INTERRUPT; 332 end; 333 334 dtep = ptr (idp, cte.cur_dtep); /* let's talk about the correct device */ 335 if ^dte.active then do; 336 call syserr (CRASH, 337 "^a$interrupt: Interrupt for inactive device (device ^a^[_^[0^]^d^]).^/Type go to continue.", ME, 338 gte.name, gte.mplex, bin (dte.device) < 10, bin (dte.device)); 339 call unbind; 340 call getwork_channel_proc; 341 call unlock_gte; 342 goto DISMISS_INTERRUPT; 343 end; 344 if dte.reading_detailed_status then 345 call restore_previous_status; /* leave the "reading" flag set for log_status later */ 346 347 if level = IO_SYSTEM_FAULT_INTERRUPT_LEVEL then 348 call setup_fault_status; 349 else do; /* normal status */ 350 if ^dte.direct then do; /* for direct channels, expect no status and trust level number */ 351 if ^status_entry.t then do; 352 ioi_data.spurious_interrupts = ioi_data.spurious_interrupts + 1; 353 call unlock_gte; 354 goto DISMISS_INTERRUPT; 355 end; 356 if ^status_entry.word1.marker then 357 level = IO_TERMINATE_INTERRUPT_LEVEL; 358 end; 359 call setup_normal_status; 360 end; 361 362 call log_status_if_appropriate; 363 if dte.reading_detailed_status then do; 364 call unlock_gte; 365 goto DISMISS_INTERRUPT; /* we'll pick this up later */ 366 end; 367 368 if ^auto_istat.run then do; /* channel terminated, get more work */ 369 call unbind; 370 call getwork_channel_proc; 371 end; 372 else if dte.timeout ^= 0 then 373 cte.time_limit = clock () + dte.timeout;/* restart the clock */ 374 375 call deliver_status; 376 call wakeup_user; 377 call unlock_gte; 378 end; 379 380 goto DISMISS_INTERRUPT; 381 DISMISS_INTERRUPT: 382 return; 383 384 /* Entry to set a channel up for quiescing. If the channel is not currently connected, this call is a no-op. 385* If the channel is connected, the quiescing bit is turned on. It's up to interrupt side to notice and turn it off. */ 386 387 quiesce_channel: 388 entry (p_ctep); 389 390 ctep = p_ctep; 391 gtep = ptr (ctep, cte.gtep); 392 call mask; 393 call lock_gte; 394 395 if cte.connected then 396 cte.quiescing = "1"b; 397 398 call unlock_gte; 399 call unmask; 400 return; 401 402 /* Entry to flush any status accumulated so far. */ 403 404 flush_status: 405 entry (p_dtep); 406 407 dtep = p_dtep; 408 gtep = ptr (dtep, dte.gtep); 409 call mask; 410 call lock_gte; 411 call flush_status_proc; 412 call unlock_gte; 413 call unmask; 414 return; 415 416 /* Entry to count the number of non-deleted devices on a given subsystem. It doesn't count controllers 417* and returns -1 if it can't find the subsystem. */ 418 419 online_device_count: 420 entry (p_subsystem_name) returns (fixed bin); 421 422 idp = addr (ioi_data$); 423 do gtx = lbound (ioi_data.gt, 1) to hbound (ioi_data.gt, 1); 424 gtep = addr (ioi_data.gt (gtx)); 425 if gte.name = p_subsystem_name then do; 426 done = "0"b; 427 count = 0; 428 call mask; 429 call lock_gte; 430 do dtep = ptr (gtep, gte.dtep) repeat ptr (dtep, dte.next_dtep) while (^done); 431 if ^dte.deleted & dte.device ^= "00"b3 then 432 count = count + 1; 433 done = dte.next_dtep = gte.dtep; 434 end; 435 call unlock_gte; 436 call unmask; 437 return (count); 438 end; 439 end; 440 return (-1); 441 442 /* Procedure which issues a connect for the device pointed to by dtep on the channel pointed to by ctep. */ 443 444 connect: 445 proc; 446 447 ima.chx = cte.chx; 448 ima.bound = dte.bound; 449 ima.ptp = dte.ptp; 450 ima.listx = dte.listx; 451 ima.pcw = dte.pcw; 452 cte.time_limit = 0; /* in case polling goes off */ 453 454 if ^gte.psia then do; 455 if cte.direct then 456 call io_manager$connect_direct (ima); 457 else call io_manager$connect (ima); 458 end; 459 else do; 460 ima.listp, ima.dcw_pair_ptr = addr (dte.idcw); 461 call io_manager$workspace_tdcw (ima); 462 call io_manager$connect_abs (ima); 463 end; 464 465 cte.cur_dtep = rel (dtep); 466 dte.cur_ctep = rel (ctep); 467 cte.connected, dte.connected = "1"b; 468 if dte.timeout ^= 0 then 469 cte.time_limit = clock () + dte.timeout; 470 471 pcwp = addr (dte.pcw); 472 if pcw.mask then do; /* if this PCW masked the channel... */ 473 call mask_channel; 474 call setup_timeout_status; 475 call deliver_status; 476 call wakeup_user; 477 end; 478 479 end connect; 480 481 /* Procedure which finds work for a channel do. */ 482 483 getwork_channel_proc: 484 proc; 485 486 if cte.quiescing then do; 487 cte.quiescing = "0"b; 488 return; 489 end; 490 491 if cte.deleting then do; /* someone wants to know when this channel is free */ 492 call pxss$notify (unspec (IO_CHANNEL_LOCK_TEMPLATE) || rel (ctep)); 493 return; 494 end; 495 if cte.connected | ^cte.ioi_use | gte.suspend_devices then 496 return; /* this channel shouldn't be used */ 497 498 gte.dtep = ptr (gtep, gte.dtep) -> dte.next_dtep; /* rotate circular list */ 499 if gte.pending_connects > 0 then do; 500 begin; 501 502 dcl done bit (1) aligned; 503 dcl saved_dtep ptr; 504 505 done = "0"b; 506 saved_dtep = dtep; 507 do dtep = ptr (gtep, gte.dtep) repeat ptr (dtep, dte.next_dtep) while (^done); 508 if dte.active & ^dte.connected & ^dte.suspended then do; 509 gte.pending_connects = gte.pending_connects - 1; 510 call connect; 511 done = "1"b; 512 end; 513 else done = dte.next_dtep = gte.dtep; 514 end; 515 dtep = saved_dtep; 516 end; 517 end; 518 519 end getwork_channel_proc; 520 521 /* Procedure to stop the current activity on a channel. */ 522 523 mask_channel: 524 proc; 525 526 call io_manager$get_status (cte.chx, addr (status_entry)); 527 if dtep ^= null () then 528 call unbind; 529 call io_manager$mask (cte.chx); 530 if ^gte.mplex then do; 531 if dtep ^= null () then 532 if dte.direct then 533 call ioi_wire$unwire (dtep); /* unwire this instant */ 534 return; /* we don't have to unmask if channel not shared */ 535 end; 536 537 /* The dtep will be null if this is the second time through the code for 538* this channel. The first time through a call is made to "unbind" which 539* sets cte.cur_dtep to zero. The second time through the timer entry it 540* will set dtep to null because cte.cur_dtep is zero. */ 541 542 if dtep = null () then do; /* we've already tried to unmask */ 543 cte.connected = "0"b; /* free channel */ 544 cte.toss_status = "0"b; 545 call syserr (ANNOUNCE, "^a: Channel ^a not responding, will remain masked.", ME, cte.chanid); 546 return; 547 end; 548 549 ima.chx = cte.chx; 550 551 /* Set pcw to a unique string that iom_connect will recognize. iom_connect 552* will use the default pcw, but turn ON the PGE and turn OFF the PTP flags 553* in the second word of the pcw. This will cause a system-fault if the 554* channel trys to do a data transfer. */ 555 556 ima.pcw = "000000777777"b3; /* set unique string */ 557 ima.ptp = null (); 558 ima.listp = addr (ioi_data.rss_idcw); 559 call io_manager$connect_abs (ima); 560 cte.time_limit = cte.time_limit + ONE_MINUTE; 561 cte.toss_status = "1"b; 562 cte.connected = "1"b; 563 564 end mask_channel; 565 566 /* Procedure to remove the binding between a channel and a device. */ 567 568 unbind: 569 proc; 570 571 cte.cur_dtep, dte.cur_ctep = ""b; 572 cte.connected, dte.connected, dte.active = ""b; 573 dte.unwire_time = clock () + FIFTEEN_SECONDS; 574 575 end unbind; 576 577 /* This routine saves away parts of the status so we can read detailed status using the same IDCW, status entry, etc. 578* It's restored when we've read the detailed status. */ 579 580 save_status: 581 proc; 582 583 cte.saved_status.word1 = unspec (status_entry.word1); 584 cte.saved_status.word2 = unspec (status_entry.word2); 585 cte.saved_status.word4 = unspec (status_entry.word4); 586 cte.saved_status.next_lpw_offset = bit (bin (auto_istat.offset + 1, 18), 18); 587 cte.saved_status.command = addr (dte.idcw) -> idcw.command; 588 589 end save_status; 590 591 /* The following routine is called when we have had to read the detailed status. It restores the saved status 592* (i.e. the status that caused us to decide to read the detailed status). */ 593 594 restore_previous_status: 595 proc; 596 597 level = IO_TERMINATE_INTERRUPT_LEVEL; 598 unspec (status_entry.word1) = cte.saved_status.word1; 599 unspec (status_entry.word2) = cte.saved_status.word2; 600 unspec (status_entry.word4) = cte.saved_status.word4; 601 status_entry.next_lpw_offset = cte.saved_status.next_lpw_offset; 602 addr (dte.idcw) -> idcw.command = cte.saved_status.command; 603 status_entry.workspace = "1"b; 604 605 end restore_previous_status; 606 607 /* Procedures to setup the auto_istat entry on our stack for delivery to the user. */ 608 609 setup_normal_status: 610 proc; 611 612 unspec (auto_istat) = ""b; 613 auto_istat.er = ((unspec (status_entry.word1) & IO_STATUS_ERROR_MASK) ^= ""b); 614 auto_istat.iom_stat = unspec (status_entry.word1) || unspec (status_entry.word4); 615 goto setup_status_interrupt_join; 616 617 setup_fault_status: 618 entry; 619 620 unspec (auto_istat) = ""b; 621 auto_istat.er = "1"b; 622 auto_istat.iom_stat = status; 623 624 setup_status_interrupt_join: 625 auto_istat.run = (level = IO_MARKER_INTERRUPT_LEVEL) | cte.direct; 626 auto_istat.time_out = "0"b; 627 auto_istat.level = level; 628 goto setup_status_common; 629 630 setup_timeout_status: 631 entry; 632 633 unspec (auto_istat) = ""b; 634 auto_istat.er, auto_istat.time_out = "1"b; 635 auto_istat.level = IO_TERMINATE_INTERRUPT_LEVEL; /* since the $'#((&% T&Ds expect this... */ 636 637 setup_status_common: 638 if ^cte.direct then do; /* no dcws here */ 639 if status_entry.workspace then 640 auto_istat.offset = bin (status_entry.next_lpw_offset, 18) - 1; 641 else if dtep ^= null () then 642 auto_istat.offset = dte.idcw_listx; 643 auto_istat.lpw = unspec (status_entry.word2); 644 end; 645 auto_istat.absaddr = 0; 646 647 imp = addr (message); /* set up the message for wakeups */ 648 unspec (imess) = ""b; 649 imess.completion = auto_istat.completion; 650 imess.st = "1"b; /* be sure this bit is on (it's set separately in istat) */ 651 imess.level = bit (auto_istat.level, 3); 652 imess.offset = bit (auto_istat.offset, 18); 653 imess.status = substr (auto_istat.iom_stat, 1, length (imess.status)); 654 /* only the first 36 bits, actually */ 655 656 end setup_normal_status; 657 658 /* Routine to put the status in the user's workspace. */ 659 660 deliver_status: 661 proc; 662 663 dcl ioi_abs_seg_ptr ptr; 664 dcl workspace_sdw_ptr ptr; 665 666 if dtep = null () then 667 return; 668 if dte.status_entries = 0 then 669 return; 670 671 ioi_abs_seg_ptr = addr (ioi_abs_seg$); 672 workspace_sdw_ptr = addr (dte.workspace_sdw); 673 call pmut$swap_sdw (ioi_abs_seg_ptr, workspace_sdw_ptr); 674 /* since we may not own the workspace, get our own pointer */ 675 ptr (ioi_abs_seg_ptr, dte.status_offset + size (istat) * dte.status_entry_idx) -> istat = auto_istat; 676 ptr (ioi_abs_seg_ptr, dte.status_offset + size (istat) * dte.status_entry_idx) -> istat.st = "1"b; 677 dte.status_entry_idx = dte.status_entry_idx + 1; 678 if dte.status_entry_idx = dte.status_entries then 679 dte.status_entry_idx = 0; 680 681 end deliver_status; 682 683 /* Routine to send the user a wakeup, informing of the arrival of status */ 684 685 wakeup_user: 686 proc; 687 688 if sys_info$service_system then 689 call pxss$io_wakeup (dte.process_id, dte.ev_chn, message, (0)); 690 else call bce_ioi_post (dte.ev_chn, message); 691 692 end wakeup_user; 693 694 /* A routine which lives up to its name. */ 695 696 log_status_if_appropriate: 697 proc; 698 699 dcl log_detail bit (1) aligned; 700 dcl major fixed bin (4); 701 dcl sub fixed bin (6); 702 703 dcl detailed_status_in_status_entry 704 bit (36) aligned based (addr (status_entry.detailed_status)); 705 dcl status_entry_array (16) bit (36) aligned based (addr (status_entry)); 706 dcl 1 second_status_word aligned like io_status_entry.word4 based (addrel (addr (auto_istat.iom_stat), 1)); 707 708 /**** First, figure out whether it's appropriate. (If not, our job is easy). ****/ 709 710 if dte.reading_detailed_status then do; /* we already decided to log this, so do it */ 711 dte.detailed_status_valid = "1"b; 712 call log_this_status; 713 dte.reading_detailed_status = "0"b; 714 return; 715 end; 716 717 unspec (dte.detailed_status (*)) = ""b; /* reset */ 718 719 if level = IO_SPECIAL_INTERRUPT_LEVEL then 720 return; /* don't log specials */ 721 if level ^= IO_SYSTEM_FAULT_INTERRUPT_LEVEL then do; 722 /* we're going to log any system faults, check the rest */ 723 if gte.io_log_info_index = 0 then do; /* if no table, use heuristic */ 724 if ^auto_istat.er then 725 return; /* not an error, don't log */ 726 log_detail = "0"b; 727 end; 728 else do; /* we have a table to guide us on which statuses to log */ 729 io_log_infop = addr (io_log_status_info$io_log_status_info); 730 logp = addr (io_log_info.log_entry (gte.io_log_info_index)); 731 major = bin (status_entry.major); 732 sub = bin (status_entry.sub); 733 if ^log.status (major, sub) then 734 return; /* no one is interested in this status */ 735 log_detail = log.detail (major, sub); 736 end; 737 end; 738 else log_detail = "0"b; /* no detailed status for system faults */ 739 740 if dte.priv then do; /* save status in dte for priv attachments, but don't log */ 741 unspec (dte.log_status) = ""b; /* clear everything */ 742 dte.log_status_cnt = "0"b; 743 dte.log_status.level = auto_istat.level; 744 dte.log_status.time_out = auto_istat.time_out; 745 dte.log_status.type = second_status_word.action_code; 746 dte.log_status.command = addr (dte.idcw) -> idcw.command; 747 dte.log_status.channel = rel (ctep); 748 dte.log_status.status = substr (auto_istat.iom_stat, 1, length (dte.log_status.status)); 749 /* takes only high 36 bits */ 750 if log_detail & detailed_status_in_status_entry ^= "000000000000"b3 then do; 751 dte.detailed_status = status_entry.detailed_status; 752 dte.detailed_status_valid = "1"b; 753 end; 754 dte.log_detailed_status = dte.detailed_status; 755 dte.last_log_time = clock (); 756 return; 757 end; 758 759 /**** If we've gotten this far, we want to log the status. The log_detail flag says whether we want to log detailed 760* status as well. If we do, we may have to perform some magic at this point to reconnect to read the detailed 761* status (if the detailed status was stored as part of the status store, we're in better shape). ****/ 762 763 if log_detail & detailed_status_in_status_entry ^= "000000000000"b3 then do; 764 dte.detailed_status = status_entry.detailed_status; 765 dte.detailed_status_valid = "1"b; 766 call log_this_status; 767 return; 768 end; 769 770 if log_detail then do; /* must get the detailed status */ 771 if gte.detailed_status_cmd = "0"b then do; /* Not able to get it, complain that it was not available. */ 772 call syserr (LOG, 773 "^a: No Ext. Stat. with ^o/^o status on chnl ^a (^a^[_^[0^]^d^]).^4(^/^10x^w ^w ^w ^w^)", ME, 774 major, sub, cte.chanid, gte.name, gte.mplex, bin (dte.device) < 10, bin (dte.device), 775 status_entry_array); 776 call log_this_status; 777 return; 778 end; 779 call save_status; 780 781 /* Now build dcw list to read detailed status */ 782 783 dte.idcw, dte.tdcw = "0"b; 784 idcwp = addr (dte.idcw); 785 dcwp = addr (dte.tdcw); 786 idcw.command = gte.detailed_status_cmd; /* Read detailed status */ 787 idcw.device = dte.device; 788 idcw.code = "111"b; 789 idcw.count = "01"b3; 790 791 dcw.address = absaddr_18 (addr (dte.detailed_status)); 792 dcw.tally = "0006"b3; 793 794 dte.detailed_status_valid = "0"b; 795 unspec (dte.detailed_status) = "0"b; 796 797 /* connect to do actual I/O */ 798 799 ima.chx = cte.chx; 800 ima.pcw = ""b; 801 ima.ptp = null (); 802 ima.listp = addr (dte.idcw); 803 call io_manager$connect_abs (ima); 804 if dte.timeout ^= 0 then /* reset clock */ 805 cte.time_limit = clock () + dte.timeout; 806 dte.reading_detailed_status = "1"b; 807 return; 808 end; 809 810 call log_this_status; 811 return; 812 813 absaddr_18: 814 proc (p) returns (bit (18)); 815 816 dcl p ptr; 817 818 dcl absaddr fixed bin (26); 819 dcl code fixed bin (35); 820 821 absaddr = absadr (p, code); 822 if code ^= 0 then 823 call syserr (CRASH, "^a$interrupt: absadr failed.", ME); 824 return (bit (bin (absaddr, 18), 18)); 825 826 end absaddr_18; 827 828 log_this_status: 829 proc; 830 831 /**** Here is where the status is actually logged. Status is accumulated, and if it is identical to the previous 832* status, a count is bumped. If the count reaches its max, or a different status comes along, the accumulated 833* status is written to the syserr log. ****/ 834 835 dcl 1 test_status like dte.log_status; 836 837 unspec (test_status) = ""b; /* clear everything */ 838 test_status.level = auto_istat.level; 839 test_status.time_out = auto_istat.time_out; 840 test_status.channel = rel (ctep); 841 test_status.status = substr (auto_istat.iom_stat, 1, length (test_status.status)); 842 /* takes only high 36 bits */ 843 if auto_istat.level ^= IO_SPECIAL_INTERRUPT_LEVEL then do; 844 test_status.type = second_status_word.action_code; 845 test_status.command = addr (dte.idcw) -> idcw.command; 846 end; 847 test_status.count = dte.log_status.count; /* for equality comparision */ 848 /**** See if this status matches a previous one. ****/ 849 if (dte.log_status_cnt & (unspec (test_status) = unspec (dte.log_status)) 850 & (unspec (dte.detailed_status) = unspec (dte.log_detailed_status))) then do; 851 /* it matches */ 852 dte.log_status.count = dte.log_status.count + 1; 853 if dte.log_status.count = MAX_LOG_STATUS_COUNT then 854 call flush_status_proc; 855 end; 856 else do; /* doesn't match */ 857 call flush_status_proc; 858 dte.log_status = test_status; 859 dte.log_status.count = 0; /* print_syserr_msg_ expects actual count - 1 */ 860 dte.log_status_cnt = "1"b; 861 dte.log_detailed_status = dte.detailed_status; 862 end; 863 864 end log_this_status; 865 866 end log_status_if_appropriate; 867 868 /* Routine to flush the status accumulated so far. */ 869 870 flush_status_proc: 871 proc; 872 873 dcl 1 auto_io_msg aligned like io_msg; 874 dcl msg_length fixed bin; 875 dcl msg_type fixed bin; 876 877 if ^dte.log_status_cnt then 878 return; /* nothing to log */ 879 880 io_msgp = addr (auto_io_msg); 881 io_msg.level = bit (dte.log_status.level); 882 io_msg.device = dte.device; 883 io_msg.time_out = dte.log_status.time_out; 884 io_msg.type = dte.log_status.type; 885 io_msg.command = dte.log_status.command; 886 io_msg.count = bit (dte.log_status.count); 887 io_msg.channel = ptr (dtep, dte.log_status.channel) -> cte.chanid; 888 io_msg.status = dte.log_status.status; 889 io_msg.devname = ptr (dtep, dte.gtep) -> gte.name; 890 if unspec (dte.log_detailed_status) ^= ""b then do; 891 io_msg.detailed_status = substr (unspec (dte.log_detailed_status), 1, length (io_msg.detailed_status)); 892 msg_type = SB_io_err_detail; 893 msg_length = SBL_io_err_detail; 894 end; 895 else do; 896 msg_type = SB_io_err; 897 msg_length = SBL_io_err; 898 end; 899 900 call syserr$binary (JUST_LOG, io_msgp, msg_type, msg_length, "^a$interrupt: ^[I/O error^;Special^].", ME, 901 bin (io_msg.level) ^= IO_SPECIAL_INTERRUPT_LEVEL); 902 dte.last_log_time = clock (); 903 dte.log_status_cnt = "0"b; 904 905 end flush_status_proc; 906 907 special_could_come_from_channel: 908 proc (gtp, ctp) returns (bit (1) aligned); 909 910 dcl ctp ptr parameter; 911 dcl gtp ptr parameter; 912 913 dcl tctp ptr; 914 915 do tctp = ptr (gtp, gtp -> gte.ctep) repeat ptr (tctp, tctp -> cte.next_ctep) while (rel (tctp) ^= ""b); 916 if tctp -> cte.base_ctep = ctp -> cte.base_ctep then 917 return ("1"b); 918 end; 919 return ("0"b); 920 921 end special_could_come_from_channel; 922 923 /* Routines which handle the masking and unmasking of interrupts, and the locking and unlocking of the gte. */ 924 925 mask: 926 proc; 927 928 call pmut$wire_and_mask (wm_mask, wm_ptwp); 929 930 end mask; 931 932 unmask: 933 proc; 934 935 call pmut$unwire_unmask (wm_mask, wm_ptwp); 936 937 end unmask; 938 939 lock_gte: 940 proc; 941 942 if gte.lock = pds$process_id then 943 call syserr (CRASH, "^a: Mylock error on subsystem ^a.", ME, gte.name); 944 945 do while (^stac (addr (gte.lock), pds$process_id)); 946 /* seize the loop lock */ 947 end; 948 949 end lock_gte; 950 951 unlock_gte: 952 proc; 953 954 if ^stacq (gte.lock, ""b, pds$process_id) then 955 call syserr (CRASH, "^a: Lock for subsystem ^a not locked to process ^w.", ME, gte.name, pds$process_id); 956 957 end unlock_gte; 958 1 1 /* Begin include file ...... ioi_data.incl.pl1 */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), 1 6* audit(85-12-09,CLJones), install(86-03-21,MR12.0-1033): 1 7* Support for FIPS and 1 8* IMU. 1 9* 2) change(86-05-16,Kissel), approve(86-07-30,MCR7461), audit(86-07-31,Coren), 1 10* install(86-08-19,MR12.0-1120): 1 11* Changed the value of IOI_DEFAULT_MAX_BOUND from 4096 to 1024. This 1 12* corrects a problem when RCP tries to set the maximum workspace size if it 1 13* is less than 4096. Since ioi_ (actually grab_aste) touched all the pages 1 14* at assignment time, the current length is 4, and trying to set the max 1 15* length to less than 4 (e.g. because the max unprivileged workspace size in 1 16* RCP for a special device is 1) returns an error. 1 17* END HISTORY COMMENTS */ 1 18 1 19 /* Rewritten May 1982 by C. Hornig for new ioi_ */ 1 20 /* Rewrite finished March 1983 by Chris Jones */ 1 21 /* Extended for reconfiguration April 1983 by Chris Jones. */ 1 22 /* Modified November 1983 by Chris Jones to separate items in the dte protected by different locks. */ 1 23 /* Modified January 1984 by Chris Jones to add ite's. */ 1 24 /* Modified Feb 1984 by Rich Fawcett to add ipc and fips */ 1 25 /* Modified Sept 1985 by Paul Farley to add controller flag to dte. */ 1 26 1 27 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 28 1 29 dcl idp ptr; /* pointer to IOI data structure */ 1 30 dcl gtep ptr; /* pointer to channel/device group entry */ 1 31 dcl ctep ptr; /* pointer to channel table entry */ 1 32 dcl dtep ptr; /* pointer to wired device table entry */ 1 33 dcl itep ptr; /* pointer to I/O multiplexer entry */ 1 34 1 35 dcl (ioi_subsystems, ioi_devices, ioi_channels, ioi_multiplexers) 1 36 fixed bin; 1 37 dcl ioi_data$ external; /* IOI data segment */ 1 38 1 39 1 40 dcl 1 ioi_data based (idp) aligned, /* I/O Interfacer data structure */ 1 41 2 ngt fixed bin, /* number of groups */ 1 42 2 nct fixed bin, /* number of channels */ 1 43 2 ndt fixed bin, /* number of devices */ 1 44 2 nit fixed bin, /* number of IOMs */ 1 45 2 spurious_interrupts 1 46 fixed bin (35), /* interrupts with no status */ 1 47 2 reconfig_lock like lock, /* lock for reconfiguring devices, channels, etc. */ 1 48 2 flags, 1 49 3 setup bit (1) unal, /* "1"b => ioi_init has run */ 1 50 3 pad1 bit (35) unal, 1 51 2 rss_idcw bit (36), /* reset status IDCW */ 1 52 2 pad2 (6) fixed bin (35), /* pad to 16 words */ 1 53 2 dt (ioi_devices refer (ioi_data.ndt)) like dte aligned, 1 54 /* device table */ 1 55 2 gt (ioi_subsystems refer (ioi_data.ngt)) like gte aligned, 1 56 /* channel/device group table */ 1 57 2 ct (ioi_channels refer (ioi_data.nct)) like cte aligned, 1 58 /* channel table */ 1 59 2 it (ioi_multiplexers refer (ioi_data.nit)) like ite aligned; 1 60 /* multiplexer table */ 2 1 /* Begin include file hc_lock.incl.pl1 BIM 2/82 */ 2 2 /* Replaced by hc_fast_lock.incl.pl1 RSC 11/84 because name of structure 2 3* encourages name conflicts. 2 4* USE HC_FAST_LOCK INSTEAD! 2 5**/ 2 6 2 7 /* Lock format suitable for use with lock$lock_fast, unlock_fast */ 2 8 2 9 /* format: style3 */ 2 10 2 11 declare lock_ptr pointer; 2 12 declare 1 lock aligned based (lock_ptr), 2 13 2 pid bit (36) aligned, /* holder of lock */ 2 14 2 event bit (36) aligned, /* event associated with lock */ 2 15 2 flags aligned, 2 16 3 notify_sw bit (1) unaligned, 2 17 3 pad bit (35) unaligned; /* certain locks use this pad, like dirs */ 2 18 2 19 /* End include file hc_lock.incl.pl1 */ 1 61 1 62 1 63 dcl 1 ite based (itep) aligned, /* I/O multiplexer table entry */ 1 64 2 model char (4), /* which flavor we are */ 1 65 2 flags, 1 66 ( 3 deleting bit (1), 1 67 3 deleted bit (1) 1 68 ) unaligned, 1 69 2 pad1 bit (16) unaligned, 1 70 2 iom_table_idx fixed bin (17) unaligned, 1 71 2 tag fixed bin (3), 1 72 2 pad2 (5) bit (36); 1 73 1 74 dcl 1 gte based (gtep) aligned, /* channel/device group table entry */ 1 75 2 lock bit (36), /* (0) loop lock */ 1 76 2 name char (4), /* (1) subsystem name */ 1 77 2 dtep bit (18) unaligned, /* (2) rel ptr to device just serviced */ 1 78 2 ctep bit (18) unaligned, /* (2) rel ptr to thread of channel table entries */ 1 79 2 detailed_status_cmd 1 80 bit (6) unal, /* (3) idcw command to read detailed status */ 1 81 2 flags unaligned, /* (3) */ 1 82 3 psia bit (1), /* "1"b if channel is PSIA */ 1 83 3 suspend_devices bit (1), /* "1"b if device I/O suspended */ 1 84 3 dual_controller bit (1), /* "1"b if dual controller subsystem (disk only) */ 1 85 3 ascii_dtst bit (1), /* "1"b if detailed status sent in ASCII mode */ 1 86 3 mplex bit (1), /* "1"b if channels are multiplexed among devices */ 1 87 3 ipc bit (1), /* "1"b if devices are on an IMU */ 1 88 3 fips bit (1), /* "1"b if devices start at zero */ 1 89 3 pad bit (23), 1 90 2 n_devices fixed bin, /* (4) number of devices in device table thread */ 1 91 2 pending_connects fixed bin, /* (5) count of pending connect requests */ 1 92 2 io_log_info_index fixed bin, /* (6) index into io_log_status_info table */ 1 93 2 disk_data_subsystem_idx 1 94 fixed bin; /* (7) index into disk_data.array for disks */ 1 95 1 96 dcl 1 cte based (ctep) aligned, /* channel table entry */ 1 97 2 next_ctep bit (18) unaligned, /* (0) rel ptr to next channel table entry */ 1 98 2 gtep bit (18) unaligned, /* (0) rel ptr to channel/device group table entry */ 1 99 2 flags1 unaligned, /* (1) */ 1 100 3 ioi_use bit (1), /* "1"b if channel currently being used */ 1 101 3 connected bit (1), /* "1"b if channel is connected */ 1 102 3 toss_status bit (1), /* "1"b if status is to be ignored */ 1 103 3 quiescing bit (1), /* "1"b if the channel is just finishing what it's doing */ 1 104 3 direct bit (1), /* "1"b if this is a direct channel */ 1 105 3 pad1 bit (4), 1 106 2 disktab_ctx fixed bin (9) uns unal, /* (1) index into disktab.chantab for this channel */ 1 107 2 cur_dtep bit (18) unaligned, /* (1) current device table entry */ 1 108 2 chanid char (8), /* (2) io_manager's name for channel */ 1 109 2 statusp ptr unal, /* (4) pointer to first word of status */ 1 110 2 chx fixed bin (35), /* (5) channel index for io_manager */ 1 111 2 time_limit fixed bin (71), /* (6) connect time limit */ 1 112 2 saved_status unaligned, /* (8) status repository while reading detailed status */ 1 113 3 word1 bit (36), 1 114 3 word2 bit (36), 1 115 3 word4 bit (36), 1 116 3 next_lpw_offset bit (18), 1 117 3 command bit (6), 1 118 2 pad3 bit (12) unaligned, /* (11) */ 1 119 2 base_ctep bit (18) unaligned, /* (12) rel ptr to base logical chan. of physical chan. */ 1 120 2 itep bit (18) unaligned, /* (12) rel ptr to itep */ 1 121 2 flags2 unaligned, /* (13) */ 1 122 3 deleting bit (1), /* "1"b if attempting to delete this channel */ 1 123 3 deleted bit (1), /* "1"b if channel deleted */ 1 124 2 pad4 bit (16) unaligned, /* (13) */ 1 125 2 channel_table_idx fixed bin (17) unaligned, 1 126 2 pad5 (2) bit (36); /* (14) pad to 8 word boundary */ 1 127 1 128 dcl 1 dte based (dtep) aligned, /* wired device table entry */ 1 129 2 next_dtep bit (18) unaligned, /* (0) rel ptr to next entry in thread */ 1 130 2 gtep bit (18) unaligned, /* (0) rel ptr to channel/device group table entry */ 1 131 2 cur_ctep bit (18) unaligned, /* (1) rel ptr to channel in use */ 1 132 2 flags1 unaligned, /* (1) flags protected by gte lock */ 1 133 3 connected bit (1), /* "1"b if device has a channel */ 1 134 3 log_status_cnt bit (1), /* "1"b if count in log_status is valid */ 1 135 3 reading_detailed_status 1 136 bit (1), /* "1"b if read of detailed device status in progress */ 1 137 3 pad1 bit (15), 1 138 2 channel_required char (8), /* (2) channel name of required channel */ 1 139 2 ev_chn fixed bin (71), /* (4) event ID for status wakeups */ 1 140 2 workspace_ptr ptr, /* (6) workspace pointer */ 1 141 2 workspace_astep ptr, /* (8) workspace ASTE ptr */ 1 142 2 workspace_sdw fixed bin (71), /* (10) SDW of workspace segment */ 1 143 2 ptp ptr, /* (12) device page table */ 1 144 2 max_bound fixed bin (19), /* (14) largest allowable bound of workspace segment */ 1 145 2 bound fixed bin (19), /* (15) bound of workspace */ 1 146 2 process_id bit (36), /* (16) ID of process owning device */ 1 147 2 ring fixed bin (3), /* (17) highest ring allowed to access device */ 1 148 2 device bit (6) unal, /* (18) device code */ 1 149 2 flags2 unal, /* (18) constant or protected by dte lock */ 1 150 3 priv bit (1), /* "1"b if privileged user */ 1 151 3 in_use bit (1), /* "1"b if device is to be used */ 1 152 3 deleting bit (1), /* "1"b if trying to delete this device */ 1 153 3 deleted bit (1), /* "1"b if this device is deleted */ 1 154 3 suspended bit (1), /* "1"b if device isn't to be used temporarily */ 1 155 3 workspace_wired bit (1), /* "1"b if workspace is wired */ 1 156 3 direct bit (1), /* "1"b if device is connected to a direct channel */ 1 157 3 controller bit (1), /* "1"b if dte for the devices controller */ 1 158 3 pad2 bit (4), 1 159 2 device_table_idx fixed bin (17) unaligned, 1 160 2 listx uns fixed bin (18) unal, /* (19) DCW list index for connect */ 1 161 2 idcw_listx uns fixed bin (18) unal, /* (19) DCW list index of IDCW */ 1 162 2 timeout fixed bin (35), /* (20) time limit for I/O completion (usec) */ 1 163 2 max_timeout fixed bin (35), /* (21) maximum allowable timeout grace time (usec) */ 1 164 2 unwire_time fixed bin (71), /* (22) when to unwire the workspace */ 1 165 2 pcw bit (36), /* (24) peripheral control word (PCW) */ 1 166 2 status_control, /* (25) */ 1 167 3 status_offset fixed bin (18) unsigned unaligned, 1 168 /* offset of status queue in user workspace */ 1 169 3 status_entries fixed bin (9) unsigned unaligned, 1 170 /* number of entries in status queue */ 1 171 3 status_entry_idx fixed bin (9) unsigned unaligned, 1 172 /* next entry to be used */ 1 173 2 idcw bit (36), /* (26) instruction DCW (KEEP ON EVEN WORD BOUNDARY) */ 1 174 2 tdcw bit (36), /* (27) transfer DCW to remainder of list */ 1 175 2 special_status bit (36), /* (28) special interrupt status */ 1 176 2 lock like lock, /* (29) wait lock */ 1 177 2 log_status, /* (32) */ 1 178 ( 3 level fixed bin (3) unsigned, 1 179 3 time_out bit (1), 1 180 3 type bit (2), 1 181 3 command bit (6), 1 182 3 count fixed bin (6) unsigned, 1 183 3 channel bit (18), 1 184 3 status bit (36) 1 185 ) unaligned, 1 186 2 ptx fixed bin, /* (34) index of page table */ 1 187 2 active bit (1), /* (35) "1"b if device running or to run */ 1 188 2 special_interrupt bit (1), /* (36) "1"b if special interrupt received */ 1 189 2 detailed_status_valid 1 190 bit (1), /* (37) "1"b if detailed status read sucessfully */ 1 191 2 last_log_time fixed bin (71), /* (38) when status was last logged */ 1 192 2 detailed_status (8) bit (36), /* (40) (buffer for reading most recent detailed status */ 1 193 2 log_detailed_status 1 194 (8) bit (36); /* (48) copy of last detailed status logged */ 1 195 1 196 /**** Defaults for various I/O parameters */ 1 197 1 198 dcl IOI_DEFAULT_MAX_BOUND fixed bin (19) static options (constant) init (1024); 1 199 dcl IOI_DEFAULT_MAX_TIMEOUT 1 200 fixed bin (35) static options (constant) init (30000000); 1 201 dcl IOI_DEFAULT_TIMEOUT fixed bin (35) static options (constant) init (30000000); 1 202 1 203 dcl IO_STATUS_ERROR_MASK bit (36) static options (constant) init ("370000770000"b3); 1 204 1 205 dcl IO_CHANNEL_LOCK_TEMPLATE 1 206 char (2) int static options (constant) init ("ch"); 1 207 dcl IOI_DEVICE_LOCK_EVENT_TEMPLATE 1 208 char (2) static options (constant) init ("dv"); 1 209 1 210 /* End of include file ...... ioi_data.incl.pl1 */ 959 960 3 1 /* Begin include file io_manager_dcls.incl.pl1 */ 3 2 3 3 /* Written by Charles Hornig, late 1980 and early 1981 */ 3 4 /* Modified for MR10 interface, February 1982 */ 3 5 /* Channel reconfiguration entries added by Chris Jones, January 1984 */ 3 6 3 7 /* These entries are callable on unwired stacks. */ 3 8 3 9 /* call io_manager$assign (Chx, Channel, Handler, Index, Statusp, Code); */ 3 10 dcl io_manager$assign 3 11 entry (fixed bin (35), char (8) aligned, entry (fixed bin (35), fixed bin (3), bit (36) aligned), 3 12 fixed bin (35), ptr, fixed bin (35)); 3 13 3 14 /* call io_manager$assign_add (Chx, Channel, Handler, Index, Statusp, Code); */ 3 15 dcl io_manager$assign_add 3 16 entry (fixed bin (35), char (8) aligned, entry (fixed bin (35), fixed bin (3), bit (36) aligned), 3 17 fixed bin (35), ptr, fixed bin (35)); 3 18 3 19 /* call io_manager$unassign (Chx, Code); */ 3 20 dcl io_manager$unassign entry (fixed bin (35), fixed bin (35)); 3 21 3 22 /* call io_manager$unassign_delete (Chx, Code); */ 3 23 dcl io_manager$unassign_delete entry (fixed bin (35), fixed bin (35)); 3 24 3 25 /* call io_manager$connect (Io_manager_arg); */ 3 26 dcl io_manager$connect entry (1 aligned like io_manager_arg); 3 27 3 28 /* call io_manager$connect_abs (Io_manager_arg); */ 3 29 dcl io_manager$connect_abs entry (1 aligned like io_manager_arg); 3 30 3 31 /* call io_manager$connect_direct (Io_manager_arg); */ 3 32 dcl io_manager$connect_direct entry (1 aligned like io_manager_arg); 3 33 3 34 /* call io_manager$get_status (Chx, Io_status_entry_ptr); */ 3 35 dcl io_manager$get_status entry (fixed bin (35), ptr); 3 36 3 37 /* call io_manager$mask (Chx); */ 3 38 dcl io_manager$mask entry (fixed bin (35)); 3 39 3 40 /* call io_manager$ignore_interrupt (); */ 3 41 dcl io_manager$ignore_interrupt entry (fixed bin (35), fixed bin (3), bit (36) aligned); 3 42 3 43 /* call io_manager$data_tdcw (Io_manager_arg); 3 44* dcl io_manager$data_tdcw entry (1 aligned like io_manager_arg); 3 45* 3 46* /* call io_manager$workspace_tdcw (Io_manager_arg); */ 3 47 dcl io_manager$workspace_tdcw entry (1 aligned like io_manager_arg); 3 48 3 49 dcl io_manager_arg_ptr ptr; 3 50 dcl 1 io_manager_arg aligned based (io_manager_arg_ptr), 3 51 2 chx fixed bin (35), /* channel index from io_manager$assign */ 3 52 2 bound fixed bin (19), /* workspace size */ 3 53 2 pcw bit (36) aligned, /* or IDCW */ 3 54 2 listx fixed bin (18), /* DCW list offset */ 3 55 2 ptp ptr, /* page table pointer */ 3 56 2 listp ptr, /* DCW list pointer */ 3 57 2 dcw_pair_ptr ptr; /* DCW pair pointer */ 3 58 3 59 /* End include file io_manager_dcls.incl.pl1 */ 961 962 4 1 /* START OF: interrupt_levels.incl.pl1 * * * * * * * * * * * * * * * * */ 4 2 4 3 /* Written 14 June 1982 by Chris Jones */ 4 4 4 5 /* format: style4,delnl,insnl,indattr,ifthen,declareind10,dclind10 */ 4 6 dcl IO_SYSTEM_FAULT_INTERRUPT_LEVEL 4 7 fixed bin internal static options (constant) init (1); 4 8 dcl IO_TERMINATE_INTERRUPT_LEVEL 4 9 fixed bin internal static options (constant) init (3); 4 10 dcl IO_MARKER_INTERRUPT_LEVEL 4 11 fixed bin internal static options (constant) init (5); 4 12 dcl IO_SPECIAL_INTERRUPT_LEVEL 4 13 fixed bin internal static options (constant) init (7); 4 14 4 15 /* END OF: interrupt_levels.incl.pl1 * * * * * * * * * * * * * * * * */ 963 964 5 1 5 2 /* Begin include file ...... ioi_stat.incl.pl1 */ 5 3 /* Last modified 3/24/75 by Noel I. Morris */ 5 4 5 5 dcl isp ptr; /* pointer to status structure */ 5 6 5 7 dcl 1 istat based (isp) aligned, /* I/O Interfacer status structure */ 5 8 2 completion, /* completion flags */ 5 9 (3 st bit (1), /* "1"b if status returned */ 5 10 3 er bit (1), /* "1"b if status indicates error condition */ 5 11 3 run bit (1), /* "1"b if channel still running */ 5 12 3 time_out bit (1)) unal, /* "1"b if time-out occurred */ 5 13 2 level fixed bin (3), /* IOM interrupt level */ 5 14 2 offset fixed bin (18), /* DCW list offset */ 5 15 2 absaddr fixed bin (24), /* absolute address of workspace */ 5 16 2 iom_stat bit (72), /* IOM status */ 5 17 2 lpw bit (72); /* LPW residue */ 5 18 5 19 dcl imp ptr; /* pointer to message structure */ 5 20 5 21 dcl 1 imess based (imp) aligned, /* I/O Interfacer event message structure */ 5 22 (2 completion like istat.completion, /* completion flags */ 5 23 2 pad bit (11), 5 24 2 level bit (3), /* interrupt level */ 5 25 2 offset bit (18), /* DCW list offset */ 5 26 2 status bit (36)) unal; /* first 36 bits of status */ 5 27 5 28 /* End of include file ...... ioi_stat.incl.pl1 */ 5 29 965 966 6 1 /* Begin include file io_status_entry.incl.pl1 */ 6 2 /* Written by C. Hornig sometime late in 1980. */ 6 3 /* Modified January 1983 by Chris Jones to show detailed status. */ 6 4 6 5 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 6 6 dcl io_status_entry_ptr ptr; 6 7 dcl 1 io_status_entry aligned based (io_status_entry_ptr), 6 8 2 word1 like io_status_word, /* major status word */ 6 9 2 word2, 6 10 3 next_lpw_offset bit (18) unaligned, 6 11 3 rfu1 bit (5) unaligned, 6 12 3 workspace bit (1) unaligned, /* DCW is in the workspace */ 6 13 3 rfu2 bit (12) unaligned, 6 14 2 word3 bit (36), 6 15 2 word4, 6 16 3 next_dcw_offset bit (18) unaligned, /* 1 + offset of last data word */ 6 17 3 character_position 6 18 uns fixed bin (3) unaligned, 6 19 3 write bit (1) unaligned, 6 20 3 action_code bit (2) unaligned, 6 21 3 tally_residue uns fixed bin (12) unaligned, 6 22 /* residue of last DCW tally */ 6 23 2 word5, 6 24 3 data_count uns fixed bin (26) unaligned, 6 25 /* total words transferred (on IIOC & IOX) */ 6 26 3 rfu bit (10) unaligned, 6 27 2 words (6:8) bit (36), 6 28 2 detailed_status (8) bit (36); /* detailed status (IIOC and IOX) */ 6 29 7 1 /* Begin include file io_status_word.incl.pl1 */ 7 2 /* Made from iom_stat.incl.pl1 by C. Hornig */ 7 3 7 4 dcl io_status_word_ptr ptr; 7 5 dcl 1 io_status_word based (io_status_word_ptr) aligned, /* I/O status information */ 7 6 ( 7 7 2 t bit (1), /* set to "1"b by IOM */ 7 8 2 power bit (1), /* non-zero if peripheral absent or power off */ 7 9 2 major bit (4), /* major status */ 7 10 2 sub bit (6), /* substatus */ 7 11 2 eo bit (1), /* even/odd bit */ 7 12 2 marker bit (1), /* non-zero if marker status */ 7 13 2 soft bit (2), /* software status */ 7 14 2 initiate bit (1), /* initiate bit */ 7 15 2 abort bit (1), /* software abort bit */ 7 16 2 channel_stat bit (3), /* IOM channel status */ 7 17 2 central_stat bit (3), /* IOM central status */ 7 18 2 mbz bit (6), 7 19 2 rcount bit (6) 7 20 ) unaligned; /* record count residue */ 7 21 7 22 /* End include file io_status_word.incl.pl1 */ 6 30 6 31 6 32 /* End include file io_status_entry.incl.pl1 */ 967 968 8 1 /* Begin include file ...... io_special_status.incl.pl1 */ 8 2 /* Written February 1981 by Chris Jones (from iom_stat.incl.pl1) */ 8 3 8 4 8 5 /****^ HISTORY COMMENTS: 8 6* 1) change(88-01-06,Farley), approve(88-03-01,MCR7831), 8 7* audit(88-03-01,Parisek), install(88-03-08,MR12.2-1032): 8 8* Corrected channel size to 6 bits, was incorrectly set to 8. 8 9* END HISTORY COMMENTS */ 8 10 8 11 8 12 dcl io_special_status_ptr ptr; /* pointer to status */ 8 13 8 14 dcl 1 io_special_status based (io_special_status_ptr) aligned, 8 15 /* special status from PSIA */ 8 16 ( 8 17 2 t bit (1), /* entry present bit */ 8 18 2 pad bit (2), 8 19 2 channel bit (6), /* channel number */ 8 20 2 pad1 bit (3), 8 21 2 device bit (6), /* device address */ 8 22 2 pad2 bit (1), 8 23 2 byte2 bit (8), /* device dependent information */ 8 24 2 pad3 bit (1), 8 25 2 byte3 bit (8) 8 26 ) unal; /* device dependent information */ 8 27 8 28 /* End of include file io_special_status.incl.pl1 */ 969 970 9 1 /* Begin include file ..... io_log_status_info.incl.pl1 */ 9 2 9 3 /* This include file defines a data base used to determine whether or not a 9 4* particular I/O error should be logged, and whether or not detailed device 9 5* status should be logged with it. */ 9 6 /* Prepared December 1979 by Larry Johnson */ 9 7 9 8 dcl io_log_status_info$io_log_status_info ext; 9 9 9 10 dcl io_log_infop ptr; 9 11 9 12 dcl 1 io_log_info aligned based (io_log_infop), 9 13 2 ndev fixed bin, /* Number of devices in table */ 9 14 2 log_entry (0 refer (io_log_info.ndev)) like log; 9 15 9 16 dcl logp ptr; 9 17 9 18 dcl 1 log aligned based (logp), 9 19 2 dev_name char (3) unal, /* Tap, dsk, prt, etc. */ 9 20 2 status (0:15, 0:63) bit (1) unal, /* For loggin status */ 9 21 2 detail (0:15, 0:63) bit (1) unal; /* For logging detaied status */ 9 22 9 23 /* End include file io_log_status_info.incl.pl1 */ 9 24 971 972 10 1 10 2 /* Begin include file ...... iom_pcw.incl.pl1 */ 10 3 10 4 dcl pcwp ptr; /* pointer to PCW */ 10 5 10 6 dcl 1 pcw based (pcwp) aligned, /* Peripheral Control Word */ 10 7 (2 command bit (6), /* device command */ 10 8 2 device bit (6), /* device code */ 10 9 2 ext bit (6), /* address extension */ 10 10 2 code bit (3), /* should be "111"b for PCW */ 10 11 2 mask bit (1), /* channel mask bit */ 10 12 2 control bit (2), /* terminate/proceed and marker control bits */ 10 13 2 chan_cmd bit (6), /* type of I/O operation */ 10 14 2 count bit (6), /* record count or control character */ 10 15 2 mbz1 bit (3), 10 16 2 channel bit (6), /* channel number */ 10 17 2 mbz2 bit (27)) unal; 10 18 10 19 dcl idcwp ptr; /* pointer to IDCW */ 10 20 10 21 dcl 1 idcw based (idcwp) aligned, /* Instruction DCW */ 10 22 (2 command bit (6), /* device command */ 10 23 2 device bit (6), /* device code */ 10 24 2 ext bit (6), /* address extension */ 10 25 2 code bit (3), /* should be "111"b for PCW */ 10 26 2 ext_ctl bit (1), /* "1"b if address extension to be used */ 10 27 2 control bit (2), /* terminate/proceed and marker control bits */ 10 28 2 chan_cmd bit (6), /* type of I/O operation */ 10 29 2 count bit (6)) unal; /* record count or control character */ 10 30 10 31 /* End include file ...... iom_pcw.incl.pl1 */ 10 32 973 11 1 11 2 /* Begin include file ...... iom_dcw.incl.pl1 */ 11 3 11 4 dcl dcwp ptr, /* pointer to DCW */ 11 5 tdcwp ptr; /* pointer to TDCW */ 11 6 11 7 dcl 1 dcw based (dcwp) aligned, /* Data Control Word */ 11 8 (2 address bit (18), /* address for data transfer */ 11 9 2 char_pos bit (3), /* character position */ 11 10 2 m64 bit (1), /* non-zero for mod 64 address */ 11 11 2 type bit (2), /* DCW type */ 11 12 2 tally bit (12)) unal; /* tally for data transfer */ 11 13 11 14 dcl 1 tdcw based (tdcwp) aligned, /* Transfer DCW */ 11 15 (2 address bit (18), /* address to transfer to */ 11 16 2 mbz1 bit (4), 11 17 2 type bit (2), /* should be "10"b for TDCW */ 11 18 2 mbz2 bit (9), 11 19 2 ec bit (1), /* non-zero to set LPW AE bit */ 11 20 2 res bit (1), /* non-zero to restrict further use of IDCW */ 11 21 2 rel bit (1)) unal; /* non-zero to set relative mode after transfer */ 11 22 11 23 /* End of include file ...... iom_dcw.incl.pl1 */ 11 24 974 975 12 1 /* Begin include file ..... io_syserr_msg.incl.pl1 */ 12 2 12 3 /* Created October 1975 by Larry Johnson */ 12 4 /* Modified 11/11/76 by Noel I. Morris */ 12 5 /* Modified November 1979 by Larry Johnson for detailed status */ 12 6 /* Modified February 1981 by Chris Jones to use channel names */ 12 7 12 8 /* This include file defines the format of the syserr message generated for I/O errors. */ 12 9 /* This message is also defined (size and type) by the "io_msg" and "io_msg_detail" 12 10* constants in syserr_binary_def.incl.pl1 */ 12 11 12 12 dcl io_msgp ptr; /* Pointer to syserr message structure */ 12 13 12 14 dcl 1 io_msg aligned based (io_msgp), 12 15 ( 12 16 2 level bit (3), /* Level of interrupt being logged */ 12 17 2 fill1 bit (9), 12 18 2 device bit (6), /* Device which caused error */ 12 19 2 time_out bit (1), /* Set if error caused by channel timeout */ 12 20 2 type bit (2), /* Type of last DCW */ 12 21 2 command bit (6), /* Command being executed by device */ 12 22 2 fill2 bit (3), 12 23 2 count bit (6) 12 24 ) unal, /* Count of message repetitions */ 12 25 2 channel char (8), /* Channel over which interrupt came */ 12 26 2 status bit (36), /* First word of IOM status */ 12 27 2 devname char (4), /* Device name */ 12 28 2 detailed_status bit (216) unaligned; /* Optional detailed device status */ 12 29 12 30 /* End include file ..... io_syserr_msg.incl.pl1 */ 976 977 13 1 /* BEGIN INCLUDE FILE .. syserr_binary_def.incl.pl1 */ 13 2 13 3 /* This include file has an ALM version, keep 'em in sync. */ 13 4 13 5 /* format: off */ 13 6 13 7 /* Modified January 1984 by Paul Farley to add an array of entry values 13 8* to be examined by display_cpu_error. */ 13 9 /* Modified October 1984 by EJ Sharpe to include SB_audit_message */ 13 10 /* Modified January 1985 by EJ Sharpe for SB_char_data_classes */ 13 11 /* Modified 1985-01-25, BIM: added ring alarm audit support. */ 13 12 /* Modified 1985-02-20, EJ Sharpe: added SB_ibm3270_mde, syserr_binary_(seg vol)damage_class, 13 13* also changed some codes to "SB_unused_NN" - see line comments */ 13 14 13 15 /* In the future, these will be the only constants needed in this include 13 16*file. They are the binary data class strings for messages in the new format 13 17*syserr logs. The names are all of the form SB_ZZZZZZZ_data_class where 13 18*ZZZZZZZ is the value of the data class string. Message expanders are named 13 19*expand_ZZZZZZZ_msg_ and are referenced by the log perusal tools. */ 13 20 13 21 dcl ( /* include file name */ 13 22 SB_io_status_data_class init ("io_status"), /* io_syserr_msg */ 13 23 SB_hwfault_data_class init ("hwfault"), /* syserr_fault_msg */ 13 24 SB_mos_data_class init ("mos"), /* scr */ 13 25 SB_segdamage_data_class init ("segdamage"), /* segdamage_msg */ 13 26 SB_voldamage_data_class init ("voldamage"), /* segdamage_msg (first two words) */ 13 27 SB_mdc_del_uidpath_data_class init ("mdc_del_uidpath"), /* none - 16 word UID path */ 13 28 SB_mmdam_data_class init ("mmdam"), /* syserr_mmdam_msg */ 13 29 SB_mpc_poll_data_class init ("mpc_poll"), /* poll_mpc_data */ 13 30 SB_fnp_poll_data_class init ("fnp_poll"), /* poll_fnp_data */ 13 31 SB_config_deck_data_class init ("config_deck"), /* config_deck */ 13 32 SB_vtoce_data_class init ("vtoce"), /* vtoce */ 13 33 SB_access_audit_data_class init ("access_audit"), /* access_audit_bin_header */ 13 34 SB_ibm3270_mde_data_class init ("ibm3270_mde") /* ibm3270_mpx_data */ 13 35 ) static internal char (16) varying options (constant); 13 36 13 37 13 38 /************************ 13 39*Once the syserr$binary is replaced with something that takes real data classes 13 40*and all system modules and tools are upgraded to use the new interface, the 13 41*rest of this include file may be discarded. 13 42*************************/ 13 43 13 44 /* The limit of 36 is arbitrary- there is no reason that it can not be 13 45* extended at any time. */ 13 46 13 47 dcl ( 13 48 SB_disk_err init (1), SBL_disk_err init (5), 13 49 SB_hw_fault init (2), SBL_hw_fault init (176), 13 50 SB_io_err init (3), SBL_io_err init (5), 13 51 SB_unused_4 init (4), SBL_unused_4 init (1), /* was "mos_poll" (mos poll time) */ 13 52 SB_mos_err init (5), SBL_mos_err init (2), /* mos memory error data */ 13 53 SB_unused_6 init (6), SBL_unused_6 init (1), /* was "bulk_status" (bulk dcb status) */ 13 54 SB_unused_7 init (7), SBL_unused_7 init (1), /* was "bulk_csb" (bulk csb status) */ 13 55 SB_unused_8 init (8), SBL_unused_8 init (3), /* was "free_st_1" */ 13 56 SB_unused_9 init (9), SBL_unused_9 init (2), /* was "free_st_2" */ 13 57 SB_unused_10 init (10), SBL_unused_10 init (21), /* was "unpr_add" */ 13 58 SB_zerpag init (11), SBL_zerpag init (20), 13 59 SB_unused_12 init (12), SBL_unused_12 init (20), /* was "unpr_add" */ 13 60 SB_vtoc_salv_dam init (13), SBL_vtoc_salv_dam init (20), 13 61 SB_unused_14 init (14), SBL_unused_14 init (20), /* was "page_rw_err" */ 13 62 SB_unused_15 init (15), SBL_unused_15 init (3), /* was "ruad" */ 13 63 SB_random_segdamage init (16), SBL_random_segdamage init (20), 13 64 SB_read_nc init (17), SBL_read_nc init (2), 13 65 SB_unused_18 init (18), SBL_unused_18 init (2), /* was "vtoc_err" */ 13 66 SB_mdc_del_uidpath init (19), SBL_mdc_del_uidpath init (16), 13 67 SB_ocdcm_err init (20), SBL_ocdcm_err init (5), 13 68 SB_mmdam init (21), SBL_mmdam init (2), 13 69 SB_verify_lock init (22), SBL_verify_lock init (176), 13 70 SB_io_err_detail init (23), SBL_io_err_detail init (11), 13 71 SB_mpc_poll init (24), SBL_mpc_poll init (256) /* max */, 13 72 SB_fnp_poll init (25), SBL_fnp_poll init (256) /* max */, 13 73 SB_config_deck init (26), SBL_config_deck init (256) /* 16 cards at 16 words */, 13 74 SB_vtoce init (27), SBL_vtoce init (192), /* 1 VTOCE */ 13 75 SB_access_audit init (28), SBL_access_audit init (256), /* max */ 13 76 SB_ibm3270_mde init (35), SBL_ibm3270_mde init (256), /* max */ 13 77 SB_end_of_table init (36), SBL_end_of_table init (1) 13 78 ) internal static options (constant) fixed bin; 13 79 13 80 13 81 /* The following array is a mapping of the old syserr$binary codes into the 13 82*new data classes for MR11. It is primarily used by syserr_copy to translate 13 83*the binary data codes stored in the wired syserr log (see above) into the data 13 84*classes needed by the ring-0 paged syserr log which is a new format log. It 13 85*is also used by syserr_log_util_ to translate the data classes back into the 13 86*corresponding binary code (for tools not yet upgraded to deal with the new 13 87*format log messages). */ 13 88 13 89 dcl SB_char_data_classes (36) char (16) varying internal static options (constant) 13 90 init ( "io_status", /* 1 */ 13 91 "hwfault", /* 2 */ 13 92 "io_status", /* 3 */ 13 93 "unused_4", /* 4 */ 13 94 "mos", /* 5 */ 13 95 13 96 "unused_6", /* 6 */ 13 97 "unused_7", /* 7 */ 13 98 "unused_8", /* 8 */ 13 99 "unused_9", /* 9 */ 13 100 "unused_10", /* 10 */ 13 101 13 102 "segdamage", /* 11 */ 13 103 "unused_12", /* 12 */ 13 104 "segdamage", /* 13 */ 13 105 "unused_14", /* 14 */ 13 106 "unused_15", /* 15 */ 13 107 13 108 "segdamage", /* 16 */ 13 109 "voldamage", /* 17 */ 13 110 "unused_18", /* 18 */ 13 111 "mdc_del_uidpath", /* 19 */ 13 112 "io_status", /* 20 */ 13 113 13 114 "mmdam", /* 21 */ 13 115 "hwfault", /* 22 */ 13 116 "io_status", /* 23 */ 13 117 "mpc_poll", /* 24 */ 13 118 "fnp_poll", /* 25 */ 13 119 13 120 "config_deck", /* 26 */ 13 121 "vtoce", /* 27 */ 13 122 "access_audit", /* 28 */ 13 123 "unused_29", /* 29 */ 13 124 "unused_30", /* 30 */ 13 125 "unused_31", /* 31 */ 13 126 "unused_32", /* 32 */ 13 127 "unused_33", /* 33 */ 13 128 "unused_34", /* 34 */ 13 129 "ibm3270_mde", /* 35 */ 13 130 "unused_36" /* 36 */ 13 131 ); 13 132 13 133 13 134 /* format: on */ 13 135 13 136 /* These constants are used by various tools which analyze syserr messages and 13 137*still call the old interface "syserr_log_util_". */ 13 138 13 139 dcl syserr_binary_mos_mask init ("060000000000"b3) bit (36) static options (constant); 13 140 dcl syserr_binary_seg_damage_mask init ("000374000000"b3) bit (36) static options (constant); 13 141 dcl syserr_binary_vol_damage_mask init ("003413000000"b3) bit (36) static options (constant); 13 142 dcl syserr_binary_address_damage_mask init ("002010000000"b3) bit (36) static options (constant); 13 143 13 144 dcl display_cpu_error_binary_defs (2) init ( 13 145 2, /** SB_hw_fault */ 13 146 22 /** SB_verify_lock */ 13 147 ) internal static options (constant) fixed bin; 13 148 13 149 /* END INCLUDE FILE syserr_binary_def.incl.pl1 */ 978 979 14 1 /* 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 */ 980 981 982 /* BEGIN MESSAGE DOCUMENTATION 983* 984* 985* Message: 986* ioi_masked$interrupt: I/O error. 987* 988* S: $log 989* 990* T: $run 991* 992* M: An error, or accumulation of like errors, has occured. All 993* needed information is contained in the binary portion of the entry. 994* 995* A: $ignore 996* 997* Message: 998* ioi_masked$interrupt: Interrupt for inactive device (device DEVID). 999* Type go to continue. 1000* 1001* S: $crash 1002* 1003* T: $run 1004* 1005* M: An interrupt has been received over a channel for which the 1006* device is not marked "active". This could indicate an error in the I/O 1007* hardware or in the setting/checking of the device active flag. 1008* 1009* A: Typing "go" at BCE will cause Multics to be reentered and 1010* ioi_masked to dismiss this error and properly cleanup. 1011* 1012* Message: 1013* ioi_masked$interrupt: Special. 1014* 1015* S: $log 1016* 1017* T: $run 1018* 1019* M: A special interrupt, or accumulation of special interrupts, has 1020* occured. All needed information is contained in the binary portion of the 1021* entry. 1022* 1023* A: $ignore 1024* 1025* Message: 1026* ioi_masked$interrupt: absadr failed. 1027* 1028* S: $crash 1029* 1030* T: $run 1031* 1032* M: A call to the absadr function returned a non-zero error code, 1033* indicating that the absolute address of the workspace could not be obtained. 1034* Since the workspace is wired, this error should never have occurred. 1035* 1036* A: $inform 1037* $recover 1038* 1039* Message: 1040* ioi_masked$timer: Attempt to unwire NULL workspace. (device DEVID). 1041* 1042* S: $info 1043* 1044* T: $run 1045* 1046* M: Device entry flag and time stamp indicated that its workspace 1047* required unwiring. However the pointer to the ASTE for the workspace was 1048* null. 1049* $err 1050* 1051* A: $inform 1052* $recover 1053* 1054* Message: 1055* ioi_masked: Channel CHANID not responding, will remain masked. 1056* 1057* S: $info 1058* 1059* T: $run 1060* 1061* M: The time limit has expired waiting for status from a previous 1062* unmask connect (reset-status idcw). It is apparent that the channel is 1063* inoperative. No further attempt will be made to re-open the channel. 1064* 1065* A: Contact your Customer Service Account Representative if the 1066* errors persist. 1067* 1068* Message: 1069* ioi_masked$timer: Timeout on channel CHANID (device DEVID). 1070* 1071* S: $info 1072* 1073* T: $run 1074* 1075* M: The time limit has expired waiting for status from CHANID for a 1076* previous connect. The channel will be masked "OFF", then unmasked if 1077* multiple devices exist (i.e. tapes and disks) so that special interrupts 1078* can be received. 1079* 1080* A: Contact your Customer Service Account Representative if the 1081* errors persist. 1082* 1083* Message: 1084* ioi_masked$timer: Timeout on channel CHANID (no device). 1085* 1086* S: $info 1087* 1088* T: $run 1089* 1090* M: The time limit has expired waiting for status from CHANID for 1091* the connect to unmask the channel. The channel will be masked "OFF", then 1092* then unmask will be tried again. 1093* 1094* A: Contact your Customer Service Account Representative if the 1095* errors persist. 1096* 1097* Message: 1098* ioi_masked: Lock for subsystem SUBSYSTEM not locked to process OOOOOO. 1099* 1100* S: $crash 1101* 1102* T: $run 1103* 1104* M: An unlock of the subsystem lock was attempted, but is was not 1105* locked by this process. 1106* $err 1107* 1108* A: $inform 1109* $recover 1110* 1111* Message: 1112* ioi_masked: Mylock error on subsystem SUBSYSTEM. 1113* 1114* S: $crash 1115* 1116* T: $run 1117* 1118* M: An lock of the subsystem lock was attempted, but is was already 1119* locked by this process. 1120* $err 1121* 1122* A: $inform 1123* $recover 1124* 1125* Message: 1126* ioi_masked: No Ext. Stat. with MAJOR/SUB status on chnl CHANID (DEVID). 1127* 1128* S: $log 1129* 1130* T: $run 1131* 1132* M: An error status has occured that requires detailed status. This 1133* CHANID should have supplied this with the status, but did not. This 1134* CHANID is also not capable of requesting the detailed status. An octal 1135* dump of the status_entry area will be displayed along with the error 1136* message. 1137* 1138* A: $ignore 1139* 1140* END MESSAGE DOCUMENTATION */ 1141 1142 end ioi_masked; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0800.0 ioi_masked.pl1 >spec>install>1110>ioi_masked.pl1 959 1 09/02/86 1552.9 ioi_data.incl.pl1 >ldd>include>ioi_data.incl.pl1 1-61 2 01/06/85 1422.1 hc_lock.incl.pl1 >ldd>include>hc_lock.incl.pl1 961 3 07/11/84 0937.3 io_manager_dcls.incl.pl1 >ldd>include>io_manager_dcls.incl.pl1 963 4 12/01/82 1039.8 interrupt_levels.incl.pl1 >ldd>include>interrupt_levels.incl.pl1 965 5 08/17/79 2215.0 ioi_stat.incl.pl1 >ldd>include>ioi_stat.incl.pl1 967 6 10/26/83 1107.8 io_status_entry.incl.pl1 >ldd>include>io_status_entry.incl.pl1 6-30 7 03/27/82 0430.3 io_status_word.incl.pl1 >ldd>include>io_status_word.incl.pl1 969 8 03/10/88 2009.5 io_special_status.incl.pl1 >ldd>include>io_special_status.incl.pl1 971 9 02/11/80 0911.3 io_log_status_info.incl.pl1 >ldd>include>io_log_status_info.incl.pl1 973 10 05/06/74 1742.1 iom_pcw.incl.pl1 >ldd>include>iom_pcw.incl.pl1 974 11 11/12/74 1550.1 iom_dcw.incl.pl1 >ldd>include>iom_dcw.incl.pl1 976 12 01/18/85 0953.2 io_syserr_msg.incl.pl1 >ldd>include>io_syserr_msg.incl.pl1 978 13 03/15/85 0953.1 syserr_binary_def.incl.pl1 >ldd>include>syserr_binary_def.incl.pl1 980 14 05/17/85 0615.7 syserr_constants.incl.pl1 >ldd>include>syserr_constants.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 000002 constant fixed bin(17,0) initial dcl 14-7 set ref 217* 221* 249* 545* CRASH 000050 constant fixed bin(17,0) initial dcl 14-7 set ref 336* 822* 942* 954* FIFTEEN_SECONDS 000014 constant fixed bin(71,0) initial dcl 101 ref 573 IO_CHANNEL_LOCK_TEMPLATE constant char(2) initial packed unaligned dcl 1-205 ref 492 IO_MARKER_INTERRUPT_LEVEL constant fixed bin(17,0) initial dcl 4-10 ref 624 IO_SPECIAL_INTERRUPT_LEVEL constant fixed bin(17,0) initial dcl 4-12 ref 285 719 843 900 IO_STATUS_ERROR_MASK 000000 constant bit(36) initial packed unaligned dcl 1-203 ref 613 IO_SYSTEM_FAULT_INTERRUPT_LEVEL constant fixed bin(17,0) initial dcl 4-6 ref 347 721 IO_TERMINATE_INTERRUPT_LEVEL constant fixed bin(17,0) initial dcl 4-8 ref 356 597 635 JUST_LOG 000040 constant fixed bin(17,0) initial dcl 14-7 set ref 900* LOG 000041 constant fixed bin(17,0) initial dcl 14-7 set ref 772* MAX_LOG_STATUS_COUNT constant fixed bin(17,0) initial dcl 102 ref 853 ME 000004 constant char(32) initial packed unaligned dcl 103 set ref 217* 221* 249* 336* 545* 772* 822* 900* 942* 954* ONE_MINUTE 000002 constant fixed bin(71,0) initial dcl 104 ref 239 560 SBL_io_err constant fixed bin(17,0) initial dcl 13-47 ref 897 SBL_io_err_detail constant fixed bin(17,0) initial dcl 13-47 ref 893 SB_io_err constant fixed bin(17,0) initial dcl 13-47 ref 896 SB_io_err_detail constant fixed bin(17,0) initial dcl 13-47 ref 892 absaddr 000336 automatic fixed bin(26,0) dcl 818 in procedure "absaddr_18" set ref 821* 824 absaddr 3 000100 automatic fixed bin(24,0) level 2 in structure "auto_istat" dcl 70 in procedure "ioi_masked" set ref 645* absadr 000016 constant entry external dcl 90 ref 821 action_code 0(22) based bit(2) level 2 packed packed unaligned dcl 706 ref 745 844 active 43 based bit(1) level 2 dcl 1-128 set ref 127 139* 190 192* 245 335 508 572* addr builtin function dcl 106 ref 119 165 181 206 210 234 244 279 286 287 298 324 324 422 424 460 471 526 526 558 587 602 647 671 672 729 730 745 746 750 763 772 784 785 791 791 802 844 845 880 945 addrel builtin function dcl 106 ref 745 844 address based bit(18) level 2 packed packed unaligned dcl 11-7 set ref 791* auto_io_msg 000356 automatic structure level 1 dcl 873 set ref 880 auto_istat 000100 automatic structure level 1 dcl 70 set ref 612* 620* 633* 675 base_ctep 14 based bit(18) level 2 packed packed unaligned dcl 1-96 ref 916 916 bce_ioi_post 000020 constant entry external dcl 91 ref 690 bin builtin function dcl 106 ref 221 221 221 249 249 249 336 336 336 586 639 731 732 772 772 772 824 900 bit builtin function dcl 106 ref 290 586 651 652 824 881 886 bound 17 based fixed bin(19,0) level 2 in structure "dte" dcl 1-128 in procedure "ioi_masked" ref 448 bound 1 000116 automatic fixed bin(19,0) level 2 in structure "ima" dcl 77 in procedure "ioi_masked" set ref 448* broadcast 000110 automatic bit(1) dcl 71 set ref 293* 307 byte2 0(19) based bit(8) level 2 packed packed unaligned dcl 8-14 ref 293 chanid 2 based char(8) level 2 dcl 1-96 set ref 143 217* 221* 545* 772* 887 channel 0(18) 000346 automatic bit(18) level 2 in structure "test_status" packed packed unaligned dcl 835 in procedure "log_this_status" set ref 840* channel 1 based char(8) level 2 in structure "io_msg" dcl 12-14 in procedure "ioi_masked" set ref 887* channel 40(18) based bit(18) level 3 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" set ref 747* 887 channel_required 2 based char(8) level 2 dcl 1-128 ref 143 143 chx 000116 automatic fixed bin(35,0) level 2 in structure "ima" dcl 77 in procedure "ioi_masked" set ref 447* 549* 799* chx 5 based fixed bin(35,0) level 2 in structure "cte" dcl 1-96 in procedure "ioi_masked" set ref 324* 447 526* 529* 549 799 clock builtin function dcl 106 ref 213 239 245 372 468 573 755 804 902 code 000337 automatic fixed bin(35,0) dcl 819 in procedure "absaddr_18" set ref 821* 822 code 0(18) based bit(3) level 2 in structure "idcw" packed packed unaligned dcl 10-21 in procedure "ioi_masked" set ref 788* command 40(06) based bit(6) level 3 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" set ref 746* 885 command 13(18) based bit(6) level 3 in structure "cte" packed packed unaligned dcl 1-96 in procedure "ioi_masked" set ref 587* 602 command based bit(6) level 2 in structure "idcw" packed packed unaligned dcl 10-21 in procedure "ioi_masked" set ref 587 602* 746 786* 845 command 0(21) based bit(6) level 2 in structure "io_msg" packed packed unaligned dcl 12-14 in procedure "ioi_masked" set ref 885* command 0(06) 000346 automatic bit(6) level 2 in structure "test_status" packed packed unaligned dcl 835 in procedure "log_this_status" set ref 845* completion based structure level 2 in structure "istat" dcl 5-7 in procedure "ioi_masked" completion 000100 automatic structure level 2 in structure "auto_istat" dcl 70 in procedure "ioi_masked" set ref 649 completion based structure level 2 in structure "imess" packed packed unaligned dcl 5-21 in procedure "ioi_masked" set ref 649* connected 1(18) based bit(1) level 3 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" set ref 186 467* 508 572* connected 1(01) based bit(1) level 3 in structure "cte" packed packed unaligned dcl 1-96 in procedure "ioi_masked" set ref 143 213 327* 395 467* 495 543* 562* 572* count 000111 automatic fixed bin(17,0) dcl 72 in procedure "ioi_masked" set ref 427* 431* 431 437 count 0(12) 000346 automatic fixed bin(6,0) level 2 in structure "test_status" packed packed unsigned unaligned dcl 835 in procedure "log_this_status" set ref 847* count 0(30) based bit(6) level 2 in structure "idcw" packed packed unaligned dcl 10-21 in procedure "ioi_masked" set ref 789* count 40(12) based fixed bin(6,0) level 3 in structure "dte" packed packed unsigned unaligned dcl 1-128 in procedure "ioi_masked" set ref 847 852* 852 853 859* 886 count 0(30) based bit(6) level 2 in structure "io_msg" packed packed unaligned dcl 12-14 in procedure "ioi_masked" set ref 886* ct based structure array level 2 dcl 1-40 set ref 210 cte based structure level 1 dcl 1-96 ctep 000166 automatic pointer dcl 1-31 in procedure "ioi_masked" set ref 129* 141* 141* 143 143 143 143 143 143* 152 164* 166 187* 210* 211 213 213 213 213 213 215 217 220 220 221 280* 281 299* 322 324 325 325 326 327 334 372 390* 391 391 395 395 447 452 455 465 466 467 468 486 487 491 492 495 495 526 529 543 544 545 549 560 560 561 562 571 572 583 584 585 586 587 598 599 600 601 602 624 637 747 772 799 804 840 ctep 2(18) based bit(18) level 2 in structure "gte" packed packed unaligned dcl 1-74 in procedure "ioi_masked" ref 141 915 ctp parameter pointer dcl 910 ref 907 916 ctx 000113 automatic fixed bin(17,0) dcl 74 set ref 209* 210* cur_ctep 1 based bit(18) level 2 packed packed unaligned dcl 1-128 set ref 129 187 466* 571* cur_dtep 1(18) based bit(18) level 2 packed packed unaligned dcl 1-96 set ref 215 220 325 334 465* 571* dcw based structure level 1 dcl 11-7 dcw_pair_ptr 10 000116 automatic pointer level 2 dcl 77 set ref 460* dcwp 000206 automatic pointer dcl 11-4 set ref 785* 791 792 deleted 15(01) based bit(1) level 3 in structure "cte" packed packed unaligned dcl 1-96 in procedure "ioi_masked" ref 143 deleted 22(09) based bit(1) level 3 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" ref 431 deleting 15 based bit(1) level 3 packed packed unaligned dcl 1-96 ref 143 491 detail 35(07) based bit(1) array level 2 packed packed unaligned dcl 9-18 ref 735 detailed_status 10 000135 automatic bit(36) array level 2 in structure "status_entry" dcl 81 in procedure "ioi_masked" set ref 750 751 763 764 detailed_status 50 based bit(36) array level 2 in structure "dte" dcl 1-128 in procedure "ioi_masked" set ref 717* 751* 754 764* 791 791 795* 849 861 detailed_status 5 based bit(216) level 2 in structure "io_msg" packed packed unaligned dcl 12-14 in procedure "ioi_masked" set ref 891* 891 detailed_status_cmd 3 based bit(6) level 2 packed packed unaligned dcl 1-74 ref 771 786 detailed_status_in_status_entry based bit(36) dcl 703 ref 750 763 detailed_status_valid 45 based bit(1) level 2 dcl 1-128 set ref 711* 752* 765* 794* device 0(12) based bit(6) level 2 in structure "io_special_status" packed packed unaligned dcl 8-14 in procedure "ioi_masked" ref 293 307 device 0(12) based bit(6) level 2 in structure "io_msg" packed packed unaligned dcl 12-14 in procedure "ioi_masked" set ref 882* device 0(06) based bit(6) level 2 in structure "idcw" packed packed unaligned dcl 10-21 in procedure "ioi_masked" set ref 787* device 22 based bit(6) level 2 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" ref 221 221 221 249 249 249 307 336 336 336 431 772 772 772 787 882 devname 4 based char(4) level 2 dcl 12-14 set ref 889* direct 1(04) based bit(1) level 3 in structure "cte" packed packed unaligned dcl 1-96 in procedure "ioi_masked" ref 213 322 455 624 637 direct 22(12) based bit(1) level 3 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" ref 127 235 350 531 done 000217 automatic bit(1) dcl 302 in begin block on line 300 set ref 305* 306 313* done 000112 automatic bit(1) dcl 73 in procedure "ioi_masked" set ref 426* 430 433* done 000234 automatic bit(1) dcl 502 in begin block on line 500 set ref 505* 507 511* 513* dt 20 based structure array level 2 dcl 1-40 set ref 234 dte based structure level 1 dcl 1-128 dtep 000170 automatic pointer dcl 1-32 in procedure "ioi_masked" set ref 118* 120 127 127 129 139 141 143 143 170* 182* 183 183 186 187 187 190 192 216* 220* 221 221 221 228 234* 235 235 235 237 237 239 244 245 245 245 246 246* 249 249 249 252 259 262 263 264 306* 307 307 309 310 313* 314* 328* 334* 335 336 336 336 344 350 363 372 372 407* 408 408 430* 431 431 433* 434 434* 448 449 450 451 460 465 466 467 468 468 471 506 507* 508 508 508 513* 514 514* 515* 527 531 531 531* 542 571 572 572 573 587 602 641 641 666 668 672 675 675 676 676 677 677 678 678 678 688 688 690 710 711 713 717 740 741 742 743 744 745 746 746 747 748 748 751 752 754 754 755 764 765 772 772 772 783 783 784 785 787 791 791 794 795 802 804 804 806 845 847 849 849 849 849 852 852 853 858 859 860 861 861 877 881 882 883 884 885 886 887 887 888 889 889 890 891 902 903 dtep 2 based bit(18) level 2 in structure "gte" packed packed unaligned dcl 1-74 in procedure "ioi_masked" set ref 306 313 430 433 498* 498 507 513 dtx 000114 automatic fixed bin(17,0) dcl 75 set ref 233* 234* er 0(01) 000100 automatic bit(1) level 3 packed packed unaligned dcl 70 set ref 613* 621* 634* 724 ev_chn 4 based fixed bin(71,0) level 2 dcl 1-128 set ref 688* 690* event 36 based bit(36) level 3 dcl 1-128 set ref 264* flags 3(06) based structure level 2 in structure "gte" packed packed unaligned dcl 1-74 in procedure "ioi_masked" flags 37 based structure level 3 in structure "dte" dcl 1-128 in procedure "ioi_masked" flags 10 based structure level 2 in structure "ioi_data" dcl 1-40 in procedure "ioi_masked" flags1 1 based structure level 2 in structure "cte" packed packed unaligned dcl 1-96 in procedure "ioi_masked" flags1 1(18) based structure level 2 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" flags2 22(06) based structure level 2 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" flags2 15 based structure level 2 in structure "cte" packed packed unaligned dcl 1-96 in procedure "ioi_masked" gt based structure array level 2 dcl 1-40 set ref 298 423 423 424 gte based structure level 1 dcl 1-74 gtep 000164 automatic pointer dcl 1-30 in procedure "ioi_masked" set ref 120* 125 125 131 131 141 147 147 166* 183* 191 191 211* 221 221 237* 249 249 281* 293 298* 299* 306 313 336 336 391* 408* 424* 425 430 430 433 454 495 498 498 498 499 507 507 509 509 513 530 723 730 771 772 772 786 942 942 945 954 954 gtep 0(18) based bit(18) level 2 in structure "cte" packed packed unaligned dcl 1-96 in procedure "ioi_masked" ref 166 211 281 391 gtep 0(18) based bit(18) level 2 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" ref 120 183 237 408 889 gtp parameter pointer dcl 911 ref 907 915 915 gtx 000115 automatic fixed bin(17,0) dcl 76 set ref 297* 298* 423* 424* hbound builtin function dcl 106 ref 423 idcw 32 based bit(36) level 2 in structure "dte" dcl 1-128 in procedure "ioi_masked" set ref 460 587 602 746 783* 784 802 845 idcw based structure level 1 dcl 10-21 in procedure "ioi_masked" idcw_listx 23(18) based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 1-128 ref 641 idcwp 000204 automatic pointer dcl 10-19 set ref 784* 786 787 788 789 idp 000162 automatic pointer dcl 1-29 set ref 119* 120 129 141 152 165* 166 181* 206* 207 209 210 211 233 234 279* 280 281 297 298 306 314 334 352 352 422* 423 423 424 558 ima 000116 automatic structure level 1 dcl 77 set ref 455* 457* 461* 462* 559* 803* imess based structure level 1 dcl 5-21 set ref 288* 648* imp 000172 automatic pointer dcl 5-19 set ref 287* 288 289 290 291 647* 648 649 650 651 652 653 653 in_use 22(07) based bit(1) level 3 packed packed unaligned dcl 1-128 ref 235 io_log_info based structure level 1 dcl 9-12 io_log_info_index 6 based fixed bin(17,0) level 2 dcl 1-74 ref 723 730 io_log_infop 000176 automatic pointer dcl 9-10 set ref 729* 730 io_log_status_info$io_log_status_info 000060 external static fixed bin(17,0) dcl 9-8 set ref 729 io_manager$connect 000044 constant entry external dcl 3-26 ref 457 io_manager$connect_abs 000046 constant entry external dcl 3-29 ref 462 559 803 io_manager$connect_direct 000050 constant entry external dcl 3-32 ref 455 io_manager$get_status 000052 constant entry external dcl 3-35 ref 324 526 io_manager$mask 000054 constant entry external dcl 3-38 ref 529 io_manager$workspace_tdcw 000056 constant entry external dcl 3-47 ref 461 io_manager_arg based structure level 1 dcl 3-50 io_msg based structure level 1 dcl 12-14 io_msgp 000210 automatic pointer dcl 12-12 set ref 880* 881 882 883 884 885 886 887 888 889 891 891 900* 900 io_special_status based structure level 1 dcl 8-14 io_special_status_ptr 000174 automatic pointer dcl 8-12 set ref 286* 293 293 293 307 io_status_entry based structure level 1 dcl 6-7 io_status_word based structure level 1 dcl 7-5 ioi_abs_seg$ 000010 external static fixed bin(17,0) dcl 85 set ref 671 ioi_abs_seg_ptr 000304 automatic pointer dcl 663 set ref 671* 673* 675 676 ioi_data based structure level 1 dcl 1-40 ioi_data$ 000042 external static fixed bin(17,0) dcl 1-37 set ref 119 165 181 206 279 422 ioi_use 1 based bit(1) level 3 packed packed unaligned dcl 1-96 ref 143 213 495 ioi_wire$unwire 000022 constant entry external dcl 92 ref 246 531 iom_stat 4 000100 automatic bit(72) level 2 dcl 70 set ref 614* 622* 653 745 748 841 844 isp automatic pointer dcl 5-5 ref 675 676 istat based structure level 1 dcl 5-7 set ref 675* 675 676 ite based structure level 1 dcl 1-63 last_log_time 46 based fixed bin(71,0) level 2 dcl 1-128 set ref 239 755* 902* lbound builtin function dcl 106 ref 423 length builtin function dcl 106 ref 653 748 841 891 level 40 based fixed bin(3,0) level 3 in structure "dte" packed packed unsigned unaligned dcl 1-128 in procedure "ioi_masked" set ref 743* 881 level 000346 automatic fixed bin(3,0) level 2 in structure "test_status" packed packed unsigned unaligned dcl 835 in procedure "log_this_status" set ref 838* level 1 000100 automatic fixed bin(3,0) level 2 in structure "auto_istat" dcl 70 in procedure "ioi_masked" set ref 627* 635* 651 743 838 843 level 000130 automatic fixed bin(3,0) dcl 78 in procedure "ioi_masked" set ref 282* 285 290 347 356* 597* 624 627 719 721 level 0(15) based bit(3) level 2 in structure "imess" packed packed unaligned dcl 5-21 in procedure "ioi_masked" set ref 290* 651* level based bit(3) level 2 in structure "io_msg" packed packed unaligned dcl 12-14 in procedure "ioi_masked" set ref 881* 900 listp 6 000116 automatic pointer level 2 dcl 77 set ref 460* 558* 802* listx 3 000116 automatic fixed bin(18,0) level 2 in structure "ima" dcl 77 in procedure "ioi_masked" set ref 450* listx 23 based fixed bin(18,0) level 2 in structure "dte" packed packed unsigned unaligned dcl 1-128 in procedure "ioi_masked" ref 450 lock 35 based structure level 2 in structure "dte" dcl 1-128 in procedure "ioi_masked" lock based bit(36) level 2 in structure "gte" dcl 1-74 in procedure "ioi_masked" set ref 942 945 954 lock based structure level 1 dcl 2-12 in procedure "ioi_masked" log based structure level 1 dcl 9-18 log_detail 000324 automatic bit(1) dcl 699 set ref 726* 735* 738* 750 763 770 log_detailed_status 60 based bit(36) array level 2 dcl 1-128 set ref 754* 849 861* 890 891 log_entry 1 based structure array level 2 dcl 9-12 set ref 730 log_status 40 based structure level 2 in structure "dte" dcl 1-128 in procedure "ioi_masked" set ref 741* 849 858* log_status 60 based structure array level 3 in structure "ioi_data" dcl 1-40 in procedure "ioi_masked" log_status_cnt 1(19) based bit(1) level 3 packed packed unaligned dcl 1-128 set ref 742* 849 860* 877 903* logp 000200 automatic pointer dcl 9-16 set ref 730* 733 735 lpw 6 000100 automatic bit(72) level 2 dcl 70 set ref 643* major 000325 automatic fixed bin(4,0) dcl 700 in procedure "log_status_if_appropriate" set ref 731* 733 735 772* major 0(02) 000135 automatic bit(4) level 3 in structure "status_entry" packed packed unaligned dcl 81 in procedure "ioi_masked" set ref 731 marker 0(13) 000135 automatic bit(1) level 3 packed packed unaligned dcl 81 set ref 356 mask 0(21) based bit(1) level 2 packed packed unaligned dcl 10-6 ref 472 message 000132 automatic fixed bin(71,0) dcl 79 set ref 287 647 688* 690* mplex 3(10) based bit(1) level 3 packed packed unaligned dcl 1-74 set ref 221* 249* 293 336* 530 772* msg_length 000371 automatic fixed bin(17,0) dcl 874 set ref 893* 897* 900* msg_type 000372 automatic fixed bin(17,0) dcl 875 set ref 892* 896* 900* name 1 based char(4) level 2 dcl 1-74 set ref 221* 249* 336* 425 772* 889 942* 954* nct 1 based fixed bin(17,0) level 2 dcl 1-40 ref 209 ndt 2 based fixed bin(17,0) level 2 dcl 1-40 ref 210 233 298 423 423 424 next_ctep based bit(18) level 2 packed packed unaligned dcl 1-96 ref 152 918 next_dtep based bit(18) level 2 packed packed unaligned dcl 1-128 ref 313 314 433 434 498 513 514 next_lpw_offset 13 based bit(18) level 3 in structure "cte" packed packed unaligned dcl 1-96 in procedure "ioi_masked" set ref 586* 601 next_lpw_offset 1 000135 automatic bit(18) level 3 in structure "status_entry" packed packed unaligned dcl 81 in procedure "ioi_masked" set ref 601* 639 ngt based fixed bin(17,0) level 2 dcl 1-40 ref 210 297 423 notify_sw 37 based bit(1) level 4 packed packed unaligned dcl 1-128 set ref 262 263* null builtin function dcl 106 ref 170 216 228 246 328 527 531 542 557 641 666 801 offset 0(18) based bit(18) level 2 in structure "imess" packed packed unaligned dcl 5-21 in procedure "ioi_masked" set ref 652* offset 2 000100 automatic fixed bin(18,0) level 2 in structure "auto_istat" dcl 70 in procedure "ioi_masked" set ref 586 639* 641* 652 p parameter pointer dcl 816 set ref 813 821* p_ctep parameter pointer dcl 63 ref 161 164 387 390 p_cterp parameter fixed bin(35,0) dcl 65 ref 276 280 p_dtep parameter pointer dcl 64 ref 115 118 178 182 404 407 p_level parameter fixed bin(3,0) dcl 66 ref 276 282 p_status parameter bit(36) dcl 67 ref 276 283 p_subsystem_name parameter char packed unaligned dcl 68 ref 419 425 pcw 30 based bit(36) level 2 in structure "dte" dcl 1-128 in procedure "ioi_masked" set ref 451 471 pcw based structure level 1 dcl 10-6 in procedure "ioi_masked" pcw 2 000116 automatic bit(36) level 2 in structure "ima" dcl 77 in procedure "ioi_masked" set ref 451* 556* 800* pcwp 000202 automatic pointer dcl 10-4 set ref 471* 472 pds$process_id 000012 external static bit(36) dcl 86 set ref 244 259 942 945 954 954* pending_connects 5 based fixed bin(17,0) level 2 dcl 1-74 set ref 125* 125 131* 131 147* 147 191* 191 499 509* 509 pid 35 based bit(36) level 3 dcl 1-128 set ref 244 259 pmut$swap_sdw 000024 constant entry external dcl 93 ref 673 pmut$unwire_unmask 000026 constant entry external dcl 94 ref 935 pmut$wire_and_mask 000030 constant entry external dcl 95 ref 928 priv 22(06) based bit(1) level 3 packed packed unaligned dcl 1-128 ref 740 process_id 20 based bit(36) level 2 dcl 1-128 set ref 235 307 688* psia 3(06) based bit(1) level 3 packed packed unaligned dcl 1-74 ref 454 ptp 14 based pointer level 2 in structure "dte" dcl 1-128 in procedure "ioi_masked" ref 449 ptp 4 000116 automatic pointer level 2 in structure "ima" dcl 77 in procedure "ioi_masked" set ref 449* 557* 801* ptr builtin function dcl 106 ref 120 129 141 152 166 183 187 211 220 237 280 281 306 314 334 391 408 430 434 498 507 514 675 676 887 889 915 918 pxss$io_wakeup 000032 constant entry external dcl 96 ref 688 pxss$notify 000034 constant entry external dcl 97 ref 264 492 quiescing 1(03) based bit(1) level 3 packed packed unaligned dcl 1-96 set ref 143 395* 486 487* reading_detailed_status 1(20) based bit(1) level 3 packed packed unaligned dcl 1-128 set ref 344 363 710 713* 806* rel builtin function dcl 106 ref 141 465 466 492 747 840 915 rss_idcw 11 based bit(36) level 2 dcl 1-40 set ref 558 run 0(02) 000100 automatic bit(1) level 3 packed packed unaligned dcl 70 set ref 368 624* saved_dtep 000236 automatic pointer dcl 503 set ref 506* 515 saved_status 10 based structure level 2 packed packed unaligned dcl 1-96 second_status_word based structure level 1 dcl 706 setup 10 based bit(1) level 3 packed packed unaligned dcl 1-40 ref 207 size builtin function dcl 106 ref 675 676 special_interrupt 44 based bit(1) level 2 dcl 1-128 set ref 310* special_status 34 based bit(36) level 2 dcl 1-128 set ref 309* spurious_interrupts 4 based fixed bin(35,0) level 2 dcl 1-40 set ref 352* 352 st based bit(1) level 3 in structure "istat" packed packed unaligned dcl 5-7 in procedure "ioi_masked" set ref 676* st based bit(1) level 3 in structure "imess" packed packed unaligned dcl 5-21 in procedure "ioi_masked" set ref 289* 650* stac builtin function dcl 106 ref 244 945 stacq builtin function dcl 106 ref 259 954 status 1 based bit(36) level 2 in structure "imess" packed packed unaligned dcl 5-21 in procedure "ioi_masked" set ref 291* 653* 653 status 3 based bit(36) level 2 in structure "io_msg" dcl 12-14 in procedure "ioi_masked" set ref 888* status 1 000346 automatic bit(36) level 2 in structure "test_status" packed packed unaligned dcl 835 in procedure "log_this_status" set ref 841* 841 status 0(27) based bit(1) array level 2 in structure "log" packed packed unaligned dcl 9-18 in procedure "ioi_masked" ref 733 status 41 based bit(36) level 3 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" set ref 748* 748 888 status 000134 automatic bit(36) dcl 80 in procedure "ioi_masked" set ref 283* 286 291 309 622 status_control 31 based structure level 2 dcl 1-128 status_entries 31(18) based fixed bin(9,0) level 3 packed packed unsigned unaligned dcl 1-128 ref 668 678 status_entry 000135 automatic structure level 1 dcl 81 set ref 322* 324 324 526 526 772 status_entry_array based bit(36) array dcl 705 set ref 772* status_entry_idx 31(27) based fixed bin(9,0) level 3 packed packed unsigned unaligned dcl 1-128 set ref 675 676 677* 677 678 678* status_offset 31 based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 1-128 ref 675 676 string builtin function dcl 106 set ref 288* sub 0(06) 000135 automatic bit(6) level 3 in structure "status_entry" packed packed unaligned dcl 81 in procedure "ioi_masked" set ref 732 sub 000326 automatic fixed bin(6,0) dcl 701 in procedure "log_status_if_appropriate" set ref 732* 733 735 772* substr builtin function dcl 106 ref 293 653 748 841 891 suspend_devices 3(07) based bit(1) level 3 packed packed unaligned dcl 1-74 ref 495 suspended 22(10) based bit(1) level 3 packed packed unaligned dcl 1-128 ref 141 508 sys_info$service_system 000014 external static bit(1) dcl 87 ref 688 syserr 000036 constant entry external dcl 98 ref 217 221 249 336 545 772 822 942 954 syserr$binary 000040 constant entry external dcl 99 ref 900 t based bit(1) level 2 in structure "io_special_status" packed packed unaligned dcl 8-14 in procedure "ioi_masked" ref 293 t 000135 automatic bit(1) level 3 in structure "status_entry" packed packed unaligned dcl 81 in procedure "ioi_masked" set ref 351 tally 0(24) based bit(12) level 2 packed packed unaligned dcl 11-7 set ref 792* tctp 000402 automatic pointer dcl 913 set ref 915* 915* 916* 918 918 tdcw 33 based bit(36) level 2 dcl 1-128 set ref 783* 785 test_status 000346 automatic structure level 1 packed packed unaligned dcl 835 set ref 837* 849 858 time_limit 6 based fixed bin(71,0) level 2 dcl 1-96 set ref 213 213 372* 452* 468* 560* 560 804* time_out 0(03) 000346 automatic bit(1) level 2 in structure "test_status" packed packed unaligned dcl 835 in procedure "log_this_status" set ref 839* time_out 0(03) 000100 automatic bit(1) level 3 in structure "auto_istat" packed packed unaligned dcl 70 in procedure "ioi_masked" set ref 626* 634* 744 839 time_out 0(18) based bit(1) level 2 in structure "io_msg" packed packed unaligned dcl 12-14 in procedure "ioi_masked" set ref 883* time_out 40(03) based bit(1) level 3 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" set ref 744* 883 timeout 24 based fixed bin(35,0) level 2 dcl 1-128 ref 372 372 468 468 804 804 toss_status 1(02) based bit(1) level 3 packed packed unaligned dcl 1-96 set ref 325 326* 544* 561* type 0(04) 000346 automatic bit(2) level 2 in structure "test_status" packed packed unaligned dcl 835 in procedure "log_this_status" set ref 844* type 0(19) based bit(2) level 2 in structure "io_msg" packed packed unaligned dcl 12-14 in procedure "ioi_masked" set ref 884* type 40(04) based bit(2) level 3 in structure "dte" packed packed unaligned dcl 1-128 in procedure "ioi_masked" set ref 745* 884 unspec builtin function dcl 106 set ref 322* 492 583 584 585 598* 599* 600* 612* 613 614 614 620* 633* 643 648* 717* 741* 795* 837* 849 849 849 849 890 891 unwire_time 26 based fixed bin(71,0) level 2 dcl 1-128 set ref 245 573* wm_mask 000156 automatic fixed bin(71,0) dcl 82 set ref 928* 935* wm_ptwp 000160 automatic pointer dcl 83 set ref 928* 935* word1 10 based bit(36) level 3 in structure "cte" packed packed unaligned dcl 1-96 in procedure "ioi_masked" set ref 583* 598 word1 000135 automatic structure level 2 in structure "status_entry" dcl 81 in procedure "ioi_masked" set ref 583 598* 613 614 word2 1 000135 automatic structure level 2 in structure "status_entry" dcl 81 in procedure "ioi_masked" set ref 584 599* 643 word2 11 based bit(36) level 3 in structure "cte" packed packed unaligned dcl 1-96 in procedure "ioi_masked" set ref 584* 599 word4 3 based structure level 2 in structure "io_status_entry" dcl 6-7 in procedure "ioi_masked" word4 12 based bit(36) level 3 in structure "cte" packed packed unaligned dcl 1-96 in procedure "ioi_masked" set ref 585* 600 word4 3 000135 automatic structure level 2 in structure "status_entry" dcl 81 in procedure "ioi_masked" set ref 585 600* 614 workspace 1(23) 000135 automatic bit(1) level 3 packed packed unaligned dcl 81 set ref 603* 639 workspace_astep 10 based pointer level 2 dcl 1-128 ref 246 workspace_sdw 12 based fixed bin(71,0) level 2 dcl 1-128 set ref 672 workspace_sdw_ptr 000306 automatic pointer dcl 664 set ref 672* 673* workspace_wired 22(11) based bit(1) level 3 packed packed unaligned dcl 1-128 set ref 245 252* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. BEEP internal static fixed bin(17,0) initial dcl 14-7 IOI_DEFAULT_MAX_BOUND internal static fixed bin(19,0) initial dcl 1-198 IOI_DEFAULT_MAX_TIMEOUT internal static fixed bin(35,0) initial dcl 1-199 IOI_DEFAULT_TIMEOUT internal static fixed bin(35,0) initial dcl 1-201 IOI_DEVICE_LOCK_EVENT_TEMPLATE internal static char(2) initial packed unaligned dcl 1-207 SBL_access_audit internal static fixed bin(17,0) initial dcl 13-47 SBL_config_deck internal static fixed bin(17,0) initial dcl 13-47 SBL_disk_err internal static fixed bin(17,0) initial dcl 13-47 SBL_end_of_table internal static fixed bin(17,0) initial dcl 13-47 SBL_fnp_poll internal static fixed bin(17,0) initial dcl 13-47 SBL_hw_fault internal static fixed bin(17,0) initial dcl 13-47 SBL_ibm3270_mde internal static fixed bin(17,0) initial dcl 13-47 SBL_mdc_del_uidpath internal static fixed bin(17,0) initial dcl 13-47 SBL_mmdam internal static fixed bin(17,0) initial dcl 13-47 SBL_mos_err internal static fixed bin(17,0) initial dcl 13-47 SBL_mpc_poll internal static fixed bin(17,0) initial dcl 13-47 SBL_ocdcm_err internal static fixed bin(17,0) initial dcl 13-47 SBL_random_segdamage internal static fixed bin(17,0) initial dcl 13-47 SBL_read_nc internal static fixed bin(17,0) initial dcl 13-47 SBL_unused_10 internal static fixed bin(17,0) initial dcl 13-47 SBL_unused_12 internal static fixed bin(17,0) initial dcl 13-47 SBL_unused_14 internal static fixed bin(17,0) initial dcl 13-47 SBL_unused_15 internal static fixed bin(17,0) initial dcl 13-47 SBL_unused_18 internal static fixed bin(17,0) initial dcl 13-47 SBL_unused_4 internal static fixed bin(17,0) initial dcl 13-47 SBL_unused_6 internal static fixed bin(17,0) initial dcl 13-47 SBL_unused_7 internal static fixed bin(17,0) initial dcl 13-47 SBL_unused_8 internal static fixed bin(17,0) initial dcl 13-47 SBL_unused_9 internal static fixed bin(17,0) initial dcl 13-47 SBL_verify_lock internal static fixed bin(17,0) initial dcl 13-47 SBL_vtoc_salv_dam internal static fixed bin(17,0) initial dcl 13-47 SBL_vtoce internal static fixed bin(17,0) initial dcl 13-47 SBL_zerpag internal static fixed bin(17,0) initial dcl 13-47 SB_access_audit internal static fixed bin(17,0) initial dcl 13-47 SB_access_audit_data_class internal static varying char(16) initial dcl 13-21 SB_char_data_classes internal static varying char(16) initial array dcl 13-89 SB_config_deck internal static fixed bin(17,0) initial dcl 13-47 SB_config_deck_data_class internal static varying char(16) initial dcl 13-21 SB_disk_err internal static fixed bin(17,0) initial dcl 13-47 SB_end_of_table internal static fixed bin(17,0) initial dcl 13-47 SB_fnp_poll internal static fixed bin(17,0) initial dcl 13-47 SB_fnp_poll_data_class internal static varying char(16) initial dcl 13-21 SB_hw_fault internal static fixed bin(17,0) initial dcl 13-47 SB_hwfault_data_class internal static varying char(16) initial dcl 13-21 SB_ibm3270_mde internal static fixed bin(17,0) initial dcl 13-47 SB_ibm3270_mde_data_class internal static varying char(16) initial dcl 13-21 SB_io_status_data_class internal static varying char(16) initial dcl 13-21 SB_mdc_del_uidpath internal static fixed bin(17,0) initial dcl 13-47 SB_mdc_del_uidpath_data_class internal static varying char(16) initial dcl 13-21 SB_mmdam internal static fixed bin(17,0) initial dcl 13-47 SB_mmdam_data_class internal static varying char(16) initial dcl 13-21 SB_mos_data_class internal static varying char(16) initial dcl 13-21 SB_mos_err internal static fixed bin(17,0) initial dcl 13-47 SB_mpc_poll internal static fixed bin(17,0) initial dcl 13-47 SB_mpc_poll_data_class internal static varying char(16) initial dcl 13-21 SB_ocdcm_err internal static fixed bin(17,0) initial dcl 13-47 SB_random_segdamage internal static fixed bin(17,0) initial dcl 13-47 SB_read_nc internal static fixed bin(17,0) initial dcl 13-47 SB_segdamage_data_class internal static varying char(16) initial dcl 13-21 SB_unused_10 internal static fixed bin(17,0) initial dcl 13-47 SB_unused_12 internal static fixed bin(17,0) initial dcl 13-47 SB_unused_14 internal static fixed bin(17,0) initial dcl 13-47 SB_unused_15 internal static fixed bin(17,0) initial dcl 13-47 SB_unused_18 internal static fixed bin(17,0) initial dcl 13-47 SB_unused_4 internal static fixed bin(17,0) initial dcl 13-47 SB_unused_6 internal static fixed bin(17,0) initial dcl 13-47 SB_unused_7 internal static fixed bin(17,0) initial dcl 13-47 SB_unused_8 internal static fixed bin(17,0) initial dcl 13-47 SB_unused_9 internal static fixed bin(17,0) initial dcl 13-47 SB_verify_lock internal static fixed bin(17,0) initial dcl 13-47 SB_voldamage_data_class internal static varying char(16) initial dcl 13-21 SB_vtoc_salv_dam internal static fixed bin(17,0) initial dcl 13-47 SB_vtoce internal static fixed bin(17,0) initial dcl 13-47 SB_vtoce_data_class internal static varying char(16) initial dcl 13-21 SB_zerpag internal static fixed bin(17,0) initial dcl 13-47 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 display_cpu_error_binary_defs internal static fixed bin(17,0) initial array dcl 13-144 io_manager$assign 000000 constant entry external dcl 3-10 io_manager$assign_add 000000 constant entry external dcl 3-15 io_manager$ignore_interrupt 000000 constant entry external dcl 3-41 io_manager$unassign 000000 constant entry external dcl 3-20 io_manager$unassign_delete 000000 constant entry external dcl 3-23 io_manager_arg_ptr automatic pointer dcl 3-49 io_status_entry_ptr automatic pointer dcl 6-6 io_status_word_ptr automatic pointer dcl 7-4 ioi_channels automatic fixed bin(17,0) dcl 1-35 ioi_devices automatic fixed bin(17,0) dcl 1-35 ioi_multiplexers automatic fixed bin(17,0) dcl 1-35 ioi_subsystems automatic fixed bin(17,0) dcl 1-35 itep automatic pointer dcl 1-33 lock_ptr automatic pointer dcl 2-11 syserr_binary_address_damage_mask internal static bit(36) initial packed unaligned dcl 13-142 syserr_binary_mos_mask internal static bit(36) initial packed unaligned dcl 13-139 syserr_binary_seg_damage_mask internal static bit(36) initial packed unaligned dcl 13-140 syserr_binary_vol_damage_mask internal static bit(36) initial packed unaligned dcl 13-141 tdcw based structure level 1 dcl 11-14 tdcwp automatic pointer dcl 11-4 NAMES DECLARED BY EXPLICIT CONTEXT. DISMISS_INTERRUPT 001773 constant label dcl 381 ref 331 342 354 365 380 absaddr_18 003703 constant entry internal dcl 813 ref 791 connect 002250 constant entry internal dcl 444 ref 130 146 510 deliver_status 003153 constant entry internal dcl 660 ref 227 375 475 flush_status 002047 constant entry external dcl 404 flush_status_proc 004116 constant entry internal dcl 870 ref 239 411 853 857 getwork_channel 000501 constant entry external dcl 161 getwork_channel_proc 002376 constant entry internal dcl 483 ref 171 226 329 340 370 getwork_device 000321 constant entry external dcl 115 interrupt 001334 constant entry external dcl 276 ioi_masked 000306 constant entry external dcl 11 lock_gte 004374 constant entry internal dcl 939 ref 123 169 185 212 238 304 321 393 410 429 log_status_if_appropriate 003277 constant entry internal dcl 696 ref 362 log_this_status 003761 constant entry internal dcl 828 ref 712 766 776 810 mask 004346 constant entry internal dcl 925 ref 122 168 184 392 409 428 mask_channel 002530 constant entry internal dcl 523 ref 188 224 473 online_device_count 002107 constant entry external dcl 419 quiesce_channel 002004 constant entry external dcl 387 reset_device 000544 constant entry external dcl 178 restore_previous_status 002746 constant entry internal dcl 594 ref 344 save_status 002722 constant entry internal dcl 580 ref 779 setup_fault_status 003010 constant entry internal dcl 617 ref 347 setup_normal_status 002771 constant entry internal dcl 609 ref 359 setup_status_common 003054 constant label dcl 637 ref 628 setup_status_interrupt_join 003021 constant label dcl 624 ref 615 setup_timeout_status 003042 constant entry internal dcl 630 ref 225 474 special_could_come_from_channel 004305 constant entry internal dcl 907 ref 299 timer 000624 constant entry external dcl 203 unbind 002702 constant entry internal dcl 568 ref 339 369 527 unlock_gte 004443 constant entry internal dcl 951 ref 132 148 154 172 194 231 241 315 330 341 353 364 377 398 412 435 unmask 004361 constant entry internal dcl 932 ref 133 149 155 173 195 399 413 436 wakeup_user 003242 constant entry internal dcl 685 ref 228 311 376 476 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5060 5142 4530 5070 Length 5666 4530 62 507 327 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ioi_masked 682 external procedure is an external procedure. begin block on line 300 begin block shares stack frame of external procedure ioi_masked. connect internal procedure shares stack frame of external procedure ioi_masked. getwork_channel_proc internal procedure shares stack frame of external procedure ioi_masked. begin block on line 500 begin block shares stack frame of external procedure ioi_masked. mask_channel internal procedure shares stack frame of external procedure ioi_masked. unbind internal procedure shares stack frame of external procedure ioi_masked. save_status internal procedure shares stack frame of external procedure ioi_masked. restore_previous_status internal procedure shares stack frame of external procedure ioi_masked. setup_normal_status internal procedure shares stack frame of external procedure ioi_masked. deliver_status internal procedure shares stack frame of external procedure ioi_masked. wakeup_user internal procedure shares stack frame of external procedure ioi_masked. log_status_if_appropriate internal procedure shares stack frame of external procedure ioi_masked. absaddr_18 internal procedure shares stack frame of external procedure ioi_masked. log_this_status internal procedure shares stack frame of external procedure ioi_masked. flush_status_proc internal procedure shares stack frame of external procedure ioi_masked. special_could_come_from_channel internal procedure shares stack frame of external procedure ioi_masked. mask internal procedure shares stack frame of external procedure ioi_masked. unmask internal procedure shares stack frame of external procedure ioi_masked. lock_gte internal procedure shares stack frame of external procedure ioi_masked. unlock_gte internal procedure shares stack frame of external procedure ioi_masked. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ioi_masked 000100 auto_istat ioi_masked 000110 broadcast ioi_masked 000111 count ioi_masked 000112 done ioi_masked 000113 ctx ioi_masked 000114 dtx ioi_masked 000115 gtx ioi_masked 000116 ima ioi_masked 000130 level ioi_masked 000132 message ioi_masked 000134 status ioi_masked 000135 status_entry ioi_masked 000156 wm_mask ioi_masked 000160 wm_ptwp ioi_masked 000162 idp ioi_masked 000164 gtep ioi_masked 000166 ctep ioi_masked 000170 dtep ioi_masked 000172 imp ioi_masked 000174 io_special_status_ptr ioi_masked 000176 io_log_infop ioi_masked 000200 logp ioi_masked 000202 pcwp ioi_masked 000204 idcwp ioi_masked 000206 dcwp ioi_masked 000210 io_msgp ioi_masked 000217 done begin block on line 300 000234 done begin block on line 500 000236 saved_dtep begin block on line 500 000304 ioi_abs_seg_ptr deliver_status 000306 workspace_sdw_ptr deliver_status 000324 log_detail log_status_if_appropriate 000325 major log_status_if_appropriate 000326 sub log_status_if_appropriate 000336 absaddr absaddr_18 000337 code absaddr_18 000346 test_status log_this_status 000356 auto_io_msg flush_status_proc 000371 msg_length flush_status_proc 000372 msg_type flush_status_proc 000402 tctp special_could_come_from_channel THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a r_e_as r_ne_as call_ext_out_desc call_ext_out return_mac stac_mac signal_op ext_entry ext_entry_desc stacq_mac clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. absadr bce_ioi_post io_manager$connect io_manager$connect_abs io_manager$connect_direct io_manager$get_status io_manager$mask io_manager$workspace_tdcw ioi_wire$unwire pmut$swap_sdw pmut$unwire_unmask pmut$wire_and_mask pxss$io_wakeup pxss$notify syserr syserr$binary THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. io_log_status_info$io_log_status_info ioi_abs_seg$ ioi_data$ pds$process_id sys_info$service_system LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 11 000305 115 000315 118 000330 119 000334 120 000336 122 000343 123 000344 125 000345 127 000347 129 000355 130 000362 131 000363 132 000366 133 000367 134 000370 139 000377 141 000401 143 000414 146 000443 147 000444 148 000447 149 000450 150 000451 152 000460 154 000466 155 000467 156 000470 161 000477 164 000510 165 000514 166 000517 168 000524 169 000525 170 000526 171 000530 172 000531 173 000532 174 000533 178 000542 181 000553 182 000556 183 000562 184 000567 185 000570 186 000571 187 000575 188 000602 189 000603 190 000604 191 000606 192 000611 194 000612 195 000613 196 000614 203 000623 206 000633 207 000636 209 000650 210 000657 211 000676 212 000703 213 000704 215 000731 216 000735 217 000737 218 000767 220 000770 221 000773 224 001063 225 001064 226 001065 227 001066 228 001067 231 001074 232 001075 233 001077 234 001107 235 001113 237 001123 238 001130 239 001131 241 001141 244 001142 245 001152 246 001170 249 001204 252 001270 259 001273 260 001303 262 001304 263 001307 264 001311 269 001317 270 001321 276 001330 279 001343 280 001346 281 001353 282 001360 283 001362 285 001364 286 001366 287 001370 288 001372 289 001375 290 001377 291 001407 293 001411 297 001435 298 001445 299 001456 304 001463 305 001464 306 001465 307 001476 309 001513 310 001515 311 001517 313 001520 314 001532 315 001537 318 001540 319 001542 321 001543 322 001544 324 001554 325 001567 326 001600 327 001602 328 001604 329 001606 330 001607 331 001610 334 001611 335 001614 336 001616 339 001702 340 001703 341 001704 342 001705 344 001706 347 001712 350 001717 351 001723 352 001726 353 001733 354 001734 356 001735 359 001742 362 001743 363 001744 364 001750 365 001751 368 001752 369 001755 370 001756 371 001757 372 001760 375 001767 376 001770 377 001771 380 001772 381 001773 387 002002 390 002013 391 002017 392 002024 393 002025 395 002026 398 002034 399 002035 400 002036 404 002045 407 002056 408 002062 409 002067 410 002070 411 002071 412 002072 413 002073 414 002074 419 002103 422 002123 423 002126 424 002135 425 002146 426 002155 427 002156 428 002157 429 002160 430 002161 431 002172 433 002202 434 002214 435 002220 436 002221 437 002222 439 002234 440 002236 444 002250 447 002251 448 002254 449 002257 450 002261 451 002265 452 002267 454 002272 455 002276 457 002311 458 002320 460 002321 461 002325 462 002334 465 002343 466 002347 467 002352 468 002356 471 002364 472 002366 473 002371 474 002372 475 002373 476 002374 479 002375 483 002376 486 002377 487 002403 488 002405 491 002406 492 002411 493 002427 495 002430 498 002443 499 002451 505 002453 506 002454 507 002456 508 002466 509 002477 510 002502 511 002503 512 002505 513 002506 514 002517 515 002525 519 002527 523 002530 526 002531 527 002545 529 002552 530 002562 531 002566 534 002605 542 002606 543 002612 544 002615 545 002617 546 002647 549 002650 556 002653 557 002655 558 002657 559 002662 560 002671 561 002675 562 002677 564 002701 568 002702 571 002703 572 002711 573 002716 575 002721 580 002722 583 002723 584 002726 585 002730 586 002732 587 002741 589 002745 594 002746 597 002747 598 002751 599 002754 600 002756 601 002760 602 002762 603 002766 605 002770 609 002771 612 002772 613 002775 614 003004 615 003007 617 003010 620 003011 621 003014 622 003016 624 003021 626 003036 627 003040 628 003041 630 003042 633 003043 634 003046 635 003052 637 003054 639 003060 641 003070 643 003100 645 003103 647 003104 648 003106 649 003111 650 003131 651 003133 652 003143 653 003150 656 003152 660 003153 666 003154 668 003161 671 003167 672 003172 673 003174 675 003204 676 003222 677 003224 678 003227 681 003241 685 003242 688 003243 690 003265 692 003276 696 003277 710 003300 711 003304 712 003306 713 003307 714 003312 717 003313 719 003316 721 003322 723 003324 724 003327 726 003333 727 003334 729 003335 730 003340 731 003343 732 003347 733 003353 735 003364 737 003370 738 003371 740 003372 741 003375 742 003400 743 003402 744 003407 745 003413 746 003423 747 003426 748 003431 750 003433 751 003437 752 003442 754 003444 755 003447 756 003452 763 003453 764 003457 765 003462 766 003464 767 003465 770 003466 771 003470 772 003474 776 003600 777 003601 779 003602 783 003603 784 003606 785 003610 786 003612 787 003615 788 003620 789 003622 791 003624 792 003636 794 003641 795 003643 799 003646 800 003651 801 003652 802 003654 803 003657 804 003666 806 003676 807 003700 810 003701 811 003702 813 003703 821 003705 822 003720 824 003746 828 003761 837 003762 838 003764 839 003771 840 003775 841 004000 843 004002 844 004005 845 004015 846 004021 847 004022 849 004031 852 004045 853 004051 855 004057 857 004060 858 004061 859 004106 860 004110 861 004112 864 004115 870 004116 877 004117 880 004124 881 004126 882 004135 883 004140 884 004145 885 004152 886 004157 887 004165 888 004175 889 004177 890 004205 891 004211 892 004214 893 004216 894 004220 896 004221 897 004223 900 004225 902 004277 903 004302 905 004304 907 004305 915 004307 916 004320 918 004336 919 004343 925 004346 928 004347 930 004360 932 004361 935 004362 937 004373 939 004374 942 004375 945 004431 947 004441 949 004442 951 004443 954 004444 957 004506 ----------------------------------------------------------- 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