|
|
1.1 ! root 1: /* $Header: /usr/src/sys/i8086/drv/RCS/msgcon.c,v 2.1 88/09/03 13:09:32 src Exp $ ! 2: * ! 3: * The information contained herein is a trade secret of INETCO ! 4: * Systems, and is confidential information. It is provided under ! 5: * a license agreement, and may be copied or disclosed only under ! 6: * the terms of that agreement. Any reproduction or disclosure of ! 7: * this material without the express written authorization of ! 8: * INETCO Systems or persuant to the license agreement is unlawful. ! 9: * ! 10: * Copyright (c) 1987, 1985, 1984. ! 11: * An unpublished work by INETCO Systems, Ltd. ! 12: * All rights reserved. ! 13: */ ! 14: ! 15: /* ! 16: * System V Compatible Message Device Driver ! 17: * ! 18: * This device driver provides System V compatible messaging operations. ! 19: * Operations are performed through the message device (/dev/msg). ! 20: * and are implemented as ioctl calls from msgctl, msgget, msgsnd, msgrcv ! 21: * utilities. ! 22: * ! 23: * Author: Allan Cornish, INETCO Systems Ltd., Oct 1984 ! 24: * ! 25: * $Log: /usr/src/sys/i8086/drv/RCS/msgcon.c,v $ ! 26: * Revision 2.1 88/09/03 13:09:32 src ! 27: * *** empty log message *** ! 28: * ! 29: * Revision 1.1 88/03/24 17:05:49 src ! 30: * Initial revision ! 31: * ! 32: * 87/03/02 Allan Cornish /usr/src/sys/i8086/drv/msgcon.c ! 33: * Msgioctl() now supports long key [was short] on MSGGET operations. ! 34: * This allows compatability with System V. ! 35: * ! 36: * 85/08/06 Allan Cornish ! 37: * Msg.c split into configuration (msgcon.c) and implementation (msg.c). ! 38: * ! 39: * 85/07/03 Allan Cornish ! 40: * Simplified msgopen by ignoring minor device, which previously had to be 0. ! 41: * ! 42: * 84/01/30 Allan Cornish ! 43: * Initial revision. ! 44: */ ! 45: ! 46: #include <coherent.h> ! 47: #include <types.h> ! 48: #include <uproc.h> ! 49: #include <errno.h> ! 50: #include <con.h> ! 51: #include <msg.h> ! 52: ! 53: /* ! 54: * Functions. ! 55: */ ! 56: ! 57: int msgopen(); ! 58: int msgioctl(); ! 59: int nulldev(); ! 60: int nonedev(); ! 61: ! 62: /* ! 63: * Device Configuration. ! 64: */ ! 65: ! 66: CON msgcon = { ! 67: DFCHR, /* Flags */ ! 68: 25, /* Major Index */ ! 69: msgopen, /* Open */ ! 70: nulldev, /* Close */ ! 71: nonedev, /* Block */ ! 72: nonedev, /* Read */ ! 73: nonedev, /* Write */ ! 74: msgioctl, /* Ioctl */ ! 75: nulldev, /* Power fail */ ! 76: nulldev, /* Timeout */ ! 77: nulldev, /* Load */ ! 78: nulldev /* Unload */ ! 79: }; ! 80: ! 81: /* ! 82: * Message Device Open. ! 83: */ ! 84: ! 85: static ! 86: msgopen( dev, mode ) ! 87: ! 88: dev_t dev; ! 89: int mode; ! 90: ! 91: { ! 92: extern struct msqid_ds * msqs; /* Pointer to array of message queues */ ! 93: ! 94: if ( ! msqs ) /* message queues not initialized */ ! 95: msginit(); ! 96: ! 97: if ( ! msqs ) /* no message queues */ ! 98: u.u_error = ENODEV; ! 99: } ! 100: ! 101: /* ! 102: * Message Device Ioctl. ! 103: */ ! 104: ! 105: static ! 106: msgioctl( dev, com, vec ) ! 107: ! 108: dev_t dev; ! 109: int com; ! 110: register int *vec; ! 111: ! 112: { ! 113: switch ( com ) { ! 114: ! 115: case MSGCTL: ! 116: putuwd( vec+0, ! 117: umsgctl(getuwd( vec+1 ), ! 118: getuwd( vec+2 ), ! 119: getuwd( vec+3 ) )); ! 120: return; ! 121: ! 122: case MSGGET: ! 123: putuwd( vec+0, ! 124: umsgget(getuwd( vec+1 ), ! 125: getuwd( vec+2 ), ! 126: getuwd( vec+3 ) )); ! 127: return; ! 128: ! 129: case MSGSND: ! 130: putuwd( vec+0, ! 131: umsgsnd(getuwd( vec+1 ), ! 132: getuwd( vec+2 ), ! 133: getuwd( vec+3 ), ! 134: getuwd( vec+4 ) )); ! 135: return; ! 136: ! 137: case MSGRCV: ! 138: putuwd( vec+0, ! 139: umsgrcv(getuwd( vec+1 ), ! 140: getuwd( vec+2 ), ! 141: getuwd( vec+3 ), ! 142: getuwd( vec+4 ), ! 143: getuwd( vec+5 ), ! 144: getuwd( vec+6 ) )); ! 145: return; ! 146: ! 147: default: ! 148: u.u_error = EINVAL; ! 149: return; ! 150: } ! 151: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.