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