1 /* 2 * Copyright (c) 1982, 1990 Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 * 7 * @(#)conf.c 7.5 (Berkeley) 03/19/91 8 */ 9 10 #include "sys/param.h" 11 #include "sys/systm.h" 12 #include "sys/buf.h" 13 #include "sys/ioctl.h" 14 #include "sys/tty.h" 15 #include "sys/conf.h" 16 17 int nullop(), enxio(), enodev(), rawread(), rawwrite(), swstrategy(); 18 19 #include "ct.h" 20 #if NCT > 0 21 int ctopen(),ctclose(),ctstrategy(),ctread(),ctwrite(),ctdump(),ctioctl(); 22 #else 23 #define ctopen enxio 24 #define ctclose enxio 25 #define ctstrategy enxio 26 #define ctread enxio 27 #define ctwrite enxio 28 #define ctdump enxio 29 #define ctioctl enxio 30 #endif 31 32 #include "rd.h" 33 #if NRD > 0 34 int rdopen(),rdstrategy(),rdread(),rdwrite(),rddump(),rdioctl(),rdsize(); 35 #else 36 #define rdopen enxio 37 #define rdstrategy enxio 38 #define rdread enxio 39 #define rdwrite enxio 40 #define rddump enxio 41 #define rdioctl enxio 42 #define rdsize 0 43 #endif 44 45 #include "sd.h" 46 #if NSD > 0 47 int sdopen(),sdstrategy(),sdread(),sdwrite(),sddump(),sdioctl(),sdsize(); 48 #else 49 #define sdopen enxio 50 #define sdstrategy enxio 51 #define sdread enxio 52 #define sdwrite enxio 53 #define sddump enxio 54 #define sdioctl enxio 55 #define sdsize 0 56 #endif 57 58 #include "cd.h" 59 #if NCD > 0 60 int cdopen(),cdstrategy(),cdread(),cdwrite(),cddump(),cdioctl(),cdsize(); 61 #else 62 #define cdopen enxio 63 #define cdstrategy enxio 64 #define cdread enxio 65 #define cdwrite enxio 66 #define cddump enxio 67 #define cdioctl enxio 68 #define cdsize 0 69 #endif 70 71 struct bdevsw bdevsw[] = 72 { 73 { ctopen, ctclose, ctstrategy, ctioctl, /*0*/ 74 ctdump, 0, B_TAPE }, 75 { enxio, enxio, enxio, enxio, /*1*/ 76 enxio, 0, 0 }, 77 { rdopen, nullop, rdstrategy, rdioctl, /*2*/ 78 rddump, rdsize, 0 }, 79 { enodev, enodev, swstrategy, enodev, /*3*/ 80 enodev, 0, 0 }, 81 { sdopen, nullop, sdstrategy, sdioctl, /*4*/ 82 sddump, sdsize, 0 }, 83 { cdopen, nullop, cdstrategy, cdioctl, /*5*/ 84 cddump, cdsize, 0 }, 85 /* 6 was "fd" vnode device */ 86 }; 87 int nblkdev = sizeof (bdevsw) / sizeof (bdevsw[0]); 88 89 int cnopen(), cnclose(), cnread(), cnwrite(), cnioctl(), cnselect(); 90 91 int cttyopen(), cttyread(), cttywrite(), cttyioctl(), cttyselect(); 92 93 int mmrw(); 94 #define mmselect seltrue 95 96 #include "pty.h" 97 #if NPTY > 0 98 int ptsopen(),ptsclose(),ptsread(),ptswrite(),ptsstop(); 99 int ptcopen(),ptcclose(),ptcread(),ptcwrite(),ptcselect(); 100 int ptyioctl(); 101 struct tty pt_tty[]; 102 #else 103 #define ptsopen enxio 104 #define ptsclose enxio 105 #define ptsread enxio 106 #define ptswrite enxio 107 #define ptcopen enxio 108 #define ptcclose enxio 109 #define ptcread enxio 110 #define ptcwrite enxio 111 #define ptyioctl enxio 112 #define pt_tty 0 113 #define ptcselect enxio 114 #define ptsstop nullop 115 #endif 116 117 #include "ppi.h" 118 #if NPPI > 0 119 int ppiopen(),ppiclose(),ppiread(),ppiwrite(),ppiioctl(); 120 #else 121 #define ppiopen enxio 122 #define ppiclose enxio 123 #define ppiread enxio 124 #define ppiwrite enxio 125 #define ppiioctl enxio 126 #endif 127 128 #include "ite.h" 129 #if NITE > 0 130 int iteopen(),iteclose(),iteread(),itewrite(),iteioctl(); 131 struct tty ite_tty[]; 132 #else 133 #define iteopen enxio 134 #define iteclose enxio 135 #define iteread enxio 136 #define itewrite enxio 137 #define itestop nullop 138 #define iteioctl enxio 139 #define ite_tty 0 140 #endif 141 142 #include "dca.h" 143 #if NDCA > 0 144 int dcaopen(),dcaclose(),dcaread(),dcawrite(),dcastop(),dcaioctl(); 145 struct tty dca_tty[]; 146 #else 147 #define dcaopen enxio 148 #define dcaclose enxio 149 #define dcaread enxio 150 #define dcawrite enxio 151 #define dcastop nullop 152 #define dcaioctl enxio 153 #define dca_tty 0 154 #endif 155 156 #include "dcm.h" 157 #if NDCM > 0 158 int dcmopen(),dcmclose(),dcmread(),dcmwrite(),dcmstop(),dcmioctl(); 159 struct tty dcm_tty[]; 160 #else 161 #define dcmopen enxio 162 #define dcmclose enxio 163 #define dcmread enxio 164 #define dcmwrite enxio 165 #define dcmstop nullop 166 #define dcmioctl enxio 167 #define dcm_tty 0 168 #endif 169 170 #include "clock.h" 171 #if NCLOCK > 0 172 int clockopen(),clockclose(),clockioctl(),clockmap(); 173 #else 174 #define clockopen enxio 175 #define clockclose enxio 176 #define clockioctl enxio 177 #define clockmap enxio 178 #endif 179 180 #include "bpfilter.h" 181 #if NBPFILTER > 0 182 int bpfopen(),bpfclose(),bpfread(),bpfwrite(),bpfioctl(),bpfselect(); 183 #else 184 #define bpfopen enxio 185 #define bpfclose enxio 186 #define bpfread enxio 187 #define bpfwrite enxio 188 #define bpfioctl enxio 189 #define bpfselect enxio 190 #endif 191 192 int logopen(),logclose(),logread(),logioctl(),logselect(); 193 194 int fdopen(); 195 196 int ttselect(), seltrue(); 197 198 int grfopen(),grfclose(),grfioctl(),grfselect(),grfmap(); 199 200 int hilopen(),hilclose(),hilioctl(),hilmap(),hilselect(),hilread(); 201 202 struct cdevsw cdevsw[] = 203 { 204 { cnopen, cnclose, cnread, cnwrite, /*0*/ 205 cnioctl, nullop, nullop, NULL, 206 cnselect, enodev, NULL }, 207 { cttyopen, nullop, cttyread, cttywrite, /*1*/ 208 cttyioctl, nullop, nullop, NULL, 209 cttyselect, enodev, NULL }, 210 { nullop, nullop, mmrw, mmrw, /*2*/ 211 enodev, nullop, nullop, NULL, 212 mmselect, enodev, NULL }, 213 { nullop, nullop, rawread, rawwrite, /*3*/ 214 enodev, enodev, nullop, NULL, 215 enodev, enodev, swstrategy }, 216 { ptsopen, ptsclose, ptsread, ptswrite, /*4*/ 217 ptyioctl, ptsstop, nullop, pt_tty, 218 ttselect, enodev, NULL }, 219 { ptcopen, ptcclose, ptcread, ptcwrite, /*5*/ 220 ptyioctl, nullop, nullop, pt_tty, 221 ptcselect, enodev, NULL }, 222 { logopen, logclose, logread, enodev, /*6*/ 223 logioctl, enodev, nullop, NULL, 224 logselect, enodev, NULL }, 225 { ctopen, ctclose, ctread, ctwrite, /*7*/ 226 ctioctl, enodev, nullop, NULL, 227 seltrue, enodev, ctstrategy }, 228 { sdopen, nullop, sdread, sdwrite, /*8*/ 229 sdioctl, enodev, nullop, NULL, 230 seltrue, enodev, sdstrategy }, 231 { rdopen, nullop, rdread, rdwrite, /*9*/ 232 rdioctl, enodev, nullop, NULL, 233 seltrue, enodev, rdstrategy }, 234 { grfopen, grfclose, nullop, nullop, /*10*/ 235 grfioctl, enodev, nullop, NULL, 236 grfselect, grfmap, NULL }, 237 { ppiopen, ppiclose, ppiread, ppiwrite, /*11*/ 238 ppiioctl, enodev, nullop, NULL, 239 enodev, enodev, NULL }, 240 { dcaopen, dcaclose, dcaread, dcawrite, /*12*/ 241 dcaioctl, dcastop, nullop, dca_tty, 242 ttselect, enodev, NULL }, 243 { iteopen, iteclose, iteread, itewrite, /*13*/ 244 iteioctl, enodev, nullop, ite_tty, 245 ttselect, enodev, NULL }, 246 { hilopen, hilclose, hilread, nullop, /*14*/ 247 hilioctl, enodev, nullop, NULL, 248 hilselect, hilmap, NULL }, 249 { dcmopen, dcmclose, dcmread, dcmwrite, /*15*/ 250 dcmioctl, dcmstop, nullop, dcm_tty, 251 ttselect, enodev, NULL }, 252 { enodev, enodev, enodev, enodev, /*16*/ 253 enodev, enodev, nullop, NULL, 254 seltrue, enodev, NULL }, 255 { cdopen, nullop, cdread, cdwrite, /*17*/ 256 cdioctl, enodev, nullop, NULL, 257 seltrue, enodev, cdstrategy }, 258 { clockopen, clockclose, nullop, nullop, /*18*/ 259 clockioctl, enodev, nullop, NULL, 260 nullop, clockmap, NULL }, 261 #ifdef notdef 262 { fdopen, nullop, fdread, fdwrite, /*19*/ 263 fdioctl, enodev, nullop, NULL, 264 seltrue, enodev, NULL }, 265 #else 266 { enodev, enodev, enodev, enodev, /*19*/ 267 enodev, enodev, nullop, NULL, 268 seltrue, enodev, NULL }, 269 #endif 270 { enodev, enodev, enodev, enodev, /*20*/ 271 enodev, enodev, nullop, NULL, 272 seltrue, enodev, NULL }, 273 { fdopen, enodev, enodev, enodev, /*21*/ 274 enodev, enodev, enodev, NULL, 275 enodev, enodev, NULL }, 276 { bpfopen, bpfclose, bpfread, bpfwrite, /*22*/ 277 bpfioctl, enodev, enodev, NULL, 278 bpfselect, enodev, NULL }, 279 }; 280 int nchrdev = sizeof (cdevsw) / sizeof (cdevsw[0]); 281 282 int mem_no = 2; /* major device number of memory special file */ 283 284 /* 285 * Swapdev is a fake device implemented 286 * in sw.c used only internally to get to swstrategy. 287 * It cannot be provided to the users, because the 288 * swstrategy routine munches the b_dev and b_blkno entries 289 * before calling the appropriate driver. This would horribly 290 * confuse, e.g. the hashing routines. Instead, /dev/drum is 291 * provided as a character (raw) device. 292 */ 293 dev_t swapdev = makedev(3, 0); 294