| 1 | /* |
| 2 | * Copyright (c) 1980 Regents of the University of California. |
| 3 | * All rights reserved. |
| 4 | * |
| 5 | * %sccs.include.redist.c% |
| 6 | * |
| 7 | * @(#)config.h 5.15 (Berkeley) %G% |
| 8 | */ |
| 9 | |
| 10 | /* |
| 11 | * Config. |
| 12 | */ |
| 13 | #include <sys/types.h> |
| 14 | #include <stdlib.h> |
| 15 | #include <string.h> |
| 16 | |
| 17 | #define NODEV ((dev_t)-1) |
| 18 | |
| 19 | struct file_list { |
| 20 | struct file_list *f_next; |
| 21 | char *f_fn; /* the name */ |
| 22 | u_char f_type; /* see below */ |
| 23 | u_char f_flags; /* see below */ |
| 24 | char *f_special; /* special make rule if present */ |
| 25 | char *f_needs; |
| 26 | /* |
| 27 | * Random values: |
| 28 | * swap space parameters for swap areas |
| 29 | * root device, etc. for system specifications |
| 30 | */ |
| 31 | union { |
| 32 | struct { /* when swap specification */ |
| 33 | dev_t fuw_swapdev; |
| 34 | int fuw_swapsize; |
| 35 | } fuw; |
| 36 | struct { /* when system specification */ |
| 37 | dev_t fus_rootdev; |
| 38 | dev_t fus_dumpdev; |
| 39 | } fus; |
| 40 | } fun; |
| 41 | #define f_swapdev fun.fuw.fuw_swapdev |
| 42 | #define f_swapsize fun.fuw.fuw_swapsize |
| 43 | #define f_rootdev fun.fus.fus_rootdev |
| 44 | #define f_dumpdev fun.fus.fus_dumpdev |
| 45 | }; |
| 46 | |
| 47 | /* |
| 48 | * Types. |
| 49 | */ |
| 50 | #define DRIVER 1 |
| 51 | #define NORMAL 2 |
| 52 | #define INVISIBLE 3 |
| 53 | #define PROFILING 4 |
| 54 | #define SYSTEMSPEC 5 |
| 55 | #define SWAPSPEC 6 |
| 56 | |
| 57 | /* |
| 58 | * Attributes (flags). |
| 59 | */ |
| 60 | #define CONFIGDEP 1 |
| 61 | |
| 62 | struct idlst { |
| 63 | char *id; |
| 64 | struct idlst *id_next; |
| 65 | }; |
| 66 | |
| 67 | struct device { |
| 68 | int d_type; /* CONTROLLER, DEVICE, bus adaptor */ |
| 69 | struct device *d_conn; /* what it is connected to */ |
| 70 | char *d_name; /* name of device (e.g. rk11) */ |
| 71 | struct idlst *d_vec; /* interrupt vectors */ |
| 72 | int d_pri; /* interrupt priority */ |
| 73 | int d_addr; /* address of csr */ |
| 74 | int d_unit; /* unit number */ |
| 75 | int d_drive; /* drive number */ |
| 76 | int d_slave; /* slave number */ |
| 77 | #define QUES -1 /* -1 means '?' */ |
| 78 | #define UNKNOWN -2 /* -2 means not set yet */ |
| 79 | int d_dk; /* if init 1 set to number for iostat */ |
| 80 | int d_flags; /* flags for device init */ |
| 81 | char *d_port; /* io port base manifest constant */ |
| 82 | int d_portn; /* io port base (if number not manifest) */ |
| 83 | char *d_mask; /* interrupt mask */ |
| 84 | int d_maddr; /* io memory base */ |
| 85 | int d_msize; /* io memory size */ |
| 86 | int d_drq; /* DMA request */ |
| 87 | int d_irq; /* interrupt request */ |
| 88 | struct device *d_next; /* Next one in list */ |
| 89 | }; |
| 90 | #define TO_NEXUS (struct device *)-1 |
| 91 | #define TO_VBA (struct device *)-2 |
| 92 | |
| 93 | struct config { |
| 94 | char *c_dev; |
| 95 | char *s_sysname; |
| 96 | }; |
| 97 | |
| 98 | /* |
| 99 | * Config has a global notion of which machine type is |
| 100 | * being used. It uses the name of the machine in choosing |
| 101 | * files and directories. Thus if the name of the machine is ``vax'', |
| 102 | * it will build from ``Makefile.vax'' and use ``../vax/inline'' |
| 103 | * in the makerules, etc. |
| 104 | */ |
| 105 | int machine; |
| 106 | char *machinename; |
| 107 | #define MACHINE_VAX 1 |
| 108 | #define MACHINE_TAHOE 2 |
| 109 | #define MACHINE_HP300 3 |
| 110 | #define MACHINE_I386 4 |
| 111 | #define MACHINE_MIPS 5 |
| 112 | #define MACHINE_PMAX 6 |
| 113 | |
| 114 | /* |
| 115 | * For each machine, a set of CPU's may be specified as supported. |
| 116 | * These and the options (below) are put in the C flags in the makefile. |
| 117 | */ |
| 118 | struct cputype { |
| 119 | char *cpu_name; |
| 120 | struct cputype *cpu_next; |
| 121 | } *cputype; |
| 122 | |
| 123 | /* |
| 124 | * A set of options may also be specified which are like CPU types, |
| 125 | * but which may also specify values for the options. |
| 126 | * A separate set of options may be defined for make-style options. |
| 127 | */ |
| 128 | struct opt { |
| 129 | char *op_name; |
| 130 | char *op_value; |
| 131 | struct opt *op_next; |
| 132 | } *opt, *mkopt; |
| 133 | |
| 134 | char *ident; |
| 135 | char *ns(); |
| 136 | char *tc(); |
| 137 | char *qu(); |
| 138 | char *get_word(); |
| 139 | char *get_quoted_word(); |
| 140 | char *path(); |
| 141 | char *raise(); |
| 142 | |
| 143 | int do_trace; |
| 144 | |
| 145 | #if MACHINE_VAX |
| 146 | int seen_mba, seen_uba; |
| 147 | #endif |
| 148 | #if MACHINE_TAHOE |
| 149 | int seen_vba; |
| 150 | #endif |
| 151 | #if MACHINE_I386 |
| 152 | int seen_isa; |
| 153 | #endif |
| 154 | |
| 155 | struct device *connect(); |
| 156 | struct device *dtab; |
| 157 | dev_t nametodev(); |
| 158 | char *devtoname(); |
| 159 | |
| 160 | char errbuf[80]; |
| 161 | int yyline; |
| 162 | |
| 163 | struct file_list *ftab, *conf_list, **confp; |
| 164 | |
| 165 | int zone, hadtz; |
| 166 | int dst; |
| 167 | int profiling; |
| 168 | int debugging; |
| 169 | |
| 170 | int maxusers; |
| 171 | |
| 172 | #define eq(a,b) (!strcmp(a,b)) |