Annotation of Net2/stand/dev.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
        !             3:  * All rights reserved.
        !             4:  *
        !             5:  * Redistribution and use in source and binary forms, with or without
        !             6:  * modification, are permitted provided that the following conditions
        !             7:  * are met:
        !             8:  * 1. Redistributions of source code must retain the above copyright
        !             9:  *    notice, this list of conditions and the following disclaimer.
        !            10:  * 2. Redistributions in binary form must reproduce the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer in the
        !            12:  *    documentation and/or other materials provided with the distribution.
        !            13:  * 3. All advertising materials mentioning features or use of this software
        !            14:  *    must display the following acknowledgement:
        !            15:  *     This product includes software developed by the University of
        !            16:  *     California, Berkeley and its contributors.
        !            17:  * 4. Neither the name of the University nor the names of its contributors
        !            18:  *    may be used to endorse or promote products derived from this software
        !            19:  *    without specific prior written permission.
        !            20:  *
        !            21:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            25:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            31:  * SUCH DAMAGE.
        !            32:  *
        !            33:  *     @(#)dev.c       7.14 (Berkeley) 5/5/91
        !            34:  */
        !            35: 
        !            36: #include <sys/param.h>
        !            37: #include <setjmp.h>
        !            38: #include "saio.h"
        !            39: 
        !            40: /*
        !            41:  * NB: the value "io->i_dev", used to offset the devsw[] array in the
        !            42:  * routines below, is munged by the machine specific stand Makefiles
        !            43:  * to work for certain boots.
        !            44:  */
        !            45: 
        !            46: jmp_buf exception;
        !            47: 
        !            48: devread(io)
        !            49:        register struct iob *io;
        !            50: {
        !            51:        int cc;
        !            52: 
        !            53:        io->i_flgs |= F_RDDATA;
        !            54:        io->i_error = 0;
        !            55:        cc = (*devsw[io->i_dev].dv_strategy)(io, F_READ);
        !            56:        io->i_flgs &= ~F_TYPEMASK;
        !            57: #ifndef SMALL
        !            58:        if (scankbd())
        !            59:                _longjmp(exception, 1);
        !            60: #endif
        !            61:        return (cc);
        !            62: }
        !            63: 
        !            64: devwrite(io)
        !            65:        register struct iob *io;
        !            66: {
        !            67:        int cc;
        !            68: 
        !            69:        io->i_flgs |= F_WRDATA;
        !            70:        io->i_error = 0;
        !            71:        cc = (*devsw[io->i_dev].dv_strategy)(io, F_WRITE);
        !            72:        io->i_flgs &= ~F_TYPEMASK;
        !            73: #ifndef SMALL
        !            74:        if (scankbd())
        !            75:                _longjmp(exception, 1);
        !            76: #endif
        !            77:        return (cc);
        !            78: }
        !            79: 
        !            80: devopen(io)
        !            81:        register struct iob *io;
        !            82: {
        !            83:        int ret;
        !            84: 
        !            85:        if (!(ret = (*devsw[io->i_dev].dv_open)(io)))
        !            86:                return (0);
        !            87: #ifdef SMALL
        !            88:        printf("open error\n");
        !            89: #else
        !            90:        printf("%s(%d,%d,%d,%d): ", devsw[io->i_dev].dv_name,
        !            91:                io->i_adapt, io->i_ctlr, io->i_unit, io->i_part);
        !            92:        switch(ret) {
        !            93:        case EIO:
        !            94:                break;          /* already reported */
        !            95:        case EADAPT:
        !            96:                printf("bad adaptor number\n");
        !            97:                break;
        !            98:        case ECTLR:
        !            99:                printf("bad controller number\n");
        !           100:                break;
        !           101:        case EUNIT:
        !           102:                printf("bad drive number\n");
        !           103:                break;
        !           104:        case EPART:
        !           105:                printf("bad partition\n");
        !           106:                break;
        !           107:        case ERDLAB:
        !           108:                printf("can't read disk label\n");
        !           109:                break;
        !           110:        case EUNLAB:
        !           111:                printf("unlabeled\n");
        !           112:                break;
        !           113:        case ENXIO:
        !           114:                printf("bad device specification\n");
        !           115:                break;
        !           116:        default:
        !           117:                printf("unknown open error\n");
        !           118:                break;
        !           119:        }
        !           120: #endif
        !           121:        return (ret);
        !           122: }
        !           123: 
        !           124: devclose(io)
        !           125:        register struct iob *io;
        !           126: {
        !           127:        (*devsw[io->i_dev].dv_close)(io);
        !           128: }
        !           129: 
        !           130: devioctl(io, cmd, arg)
        !           131:        register struct iob *io;
        !           132:        int cmd;
        !           133:        caddr_t arg;
        !           134: {
        !           135:        return ((*devsw[io->i_dev].dv_ioctl)(io, cmd, arg));
        !           136: }
        !           137: 
        !           138: /* ARGSUSED */
        !           139: nullsys(io)
        !           140:        struct iob *io;
        !           141: {}
        !           142: 
        !           143: /* ARGSUSED */
        !           144: nodev(io)
        !           145:        struct iob *io;
        !           146: {
        !           147:        errno = EBADF;
        !           148:        return(-1);
        !           149: }
        !           150: 
        !           151: /* ARGSUSED */
        !           152: noioctl(io, cmd, arg)
        !           153:        struct iob *io;
        !           154:        int cmd;
        !           155:        caddr_t arg;
        !           156: {
        !           157:        return (ECMD);
        !           158: }

unix.superglobalmegacorp.com

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