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