|
|
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.