xref: /original-bsd/sys/hp/dev/hilioctl.h (revision 3705696b)
1 /*
2  * Copyright (c) 1988 University of Utah.
3  * Copyright (c) 1990, 1993
4  *	The Regents of the University of California.  All rights reserved.
5  *
6  * This code is derived from software contributed to Berkeley by
7  * the Systems Programming Group of the University of Utah Computer
8  * Science Department.
9  *
10  * %sccs.include.redist.c%
11  *
12  * from: Utah $Hdr: hilioctl.h 1.10 92/01/21$
13  *
14  *	@(#)hilioctl.h	8.1 (Berkeley) 06/10/93
15  */
16 
17 struct _hilbell {
18 	u_char	duration;
19 	u_char	frequency;
20 };
21 
22 struct _hilbuf16 {
23 	u_char	string[16];
24 };
25 
26 struct _hilbuf11 {
27 	u_char	string[11];
28 };
29 
30 struct _hilbuf5 {
31   	u_char  string[5];
32 };
33 
34 struct _hilbuf4 {
35   	u_char  string[4];
36 };
37 
38 struct _hilbuf2 {
39 	u_char	string[2];
40 };
41 
42 struct hilqinfo {
43 	int	qid;
44 	char	*addr;
45 };
46 
47 /*
48  * HPUX ioctls (here for the benefit of the HIL driver).
49  * Named as they are under HPUX.
50  * The first set are loop device ioctls.
51  * The second set are ioctls for the 8042.
52  * Note that some are not defined as in HPUX
53  * due to the difference in the definitions of IOC_VOID.
54  */
55 #ifdef hp800
56 #define _IOHpux(x,y)	_IO(x,y)
57 #else
58 #define _IOHpux(x,y)	(IOC_IN|((x)<<8)|y)	/* IOC_IN is IOC_VOID */
59 #endif
60 
61 /*
62  * The HP compiler (at least as of HP-UX 7.X) pads odd sized structures
63  * to a short boundary.  To avoid issues of whether our compiler pads
64  * and, if so to what boundary, we explicitly state the values for
65  * troublesome ioctls:
66  *
67  *	HILID (HILIOCID)	_IOR('h',0x03, struct _hilbuf11),
68  *	EFTRRT (HILIOCRRT)	_IOR('H',0x31, struct _hilbuf5).
69  */
70 #define HILID	0x400C6803			/* Identify & describe */
71 #define HILSC	_IOR('h',0x33, struct _hilbuf16) /* Security code */
72 #define HILRN	_IOR('h',0x30, struct _hilbuf16) /* Report name */
73 #define HILRS	_IOR('h',0x31, struct _hilbuf16) /* Report status */
74 #define HILED	_IOR('h',0x32, struct _hilbuf16) /* Extended describe*/
75 #define HILDKR  _IOHpux('h',0x3D)		/* Disable autorepeat */
76 #define HILER1  _IOHpux('h',0x3E)		/* Autorepeat 1/30 */
77 #define HILER2  _IOHpux('h',0x3F)		/* Autorepeat 1/60 */
78 #define HILP1	_IOHpux('h',0x40)		/* Prompt 1 */
79 #define HILP2	_IOHpux('h',0x41)		/* Prompt 2 */
80 #define HILP3	_IOHpux('h',0x42)		/* Prompt 3 */
81 #define HILP4	_IOHpux('h',0x43)		/* Prompt 4 */
82 #define HILP5	_IOHpux('h',0x44)		/* Prompt 5 */
83 #define HILP6	_IOHpux('h',0x45)		/* Prompt 6 */
84 #define HILP7	_IOHpux('h',0x46)		/* Prompt 7 */
85 #define HILP	_IOHpux('h',0x47)		/* Prompt */
86 #define HILA1	_IOHpux('h',0x48)		/* Acknowledge 1 */
87 #define HILA2	_IOHpux('h',0x49)		/* Acknowledge 2 */
88 #define HILA3	_IOHpux('h',0x4A)		/* Acknowledge 3 */
89 #define HILA4	_IOHpux('h',0x4B)		/* Acknowledge 4 */
90 #define HILA5	_IOHpux('h',0x4C)		/* Acknowledge 5 */
91 #define HILA6	_IOHpux('h',0x4D)		/* Acknowledge 6 */
92 #define HILA7	_IOHpux('h',0x4E)		/* Acknowledge 7 */
93 #define HILA	_IOHpux('h',0x4F)		/* Acknowledge */
94 
95 #define EFTSRD  _IOW('H',0xa0,char)		/* Set the repeat delay. */
96 #define EFTSRR  _IOW('H',0xa2,char)		/* Set the repeat rate. */
97 #define EFTSRPG _IOW('H',0xa6,char)		/* Set RPG interrupt rate. */
98 #define EFTSBP  _IOW('H',0xc4,struct _hilbuf4)	/* Send data to the beeper. */
99 #define EFTRLC  _IOR('H',0x12,char)		/* Read the language code. */
100 #define EFTRCC  _IOR('H',0x11,char)		/* Read configuration code. */
101 #define EFTRRT  0x40064831			/* Read the real time. */
102 #define EFTRT   _IOR('H',0xf4,struct _hilbuf4)	/* Read the timers for the
103 	                                              four voices. */
104 #ifdef hp800
105 #define EFTSBI  _IOW('H',0xa3,char)		/* Do the beep thing. */
106 #else
107 #define EFTSBI  _IOW('H',0xa3,struct _hilbuf2)	/* Set the bell information. */
108 #endif
109 
110 /*
111  * BSD ioctls.
112  * Mostly the same as the HPUX versions except for shared-queue ioctls.
113  */
114 #define OHILIOCID	0x400B6803		/* XXX compat */
115 #define HILIOCID	HILID
116 #define HILIOCSC	_IOR('h',0x33, struct _hilbuf16)
117 #define HILIOCRN	_IOR('h',0x30, struct _hilbuf16)
118 #define HILIOCRS	_IOR('h',0x31, struct _hilbuf16)
119 #define HILIOCED	_IOR('h',0x32, struct _hilbuf16)
120 #define HILIOCAROFF	_IO('h',0x3D)
121 #define HILIOCAR1	_IO('h',0x3E)
122 #define HILIOCAR2	_IO('h',0x3F)
123 #define HILIOCSBP	_IOW('H',0xc4,struct _hilbuf4)
124 #define OHILIOCRRT	0x40054831		/* XXX compat */
125 #define HILIOCRRT	EFTRRT
126 #define HILIOCRT	_IOR('H',0xf4,struct _hilbuf4)
127 #define HILIOCBEEP	_IOW('H',0xA3,struct _hilbell)
128 #	define	BELLDUR		80	/* tone duration in msec (10 - 2560) */
129 #	define	BELLFREQ	8	/* tone frequency (0 - 63) */
130 
131 #define HILIOCALLOCQ	_IOWR('H',0x72, struct hilqinfo)	/* allocate queue */
132 #define HILIOCFREEQ	_IOW('H',0x73, struct hilqinfo)	/* deallocate queue */
133 #define HILIOCMAPQ	_IOW('H',0x74, int)	/* map device to queue */
134 #define HILIOCUNMAPQ	_IOW('H',0x75, int)	/* unmap device from dev */
135 #define HILIOCTEST      _IOW('H',0x76, int)	/* Toggle debugging mode */
136 #define HILIOCHPUX	_IO('H',0x77)		/* use HPUX (read) semantics */
137 #define HILIOCRESET	_IO('H',0x78)		/* Reset the HIL loop. */
138 
139 /*
140  * HIL input queue.
141  * This is the circular queue (allocated by HILIOCALLOC) shared by kernel
142  * and user.  It consists of a sixteen byte header followed by space for
143  * 255 input data packets (a total of 4096 bytes).  The kernel adds packets
144  * at tail.  The user is expected to remove packets from head.  This is the
145  * only field in the header that the user should modify.
146  */
147 typedef struct hil_packet {
148 	u_char	size;		/* total packet size */
149 	u_char	dev;		/* loop device packet was generated by */
150 	long	tstamp;		/* time stamp */
151 	u_char	data[10];	/* device data */
152 } hil_packet;
153 
154 typedef struct hil_eventqueue {
155 	int	size;
156 	int	head;
157 	int	tail;
158 	int	pad;
159 } hil_eventqueue;
160 
161 typedef union hilqueue {
162 	char	hqu_size[0x1000];
163 	struct	q_data {
164 		hil_eventqueue	h_eventqueue;
165 		hil_packet	h_event[1];
166 	} q_data;
167 #define hil_evqueue	q_data.h_eventqueue
168 #define hil_event	q_data.h_event
169 } HILQ;
170 
171 #define HEVQSIZE	\
172 	((sizeof(HILQ) - sizeof(struct q_data)) / sizeof(hil_packet) + 1)
173