Annotation of coherent/b/STREAMS/conf_79/assign.h, revision 1.1

1.1     ! root        1: #ifndef        ASSIGN_H
        !             2: #define        ASSIGN_H
        !             3: 
        !             4: /*
        !             5:  *-IMPORTS:
        !             6:  *     <sys/compat.h>
        !             7:  *             EXTERN_C_BEGIN
        !             8:  *             EXTERN_C_END
        !             9:  *             PROTO ()
        !            10:  *     <kernel/v_types.h>
        !            11:  *             major_t
        !            12:  *             minor_t
        !            13:  */
        !            14: 
        !            15: #include <sys/compat.h>
        !            16: #include <kernel/v_types.h>
        !            17: 
        !            18: 
        !            19: #ifndef        MDEV_T
        !            20: #define        MDEV_T
        !            21: typedef        struct mdevice  mdev_t;
        !            22: #endif
        !            23: 
        !            24: #ifndef        EXTINFO_T
        !            25: #define        EXTINFO_T
        !            26: typedef struct extinfo extinfo_t;
        !            27: #endif
        !            28: 
        !            29: 
        !            30: /*
        !            31:  * Mapping between internal and external numbers is not simple; what makes it
        !            32:  * worse is that because there is a single mapping that has to be the same
        !            33:  * for both block and character tables, the construction of the bdevsw [] and
        !            34:  * cdevsw [] internal tables is constrained. This is only a problem if
        !            35:  * multiple external major numbers are allowed, and each device is only
        !            36:  * permitted to have a single internal major number. The interpretation of the
        !            37:  * 'M' flag in this circumstance is unclear.
        !            38:  *
        !            39:  * The assign_imajors () code should be able to deal with the most complex
        !            40:  * case, which is where multiple external majors may actually be mapped to
        !            41:  * multiple internal numbers, thus
        !            42:  *
        !            43:  *     Block external :            |-----scsi-------|
        !            44:  *     Character external:   |--tcp--| |-udp-|  |ttys|
        !            45:  *
        !            46:  * Might map 'tcp' to internal 0, 'udp' to internal 1, 'ttys' to internal 2,
        !            47:  * while 'scsi' would have 0, 1, and 2 as internal major numbers.
        !            48:  *
        !            49:  * This is all hypothetical at the moment, since multiple majors are new to
        !            50:  * Coherent anyway. For simplicity, we may constrain the above to be an error
        !            51:  * by requiring unique internal number for each device. However, the machinery
        !            52:  * in assign_imajors () will have to be flexible enough to deal with the
        !            53:  * above.
        !            54:  *
        !            55:  * NOTE: The complex model is only applicable if a device does not care what
        !            56:  * minor numbers are given to it, since there is a single shared table used
        !            57:  * to map a range of external major numbers into a range of internal minor
        !            58:  * numbers. Since this table is shared, it constrains even more heavily the
        !            59:  * circumstances in which numbers can overlap. Without a flag to detect when
        !            60:  * a driver doesn't care about minor numbers, we simply forget about the
        !            61:  * complex model.
        !            62:  */
        !            63: 
        !            64: struct extinfo {
        !            65:        major_t         ei_nemajors;
        !            66:        major_t       * ei_etoimajor;
        !            67:        major_t       * ei_minoroffset;
        !            68:        int             ei_ncdevs;
        !            69:        mdev_t       ** ei_cdevsw;
        !            70:        int             ei_nbdevs;
        !            71:        mdev_t       ** ei_bdevsw;
        !            72:        int             ei_nmodules;
        !            73:        mdev_t       ** ei_modules;
        !            74: };
        !            75: 
        !            76: 
        !            77: EXTERN_C_BEGIN
        !            78: 
        !            79: extinfo_t     *        assign_imajors          PROTO ((void));
        !            80: 
        !            81: EXTERN_C_END
        !            82: 
        !            83: #endif /* ! defined (ASSIGN_H) */

unix.superglobalmegacorp.com

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