Annotation of coherent/d/PS2_KERNEL/coh.386/syscoh.c, revision 1.1.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.