Annotation of coherent/b/kernel/io.386/msgcon.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * System V Compatible Message Device Driver
                      3:  *
                      4:  *     This device driver provides System V compatible messaging operations.
                      5:  *     Operations are performed through the message device (/dev/msg).
                      6:  *     and are implemented as ioctl calls from msgctl, msgget, msgsnd, msgrcv
                      7:  *     utilities.
                      8:  *
                      9:  *     Author: Allan Cornish.
                     10:  *
                     11:  */
                     12: 
                     13: #include <sys/coherent.h>
                     14: #include <sys/types.h>
                     15: #include <sys/uproc.h>
                     16: #include <errno.h>
                     17: #include <sys/con.h>
                     18: #include <sys/msg.h>
                     19: #ifndef _I386
                     20: #define getusd(arg)            getuwd(arg)
                     21: #define putusd(arg1, arg2)     putuwd(arg1, arg2)
                     22: #endif
                     23: 
                     24: /*
                     25:  * Functions.
                     26:  */
                     27: 
                     28: int msgopen();
                     29: int msgioctl();
                     30: int nulldev();
                     31: int nonedev();
                     32: 
                     33: /*
                     34:  * Device Configuration.
                     35:  */
                     36: 
                     37: CON msgcon = {
                     38:        DFCHR,                  /* Flags                        */
                     39:        25,                     /* Major Index                  */
                     40:        msgopen,                /* Open                         */
                     41:        nulldev,                /* Close                        */
                     42:        nonedev,                /* Block                        */
                     43:        nonedev,                /* Read                         */
                     44:        nonedev,                /* Write                        */
                     45:        msgioctl,               /* Ioctl                        */
                     46:        nulldev,                /* Power fail                   */
                     47:        nulldev,                /* Timeout                      */
                     48:        nulldev,                /* Load                         */
                     49:        nulldev                 /* Unload                       */
                     50: };
                     51: 
                     52: /*
                     53:  * Message Device Open.
                     54:  */
                     55: 
                     56: static
                     57: msgopen( dev, mode )
                     58: 
                     59: dev_t dev;
                     60: int mode;
                     61: 
                     62: {
                     63:        extern struct msqid_ds * msqs; /* Pointer to array of message queues */
                     64: 
                     65: 
                     66:        if ( ! msqs ){                  /* message queues not initialized */
                     67:                msginit();
                     68:        }
                     69: 
                     70:        if ( ! msqs )                   /* no message queues */
                     71:                u.u_error = ENODEV;
                     72: }
                     73: 
                     74: /*
                     75:  * Message Device Ioctl.
                     76:  */
                     77: 
                     78: static
                     79: msgioctl( dev, com, vec )
                     80: 
                     81: dev_t dev;
                     82: short com;
                     83: register short *vec;
                     84: 
                     85: {
                     86:        switch ( com ) {
                     87: 
                     88:        case MSGCTL:
                     89:                putusd( vec+0,                          /* -1 */
                     90:                        umsgctl(getusd( vec+1 ),        /* msqid */
                     91:                                getusd( vec+2 ),        /* command */
                     92:                                getusd( vec+3 ) ));     /* msqid_ds address */
                     93:                return;
                     94: 
                     95:        case MSGGET:
                     96:                putusd( vec+0,                          /* -1 */
                     97:                        umsgget(getusd( vec+1 ),        /* key 0 -15 */
                     98: /*                             getusd( vec+2 ),           key 15 - 31 */
                     99:                                getusd( vec+3 ) ));     /* msgflag */
                    100:                return;
                    101: 
                    102:        case MSGSND:
                    103:                putusd( vec+0,                          /* -1 */
                    104:                        umsgsnd(getusd( vec+1 ),        /* msqid */
                    105:                                getusd( vec+2 ),        /* -> message text */
                    106:                                getusd( vec+3 ),        /* size of text */
                    107:                                getusd( vec+4 ) ));     /* flag */
                    108:                return;
                    109: 
                    110:        case MSGRCV:
                    111:                putusd( vec+0,                          /* -1 */
                    112:                        umsgrcv(getusd( vec+1 ),        /* msqid */
                    113:                                getusd( vec+2 ),        /* -> message text */
                    114:                                getusd( vec+3 ),        /* size of text */
                    115:                                getusd( vec+4 ),        /* msgtype 0 - 15 */
                    116: /*                             getusd( vec+5 ),           msgtype 16 - 31 */
                    117:                                getusd( vec+6 ) ));     /* flag */
                    118:                return;
                    119: 
                    120:        default:
                    121:                u.u_error = EINVAL;
                    122:                return;
                    123:        }
                    124: }

unix.superglobalmegacorp.com

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