[BACK]Return to autoconf.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / cats / cats

Annotation of src/sys/arch/cats/cats/autoconf.c, Revision 1.9.2.2

1.9.2.2 ! yamt        1: /*     $NetBSD: autoconf.c,v 1.9.2.1 2007/09/03 14:23:45 yamt Exp $    */
1.1       chris       2:
                      3: /*
                      4:  * Copyright (c) 1994-1998 Mark Brinicombe.
                      5:  * Copyright (c) 1994 Brini.
                      6:  * All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. All advertising materials mentioning features or use of this software
                     17:  *    must display the following acknowledgement:
                     18:  *     This product includes software developed by Mark Brinicombe for
                     19:  *      the NetBSD project.
                     20:  * 4. The name of the company nor the name of the author may be used to
                     21:  *    endorse or promote products derived from this software without specific
                     22:  *    prior written permission.
                     23:  *
                     24:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
                     25:  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
                     26:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     27:  * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
                     28:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
                     29:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
                     30:  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     31:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     32:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     33:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     34:  * SUCH DAMAGE.
                     35:  *
                     36:  * RiscBSD kernel project
                     37:  *
                     38:  * autoconf.c
                     39:  *
                     40:  * Autoconfiguration functions
                     41:  */
1.6       lukem      42:
                     43: #include <sys/cdefs.h>
1.9.2.2 ! yamt       44: __KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.9.2.1 2007/09/03 14:23:45 yamt Exp $");
1.1       chris      45:
                     46: #include "opt_md.h"
                     47:
                     48: #include <sys/param.h>
                     49: #include <sys/systm.h>
                     50: #include <sys/reboot.h>
                     51: #include <sys/disklabel.h>
                     52: #include <sys/device.h>
                     53: #include <sys/conf.h>
                     54: #include <sys/kernel.h>
                     55: #include <sys/malloc.h>
                     56: #include <machine/bootconfig.h>
1.2       matt       57: #include <machine/intr.h>
1.1       chris      58:
                     59: #include "isa.h"
                     60:
1.9       chris      61: void isa_intr_init(void);
1.1       chris      62:
1.9       chris      63: static void get_device(const char *name);
                     64: static void set_root_device(void);
1.1       chris      65:
                     66: /* Decode a device name to a major and minor number */
                     67:
                     68: static void
1.9       chris      69: get_device(const char *name)
1.1       chris      70: {
1.3       gehenna    71:        int unit, part;
1.9       chris      72:        char devname[16], buf[32];
                     73:        const char *cp;
1.1       chris      74:        struct device *dv;
                     75:
                     76:        if (strncmp(name, "/dev/", 5) == 0)
                     77:                name += 5;
                     78:
1.3       gehenna    79:        if (devsw_name2blk(name, devname, sizeof(devname)) == -1)
                     80:                return;
                     81:
                     82:        name += strlen(devname);
                     83:        unit = part = 0;
                     84:
                     85:        cp = name;
                     86:        while (*cp >= '0' && *cp <= '9')
                     87:                unit = (unit * 10) + (*cp++ - '0');
                     88:        if (cp == name)
                     89:                return;
                     90:
                     91:        if (*cp >= 'a' && *cp <= ('a' + MAXPARTITIONS))
                     92:                part = *cp - 'a';
                     93:        else if (*cp != '\0' && *cp != ' ')
                     94:                return;
                     95:        sprintf(buf, "%s%d", devname, unit);
1.8       chris      96:        TAILQ_FOREACH(dv, &alldevs, dv_list) {
1.3       gehenna    97:                if (strcmp(buf, dv->dv_xname) == 0) {
                     98:                        booted_device = dv;
                     99:                        booted_partition = part;
                    100:                        return;
1.1       chris     101:                }
1.3       gehenna   102:        }
1.1       chris     103: }
                    104:
                    105: static void
                    106: set_root_device()
                    107: {
                    108:        char *ptr;
                    109:
                    110:        if (boot_file)
                    111:                get_device(boot_file);
                    112:        if (boot_args &&
                    113:            get_bootconf_option(boot_args, "root", BOOTOPT_TYPE_STRING, &ptr))
                    114:                get_device(ptr);
                    115: }
                    116:
                    117: /*
                    118:  * Set up the root device from the boot args
                    119:  */
                    120: void
                    121: cpu_rootconf(void)
                    122: {
                    123:        set_root_device();
                    124:        printf("boot device: %s\n",
                    125:            booted_device != NULL ? booted_device->dv_xname : "<unknown>");
                    126:        setroot(booted_device, booted_partition);
                    127: }
                    128:
                    129:
                    130: /*
                    131:  * void cpu_configure()
                    132:  *
                    133:  * Configure all the root devices
                    134:  * The root devices are expected to configure their own children
                    135:  */
1.4       chris     136: extern int footbridge_imask[NIPL];
                    137:
1.1       chris     138: void
                    139: cpu_configure(void)
                    140: {
                    141:        /*
                    142:         * Since various PCI interrupts could be routed via the ICU
                    143:         * (for PCI devices in the bridge) we need to set up the ICU
                    144:         * now so that these interrupts can be established correctly
                    145:         * i.e. This is a hack.
                    146:         */
                    147:        isa_intr_init();
                    148:
1.4       chris     149:
1.1       chris     150:        config_rootfound("mainbus", NULL);
                    151:
1.9.2.1   yamt      152: #if defined(DEBUG)
1.1       chris     153:        /* Debugging information */
1.5       thorpej   154:        printf("ipl_bio=%08x ipl_net=%08x ipl_tty=%08x ipl_vm=%08x\n",
1.4       chris     155:            footbridge_imask[IPL_BIO], footbridge_imask[IPL_NET],
1.5       thorpej   156:            footbridge_imask[IPL_TTY], footbridge_imask[IPL_VM]);
1.1       chris     157:        printf("ipl_audio=%08x ipl_imp=%08x ipl_high=%08x ipl_serial=%08x\n",
1.4       chris     158:            footbridge_imask[IPL_AUDIO], footbridge_imask[IPL_CLOCK],
                    159:            footbridge_imask[IPL_HIGH], footbridge_imask[IPL_SERIAL]);
1.9.2.1   yamt      160: #endif /* defined(DEBUG) */
1.1       chris     161:
                    162:        /* Time to start taking interrupts so lets open the flood gates .... */
                    163:        (void)spl0();
                    164: }
                    165:
                    166: void
                    167: device_register(struct device *dev, void *aux)
                    168: {
                    169: }
                    170: /* End of autoconf.c */

CVSweb <webmaster@jp.NetBSD.org>