Annotation of coherent/d/PS2_KERNEL/coh.386/syscoh.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * File:       syscoh.c
        !             3:  *
        !             4:  * Purpose:    Functions for the COHERENT-specific system call
        !             5:  *
        !             6:  * $Log:       syscoh.c,v $
        !             7:  * Revision 1.2  92/08/04  12:35:17  bin
        !             8:  * changed for ker 59
        !             9:  * 
        !            10:  */
        !            11: 
        !            12: /*
        !            13:  * ----------------------------------------------------------------------
        !            14:  * Includes.
        !            15:  */
        !            16: #include <sys/coherent.h>
        !            17: #include <sys/con.h>
        !            18: #include <errno.h>
        !            19: 
        !            20: /*
        !            21:  * ----------------------------------------------------------------------
        !            22:  * Definitions.
        !            23:  *     Constants.
        !            24:  *     Macros with argument lists.
        !            25:  *     Typedefs.
        !            26:  *     Enums.
        !            27:  */
        !            28: 
        !            29: /*
        !            30:  * ----------------------------------------------------------------------
        !            31:  * Functions.
        !            32:  *     Import Functions.
        !            33:  *     Export Functions.
        !            34:  *     Local Functions.
        !            35:  */
        !            36: int ucohcall();
        !            37: 
        !            38: static int devload();
        !            39: static int setfpe();
        !            40: 
        !            41: /*
        !            42:  * ----------------------------------------------------------------------
        !            43:  * Global Data.
        !            44:  *     Import Variables.
        !            45:  *     Export Variables.
        !            46:  *     Local Variables.
        !            47:  */
        !            48: 
        !            49: /*
        !            50:  * ----------------------------------------------------------------------
        !            51:  * Code.
        !            52:  */
        !            53: 
        !            54: /*
        !            55:  * Only allow this if running as superuser.
        !            56:  *
        !            57:  * First argument is the call type.
        !            58:  *
        !            59:  * a1 = COH_PRINTF     kernel printf
        !            60:  *
        !            61:  * a1 = COH_DEVLOAD    call load() routine for device with major number a2
        !            62:  *
        !            63:  * a1 = COH_SETFPE     a2=0, trap on FP;  a2!=0, allow FP
        !            64:  */
        !            65: ucohcall(a1,a2,a3,a4,a5,a6)
        !            66: {
        !            67:        int ret = 0;
        !            68: 
        !            69:        if (!super()) {
        !            70:                SET_U_ERROR(EPERM, "cohcall, must be root");
        !            71:                goto ucc_done;
        !            72:        }
        !            73: 
        !            74:        switch(a1) {
        !            75:        case    COH_PRINTF:
        !            76:                printf(a2);
        !            77:                break;
        !            78:        case    COH_DEVLOAD:
        !            79:                ret = devload(a2);
        !            80:                break;
        !            81:        case    COH_SETFPE:
        !            82:                ret = setfpe(a2);
        !            83:                break;
        !            84:        default:
        !            85:                SET_U_ERROR(EINVAL, "bad COH function");
        !            86:        }
        !            87: ucc_done:
        !            88:        return ret;
        !            89: }
        !            90: 
        !            91: /*
        !            92:  * Initialize a device.
        !            93:  */
        !            94: int
        !            95: devload(maj_num)
        !            96: int maj_num;
        !            97: {
        !            98:        int ret = -1;
        !            99:        int mask = 1<<maj_num;
        !           100: 
        !           101:        if (dev_loaded & mask) {
        !           102:                SET_U_ERROR(EIO, "already loaded");
        !           103:                goto dldone;
        !           104:        }
        !           105: 
        !           106:        if (drvl[maj_num].d_conp == 0) {
        !           107:                SET_U_ERROR(EIO, "no driver");
        !           108:                goto dldone;
        !           109:        }
        !           110: 
        !           111:        if (drvl[maj_num].d_conp->c_load) {
        !           112:                (*drvl[maj_num].d_conp->c_load)();
        !           113:                dev_loaded |= mask;
        !           114:                ret = 0;
        !           115:        }
        !           116: dldone:
        !           117:        return ret;
        !           118: }

unix.superglobalmegacorp.com

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