Annotation of 43BSDReno/sys/tahoe/swapgeneric.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1988 Regents of the University of California.
        !             3:  * All rights reserved.  The Berkeley software License Agreement
        !             4:  * specifies the terms and conditions for redistribution.
        !             5:  *
        !             6:  *     @(#)swapgeneric.c       7.5 (Berkeley) 4/6/90
        !             7:  */
        !             8: 
        !             9: #include "param.h"
        !            10: #include "conf.h"
        !            11: #include "buf.h"
        !            12: #include "vm.h"
        !            13: #include "systm.h"
        !            14: #include "reboot.h"
        !            15: 
        !            16: #include "pte.h"
        !            17: #include "cpu.h"
        !            18: #include "cp.h"
        !            19: #include "mtpr.h"
        !            20: 
        !            21: #include "../tahoevba/vbavar.h"
        !            22: 
        !            23: /*
        !            24:  * Generic configuration;  all in one
        !            25:  */
        !            26: dev_t  rootdev = NODEV;
        !            27: dev_t  argdev = NODEV;
        !            28: dev_t  dumpdev = NODEV;
        !            29: int    nswap;
        !            30: struct swdevt swdevt[] = {
        !            31:        { -1,   1,      0 },
        !            32:        { 0,    0,      0 },
        !            33: };
        !            34: long   dumplo;
        !            35: int    dmmin, dmmax, dmtext;
        !            36: 
        !            37: extern struct vba_driver vddriver;
        !            38: extern struct vba_driver hdcdriver;
        !            39: 
        !            40: struct genericconf {
        !            41:        caddr_t gc_driver;
        !            42:        char    *gc_name;
        !            43:        dev_t   gc_root;
        !            44: } genericconf[] = {
        !            45:        { (caddr_t)&vddriver,   "dk",   makedev(1, 0),  },
        !            46:        { (caddr_t)&hdcdriver,  "hd",   makedev(2, 0),  },
        !            47:        { 0 },
        !            48: };
        !            49: 
        !            50: setconf()
        !            51: {
        !            52:        register struct vba_device *ui;
        !            53:        register struct genericconf *gc;
        !            54:        register char *cp, *gp;
        !            55:        int unit, swaponroot = 0;
        !            56: 
        !            57:        if (rootdev != NODEV)
        !            58:                goto doswap;
        !            59:        unit = 0;
        !            60:        if (boothowto & RB_ASKNAME) {
        !            61:                char name[128];
        !            62: retry:
        !            63:                printf("root device? ");
        !            64:                gets(name);
        !            65:                for (gc = genericconf; gc->gc_driver; gc++)
        !            66:                        for (cp = name, gp = gc->gc_name; *cp == *gp; cp++)
        !            67:                                if (!*++gp)
        !            68:                                        goto gotit;
        !            69:                printf("use");
        !            70:                for (gc = genericconf; gc->gc_driver; gc++)
        !            71:                        printf(" %s%%d", gc->gc_name);
        !            72:                printf("\n");
        !            73:                goto retry;
        !            74: gotit:
        !            75:                cp = name + 2;
        !            76:                if (*cp < '0' || *cp > '9') {
        !            77:                        printf("bad/missing unit number\n");
        !            78:                        goto retry;
        !            79:                }
        !            80:                while (*cp >= '0' && *cp <= '9')
        !            81:                        unit = 10 * unit + *cp++ - '0';
        !            82:                if (*cp == '*')
        !            83:                        swaponroot++;
        !            84:        }
        !            85:        for (gc = genericconf; gc->gc_driver; gc++) {
        !            86:                for (ui = vbdinit; ui->ui_driver; ui++) {
        !            87:                        if (ui->ui_alive == 0)
        !            88:                                continue;
        !            89:                        if (ui->ui_unit == 0 && ui->ui_driver ==
        !            90:                            (struct vba_driver *)gc->gc_driver) {
        !            91:                                printf("root on %s0\n",
        !            92:                                    ui->ui_driver->ud_dname);
        !            93:                                goto found;
        !            94:                        }
        !            95:                }
        !            96:        }
        !            97:        printf("no suitable root\n");
        !            98:        asm("halt");
        !            99: found:
        !           100:        gc->gc_root = makedev(major(gc->gc_root), unit*8);
        !           101:        rootdev = gc->gc_root;
        !           102: doswap:
        !           103:        swdevt[0].sw_dev = argdev = dumpdev =
        !           104:            makedev(major(rootdev), minor(rootdev)+1);
        !           105:        /* swap size and dumplo set during autoconfigure */
        !           106:        if (swaponroot)
        !           107:                rootdev = dumpdev;
        !           108: }
        !           109: 
        !           110: gets(buf)
        !           111:        char *buf;
        !           112: {
        !           113:        register int c;
        !           114:        register char *lp;
        !           115: 
        !           116:        for (lp = buf;;) {
        !           117:                printf("%c", c = cngetc()&0177);
        !           118:                switch (c) {
        !           119:                case '\n':
        !           120:                case '\r':
        !           121:                        *lp = '\0';
        !           122:                        return;
        !           123:                case '\b':
        !           124:                case '\177':
        !           125:                        if (lp > buf) {
        !           126:                                --lp;
        !           127:                                printf("\b \b");
        !           128:                        }
        !           129:                        break;
        !           130:                case '#':
        !           131:                        if (lp > buf)
        !           132:                                --lp;
        !           133:                        break;
        !           134:                case 'r'&037:
        !           135:                        *lp = 0;
        !           136:                        printf("\n");
        !           137:                        printf("%s", buf);
        !           138:                        break;
        !           139:                case '@':
        !           140:                case 'u'&037:
        !           141:                case 'w'&037:
        !           142:                        lp = buf;
        !           143:                        printf("%c", '\n');
        !           144:                        break;
        !           145:                default:
        !           146:                        *lp++ = c;
        !           147:                }
        !           148:        }
        !           149:        /* NOTREACHED */
        !           150: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.