Annotation of coherent/f/etc/conf/streams/src/str_drv.c, revision 1.1

1.1     ! root        1: #define        _DDI_DKI        1
        !             2: #define        _SYSV3          1
        !             3: 
        !             4: /*
        !             5:  * This file contains supplementary definitions used to deal with or aid the
        !             6:  * implementation of the automatically generated device configuration code
        !             7:  * in the "conf.c" file.
        !             8:  *
        !             9:  * Note that we are in the _SYSV3 world because we touch <sys/uproc.h>
        !            10:  */
        !            11: /*
        !            12:  *-IMPORTS:
        !            13:  *     <common/ccompat.h>
        !            14:  *             __USE_PROTO__
        !            15:  *             __ARGS ()
        !            16:  *     <common/xdebug.h>
        !            17:  *             __LOCAL__
        !            18:  *     <kernel/ddi_base.h>
        !            19:  *             DESTROY_UIO ()
        !            20:  *             MAKE_CRED ()
        !            21:  *             MAKE_UIO ()
        !            22:  *     <sys/debug.h>
        !            23:  *             ASSERT ()
        !            24:  *     <sys/types.h>
        !            25:  *             cred_t
        !            26:  *             n_dev_t
        !            27:  *             o_dev_t
        !            28:  *             makedevice ()
        !            29:  *     <sys/cmn_err.h>
        !            30:  *             CE_PANIC
        !            31:  *             cmn_err ()
        !            32:  *     <sys/file.h>
        !            33:  *             FREAD
        !            34:  *             FWRITE
        !            35:  *             FNDELAY
        !            36:  *             FNONBLOCK
        !            37:  *             FEXCL
        !            38:  *     <sys/open.h>
        !            39:  *             OTYP_BLK
        !            40:  *             OTYP_CHR
        !            41:  *             OTYP_LYR
        !            42:  *     <sys/uio.h>
        !            43:  *             iovec_t
        !            44:  *             uio_t
        !            45:  *     <stddef.h>
        !            46:  *             NULL
        !            47:  *     <sys/errno.h>
        !            48:  *             ENXIO
        !            49:  */
        !            50: 
        !            51: #include <common/ccompat.h>
        !            52: #include <common/xdebug.h>
        !            53: #include <kernel/ddi_base.h>
        !            54: #include <kernel/strmlib.h>
        !            55: #include <sys/debug.h>
        !            56: #include <sys/types.h>
        !            57: #include <sys/cmn_err.h>
        !            58: #include <sys/file.h>
        !            59: #include <sys/open.h>
        !            60: #include <sys/uio.h>
        !            61: #include <sys/errno.h>
        !            62: #include <stddef.h>
        !            63: 
        !            64: #include <sys/confinfo.h>
        !            65: 
        !            66: /*
        !            67:  * These are Coherent header files! Treat with all the caution you would
        !            68:  * normally use for handling toxic waste!
        !            69:  *
        !            70:  *     <sys/stat.h>
        !            71:  *             major ()
        !            72:  *             minor ()
        !            73:  *     <sys/uproc.h>
        !            74:  *             u.u_uid
        !            75:  *             u.u_gid
        !            76:  *     <sys/con.h>
        !            77:  *             DFBLK
        !            78:  *
        !            79:  * The following values which used to be in Coherent <sys/inode.h> have been
        !            80:  * moved here so we can use them. <sys/inode.h> is too much of a mess.
        !            81:  *
        !            82:  *     <sys/file.h>
        !            83:  *             IPR
        !            84:  *             IPW
        !            85:  *             IPNDLY
        !            86:  *             IPEXCL
        !            87:  *
        !            88:  * Note that the actual magic u area variable 'u' is extern'ed in
        !            89:  * <sys/coherent.h>.
        !            90:  */
        !            91: 
        !            92: #include <sys/stat.h>
        !            93: 
        !            94: #if    __COHERENT__
        !            95: 
        !            96: #define        SETUERROR(e)    u.u_error = (e)
        !            97: 
        !            98: #else
        !            99: 
        !           100: #define        SETUERROR(e)    ASSERT (e == 0 || "Hit error" == NULL)
        !           101: 
        !           102: #endif
        !           103: 
        !           104: 
        !           105: /*
        !           106:  * Forward Coh open request to actual STREAMS driver-request-processing code.
        !           107:  */
        !           108: 
        !           109: #if    __USE_PROTO__
        !           110: int (_streams_open) (o_dev_t dev, int mode, int __NOTUSED (flags),
        !           111:                     struct streamtab * stabp)
        !           112: #else
        !           113: int
        !           114: _streams_open __ARGS ((dev, mode, flags, stabp))
        !           115: o_dev_t                dev;
        !           116: int            mode;
        !           117: int            flags;
        !           118: struct streamtab
        !           119:              * stabp;
        !           120: #endif
        !           121: {
        !           122:        n_dev_t         newdev = makedevice (major (dev), minor (dev));
        !           123:        n_dev_t         olddev = newdev;
        !           124:        cred_t          cred;
        !           125:        int             newmode;
        !           126:        int             ret;
        !           127: 
        !           128:        newmode = 0;
        !           129: 
        !           130:        if ((mode & IPR) != 0)
        !           131:                newmode |= FREAD;
        !           132:        if ((mode & IPW) != 0)
        !           133:                newmode |= FWRITE;
        !           134:        if ((mode & IPEXCL) != 0)
        !           135:                newmode |= FEXCL;
        !           136:        if ((mode & IPNDLY) != 0)
        !           137:                newmode |= FNDELAY;
        !           138: 
        !           139:        ret = STREAMS_OPEN (& newdev, stabp, newmode, MAKE_CRED (& cred));
        !           140: 
        !           141:        if (olddev != newdev)
        !           142:                cmn_err (CE_PANIC, "No cloning permitted through the Coherent driver system");
        !           143: 
        !           144:        SETUERROR (ret);
        !           145:        return ret;
        !           146: }
        !           147: 
        !           148: 
        !           149: /*
        !           150:  * Forward Coh close request to actual STREAMS driver-request-processing code.
        !           151:  */
        !           152: 
        !           153: #if    __USE_PROTO__
        !           154: int (_streams_close) (o_dev_t dev, int mode, int __NOTUSED (flags),
        !           155:                      struct streamtab * __NOTUSED (stabp))
        !           156: #else
        !           157: int
        !           158: _streams_close __ARGS ((dev, mode, flags, stabp))
        !           159: o_dev_t                dev;
        !           160: int            mode;
        !           161: int            flags;
        !           162: struct streamtab
        !           163:              * stabp;
        !           164: #endif
        !           165: {
        !           166:        shead_t       * sheadp;
        !           167:        cred_t          cred;
        !           168:        int             newmode;
        !           169:        int             ret;
        !           170: 
        !           171:        if ((sheadp = SHEAD_FIND (makedevice (major (dev), minor (dev)),
        !           172:                                  DEV_SLIST)) == NULL) {
        !           173:                SETUERROR (ENXIO);
        !           174:                return -1;
        !           175:        }
        !           176: 
        !           177:        newmode = 0;
        !           178: 
        !           179:        if ((mode & IPR) != 0)
        !           180:                newmode |= FREAD;
        !           181:        if ((mode & IPW) != 0)
        !           182:                newmode |= FWRITE;
        !           183:        if ((mode & IPEXCL) != 0)
        !           184:                newmode |= FEXCL;
        !           185:        if ((mode & IPNDLY) != 0)
        !           186:                newmode |= FNDELAY;
        !           187: 
        !           188:        ret = STREAMS_CLOSE (sheadp, newmode, MAKE_CRED (& cred));
        !           189: 
        !           190:        SETUERROR (ret);
        !           191:        return ret;
        !           192: }
        !           193: 
        !           194: 
        !           195: /*
        !           196:  * Forward Coh read request to actual STREAMS driver-request-processing code.
        !           197:  */
        !           198: 
        !           199: #if    __USE_PROTO__
        !           200: int (_streams_read) (o_dev_t dev, IO * iop,
        !           201:                     struct streamtab * __NOTUSED (stabp))
        !           202: #else
        !           203: int
        !           204: _streams_read __ARGS ((dev, iop, stabp))
        !           205: o_dev_t                dev;
        !           206: IO           * iop;
        !           207: struct streamtab
        !           208:              * stabp;
        !           209: #endif
        !           210: {
        !           211:        iovec_t         iov;
        !           212:        uio_t           uio;
        !           213:        int             ret;
        !           214:        shead_t       * sheadp;
        !           215: 
        !           216:        if ((sheadp = SHEAD_FIND (makedevice (major (dev), minor (dev)),
        !           217:                                  DEV_SLIST)) == NULL) {
        !           218:                SETUERROR (ENXIO);
        !           219:                return -1;
        !           220:        }
        !           221: 
        !           222:        ret = STREAMS_READ (sheadp, MAKE_UIO (& uio, & iov, FREAD, iop));
        !           223: 
        !           224:        DESTROY_UIO (& uio, iop);
        !           225:        SETUERROR (ret);
        !           226:        return ret;
        !           227: }
        !           228: 
        !           229: 
        !           230: /*
        !           231:  * Forward Coh write request to actual STREAMS driver-request-processing code.
        !           232:  */
        !           233: 
        !           234: #if    __USE_PROTO__
        !           235: int (_streams_write) (o_dev_t dev, IO * iop,
        !           236:                      struct streamtab * __NOTUSED (stabp))
        !           237: #else
        !           238: int
        !           239: _streams_write __ARGS ((dev, iop, stabp))
        !           240: o_dev_t                dev;
        !           241: IO           * iop;
        !           242: struct streamtab
        !           243:              * stabp;
        !           244: #endif
        !           245: {
        !           246:        iovec_t         iov;
        !           247:        uio_t           uio;
        !           248:        int             ret;
        !           249:        shead_t       * sheadp;
        !           250: 
        !           251:        if ((sheadp = SHEAD_FIND (makedevice (major (dev), minor (dev)),
        !           252:                                  DEV_SLIST)) == NULL) {
        !           253:                SETUERROR (ENXIO);
        !           254:                return -1;
        !           255:        }
        !           256: 
        !           257:        ret = STREAMS_WRITE (sheadp, MAKE_UIO (& uio, & iov, FWRITE, iop));
        !           258: 
        !           259:        DESTROY_UIO (& uio, iop);
        !           260:        SETUERROR (ret);
        !           261:        return ret;
        !           262: }
        !           263: 
        !           264: 
        !           265: /*
        !           266:  * Forward Coh ioctl request to actual STREAMS driver-request-processing code.
        !           267:  */
        !           268: 
        !           269: #if    __USE_PROTO__
        !           270: int (_streams_ioctl) (o_dev_t dev, int cmd, _VOID * arg, int mode,
        !           271:                      struct streamtab * __NOTUSED (stabp))
        !           272: #else
        !           273: int
        !           274: _streams_ioctl __ARGS ((dev, cmd, arg, mode, stabp))
        !           275: o_dev_t                dev;
        !           276: int            cmd;
        !           277: _VOID        * arg;
        !           278: int            mode;
        !           279: struct streamtab
        !           280:              * stabp;
        !           281: #endif
        !           282: {
        !           283:        cred_t          cred;
        !           284:        int             rval;
        !           285:        int             newmode;
        !           286:        int             ret;
        !           287:        shead_t       * sheadp;
        !           288: 
        !           289:        if ((sheadp = SHEAD_FIND (makedevice (major (dev), minor (dev)),
        !           290:                                  DEV_SLIST)) == NULL) {
        !           291:                SETUERROR (ENXIO);
        !           292:                return -1;
        !           293:        }
        !           294: 
        !           295:        newmode = 0;
        !           296: 
        !           297:        if ((mode & IPR) != 0)
        !           298:                newmode |= FREAD;
        !           299:        if ((mode & IPW) != 0)
        !           300:                newmode |= FWRITE;
        !           301:        if ((mode & IPEXCL) != 0)
        !           302:                newmode |= FEXCL;
        !           303:        if ((mode & IPNDLY) != 0)
        !           304:                newmode |= FNDELAY;
        !           305: 
        !           306:        ret = STREAMS_IOCTL (sheadp, cmd, arg, newmode, MAKE_CRED (& cred),
        !           307:                             & rval);
        !           308: 
        !           309:        SETUERROR (ret);
        !           310:        return rval;
        !           311: 
        !           312: }
        !           313: 
        !           314: 
        !           315: /*
        !           316:  * Forward Coh poll request to actual STRAAMS driver-request-processing code.
        !           317:  */
        !           318: 
        !           319: #if    __USE_PROTO__
        !           320: int (_streams_chpoll) (o_dev_t dev, int events, int msec,
        !           321:                       struct streamtab * stabp)
        !           322: #else
        !           323: int
        !           324: _streams_chpoll __ARGS ((dev, events, msec, stabp))
        !           325: o_dev_t                dev;
        !           326: int            events;
        !           327: int            msec;
        !           328: struct streamtab
        !           329:              * stabp;
        !           330: #endif
        !           331: {
        !           332:        int             ret;
        !           333: 
        !           334:        cmn_err (CE_PANIC, "DDI/DKI polling not yet supported");
        !           335: 
        !           336: #if    0
        !           337:        ret = (* funcp) (newdev, events, msec == 0, & revents, pollhead)
        !           338: #else
        !           339:        ret = EIO;
        !           340: #endif
        !           341:        SETUERROR (ret);
        !           342:        return ret;
        !           343: }
        !           344: 

unix.superglobalmegacorp.com

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