Annotation of coherent/b/STREAMS/io.386/haiinst.c, revision 1.1

1.1     ! root        1: /***********************************************************************
        !             2:  *  haicfg.c    --  A device driver to allow auto configuration of
        !             3:  *                  SCSI bus.
        !             4:  *
        !             5:  *  Copyright (c) 1993, Christopher Sean Hilton, All rights reserved.
        !             6:  *
        !             7:  *  Last Modified: Thu Jun 24 22:40:26 1993 by [chris]
        !             8:  *
        !             9:  *  $Id: haiinst.c,v 1.1 93/07/20 11:21:29 bin Exp Locker: bin $
        !            10:  */
        !            11: 
        !            12: #include <stddef.h>
        !            13: #include <sys/coherent.h>
        !            14: #include <sys/con.h>
        !            15: #include <sys/buf.h>
        !            16: #include <sys/io.h>
        !            17: #include <sys/sched.h>
        !            18: #include <sys/stat.h>
        !            19: 
        !            20: #include <sys/uproc.h>
        !            21: #include <errno.h>
        !            22: 
        !            23: #include <sys/haiscsi.h>
        !            24: #include <sys/haiinst.h>
        !            25: 
        !            26: #define CFGMAJOR       14
        !            27: #define INQUIRY        0x12
        !            28: 
        !            29: static void cfg_open();
        !            30: static void cfg_ioctl();
        !            31: static int cfg_load();
        !            32: 
        !            33: extern int nonedev();  /* Set error and exit. */
        !            34: extern int nulldev();  /* Do nothing and exit. */
        !            35: 
        !            36: CON cfgcon = {
        !            37:        DFCHR,
        !            38:        CFGMAJOR,
        !            39:        cfg_open,       /* Open entry point */
        !            40:        nulldev,        /* Close entry point */
        !            41:        nonedev,        /* Block entry point. */
        !            42:        nonedev,        /* Read Entry point */
        !            43:        nonedev,        /* write entry point */
        !            44:        cfg_ioctl,      /* IO control entry point */
        !            45:        nonedev,        /* No powerfail entry (yet?) */
        !            46:        hatimer,        /* timeout entry point */
        !            47:        cfg_load,       /* Load entry point */
        !            48:        nulldev,        /* Unload entry point */
        !            49:        nonedev         /* No poll entry yet either. */
        !            50: };
        !            51: 
        !            52: srb_t          cfgsrb = { 0 };
        !            53: int    haipresent;
        !            54: 
        !            55: /***********************************************************************
        !            56:  *  int cfg_open(dev_t dev, int mode)
        !            57:  *
        !            58:  *  Just make sure that the Host Adapter was initialized properly.
        !            59:  */
        !            60: 
        !            61: static void cfg_open(dev /*, mode */)
        !            62: register dev_t dev;
        !            63: /* int          mode; */
        !            64: {
        !            65:        if (tid(dev) != HAI_HAID || !haipresent)
        !            66:                u. u_error = EINVAL;
        !            67: }   /* cfg_open() */
        !            68: 
        !            69: /***********************************************************************
        !            70:  *  cfg_load()
        !            71:  *
        !            72:  *  Load Entry point.
        !            73:  */
        !            74: 
        !            75: static int cfg_load()
        !            76: 
        !            77: {
        !            78:        printf("\nHAISCSI Configuration Driver v1.1\n");
        !            79:        haipresent = hainit();
        !            80:        if (!haipresent)
        !            81:                printf("Host Adapter Initialization failed\n");
        !            82: 
        !            83:        return haipresent;
        !            84: }   /* cfg_load() */
        !            85: 
        !            86: static void ioctlfin()
        !            87: 
        !            88: {
        !            89: }   /* ioctlfin() */
        !            90: 
        !            91: static void cfg_ioctl(dev, cmd, vec)
        !            92: dev_t  dev;
        !            93: int    cmd;
        !            94: char   *vec;
        !            95: {
        !            96:        cfg_io_t c;
        !            97: 
        !            98:        if (!haipresent || tid(dev) != HAI_HAID) {
        !            99:                u. u_error = EINVAL;
        !           100:                return;
        !           101:        }
        !           102: 
        !           103:        memset(&cfgsrb, 0, sizeof(srb_t));
        !           104:        ukcopy(vec, &c, sizeof(c));
        !           105:        cfgsrb. dev     = dev;
        !           106:        cfgsrb. target  = c. target;
        !           107:        cfgsrb. lun     = c. lun;
        !           108:        switch (cmd) {
        !           109:        case HAICFG_INQ:                /* Inquiry command */
        !           110:                cfgsrb. buf. space = USER_ADDR;
        !           111:                cfgsrb. buf. addr. vaddr = (vaddr_t) (((cfg_io_p) vec)->buf);
        !           112:                cfgsrb. buf. size = c. buflen;
        !           113:                cfgsrb. xferdir = DMAREAD;
        !           114:                memset(&(cfgsrb. cdb), 0, sizeof(cdb_t));
        !           115:                cfgsrb. cdb. g0. opcode = INQUIRY;
        !           116:                cfgsrb. cdb. g0. xfr_len = cfgsrb. buf. size;
        !           117:                break;
        !           118:        case HAICFG_MDSNS0:             /* Group 0 Mode Sense */
        !           119:        case HAICFG_MDSLT0:             /* Group 0 Mode Select */
        !           120:        case HAICFG_MDSNS2:             /* Group 2 Mode Sense */
        !           121:        case HAICFG_MDSLT2:             /* Group 2 Mode Select */
        !           122:        case HAICFG_USERCDB:            /* User's Command/Data Block */
        !           123:        default:
        !           124:                u. u_error = EINVAL;
        !           125:                break;
        !           126:        }
        !           127:        doscsi(&cfgsrb, c. tries, "cfg-ctl");
        !           128: }   /* cfg_ioctl() */
        !           129: 
        !           130: /* End of file */

unix.superglobalmegacorp.com

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