-
Notifications
You must be signed in to change notification settings - Fork 0
/
init_root_vols.list
1945 lines (1919 loc) · 117 KB
/
init_root_vols.list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
COMPILATION LISTING OF SEGMENT init_root_vols
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 0953.4 mst Sat
Options: optimize map
1 /****^ ***********************************************************
2* * *
3* * Copyright, (C) Honeywell Bull Inc., 1987 *
4* * *
5* * Copyright, (C) Honeywell Information Systems Inc., 1982 *
6* * *
7* *********************************************************** */
8
9
10 /****^ HISTORY COMMENTS:
11* 1) change(74-12-01,VanVleck), approve(), audit(), install():
12* Modified by THVV for NSS.
13* 2) change(75-01-01,VanVleck), approve(), audit(), install():
14* Modified throughout 1975 by THVV and BSG for NSS.
15* 3) change(77-03-01,VanVleck), approve(), audit(), install():
16* Modified for more vol maps than will fit in one segment.
17* 4) change(78-07-01,Greenberg), approve(), audit(), install():
18* Modified for MANY hardcore partitions.
19* 5) change(79-02-01,MJordan), approve(), audit(), install():
20* Modified by Michael R. Jordan for MSU500 support.
21* 6) change(79-04-01,MJordan), approve(), audit(), install():
22* Modified for proper MSU500/501/509 initialization, and to detect
23* some configuration errors.
24* 7) change(80-11-27,Sibert), approve(), audit(), install():
25* Modified by W. Olin Sibert to split from old init_pvt (to which
26* earlier history refers).
27* 8) change(80-11-28,Sibert), approve(), audit(), install():
28* Modified for Bootload Multics and more error detection.
29* 9) change(82-07-01,Margulies), approve(), audit(), install():
30* Modified by BIM to remove references to fsmap and fsdct.
31* 10) change(82-10-01,Margulies), approve(), audit(), install():
32* Modified to return error code if the RPV takes I/O errors.
33* 11) change(83-03-01,Loepere), approve(), audit(), install():
34* Modified by KPL to find or create bce and file partitions.
35* 12) change(84-03-01,Loepere), approve(), audit(), install():
36* Modified to do the right thing on bce passes wrt other hardcore part
37* disks.
38* 13) change(84-09-01,ABall), approve(), audit(), install():
39* Modified by Allen Ball to have it check in each pass that the rpv
40* in sys_boot_info matched that on the config card.
41* 14) change(84-12-01,Loepere), approve(), audit(), install():
42* Modified by Keith Loepere to add LOG partition to the list of partitions
43* to be created on first bootload.
44* 15) change(85-03-28,Margulies), approve(), audit(), install():
45* Modified for root pv's without partitions.
46* 16) change(85-12-05,Lippard), approve(85-12-02,MCR7309),
47* audit(86-07-08,GDixon), install(86-07-17,MR12.0-1097):
48* Modified by Jim Lippard to set new pvt bit (root_lv) for all
49* root pv's so that accept_rpv will accept root pv's without
50* partitions.
51* 17) change(85-12-20,Fawcett), approve(86-04-11,MCR7383),
52* audit(86-07-08,GDixon), install(86-07-17,MR12.0-1097):
53* Add subvolume support.
54* 18) change(86-06-05,GJohnson), approve(86-06-05,MCR7387),
55* audit(86-06-10,Martinson), install(86-07-17,MR12.0-1091):
56* Correct error message documentation.
57* END HISTORY COMMENTS */
58
59 /* format: style2 */
60
61 init_root_vols:
62 procedure (code);
63
64 dcl code fixed bin (35) parameter;
65
66 dcl 1 root_vol_loc_info aligned, /* Array of locations for root volumes */
67 2 roots (20),
68 3 subsys char (4), /* Subsystem and drive number for each volume */
69 3 drive fixed bin,
70 3 subvol fixed bin; /* with an HC partition */
71
72 dcl subsys_name char (4) aligned;
73 dcl problem char (64);
74 dcl drive_name char (4) aligned;
75 dcl drive_no fixed bin (8) unal;
76 dcl sv_no fixed bin;
77 dcl n_roots_found fixed bin; /* Number of volumes defined on ROOT card(s) */
78 dcl curtime fixed bin (71); /* When we got started */
79 dcl sv_idx fixed bin;
80 dcl root_idx fixed bin;
81 dcl vol_idx fixed bin;
82
83 dcl tx fixed bin;
84
85 dcl 1 LABEL aligned like label;
86
87
88 dcl sst$root_pvtx fixed bin external static;
89 dcl pvt$root_pvtx fixed bin external static;
90 dcl pvt$root_pvid bit (36) aligned external static;
91 dcl pvt$root_lvid bit (36) aligned external static;
92 dcl pvt$prev_shutdown_state
93 fixed bin external static;
94 dcl pvt$prev_esd_state fixed bin external static;
95 dcl pvt$disk_table_vtocx fixed bin external static;
96 dcl pvt$disk_table_uid bit (36) aligned external static;
97 dcl pvt$n_entries fixed bin external static;
98 dcl pvt$root_vtocx fixed bin external static;
99
100 dcl config_$find entry (char (4) aligned, pointer);
101
102 dcl init_empty_root entry (fixed bin, fixed bin (35));
103 dcl init_hc_part entry (fixed bin, fixed bin (18), fixed bin (18));
104 dcl make_sdw$thread_hcp entry (fixed bin);
105 dcl read_disk_label entry (fixed bin, ptr, char (*), fixed bin (35));
106 declare write_disk entry (fixed bin, fixed bin (18), ptr, fixed bin (35));
107
108 dcl (
109 syserr,
110 syserr$error_code
111 ) entry options (variable);
112 dcl create_rpv_partition entry (fixed bin, ptr, fixed bin, char (4), fixed bin (35));
113
114 dcl (
115 error_table_$bad_arg,
116 error_table_$bad_volid,
117 error_table_$invalid_elsize,
118 error_table_$noalloc,
119 error_table_$noarg,
120 error_table_$nopart,
121 error_table_$too_many_names
122 ) fixed bin (35) ext static;
123
124 dcl sys_boot_info$assume_config_deck
125 bit (1) external;
126 dcl sys_boot_info$config_part_frec
127 fixed bin (18) external;
128 dcl sys_boot_info$disk_device_has_sv
129 bit (1) aligned external;
130 dcl sys_boot_info$disk_device_sv
131 fixed bin (17) external;
132 dcl sys_boot_info$disk_device_number
133 fixed bin (6) external;
134 dcl sys_boot_info$rpv_cold_boot
135 bit (1) aligned ext static;
136
137 dcl ME char (16) internal static options (constant) init ("init_root_vols");
138 dcl VALID_NUMBERS char (10) int static options (constant) init ("0123456789");
139
140
141 dcl (addr, bin, clock, convert, divide, hbound, index, null, rtrim, substr, verify)
142 builtin;
143
144
145 code = 0;
146 curtime = clock ();
147
148 labelp = addr (LABEL);
149 pvt_arrayp = addr (pvt$array);
150
151
152 /* Locate all the volumes to have HC parts to be used at bootload time. */
153
154 n_roots_found = 0;
155 root_cardp = null;
156 FIND_MORE_ROOT_CARDS:
157 call config_$find (ROOT_CARD_WORD, root_cardp);
158 if root_cardp = null
159 then goto ALL_ROOT_CARDS_GOTTEN;
160
161 do vol_idx = 1 to hbound (root_card_array.volume, 1);
162 /* Scan the card. */
163 subsys_name = root_card.volume (vol_idx).subsystem;
164 /* Pick up ssname */
165 drive_name = root_card.volume (vol_idx).drive;
166
167 sv_idx = verify (rtrim (drive_name), VALID_NUMBERS);
168 /* check for non-numeric character */
169 if sv_idx = 0
170 then do; /* non-subvolume device */
171 drive_no = bin (drive_name, 17);
172 sv_no = -1;
173 end;
174 else if sv_idx > 1
175 then do; /* possible subvolume device */
176 drive_no = bin (substr (drive_name, 1, sv_idx - 1), 17);
177 sv_no = index (valid_sv_string, substr (rtrim (drive_name), sv_idx)) - 1;
178 if sv_no = -1 /* bad subvolume indicator */
179 then goto invalid_drive;
180 end;
181 else do; /* no valid drive number */
182 invalid_drive:
183 call syserr (CRASH, "^a: Invalid device on root card ^a_^a.", ME, subsys_name, drive_name);
184 code = error_table_$bad_arg; /* In case someone types GO */
185 goto RETURN;
186 end;
187
188 n_roots_found = n_roots_found + 1;
189
190 if n_roots_found > hbound (root_vol_loc_info.roots, 1)
191 then do;
192 call syserr (CRASH, "^a: Maximum of ^d RLV vols has been exceeded.", ME, n_roots_found - 1);
193 code = error_table_$too_many_names;/* In case someone types GO */
194 goto RETURN;
195 end;
196
197 do root_idx = 1 to n_roots_found - 1; /* Check for duplications */
198 if (subsys_name = root_vol_loc_info.roots (root_idx).subsys)
199 & (drive_no = root_vol_loc_info (root_idx).drive) & (sv_no = root_vol_loc_info (root_idx).subvol)
200 then do;
201 call syserr (CRASH, "^a: ^a_^a appears twice on root cards.", ME, subsys_name, drive_name);
202 code = error_table_$bad_arg; /* In case someone types GO */
203 goto RETURN;
204 end;
205 end;
206
207 root_vol_loc_info.roots (n_roots_found).subsys = subsys_name;
208 /* Copy to table. */
209 root_vol_loc_info.roots (n_roots_found).drive = drive_no;
210 root_vol_loc_info.roots (n_roots_found).subvol = sv_no;
211 /* Check to make sure that it matches the one in sys_boot_info. */
212 if n_roots_found = 1
213 then if ^sys_boot_info$assume_config_deck
214 & ((sys_boot_info$disk_device_number ^= root_vol_loc_info.roots (1).drive)
215 | (sys_boot_info$disk_device_sv ^= root_vol_loc_info.roots (1).subvol))
216 then do;
217
218 call syserr (CRASH,
219 "^a: RPV specified in the configuration deck (^a) does not match sys_boot_info (^d^[^a^]).",
220 ME, drive_name, sys_boot_info$disk_device_number, sys_boot_info$disk_device_has_sv,
221 sys_boot_info$disk_device_sv);
222 code = error_table_$bad_arg; /* In case someone types GO */
223 goto RETURN;
224 end;
225 if sys_info$collection_1_phase ^= SERVICE_INITIALIZATION
226 then go to ALL_ROOT_CARDS_GOTTEN; /* only one root vol (rpv) for bce */
227 end;
228
229 goto FIND_MORE_ROOT_CARDS;
230
231
232 ALL_ROOT_CARDS_GOTTEN:
233 if n_roots_found = 0
234 then do;
235 call syserr (CRASH, "^a: No root card.", ME);
236 code = error_table_$noarg; /* In case someone types GO */
237 goto RETURN;
238 end;
239
240 do root_idx = 1 to n_roots_found; /* Now, find all the HC partitions */
241 subsys_name = root_vol_loc_info (root_idx).subsys;
242 /* Copy out for easier reference */
243 drive_no = root_vol_loc_info (root_idx).drive;
244 sv_no = root_vol_loc_info (root_idx).subvol;
245 do tx = 1 to pvt$n_entries; /* Find the right pvte */
246 pvtep = addr (pvt_array (tx));
247 if (pvte.devname = subsys_name) & (pvte.logical_area_number = drive_no) & (pvte.sv_num = sv_no)
248 then goto FOUND_ROOT_VOL_PVTE; /* This is the one */
249 end;
250
251 call syserr (CRASH, "^a: root card specifies nonexistent drive ^a.", ME,
252 DEVICE_NAME (subsys_name, drive_no, sv_no));
253 code = error_table_$bad_arg; /* In case someone types GO */
254 goto RETURN;
255
256 FOUND_ROOT_VOL_PVTE:
257 if root_idx = 1
258 then pvte.rpv = "1"b; /* RPV is defined to be first vol named on */
259 /* the first ROOT card. */
260 pvte.root_lv = "1"b;
261
262 call INIT_HC_PART; /* Enable the supervisor paging partition */
263
264 if pvte.rpv
265 then call ENABLE_RPV; /* Set special info if this is the RPV */
266 end; /* Of loop through root vol specs */
267
268 if pvt$root_vtocx = -1
269 then do; /* Did we find the root? */
270 call syserr (CRASH, "^a: RPV not found.", ME);
271 code = error_table_$bad_arg; /* In case someone types GO */
272 goto RETURN;
273 end;
274 RETURN:
275 return; /* all done */
276
277
278 INIT_HC_PART:
279 proc;
280
281 /* Seek out a hardcore partition on this volume. There ought be one.
282* Allocate and initialize the map for that hc part, thread into PVT. */
283
284 dcl part_idx fixed bin;
285 dcl bce_part_idx fixed bin;
286 dcl file_part_idx fixed bin;
287 dcl log_part_idx fixed bin;
288 dcl baseadd fixed bin (18);
289 dcl totrec fixed bin (18);
290 dcl hc_part_idx fixed bin;
291 dcl DEFAULT_BCE_PART_SIZE fixed bin init (2200) static options (constant);
292 dcl DEFAULT_FILE_PART_SIZE fixed bin init (255) static options (constant);
293 dcl DEFAULT_LOG_PART_SIZE fixed bin init (256) static options (constant);
294
295 if sys_boot_info$rpv_cold_boot & pvte.rpv
296 then do; /* Init the vol. */
297 call init_empty_root (tx, code);
298 if code ^= 0 /* I/O error on drive */
299 then go to RETURN;
300
301 /* sys_boot_info$rpv_cold_boot is turned off in real_initializer, after */
302 /* the config deck is written onto the RPV. */
303
304 end;
305
306 READ_LABEL:
307 call read_disk_label (tx, labelp, problem, code);
308 if code ^= 0 /* guaranteed to mean that there was an I/O error */
309 then do;
310 call syserr$error_code (CRASH, code, "^a: Error reading ^a label. ^a", ME,
311 DEVICE_NAME (pvte.devname, pvte.logical_area_number, pvte.sv_num), problem);
312 go to READ_LABEL; /* retry read if "go" typed. */
313 end;
314 hc_part_idx = PART_SEARCH ("hc", labelp);
315
316 if hc_part_idx = -1 & pvte.rpv
317 then do;
318 call syserr (CRASH, "^a: No part hc on RPV volume ^a.", ME,
319 DEVICE_NAME (pvte.devname, pvte.logical_area_number, pvte.sv_num));
320 code = error_table_$nopart; /* In case someone types GO */
321 goto RETURN;
322 end;
323
324 if pvte.rpv
325 then do;
326 part_idx = PART_SEARCH ("conf", labelp);
327 if part_idx = -1
328 then call ADD_CONF_PART (hc_part_idx, labelp);
329 else sys_boot_info$config_part_frec = labelp -> label.parts (part_idx).frec;
330
331 bce_part_idx = PART_SEARCH ("bce ", labelp);
332 if bce_part_idx ^= -1
333 then if labelp -> label.parts (bce_part_idx).nrec < BCE_PART_LTH
334 then do;
335 call syserr (CRASH, "^a: bce partition is ^d records, must be ^d.", ME,
336 labelp -> label.parts (bce_part_idx).nrec, BCE_PART_LTH);
337 code = error_table_$invalid_elsize;
338 /* In case someone types GO */
339 goto RETURN;
340 end;
341
342 file_part_idx = PART_SEARCH ("file", labelp);
343
344 log_part_idx = PART_SEARCH ("log ", labelp);
345
346 if bce_part_idx = -1 | file_part_idx = -1 | log_part_idx = -1
347 then call ADD_BM_PARTS;
348 end;
349
350 /* Copy parameters for HC part into PVT */
351
352 if hc_part_idx > 0 /* yes, it has a partition */ & sys_info$collection_1_phase = SERVICE_INITIALIZATION
353 then do;
354 baseadd = label.parts (hc_part_idx).frec;
355 totrec = label.parts (hc_part_idx).nrec;
356
357 call init_hc_part (tx, baseadd, totrec);
358
359 /* Thread the hardcore part PVTE's. */
360
361 call make_sdw$thread_hcp (tx);
362
363 pvte.hc_part_used = "1"b; /* See accept_fs_disk */
364 end;
365
366 pvte.permanent = "1"b; /* No demount. */
367 return;
368
369
370 ADD_CONF_PART:
371 procedure (hc_partx, labelp);
372 declare hc_partx fixed bin;
373 declare labelp pointer;
374 declare conf_partx fixed bin;
375
376 call syserr (ANNOUNCE, "^a: Adding config (conf) partition to rpv.", ME);
377
378 conf_partx = labelp -> label.nparts + 1;
379 if conf_partx > hbound (labelp -> label.parts, 1)
380 then do;
381 call syserr (CRASH, "^a: No room in rpv label for conf partition.", ME);
382 code = error_table_$noalloc; /* In case someone types GO */
383 goto RETURN;
384 end;
385 labelp -> label.nparts = conf_partx;
386 labelp -> label.parts (conf_partx).part = "conf";
387 labelp -> label.parts (conf_partx).frec =
388 (labelp -> label.parts (hc_partx).frec + labelp -> label.parts (hc_partx).nrec) - 4;
389 /* shave off */
390 labelp -> label.parts (conf_partx).nrec = 4;
391 labelp -> label.parts (hc_partx).nrec = labelp -> label.parts (hc_partx).nrec - 4;
392 WRITE_LABEL:
393 call write_disk (tx, (LABEL_ADDR), labelp, code);
394 if code ^= 0
395 then do;
396 call syserr$error_code (CRASH, code, "^a: Error writing rpv label on ^a.", ME,
397 DEVICE_NAME (pvte.devname, pvte.logical_area_number, pvte.sv_num));
398 goto WRITE_LABEL; /* retry write, if "go" typed. */
399 end;
400 sys_boot_info$config_part_frec = labelp -> label.parts (conf_partx).frec;
401 return;
402 end ADD_CONF_PART;
403
404 ADD_BM_PARTS:
405 proc;
406 dcl first_new_part char (4); /* name of first part to add */
407 dcl last_part_idx fixed bin; /* index in label for last part to add */
408 dcl partition_start fixed bin; /* record number thereof */
409 dcl total_part_size fixed bin; /* to be added */
410
411 call syserr (ANNOUNCE, "^a: Adding ^[bce ^;^]^[file ^;^]^[log ^;^]partition(s) to rpv.", ME, bce_part_idx = -1,
412 file_part_idx = -1, log_part_idx = -1);
413
414 total_part_size = 0;
415 first_new_part = "";
416 last_part_idx = labelp -> label.nparts;
417 if bce_part_idx = -1
418 then do;
419 total_part_size = total_part_size + DEFAULT_BCE_PART_SIZE;
420 last_part_idx = last_part_idx + 1;
421 if first_new_part = ""
422 then first_new_part = "bce ";
423 end;
424 if file_part_idx = -1
425 then do;
426 total_part_size = total_part_size + DEFAULT_FILE_PART_SIZE;
427 last_part_idx = last_part_idx + 1;
428 if first_new_part = ""
429 then first_new_part = "file";
430 end;
431 if log_part_idx = -1
432 then do;
433 total_part_size = total_part_size + DEFAULT_LOG_PART_SIZE;
434 last_part_idx = last_part_idx + 1;
435 if first_new_part = ""
436 then first_new_part = "log ";
437 end;
438 if last_part_idx > hbound (labelp -> label.parts, 1)
439 then do;
440 call syserr (CRASH, "^a: No room in rpv label for partitions.", ME);
441 code = error_table_$noalloc; /* In case someone types GO */
442 goto RETURN;
443 end;
444
445 call create_rpv_partition (tx, labelp, total_part_size, first_new_part, code);
446 if code ^= 0
447 then do;
448 call syserr$error_code (CRASH, code, "^a: Error adding partitions to rpv on ^a.", ME,
449 DEVICE_NAME (pvte.devname, pvte.logical_area_number, pvte.sv_num));
450 goto RETURN; /* In case someone types GO */
451 end;
452
453 /* Trim space from one partition for others. */
454
455 partition_start = labelp -> label.parts (labelp -> label.nparts).frec;
456 labelp -> label.nparts = labelp -> label.nparts - 1;
457 if bce_part_idx = -1
458 then do;
459 labelp -> label.nparts, bce_part_idx = labelp -> label.nparts + 1;
460 labelp -> label.parts (bce_part_idx).nrec = DEFAULT_BCE_PART_SIZE;
461 labelp -> label.parts (bce_part_idx).part = "bce ";
462 labelp -> label.parts (bce_part_idx).frec = partition_start;
463 partition_start = partition_start + DEFAULT_BCE_PART_SIZE;
464 end;
465 if file_part_idx = -1
466 then do;
467 labelp -> label.nparts, file_part_idx = labelp -> label.nparts + 1;
468 labelp -> label.parts (file_part_idx).nrec = DEFAULT_FILE_PART_SIZE;
469 labelp -> label.parts (file_part_idx).part = "file";
470 labelp -> label.parts (file_part_idx).frec = partition_start;
471 partition_start = partition_start + DEFAULT_FILE_PART_SIZE;
472 end;
473 if log_part_idx = -1
474 then do;
475 labelp -> label.nparts, log_part_idx = labelp -> label.nparts + 1;
476 labelp -> label.parts (log_part_idx).nrec = DEFAULT_LOG_PART_SIZE;
477 labelp -> label.parts (log_part_idx).part = "log ";
478 labelp -> label.parts (log_part_idx).frec = partition_start;
479 partition_start = partition_start + DEFAULT_LOG_PART_SIZE;
480 end;
481
482 WRITE_LABEL:
483 call write_disk (tx, (LABEL_ADDR), labelp, code); /* show trimmed part to disk */
484 if code ^= 0
485 then do;
486 call syserr$error_code (CRASH, code, "^a: Error writing rpv label on ^a.", ME,
487 DEVICE_NAME (pvte.devname, pvte.logical_area_number, pvte.sv_num));
488 goto WRITE_LABEL; /* retry write, if "go" typed. */
489 end;
490 end ADD_BM_PARTS;
491 end INIT_HC_PART;
492
493
494 ENABLE_RPV:
495 procedure;
496
497 /* This procedure is called to set up the RPV */
498 /* Implicit parameters: tx, device_type */
499 /* Also fills the location of the bce partition in sys_boot_info */
500
501
502 dcl bce_partx fixed bin;
503 dcl sys_boot_info$bce_part_frec
504 external fixed bin (18);
505 dcl sys_boot_info$bce_part_nrec
506 external fixed bin (18);
507
508 pvt$root_pvtx = tx;
509 sst$root_pvtx = tx;
510
511 READ_RPV_LABEL:
512 call read_disk_label (tx, labelp, problem, code); /* Get label from disk pack */
513 if code ^= 0
514 then do;
515 call syserr$error_code (CRASH, code, "^a: Error reading RPV label on ^a. ^a", ME,
516 DEVICE_NAME (pvte.devname, pvte.logical_area_number, pvte.sv_num), problem);
517 go to READ_RPV_LABEL; /* retry read if "go" typed. */
518 end;
519
520 if ^label.root.here
521 then do;
522 call syserr (CRASH, "^a: ^a is not the rpv, but rather is ^a.", ME,
523 DEVICE_NAME (pvte.devname, pvte.logical_area_number, pvte.sv_num), label.pv_name);
524 code = error_table_$bad_volid; /* In case someone types GO */
525 go to RETURN;
526 end;
527
528 bce_partx = PART_SEARCH ("bce ", labelp);
529 if bce_partx = -1
530 then sys_boot_info$bce_part_frec = -1; /* None defined */
531 else do;
532 sys_boot_info$bce_part_frec = label.parts (bce_partx).frec;
533 sys_boot_info$bce_part_nrec = label.parts (bce_partx).nrec;
534 end;
535
536 pvt$root_pvid = label.pvid; /* This IS the root */
537 pvte.pvid = label.pvid;
538 pvte.lvid = label.lvid;
539 pvt$root_vtocx = label.root.root_vtocx;
540 pvt$root_lvid = label.lvid;
541
542 pvt$prev_shutdown_state = label.root.shutdown_state;
543 pvt$prev_esd_state = label.root.esd_state;
544
545 pvt$disk_table_vtocx = label.root.disk_table_vtocx;
546 pvt$disk_table_uid = label.root.disk_table_uid;
547
548 return;
549 end ENABLE_RPV;
550
551 DEVICE_NAME:
552 procedure (subsys, drive, sv) returns (char (8));
553 declare subsys char (4) aligned;
554 declare drive fixed bin (8) unal;
555 declare p99 picture "99";
556 declare sv fixed bin;
557 if sv = -1
558 then return (subsys || "_" || convert (p99, drive) || " ");
559 else return (subsys || "_" || convert (p99, drive) || valid_sv_array (sv));
560 end DEVICE_NAME;
561
562
563 PART_SEARCH:
564 procedure (part, labelp) returns (fixed bin);
565 declare part character (4);
566 declare part_idx fixed bin;
567 declare labelp pointer;
568
569 do part_idx = 1 to labelp -> label.nparts while (labelp -> label.parts (part_idx).part ^= part);
570 /* Seek out HC part. */
571 end;
572 if part_idx <= labelp -> label.nparts
573 then return (part_idx);
574 else return (-1);
575 end PART_SEARCH;
576
577 /* format: off */
578 /* BEGIN INCLUDE FILE...disk_pack.incl.pl1 Last Modified January 1982 for new volume map */
1 2
1 3
1 4
1 5
1 6 /****^ HISTORY COMMENTS:
1 7* 1) change(86-01-14,Fawcett), approve(86-05-13,MCR7383),
1 8* audit(86-05-14,LJAdams), install(86-07-18,MR12.0-1098):
1 9* Add vars PAGE_SIZE and VTOCE_SIZE, Also change the SECTORS_PER_VTOCE and
1 10* VTOCES_PER_RECORD form fixed bin constants to arrays of fixed bin
1 11* constants indexed by device type as defined in fs_dev_types.incl.pl1.
1 12* This was done for support of the 3380, and 3390 devices for 512_WORD_IO.
1 13* 2) change(86-10-21,Fawcett), approve(86-10-21,MCR7533),
1 14* audit(86-10-21,Farley), install(86-10-22,MR12.0-1193):
1 15* Change PAGE_SIZE and VTOCE_SIZE from automatic to static constants.
1 16* END HISTORY COMMENTS */
1 17
1 18
1 19 /*
1 20* All disk packs have the standard layout described below:
1 21*
1 22* Record 0 : contains the label, as declared in fs_vol_label.incl.pl1.
1 23* Record 1 to 3 : contains the volume map, as declared in vol_map.incl.pl1
1 24* Record 4 to 5 : contains the dumper bit map, as declared in dumper_bit_map.incl.pl1
1 25* Record 6 : contains the vtoc map, as declared in vtoc_map.incl.pl1
1 26* Record 7 : formerly contained bad track list; no longer used.
1 27* Records 8 to n-1 : contain the array of vtoc entries; ( n is specified in the label)
1 28* each record contains 5 192-word vtoc entries. The last 64 words are unused.
1 29* Records n to N-1 : contain the pages of the Multics segments. ( N is specified in the label)
1 30*
1 31* Sundry partitions may exist within the region n to N-1, withdrawn or not as befits the meaning
1 32* of the particular partition.
1 33*
1 34*
1 35*
1 36* A conceptual declaration for a disk pack could be:
1 37*
1 38* dcl 1 disk_pack,
1 39* 2 label_record (0 : 0) bit(36 * 1024),
1 40* 2 volume_map_record (1 : 3) bit(36 * 1024),
1 41* 2 dumper_bit_map_record (4 : 5) bit(36 * 1024),
1 42* 2 vtoc_map_record (6 : 6) bit(36 * 1024),
1 43* 2 spare_record (7 : 7) bit(36 * 1024),
1 44* 2 vtoc_array_records (8 : n-1),
1 45* 3 vtoc_entry ( 5 ) bit(36 * 192),
1 46* 3 unused bit(36 * 64),
1 47* 2 Multics_pages_records (n : N-1) bit(36 * 1024);
1 48*
1 49*
1 50*
1 51*
1 52**/
1 53
1 54 dcl (LABEL_ADDR init (0), /* Address of Volume Label */
1 55 VOLMAP_ADDR init (1), /* Address of first Volume Map record */
1 56 DUMPER_BIT_MAP_ADDR init (4), /* For initial release compaitiblity */
1 57 VTOC_MAP_ADDR init (6), /* Address of first VTOC Map Record */
1 58 VTOC_ORIGIN init (8), /* Address of first record of VTOC */
1 59 DEFAULT_HCPART_SIZE init (1000), /* Size of Hardcore Partition */
1 60 MAX_VTOCE_PER_PACK init (31774)) /* Limited by size of VTOC Map */
1 61 fixed bin (17) int static options (constant);
1 62
1 63 /* SECTORS_PER_VTOCE & VTOCES_PER_RECORD are indexed via device type as */
1 64 /* defined by fs_dev_types and extracted form the disk_table entry (dte) */
1 65 /* or the physical volume table entry (pvte) device type. */
1 66
1 67 dcl PAGE_SIZE fixed bin (17) init (1024) static options (constant);
1 68 dcl VTOCE_SIZE fixed bin (17) init (192) static options (constant);
1 69
1 70 dcl SECTORS_PER_VTOCE (9) fixed bin static options (constant) init
1 71 (0, 3, 3, 3, 3, 3, 3, 1, 1);
1 72 dcl VTOCES_PER_RECORD (9) fixed bin static options (constant) init
1 73 (0, 5, 5, 5, 5, 5, 5, 2, 2);
1 74 dcl SECTORS_PER_RECORD (9) fixed bin static options (constant) init
1 75 (0, 16, 16, 16, 16, 16, 16, 2, 2);
1 76
1 77 /* END INCLUDE FILE...disk_pack.incl.pl1 */
578
579 /* BEGIN INCLUDE FILE ... pvt.incl.pl1 ... last modified January 1982 */
2 2
2 3
2 4 /* The physical volume table (PVT) is a wired-down table.
2 5* It has one entry for each spindle present, be it for
2 6* Storage System or "I/O" use.
2 7**/
2 8
2 9 dcl pvt$ ext,
2 10 pvtp ptr;
2 11
2 12
2 13 dcl 1 pvt based (pvtp) aligned,
2 14
2 15 2 n_entries fixed bin (17), /* number of PVT entries */
2 16 2 max_n_entries fixed bin (17), /* max number of PVT entries */
2 17 2 n_in_use fixed bin (17), /* number of PVT entries in use */
2 18 2 rwun_pvtx fixed bin, /* rewind_unloading pvtx */
2 19 2 shutdown_state fixed bin, /* state of previous shutdown */
2 20 2 esd_state fixed bin, /* state of ESD, >0 iff in ESD */
2 21 2 prev_shutdown_state fixed bin, /* shutdown state of previous bootload */
2 22 2 prev_esd_state fixed bin, /* ESD state of previous bootload */
2 23
2 24 2 time_of_bootload fixed bin (71), /* Time of bootload */
2 25 2 root_lvid bit (36) aligned, /* Logical volume ID of Root Logical Volume (RLV) */
2 26 2 root_pvid bit (36) aligned, /* Physical volume ID of Root Physical Volume (RPV) */
2 27 2 root_pvtx fixed bin, /* Index to PVTE for Root Physical Volume (RPV) */
2 28 2 root_vtocx fixed bin, /* VTOCE index for root (>) */
2 29 2 disk_table_vtocx fixed bin, /* VTOCE index for disk table on RPV */
2 30 2 disk_table_uid bit (36) aligned, /* File System UID for disk_table */
2 31
2 32 2 rpvs_requested bit (1) aligned, /* RPVS keyword given on BOOT */
2 33 2 rpv_needs_salv bit (1) aligned, /* RPV required (not requested) salvage */
2 34 2 rlv_needs_salv bit (1) aligned, /* RLV required (not requested) salvage */
2 35 2 volmap_lock_wait_constant bit (36) aligned,/* For constructing wait event: OR pvte_rel into lower */
2 36 2 volmap_idle_wait_constant bit (36) aligned,/* For constructing wait event: OR pvte_rel into lower */
2 37 2 vtoc_map_lock_wait_constant bit (36) aligned, /* For constructing wait event: OR pvte_rel into lower */
2 38 2 n_volmap_locks_held fixed bin (17), /* Current number of volmap locks held */
2 39 2 n_vtoc_map_locks_held fixed bin (17), /* Current number of VTOC Map locks held */
2 40
2 41 2 last_volmap_time fixed bin (71), /* Time a volmap was last locked/unlocked */
2 42 2 last_vtoc_map_time fixed bin (71), /* Time a VTOC Map was last locked/unlocked */
2 43 2 total_volmap_lock_time fixed bin (71), /* Total time volmap's were locked (integral) */
2 44 2 total_vtoc_map_lock_time fixed bin (71), /* Total time VTOC Maps were locked (integral) */
2 45
2 46 2 n_volmap_locks fixed bin (35), /* Number times a volmap was locked */
2 47 2 n_vtoc_map_locks fixed bin (35), /* Number times a vtoc_map was locked */
2 48 2 volmap_lock_nowait_calls fixed bin (35), /* Number calls to lock volmap, no wait */
2 49 2 volmap_lock_nowait_fails fixed bin (35), /* Number times lock failed */
2 50 2 volmap_lock_wait_calls fixed bin (35), /* Number calls to lock volmap, wait */
2 51 2 volmap_lock_wait_fails fixed bin (35), /* Number times lock failed */
2 52 2 pad (2) bit (36) aligned,
2 53
2 54 2 array fixed bin (71); /* Array of PVTE's -- must be double-word aligned */
2 55
2 56
2 57
2 58 /* END INCLUDE FILE ...pvt.incl.pl1 */
579
580 /* START OF: pvte.incl.pl1 July 1982 * * * * * * * * * * * * * * * * */
3 2
3 3 /* Added pc_vacating, Benson Margulies 84-10-17 */
3 4
3 5 /****^ HISTORY COMMENTS:
3 6* 1) change(86-04-11,Fawcett), approve(86-04-11,MCR7383),
3 7* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098):
3 8* Add the support for subvolumes
3 9* 2) change(86-04-11,Lippard), approve(86-04-11,MCR7309),
3 10* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098):
3 11* Add root_lv flag to mount RLVs that do not have hardcore partitions.
3 12* 3) change(88-05-27,GWMay), approve(88-05-27,MCR7883),
3 13* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061):
3 14* Added inconsistent_dbm bit for determining the status of volume
3 15* dumper bit maps.
3 16* END HISTORY COMMENTS */
3 17
3 18 dcl pvt$array aligned external;
3 19 dcl pvt$max_n_entries fixed bin external;
3 20
3 21 dcl pvt_arrayp ptr;
3 22 dcl pvtep ptr;
3 23
3 24 dcl 1 pvt_array (pvt$max_n_entries) aligned like pvte based (pvt_arrayp);
3 25
3 26 dcl 1 pvte based (pvtep) aligned,
3 27
3 28 2 pvid bit (36), /* physical volume ID */
3 29
3 30 2 lvid bit (36), /* logical volume ID */
3 31
3 32 2 dmpr_in_use (3) bit (1) unaligned, /* physical volume dumper interlock */
3 33 2 is_sv bit (1) unaligned, /* true if this entry defines a subvolume */
3 34 2 root_lv bit (1) unaligned, /* true if this is on the root LV */
3 35 2 removable_pack bit (1) unaligned, /* true if packs are eremoveable */
3 36 2 inconsistent_dbm bit (1) unaligned, /* true if trouble count is incremented */
3 37 2 pad3 bit (2) unaligned,
3 38 2 brother_pvtx fixed bin (8) unaligned,/* next pvte in lv chain */
3 39 2 skip_queue_count fixed bin (18) unsigned unaligned, /* number of times this pv skipped for per-proc allocation due to saturation */
3 40
3 41
3 42
3 43 2 devname char (4), /* device name */
3 44
3 45 (2 device_type fixed bin (8), /* device type */
3 46 2 logical_area_number fixed bin (8), /* disk drive number */
3 47 2 used bit (1), /* TRUE if this entry is used */
3 48 2 storage_system bit (1), /* TRUE for storage system (vs io disk) */
3 49 2 permanent bit (1), /* TRUE if cannot be demounted */
3 50 2 testing bit (1), /* Protocol bit for read_disk$test */
3 51 2 being_mounted bit (1), /* TRUE if the physical volume is being mounted */
3 52 2 being_demounted bit (1), /* TRUE if the pysical volume is being demounted */
3 53 2 check_read_incomplete bit (1), /* page control should check read incomplete */
3 54 2 device_inoperative bit (1), /* TRUE if disk_control decides dev busted */
3 55 2 rpv bit (1), /* TRUE if this is the root physical volume */
3 56 2 scav_check_address
3 57 bit (1), /* TRUE is page control should check deposits/withdrawals against scavenger table */
3 58 2 deposit_to_volmap bit (1), /* TRUE if deposits should got to volume map, not stock */
3 59 2 being_demounted2 bit (1), /* No more vtoc I/O during demount */
3 60 2 pc_vacating bit (1), /* No more withdraws from this volume -- for debugging */
3 61 2 vacating bit (1), /* don't put new segs on this vol */
3 62 2 hc_part_used bit (1), /* HC part set up by init_pvt */
3 63 2 volmap_lock_notify bit (1) unal, /* TRUE if notify required when volmap lock is unlocked */
3 64 2 volmap_idle_notify bit (1) unal, /* TRUE if notify required when volmap state is idle */
3 65 2 vtoc_map_lock_notify bit (1) unal, /* TRUE if notify required when vtoc map lock is unlocked */
3 66
3 67
3 68 2 n_free_vtoce fixed bin (17), /* number of free VTOC entries */
3 69 2 vtoc_size fixed bin (17), /* size of the VTOC part of the disk - in records */
3 70
3 71 2 dbmrp (2) bit (18), /* rel ptr to dumber bit maps for this volume */
3 72
3 73 2 nleft fixed bin (17), /* number of records left */
3 74 2 totrec fixed bin (17)) unaligned, /* Total records in this map */
3 75
3 76 2 dim_info bit (36), /* Information peculiar to DIM */
3 77 2 sv_num fixed bin, /* the number of this subvolume starting at 0 */
3 78 2 num_of_svs fixed bin, /* number of subvolumes for this device */
3 79 2 records_per_cyl fixed bin,
3 80 2 record_factor fixed bin, /* the record factor for logical to real seek calculation */
3 81 2 sv_name char (2) aligned,
3 82 2 curn_dmpr_vtocx (3) fixed bin unaligned,/* current vtocx being dumped */
3 83 2 n_vtoce fixed bin unaligned, /* number of vtoce on this volume */
3 84
3 85 2 baseadd fixed bin (18) uns unaligned, /* Base of paging region */
3 86 2 pad2 bit (18) unaligned,
3 87
3 88 2 pad_for_mod_2 fixed bin (35), /* Make volmap_seg_sdw double word aligned */
3 89
3 90 2 volmap_seg_sdw fixed bin (71), /* SDW describing volmap_seg */
3 91
3 92 2 volmap_astep ptr unal, /* Packed pointer to ASTE for volmap_seg */
3 93
3 94 2 volmap_offset bit (18) unal, /* Offset in volmap_seg of volume map */
3 95 2 vtoc_map_offset bit (18) unal, /* Offset in volmap_seg of VTOC map */
3 96
3 97
3 98 2 volmap_lock bit (36) aligned, /* Lock on volume map operations */
3 99
3 100 2 vtoc_map_lock bit (36) aligned, /* Lock on VTOC map operations */
3 101
3 102 2 volmap_stock_ptr ptr unal, /* Packed pointer to record stock */
3 103
3 104 2 vtoc_map_stock_ptr ptr unal, /* Packed pointer to VTOCE stock */
3 105
3 106 2 volmap_async_state fixed bin (17) unaligned, /* Asynchronous update state of Volume Map */
3 107 2 volmap_async_page fixed bin (17) unaligned, /* Page number for asynchronous update */
3 108
3 109 2 vol_trouble_count fixed bin (17) unaligned, /* Count of inconsistencies since last salvage */
3 110 2 scavenger_block_rel bit (18) unaligned; /* Offset to scavenger block, ^0 => scavenging */
3 111
3 112
3 113 dcl (VOLMAP_ASYNC_IDLE init (0), /* for volmap_async_state */
3 114 VOLMAP_ASYNC_READ init (1),
3 115 VOLMAP_ASYNC_WRITE init (2)) fixed bin int static options (constant);
3 116
3 117
3 118 /* END OF: pvte.incl.pl1 * * * * * * * * * * * * * * * * */
580
581 /* BEGIN include file collection_1_phases.incl.pl1 */
4 2
4 3 /* Symbolic names for the various collection1 phases.
4 4*Keith Loepere, October 1983. */
4 5
4 6 /* format: style4,indattr,ifthenstmt,ifthen,idind33,^indcomtxt */
4 7
4 8 dcl sys_info$collection_1_phase fixed bin external static;
4 9
4 10 dcl EARLY_INITIALIZATION fixed bin init (1) static options (constant); /* phase to find the config deck */
4 11 dcl BOOT_INITIALIZATION fixed bin init (2) static options (constant); /* phase to setup up crash handler, bce */
4 12 dcl SERVICE_INITIALIZATION fixed bin init (3) static options (constant); /* phase to set up for service */
4 13
4 14 /* These first 3 (EARLY, BOOT and SERVICE) must be 1, 2, 3 in that order so
4 15*programs can simply tell apart the booting phases from all others (crash or
4 16*recovery type phases). */
4 17
4 18 dcl CRASH_INITIALIZATION fixed bin init (4) static options (constant); /* phase to set up bce after crash/shut down */
4 19 dcl RE_EARLY_INITIALIZATION fixed bin init (5) static options (constant); /* retry boot initialization given safe config to a new early level */
4 20 dcl BCE_CRASH_INITIALIZATION fixed bin init (6) static options (constant); /* retry boot initialization to give a new boot level given a crash of bce */
4 21 dcl SHUT_INITIALIZATION fixed bin init (7) static options (constant); /* same as boot but don't load new disk mpcs */
4 22
4 23 dcl COLLECTION_1_PHASE_NAMES (7) char (16) unal static options (constant) init
4 24 ("early", "boot", "service", "crash", "re_early", "bce_crash", "shut");
4 25
4 26 /* END include file collection_1_phases.incl.pl1 */
581
582 /* BEGIN INCLUDE FILE ... config_root_card.incl.pl1 ... 11/27/80 W. Olin Sibert */
5 2
5 3
5 4
5 5 /****^ HISTORY COMMENTS:
5 6* 1) change(86-01-14,Fawcett), approve(86-05-13,MCR7383),
5 7* audit(86-05-14,LJAdams), install(86-07-18,MR12.0-1098):
5 8* Change the drive dcl from fixed bin to char (4) for subvolume support.
5 9* 2) change(87-05-07,Fawcett), approve(87-05-07,MCR7676),
5 10* audit(87-05-11,Beattie), install(87-07-15,MR12.1-1041):
5 11* Change the drive dcl in root_array_card from fixed bin to char (4), this
5 12* was an oversight in MCR7383.
5 13* END HISTORY COMMENTS */
5 14
5 15
5 16 dcl root_cardp pointer; /* pointer to ROOT card */
5 17
5 18 dcl 1 root_card aligned based (root_cardp), /* ROOT card declaration */
5 19 2 word char (4), /* "root" */
5 20 2 volume (7), /* List of RLV volumes. RPV is first in the list */
5 21 3 subsystem char (4), /* Disk subsystem name */
5 22 3 drive char (4), /* Disk drive number/subvol */
5 23
5 24 2 type_word aligned,
5 25 3 field_type (14) bit (2) unaligned, /* type of each field; see config_deck.incl.pl1 */
5 26 3 pad1 bit (4) unaligned,
5 27 3 n_fields fixed bin (4) unsigned unaligned; /* number of fields used on card */
5 28
5 29 dcl 1 root_card_array aligned based (root_cardp), /* Overlay for counting volumes */
5 30 2 pad bit (36) aligned,
5 31 2 volume (divide (root_card.n_fields, 2, 17, 0)),
5 32 3 subsystem char (4), /* Disk subsystem name */
5 33 3 drive char (4); /* Disk drive number */
5 34
5 35 dcl ROOT_CARD_WORD char (4) aligned internal static options (constant) init ("root");
5 36
5 37 /* END INCLUDE FILE ... config_root_card.incl.pl1 */
582
583 /* BEGIN INCLUDE FILE syserr_constants.incl.pl1 ... 11/11/80 W. Olin Sibert */
6 2 /* 85-02-12, EJ Sharpe - Added sorting class constants, removed AIM_MESSAGE, added new action code names. */
6 3 /* 85-04-24, G. Palter - Renamed SYSERR_UNUSED_10 to SYSERR_RING1_ERROR to reflect its actual use. */
6 4
6 5 /* This include file has an ALM version. Keep 'em in sync! */
6 6
6 7 dcl (
6 8
6 9 /* The following constants define the message action codes. This indicates
6 10*how a message is to be handled. */
6 11
6 12 SYSERR_CRASH_SYSTEM init (1),
6 13 CRASH init (1), /* Crash the system, and bleat plaintively. */
6 14
6 15 SYSERR_TERMINATE_PROCESS init (2),
6 16 TERMINATE_PROCESS init (2), /* Terminate the process, print the message, and beep. */
6 17
6 18 SYSERR_PRINT_WITH_ALARM init (3),
6 19 BEEP init (3), /* Beep and print the message on the console. */
6 20
6 21 SYSERR_PRINT_ON_CONSOLE init (0),
6 22 ANNOUNCE init (0), /* Just print the message on the console. */
6 23
6 24 SYSERR_LOG_OR_PRINT init (4),
6 25 LOG init (4), /* Log the message, or print it if it can't be logged */
6 26
6 27 SYSERR_LOG_OR_DISCARD init (5),
6 28 JUST_LOG init (5), /* Just try to log the message, and discard it if it can't be */
6 29
6 30
6 31 /* The following constants are added to the normal severities to indicate
6 32*different sorting classes of messages. */
6 33
6 34 SYSERR_SYSTEM_ERROR init (00), /* indicates a standard level system error */
6 35 SYSERR_RING1_ERROR init (10), /* indicates an error detected in ring 1 (mseg_, RCP) */
6 36 SYSERR_COVERT_CHANNEL init (20), /* indicates covert channel audit trail message */
6 37 SYSERR_UNSUCCESSFUL_ACCESS init (30), /* indicates access denial audit trail message */
6 38 SYSERR_SUCCESSFUL_ACCESS init (40) /* indicates access grant audit trail message */
6 39 ) fixed bin internal static options (constant);
6 40
6 41 /* END INCLUDE FILE syserr_constants.incl.pl1 */
583
584 /* BEGIN INCLUDE FILE ... fs_vol_label.incl.pl1 .. last modified January 1982 for new volume map format */
7 2
7 3 /****^ HISTORY COMMENTS:
7 4* 1) change(86-04-10,Fawcett), approve(86-04-10,MCR7383),
7 5* audit(86-05-12,Coppola), install(86-07-18,MR12.0-1098):
7 6* Add the subvolume info.
7 7* 2) change(88-05-27,GWMay), approve(88-05-27,MCR7883),
7 8* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061):
7 9* Added inconsistent_dbm bit used to determine consistency of volume
7 10* dumper bit maps.
7 11* END HISTORY COMMENTS */
7 12
7 13 /* This is the label at fixed location of each physical volume. Length 1 page */
7 14 /* Note: fsout_vol clears pad fields before writing the label */
7 15
7 16 dcl labelp ptr;
7 17
7 18 dcl 1 label based (labelp) aligned,
7 19
7 20 /* First comes data not used by Multics.. for compatibility with GCOS */
7 21
7 22 2 gcos (5*64) fixed bin,
7 23
7 24 /* Now we have the Multics label */
7 25
7 26 2 Multics char (32) init ("Multics Storage System Volume"), /* Identifier */
7 27 2 version fixed bin, /* Version 1 */
7 28 2 mfg_serial char (32), /* Manufacturer's serial number */
7 29 2 pv_name char (32), /* Physical volume name. */
7 30 2 lv_name char (32), /* Name of logical volume for pack */
7 31 2 pvid bit (36), /* Unique ID of this pack */
7 32 2 lvid bit (36), /* unique ID of its logical vol */
7 33 2 root_pvid bit (36), /* unique ID of the pack containing the root. everybody must agree. */
7 34 2 time_registered fixed bin (71), /* time imported to system */
7 35 2 n_pv_in_lv fixed bin, /* # phys volumes in logical */
7 36 2 vol_size fixed bin, /* total size of volume, in records */
7 37 2 vtoc_size fixed bin, /* number of recs in fixed area + vtoc */
7 38 2 not_used bit (1) unal, /* used to be multiple_class */
7 39 2 private bit (1) unal, /* TRUE if was registered as private */
7 40 2 inconsistent_dbm bit (1) unal, /* TRUE if ESD-less crash */
7 41 2 flagpad bit (33) unal,
7 42 2 max_access_class bit (72), /* Maximum access class for stuff on volume */
7 43 2 min_access_class bit (72), /* Minimum access class for stuff on volume */
7 44 2 password bit (72), /* not yet used */
7 45 2 number_of_sv fixed bin, /* if = 0 not a subvolume else the number of svs */
7 46 2 this_sv fixed bin, /* what subvolume number it is */
7 47 2 sub_vol_name char (1), /* what subvolume name (a b c d) it is */
7 48 2 pad1 (13) fixed bin,
7 49 2 time_mounted fixed bin (71), /* time mounted */
7 50 2 time_map_updated fixed bin (71), /* time vmap known good */
7 51
7 52 /* The next two words overlay time_unmounted on pre-MR10 systems. This
7 53* forces a salvage if an MR10 pack is mounted on an earlier system.
7 54* */