Annotation of coherent/b/STREAMS/conf/bin/src/assign.h, revision 1.1

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