79e06e35591ee2983f0cf17676ff298964db8140
* Copyright (c) 1990 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* @(#)autoconf.c 7.1 (Berkeley) 5/9/91
static char rcsid
[] = "$Header: /usr/src/sys.386bsd/i386/i386/RCS/autoconf.c,v 1.2 92/01/21 14:21:31 william Exp Locker: root $";
* Setup the system to run on the current machine.
* Configure() is called at boot time and initializes the vba
* device tables and the memory controller monitoring. Available
* devices are determined (from possibilities mentioned in ioconf.c),
* and the drivers are initialized.
* The following several variables are related to
* the configuration process, and are used in initializing
int dkn
; /* number of iostat dk numbers assigned so far */
extern int cold
; /* cold start flag initialized in locore.s */
* Determine i/o configuration for a machine.
if ((boothowto
& RB_ASKNAME
) == 0)
* Configure swap area and related system
* parameter based on device(s) used.
* Configure swap space and related parameters.
register struct swdevt
*swp
;
for (swp
= swdevt
; swp
->sw_dev
> 0; swp
++)
unsigned d
= major(swp
->sw_dev
);
nblks
= (*bdevsw
[d
].d_psize
)(swp
->sw_dev
);
(swp
->sw_nblks
== 0 || swp
->sw_nblks
> nblks
))
swp
->sw_nblks
= ctod(dtoc(swp
->sw_nblks
));
if (dumplo
== 0 && bdevsw
[major(dumpdev
)].d_psize
)
/*dumplo = (*bdevsw[major(dumpdev)].d_psize)(dumpdev) - physmem;*/
dumplo
= (*bdevsw
[major(dumpdev
)].d_psize
)(dumpdev
) -
#define DOSWAP /* change swdevt and dumpdev */
u_long bootdev
= 0; /* should be dev_t, but not until 32 bits */
static char devname
[][2] = {
#define PARTITIONMASK 0x7
* Attempt to find the device from which we were booted.
* If we can do so, and not instructed not to do so,
* change rootdev to correspond to the load device.
int majdev
, mindev
, unit
, part
, adaptor
;
/*printf("howto %x bootdev %x ", boothowto, bootdev);*/
if (boothowto
& RB_DFLTROOT
||
(bootdev
& B_MAGICMASK
) != (u_long
)B_DEVMAGIC
)
majdev
= (bootdev
>> B_TYPESHIFT
) & B_TYPEMASK
;
if (majdev
> sizeof(devname
) / sizeof(devname
[0]))
adaptor
= (bootdev
>> B_ADAPTORSHIFT
) & B_ADAPTORMASK
;
part
= (bootdev
>> B_PARTITIONSHIFT
) & B_PARTITIONMASK
;
unit
= (bootdev
>> B_UNITSHIFT
) & B_UNITMASK
;
mindev
= (unit
<< PARTITIONSHIFT
) + part
;
rootdev
= makedev(majdev
, mindev
);
* If the original rootdev is the same as the one
* just calculated, don't need to adjust the swap configuration.
printf("changing root device to %c%c%d%c\n",
devname
[majdev
][0], devname
[majdev
][1],
mindev
>> PARTITIONSHIFT
, part
+ 'a');
mindev
&= ~PARTITIONMASK
;
for (swp
= swdevt
; swp
->sw_dev
; swp
++) {
if (majdev
== major(swp
->sw_dev
) &&
mindev
== (minor(swp
->sw_dev
) & ~PARTITIONMASK
)) {
swdevt
[0].sw_dev
= swp
->sw_dev
;
* If dumpdev was the same as the old primary swap
* device, move it to the new primary swap device.
dumpdev
= swdevt
[0].sw_dev
;