1 /*- 2 * Copyright (c) 1991 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 * 7 * @(#)names.c 5.5 (Berkeley) 07/24/92 8 */ 9 10 #if !defined(hp300) && !defined(tahoe) && !defined(vax) 11 char *defdrives[] = { 0 }; 12 #endif 13 14 #ifdef hp300 15 #include <hp/dev/device.h> 16 17 char *defdrives[] = { "sd0", "sd1", "sd2", "rd0", "rd1", "rd2", 0 }; 18 19 int 20 read_names() 21 { 22 register char *p; 23 register u_long hp; 24 static char buf[BUFSIZ]; 25 struct hp_device hdev; 26 struct driver hdrv; 27 char name[10]; 28 29 hp = nl[X_HPDINIT].n_value; 30 if (hp == 0) { 31 (void)fprintf(stderr, 32 "disk init info not in namelist\n"); 33 return (0); 34 } 35 p = buf; 36 for (;; hp += sizeof hdev) { 37 (void)kvm_read(kd, hp, &hdev, sizeof hdev); 38 if (hdev.hp_driver == 0) 39 break; 40 if (hdev.hp_dk < 0 || hdev.hp_alive == 0 || 41 hdev.hp_cdriver == 0) 42 continue; 43 (void)kvm_read(kd, (u_long)hdev.hp_driver, &hdrv, sizeof hdrv); 44 (void)kvm_read(kd, (u_long)hdrv.d_name, name, sizeof name); 45 dr_name[hdev.hp_dk] = p; 46 p += sprintf(p, "%s%d", name, hdev.hp_unit) + 1; 47 } 48 return (1); 49 } 50 #endif /* hp300 */ 51 52 #ifdef tahoe 53 #include <tahoe/vba/vbavar.h> 54 55 char *defdrives[] = { "dk0", "dk1", "dk2", 0 }; 56 57 int 58 read_names() 59 { 60 register char *p; 61 struct vba_device udev, *up; 62 struct vba_driver udrv; 63 char name[10]; 64 static char buf[BUFSIZ]; 65 66 up = (struct vba_device *) nl[X_VBDINIT].n_value; 67 if (up == 0) { 68 (void) fprintf(stderr, 69 "disk init info not in namelist\n"); 70 return (0); 71 } 72 p = buf; 73 for (;; up += sizeof udev) { 74 (void)kvm_read(kd, up, &udev, sizeof udev); 75 if (udev.ui_driver == 0) 76 break; 77 if (udev.ui_dk < 0 || udev.ui_alive == 0) 78 continue; 79 (void)kvm_read(kd, udev.ui_driver, &udrv, sizeof udrv); 80 (void)kvm_read(kd, udrv.ud_dname, name, sizeof name); 81 dr_name[udev.ui_dk] = p; 82 p += sprintf(p, "%s%d", name, udev.ui_unit); 83 } 84 return (1); 85 } 86 #endif /* tahoe */ 87 88 #ifdef vax 89 #include <vax/uba/ubavar.h> 90 #include <vax/mba/mbavar.h> 91 92 char *defdrives[] = { "hp0", "hp1", "hp2", 0 }; 93 94 int 95 read_names() 96 { 97 register char *p; 98 unsigned long mp, up; 99 struct mba_device mdev; 100 struct mba_driver mdrv; 101 struct uba_device udev; 102 struct uba_driver udrv; 103 char name[10]; 104 static char buf[BUFSIZ]; 105 106 mp = nl[X_MBDINIT].n_value; 107 up = nl[X_UBDINIT].n_value; 108 if (mp == 0 && up == 0) { 109 (void)fprintf(stderr, 110 "disk init info not in namelist\n"); 111 return (0); 112 } 113 p = buf; 114 if (mp) 115 for (;; mp += sizeof mdev) { 116 (void)kvm_read(kd, mp, &mdev, sizeof mdev); 117 if (mdev.mi_driver == 0) 118 break; 119 if (mdev.mi_dk < 0 || mdev.mi_alive == 0) 120 continue; 121 (void)kvm_read(kd, mdev.mi_driver, &mdrv, sizeof mdrv); 122 (void)kvm_rea(kd, mdrv.md_dname, name, sizeof name); 123 dr_name[mdev.mi_dk] = p; 124 p += sprintf(p, "%s%d", name, mdev.mi_unit); 125 } 126 if (up) 127 for (;; up += sizeof udev) { 128 (void)kvm_read(kd, up, &udev, sizeof udev); 129 if (udev.ui_driver == 0) 130 break; 131 if (udev.ui_dk < 0 || udev.ui_alive == 0) 132 continue; 133 (void)kvm_read(kd, udev.ui_driver, &udrv, sizeof udrv); 134 (void)kvm_read(kd, udrv.ud_dname, name, sizeof name); 135 dr_name[udev.ui_dk] = p; 136 p += sprintf(p, "%s%d", name, udev.ui_unit); 137 } 138 return (1); 139 } 140 #endif /* vax */ 141 142 #ifdef sun 143 #include <sundev/mbvar.h> 144 145 int 146 read_names() 147 { 148 static int once = 0; 149 struct mb_device mdev; 150 struct mb_driver mdrv; 151 short two_char; 152 char *cp = (char *) &two_char; 153 register struct mb_device *mp; 154 155 mp = (struct mb_device *)nl[X_MBDINIT].n_value; 156 if (mp == 0) { 157 (void)fprintf(stderr, 158 "disk init info not in namelist\n"); 159 return (0); 160 } 161 for (;; ++mp) { 162 (void)kvm_read(kd, mp++, &mdev, sizeof(mdev)); 163 if (mdev.md_driver == 0) 164 break; 165 if (mdev.md_dk < 0 || mdev.md_alive == 0) 166 continue; 167 (void)kvm_read(kd, mdev.md_driver, &mdrv, sizeof(mdrv)); 168 (void)kvm_read(kd, mdrv.mdr_dname, &two_char, sizeof(two_char)); 169 (void)sprintf(dr_name[mdev.md_dk], 170 "%c%c%d", cp[0], cp[1], mdev.md_unit); 171 } 172 return(1); 173 } 174 #endif /* sun */ 175