COMPILATION LISTING OF SEGMENT iom_unassign 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 1013.5 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 14 iom_unassign: 15 procedure (Chx, Code); 16 17 /* Unassign an IOM channel. */ 18 /* Stolen from iom_manager November 1980 by C. Hornig */ 19 /* Modified for channel reconfiguration January 1984 by Chris Jones */ 20 /* Modified to not mask overhead channels, February 1985 by Chris Jones */ 21 22 dcl Chx fixed bin (35) parameter; 23 dcl Code fixed bin (35) parameter; 24 25 26 dcl chx fixed bin (35); 27 dcl delete_entry bit (1) aligned; 28 29 dcl (addr, hbound, lbound) builtin; 30 31 /* * * * * * * * * * * * * * * * * * * */ 32 33 delete_entry = "0"b; 34 goto common; 35 36 delete_channel: 37 entry (Chx, Code); 38 39 delete_entry = "1"b; 40 common: 41 Code = 0; 42 iom_data_ptr = addr (iom_data$); 43 iom_mailbox_seg_ptr = addr (iom_mailbox$); 44 45 chx = Chx; /* copy argument */ 46 if (chx < lbound (iom_data.per_device, 1)) | (chx > hbound (iom_data.per_device, 1)) then do; 47 bad_chx: 48 Code = 1; /* called on PRDS during ESD */ 49 return; 50 end; 51 52 if ^iom_data.per_device (chx).flags.in_use then 53 goto bad_chx; 54 55 if (iom_data.per_device (chx).channel ^= system_fault_channel) 56 & (iom_data.per_device (chx).channel ^= special_status_channel) then do; 57 call io_manager$mask (chx); /* reset and mask channel */ 58 59 iom_mailbox_seg.iom_mailbox (iom_data.per_device (chx).iom) 60 .channel_mailbox (iom_data.per_device (chx).channel).scw = iom_data.stop_scw; 61 /* reset for status processing */ 62 iom_mailbox_seg.iom_mailbox (iom_data.per_device (chx).iom) 63 .channel_mailbox (iom_data.per_device (chx).channel).lpw = iom_data.stop_lpw; 64 end; 65 66 if delete_entry then 67 iom_data.per_device (chx).flags.on_line = "0"b; 68 iom_data.per_device (chx).flags.in_use = "0"b; 69 return; 70 1 1 /* Begin include file ...... iom_data.incl.pl1 1 2* First written in August 1971 by R F Mabee. 1 3* Modified for paged IOM November 1980 by C. Hornig. 1 4* More IIOC changes by C. Hornig, June 1982. 1 5* Modified for channel reconfiguration by Chris Jones, January 1984. 1 6* Modified to remove support of non-paged IOMs by Chris Jones, August 1984. 1 7* Modified to add IMW read protocol flags by M. Pandolf, January 1985. 1 8**/ 1 9 1 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 11 dcl iom_data$ external; 1 12 dcl iom_mailbox$ external; 1 13 1 14 dcl n_devices fixed bin; 1 15 dcl iom_data_ptr ptr; 1 16 1 17 dcl 1 iom_data based (iom_data_ptr) aligned, 1 18 2 n_devices fixed bin, /* (0) Maximum number of channels. */ 1 19 2 stop_lpw bit (36), /* (1) LPW pointing to stop_dcw. */ 1 20 2 stop_dcw bit (36), /* (2) DCW to stop channel, probably storing bad status. */ 1 21 2 stop_scw bit (36), /* (3) SCW for same */ 1 22 2 imw_lock fixed bin (35), /* (4) Essentially a lock for iom switch checking: */ 1 23 /* 1 : OK to poll IMW */ 1 24 /* 0 : lock in transition */ 1 25 /* -1 : DONT poll IMW */ 1 26 2 n_intr_procs fixed bin (35), /* (5) Number of processors in interrupt handler */ 1 27 2 pad1 (2) bit (36), 1 28 2 stop_status bit (72), /* (10) All unused channels store status here. */ 1 29 2 rfh1 (6) bit (36), /* can't use this */ 1 30 2 stop_ext_status bit (8 * 36), /* (20) Unused channels' extended status */ 1 31 2 pad3 (5) bit (36), 1 32 2 invalid_interrupts fixed bin (35), /* (35) interrupts on unused channels */ 1 33 2 null_interrupts fixed bin (35), /* (36) spurious interrupts */ 1 34 2 multiple_interrupts 1 35 fixed bin (35), /* (37) several interrupts at a time */ 1 36 2 per_iom (4) like per_iom, /* (40) for each IOM */ 1 37 2 per_device (n_devices refer (iom_data.n_devices)) like per_device; 1 38 /* (240) Data for assigned channels. */ 1 39 1 40 dcl 1 per_iom aligned based, 1 41 2 lock bit (36), /* (40) connect mailbox lock */ 1 42 2 flags, /* (41) */ 1 43 3 configured bit (1) unal, /* is configured */ 1 44 3 on_line bit (1) unal, /* is ON */ 1 45 3 pad1 bit (34) unal, 1 46 2 model char (4), /* (42) what kind of IOM */ 1 47 2 port fixed bin (3), /* (43) SC port */ 1 48 2 connect_time fixed bin (71), /* (44) time of last connect */ 1 49 2 connect_lpw bit (36), /* (46) LPW for connect channel */ 1 50 2 cow bit (36), /* (47) Connect Operand Word */ 1 51 2 special_chx fixed bin (35), /* (50) chx of special status channel */ 1 52 2 fault_chx fixed bin (35), /* (51) chx of system fault channel */ 1 53 2 pad2 (4) bit (36), 1 54 2 abandoned_connects fixed bin (35), /* (56) times we couldn't get IOM to listen at all */ 1 55 2 reconnects fixed bin (35), /* (57) times a connect was lost */ 1 56 2 chantab (0:63) uns fixed bin (9) unal; 1 57 /* (60) packed devtab indices */ 1 58 1 59 dcl 1 per_device aligned based, 1 60 2 status bit (72), /* (0) Status for channel is stored here. */ 1 61 2 rfh1 (6) bit (36), 1 62 2 ext_status bit (8 * 36), /* (10) extended status stored by IIOC */ 1 63 2 iom uns fixed bin (3), /* (20) IOM# (1-4) */ 1 64 2 channel uns fixed bin (6), /* (21) channel # */ 1 65 2 handler entry (fixed bin (35), fixed bin (3), bit (36) aligned), 1 66 /* (22) Interrupt handler for device. */ 1 67 2 flags, /* (26) */ 1 68 3 in_use bit (1) unal, /* assigned */ 1 69 3 queue_status bit (1) unal, /* maintain status queue */ 1 70 3 on_line bit (1) unal, /* can be assigned */ 1 71 2 index fixed bin (35), /* (27) Channel identification index. */ 1 72 2 pcw bit (72), /* (30) Peripheral Control Word */ 1 73 2 lpw bit (72), /* (32) List Pointer Word */ 1 74 2 scw bit (36), /* (34) Status Control Word */ 1 75 2 pad1 fixed bin (35), 1 76 2 status_queue_ptr ptr, /* (36) Status queue */ 1 77 2 connect_time fixed bin (71), /* (40) time of last connect */ 1 78 2 connects fixed bin (71), /* (42) Total connects */ 1 79 2 interrupts fixed bin (71), /* (44) Total number of interrupts for this channel. */ 1 80 2 interrupt_time fixed bin (71); /* (46) Total interrupt time for this channel. */ 1 81 1 82 dcl iom_mailbox_seg_ptr ptr; 1 83 dcl 1 iom_mailbox_seg aligned based (iom_mailbox_seg_ptr), 1 84 2 imw_array (0:31) bit (32), /* Indexed by interrupt cell number. One bit for each channel. */ 1 85 2 system_fault (4) aligned like status_queue, 1 86 /* system faults store here (12 words/IOM) */ 1 87 2 special_status (4) aligned like status_queue, 1 88 /* special status words here (12 words/IOM) */ 1 89 2 iom_mailbox (4) like iom_mailbox; /* Used to communicate with the IOM. */ 1 90 1 91 dcl status_queue_ptr ptr; 1 92 dcl 1 status_queue aligned based (status_queue_ptr), 1 93 2 status (12) bit (36); 1 94 1 95 dcl 1 iom_mailbox aligned based, 1 96 2 channel_mailbox (0:63) like channel_mailbox; 1 97 1 98 dcl 1 channel_mailbox aligned based, 1 99 2 lpw bit (72), /* List pointer word. Points to DCW list. */ 1 100 2 scw bit (36), /* Status control word. Points to channel_table.status. */ 1 101 2 dcw bit (36); /* Data control word. Primarily scratch space for IOM. */ 1 102 1 103 /* Defined channel numbers. */ 1 104 1 105 dcl ( 1 106 system_fault_channel init (1), /* Stores system fault words using LPW and DCW. */ 1 107 connect_channel init (2), /* Starts other channels using LPW pointing to PCW. */ 1 108 special_status_channel init (6) /* Stores special status using LPW and DCW. */ 1 109 ) fixed bin (6) static options (constant); 1 110 1 111 /* End of include file ..... iom_data.incl.pl1 */ 71 72 2 1 /* Begin include file io_manager_dcls.incl.pl1 */ 2 2 2 3 /* Written by Charles Hornig, late 1980 and early 1981 */ 2 4 /* Modified for MR10 interface, February 1982 */ 2 5 /* Channel reconfiguration entries added by Chris Jones, January 1984 */ 2 6 2 7 /* These entries are callable on unwired stacks. */ 2 8 2 9 /* call io_manager$assign (Chx, Channel, Handler, Index, Statusp, Code); */ 2 10 dcl io_manager$assign 2 11 entry (fixed bin (35), char (8) aligned, entry (fixed bin (35), fixed bin (3), bit (36) aligned), 2 12 fixed bin (35), ptr, fixed bin (35)); 2 13 2 14 /* call io_manager$assign_add (Chx, Channel, Handler, Index, Statusp, Code); */ 2 15 dcl io_manager$assign_add 2 16 entry (fixed bin (35), char (8) aligned, entry (fixed bin (35), fixed bin (3), bit (36) aligned), 2 17 fixed bin (35), ptr, fixed bin (35)); 2 18 2 19 /* call io_manager$unassign (Chx, Code); */ 2 20 dcl io_manager$unassign entry (fixed bin (35), fixed bin (35)); 2 21 2 22 /* call io_manager$unassign_delete (Chx, Code); */ 2 23 dcl io_manager$unassign_delete entry (fixed bin (35), fixed bin (35)); 2 24 2 25 /* call io_manager$connect (Io_manager_arg); */ 2 26 dcl io_manager$connect entry (1 aligned like io_manager_arg); 2 27 2 28 /* call io_manager$connect_abs (Io_manager_arg); */ 2 29 dcl io_manager$connect_abs entry (1 aligned like io_manager_arg); 2 30 2 31 /* call io_manager$connect_direct (Io_manager_arg); */ 2 32 dcl io_manager$connect_direct entry (1 aligned like io_manager_arg); 2 33 2 34 /* call io_manager$get_status (Chx, Io_status_entry_ptr); */ 2 35 dcl io_manager$get_status entry (fixed bin (35), ptr); 2 36 2 37 /* call io_manager$mask (Chx); */ 2 38 dcl io_manager$mask entry (fixed bin (35)); 2 39 2 40 /* call io_manager$ignore_interrupt (); */ 2 41 dcl io_manager$ignore_interrupt entry (fixed bin (35), fixed bin (3), bit (36) aligned); 2 42 2 43 /* call io_manager$data_tdcw (Io_manager_arg); 2 44* dcl io_manager$data_tdcw entry (1 aligned like io_manager_arg); 2 45* 2 46* /* call io_manager$workspace_tdcw (Io_manager_arg); */ 2 47 dcl io_manager$workspace_tdcw entry (1 aligned like io_manager_arg); 2 48 2 49 dcl io_manager_arg_ptr ptr; 2 50 dcl 1 io_manager_arg aligned based (io_manager_arg_ptr), 2 51 2 chx fixed bin (35), /* channel index from io_manager$assign */ 2 52 2 bound fixed bin (19), /* workspace size */ 2 53 2 pcw bit (36) aligned, /* or IDCW */ 2 54 2 listx fixed bin (18), /* DCW list offset */ 2 55 2 ptp ptr, /* page table pointer */ 2 56 2 listp ptr, /* DCW list pointer */ 2 57 2 dcw_pair_ptr ptr; /* DCW pair pointer */ 2 58 2 59 /* End include file io_manager_dcls.incl.pl1 */ 73 74 75 end iom_unassign; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0802.6 iom_unassign.pl1 >spec>install>1110>iom_unassign.pl1 71 1 04/11/85 1452.4 iom_data.incl.pl1 >ldd>include>iom_data.incl.pl1 73 2 07/11/84 0937.3 io_manager_dcls.incl.pl1 >ldd>include>io_manager_dcls.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. Chx parameter fixed bin(35,0) dcl 22 ref 14 36 45 Code parameter fixed bin(35,0) dcl 23 set ref 14 36 40* 47* addr builtin function dcl 29 ref 42 43 channel 261 based fixed bin(6,0) array level 3 unsigned dcl 1-17 ref 55 55 59 62 channel_mailbox 200 based structure array level 3 in structure "iom_mailbox_seg" dcl 1-83 in procedure "iom_unassign" channel_mailbox based structure level 1 dcl 1-98 in procedure "iom_unassign" chx 000100 automatic fixed bin(35,0) dcl 26 set ref 45* 46 46 52 55 55 57* 59 59 62 62 66 68 delete_entry 000101 automatic bit(1) dcl 27 set ref 33* 39* 66 flags 266 based structure array level 3 dcl 1-17 hbound builtin function dcl 29 ref 46 in_use 266 based bit(1) array level 4 packed packed unaligned dcl 1-17 set ref 52 68* io_manager$mask 000014 constant entry external dcl 2-38 ref 57 io_manager_arg based structure level 1 dcl 2-50 iom 260 based fixed bin(3,0) array level 3 unsigned dcl 1-17 ref 59 62 iom_data based structure level 1 dcl 1-17 iom_data$ 000010 external static fixed bin(17,0) dcl 1-11 set ref 42 iom_data_ptr 000102 automatic pointer dcl 1-15 set ref 42* 46 46 52 55 55 59 59 59 62 62 62 66 68 iom_mailbox based structure level 1 dcl 1-95 in procedure "iom_unassign" iom_mailbox 200 based structure array level 2 in structure "iom_mailbox_seg" dcl 1-83 in procedure "iom_unassign" iom_mailbox$ 000012 external static fixed bin(17,0) dcl 1-12 set ref 43 iom_mailbox_seg based structure level 1 dcl 1-83 iom_mailbox_seg_ptr 000104 automatic pointer dcl 1-82 set ref 43* 59 62 lbound builtin function dcl 29 ref 46 lpw 200 based bit(72) array level 4 dcl 1-83 set ref 62* n_devices based fixed bin(17,0) level 2 dcl 1-17 ref 46 on_line 266(02) based bit(1) array level 4 packed packed unaligned dcl 1-17 set ref 66* per_device based structure level 1 dcl 1-59 in procedure "iom_unassign" per_device 240 based structure array level 2 in structure "iom_data" dcl 1-17 in procedure "iom_unassign" set ref 46 46 per_iom based structure level 1 dcl 1-40 scw 202 based bit(36) array level 4 dcl 1-83 set ref 59* special_status_channel constant fixed bin(6,0) initial dcl 1-105 ref 55 status_queue based structure level 1 dcl 1-92 stop_lpw 1 based bit(36) level 2 dcl 1-17 ref 62 stop_scw 3 based bit(36) level 2 dcl 1-17 ref 59 system_fault_channel constant fixed bin(6,0) initial dcl 1-105 ref 55 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. connect_channel internal static fixed bin(6,0) initial dcl 1-105 io_manager$assign 000000 constant entry external dcl 2-10 io_manager$assign_add 000000 constant entry external dcl 2-15 io_manager$connect 000000 constant entry external dcl 2-26 io_manager$connect_abs 000000 constant entry external dcl 2-29 io_manager$connect_direct 000000 constant entry external dcl 2-32 io_manager$get_status 000000 constant entry external dcl 2-35 io_manager$ignore_interrupt 000000 constant entry external dcl 2-41 io_manager$unassign 000000 constant entry external dcl 2-20 io_manager$unassign_delete 000000 constant entry external dcl 2-23 io_manager$workspace_tdcw 000000 constant entry external dcl 2-47 io_manager_arg_ptr automatic pointer dcl 2-49 n_devices automatic fixed bin(17,0) dcl 1-14 status_queue_ptr automatic pointer dcl 1-91 NAMES DECLARED BY EXPLICIT CONTEXT. bad_chx 000043 constant label dcl 47 ref 52 common 000025 constant label dcl 40 ref 34 delete_channel 000016 constant entry external dcl 36 iom_unassign 000005 constant entry external dcl 14 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 212 230 131 222 Length 430 131 16 163 60 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME iom_unassign 76 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME iom_unassign 000100 chx iom_unassign 000101 delete_entry iom_unassign 000102 iom_data_ptr iom_unassign 000104 iom_mailbox_seg_ptr iom_unassign THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out return_mac ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. io_manager$mask THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. iom_data$ iom_mailbox$ LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 14 000001 33 000012 34 000013 36 000014 39 000023 40 000025 42 000027 43 000032 45 000034 46 000036 47 000043 49 000046 52 000047 55 000054 57 000062 59 000070 62 000105 66 000112 68 000121 69 000126 ----------------------------------------------------------- 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