summaryrefslogtreecommitdiffstats
path: root/sys/i386/include/ioctl_pc.h
blob: bc6a255c8bdd920c0d0019305c6ac4eae3f35282 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
/*      Copyright 1992,1993 by Holger Veit
 *	May be freely used with Bill Jolitz's port of 
 *	386bsd and may be included in a 386bsd collection
 *	as long as binary and source are available and reproduce the above
 *	copyright.
 *
 *	You may freely modify this code and contribute improvements based
 *	on this code as long as you don't claim to be the original author.
 *	Commercial use of this source requires permittance of the copyright 
 *	holder. A general license for 386bsd will override this restriction.
 *
 *	Use at your own risk. The copyright holder or any person who makes
 *	this code available for the public (administrators of public archives
 *	for instance) are not responsible for any harm to hardware or software
 *	that might happen due to wrong application or program faults.
 *
 * Addendum: The XFree86 developers and maintainers are hereby granted the 
 * right to distribute this file together with their source distributions
 * and patchkits of XFree86 without further explicit permission of the
 * above copyright holder. 
 * This and another file is a necessary include file for the unified 
 * pccons/codrv implementation of XFree86. This file is needed if
 * someone wants to compile an Xserver on a system which does not have, 
 * for some reasons, the codrv console driver which comes with this file. The
 * availability of this file avoids a large number of #ifdef's and
 * allows to make the xserver code easier runtime-configurable.
 * To make use of this file, it must be installed in /usr/include/sys.
 * This file is not the complete console device driver, so it is possible
 * that properties described in this file do not work without having the
 * complete driver distribution. This is not a fault of the Xserver that
 * was built with this file.
 *
 *
 *
 *	From: @(#)$RCSfile: ioctl_pc.h,v
 *	Revision: 1.1.1.1  (Contributed to 386bsd)
 *	Date: 1993/06/12 14:58:11
 *
 *	Important notice: #defined values are subject to be changed!!!
 *	Don't use the constant, use the name instead!
 *
 *	codrv1-style uses ioctls	'K': 1-33,255
 *					'V': 100-109
 *
 *	-hv-	Holger Veit, Holger.Veit@gmd.de
 *	-hm	Hellmuth Michaelis, hm@hcshh.hcs.de
 *      -vak-   Sergey Vakulenko, vak@kiae.su
 *
 *	25-07-92	-hv-	First version
 *	16-08-92	-hm	adding vga ioctl for cursor shape
 *      25-10-92	-hv-	X11 + video related ioctls
 *      01/12/92        -vak-   8x16 font loading, beep ioctl,
 *                              LED reassignment ioctl.
 *	22-04-93	-hv-	unified most CODRV1/CODRV2 codes
 *	24-04-93	-hv-	revised parts of keymap structures
 *
 *	$Id$
 */

#ifndef	_IOCTL_PC_H_
#define	_IOCTL_PC_H_

#ifdef NOTDEF
#if __GNUC__ >= 2
#pragma pack(1)
#endif
#endif

#ifndef KERNEL
#include <sys/ioctl.h>
#ifndef _TYPES_H_
#include <sys/types.h>
#endif
#else
#include "ioctl.h"
#endif


/***************************************************************************
 *   Basic definitions
 ***************************************************************************/

/* Use this data type when manipulating characters, don't use 'char' or 'u_char'
 * some day this will be changed to 'u_short' or 'u_long' size to allow
 * characters > 255
 */
typedef u_char	XCHAR;

/***************************************************************************
 *   driver identification
 ***************************************************************************/

/*
 * This defines the CONSOLE INFORMATION data structure, used to
 * describe console capabilities, to distinguish between different
 * versions. If this ioctl fail, you probably have an old style "pccons" 
 * driver (or an "improved" console driver, whose writer is not interested
 * in providing compatibility for anything).
 * In this case, a considerable number of features may not work as expected,
 * or do not work at all.
 */

#define MAXINFOSIZE	16
struct consinfo {
	u_long	info1;
	u_long	__reserved1__;
	u_long	__reserved2__;
	u_long	__reserved3__;
	XCHAR	drv_name[MAXINFOSIZE+1];
	XCHAR	emul_name[MAXINFOSIZE+1];
	XCHAR	__reserved1_name__[MAXINFOSIZE+1];
	XCHAR	__reserved2_name__[MAXINFOSIZE+1];
};

struct oldconsinfo {
	u_long	info1;
	u_long	__reserved__;
};

#define CONSGINFO	_IOR('K',255,struct consinfo)	/* Get console capabilities */
#define OLDCONSGINFO	_IOR('K',255,struct oldconsinfo) /* compatibility */
#define		CONS_ISPC	0x00000001	/* is derived from old PCCONS */
#define		CONS_ISCO	0x00000002	/* is derived from CO driver */
#define		CONS_reserved1	0x00000004	/* reserved for other console drivers */
#define		CONS_reserved2	0x00000008	/* reserved for other console drivers */
#define		CONS_HASKBD	0x00000010	/* has /dev/kbd */
#define		CONS_HASSCAN	0x00000020	/* uses Scan codes */
#define		CONS_HASKEYNUM	0x00000040	/* uses KEYNUMS */
#define		CONS_HASVTY	0x00000080	/* has /dev/vty* */
#define		CONS_HASPC3	0x00000100	/* unused, historical */
#define		CONS_HASVTHP	0x00000200	/* unused, historical */
#define		CONS_reserved3	0x00000400	/* reserved */
#define		CONS_reserved4	0x00000800	/* reserved */
#define		CONS_HASPX386	0x00001000	/* has X386 probing support +new CONSOLE_X_MODE */
#define		CONS_HASOX386	0x00002000	/* has old X386 support CONSOLE_X_MODE_ON/OFF */
#define		CONS_reserved5	0x00004000	/* reserved */
#define		CONS_reserved6	0x00008000	/* reserved */
#define		CONS_HASKCAP	0x00010000	/* has ioctl keycap support */
#define		CONS_HASFNT	0x00020000	/* has ioctl font support */
#define		CONS_reserved7	0x00040000	/* reserved */
#define		CONS_reserved8	0x00080000	/* reserved */
#define		CONS_USE7BIT	0x00100000	/* does not support 8bit characters */ 
#define		CONS_USEPC8	0x00200000	/* uses PC8 8-bit mapping */
#define		CONS_USELATIN1	0x00400000	/* uses ISO LATIN1 mapping */
#define		CONS_HAS10646	0x00800000	/* has /dev/unicode */
#define		CONS_PCCONS2	0x01000000	/* modified pccons */
#define		CONS_CODRV1	0x02000000	/* old codrv ioctls */
#define		CONS_CODRV2	0x04000000	/* codrv ioctls 0.1.2 */
#define		CONS_reserved9	0x08000000	/* reserved */
#define		CONS_reserved10	0x10000000	/* reserved */
#define		CONS_reserved11	0x20000000	/* reserved */
#define		CONS_reserved12	0x40000000	/* reserved */
#define		CONS_reserved13	0x80000000	/* reserved */


/***************************************************************************
 *   IOCTLs for AT Keyboard
 ***************************************************************************/

/**** initializing the keyboard ****/

/* reset keyboard, run selftests and set default values:
 * default keymap, no overloaded keys, default typematic rate
 * KBD_TPD500|KBD_TPM100, repetition on
 */
#define KBDCOLDRESET	_IO('K',  1)	/* reset keyboard and set default
					 * values:
					 * default keymap, no overloaded
					 * keys, default typematic rate
					 * KBD_TPD500|KBD_TPM100
					 */	
/* resets the mode in keyboard controller only */
#define	KBDWARMRESET	_IO('K', 23)



/**** key repetition (typematic) feature ****/

/* get (G) / set (S) key repetition rate and delay
 * see below for a definition of rate and delay and the necessary
 * argument
 */
#define KBDGTPMAT	_IOR('K', 2, int)
#define KBDSTPMAT	_IOW('K', 3, int)

/*   Typematic rates:
 *   Rate = 1 / Period, with 
 *   Period = (8+ (Val&7)) * 2^((Val>>3)&3) * 0.00417 seconds,
 *   and Val the typematic value below
 *
 *   The typematic delay is determined by
 *   Delay = (1+((Val>>5)&3)) * 250 msec +/- 20 %
 *
 *  Source IBM/AT reference manual, 1987
 *
 *  Note that you have to pass one TPD* and one TPM* value to the KBDSTPMAT
 *  ioctl: they are different flags of the same data word. Also note that
 *  0x00 is a valid value: KBD_TPD250|KBD_TPM300 which is really fast, instead
 *  of turning off key repetition entirely. You can turn off key repetition
 *  with the ioctls KBDGREPSW/KBDSREPSW.
*/

#define		KBD_TPD250	0x0000		/* 250 ms */
#define		KBD_TPD500	0x0020		/* 500 ms */
#define		KBD_TPD750	0x0040		/* 750 ms */
#define		KBD_TPD1000	0x0060		/* 1000 ms */

#define		KBD_TPM300	0x0000		/* 30.0 rate */
#define		KBD_TPM267	0x0001		/* 26.7 rate */
#define		KBD_TPM240	0x0002		/* 24.0 rate */
#define		KBD_TPM218	0x0003		/* 21.8 rate */
#define		KBD_TPM200	0x0004		/* 20.0 rate */
#define		KBD_TPM185	0x0005		/* 18.5 rate */
#define		KBD_TPM171	0x0006		/* 17.1 rate */
#define		KBD_TPM160	0x0007		/* 16.0 rate */
#define		KBD_TPM150	0x0008		/* 15.0 rate */
#define		KBD_TPM133	0x0009		/* 13.3 rate */
#define		KBD_TPM120	0x000a		/* 12.0 rate */
#define		KBD_TPM109	0x000b		/* 10.9 rate */
#define		KBD_TPM100	0x000c		/* 10.0 rate */
#define		KBD_TPM92	0x000d		/*  9.2 rate */
#define		KBD_TPM86	0x000e		/*  8.6 rate */
#define		KBD_TPM80	0x000f		/*  8.0 rate */
#define		KBD_TPM75	0x0010		/*  7.5 rate */
#define		KBD_TPM67	0x0011		/*  6.7 rate */
#define		KBD_TPM60	0x0012		/*  6.0 rate */
#define		KBD_TPM55	0x0013		/*  5.5 rate */
#define		KBD_TPM50	0x0014		/*  5.0 rate */
#define		KBD_TPM46	0x0015		/*  4.6 rate */
#define		KBD_TPM43	0x0016		/*  4.3 rate */
#define		KBD_TPM40	0x0017		/*  4.0 rate */
#define		KBD_TPM37	0x0018		/*  3.7 rate */
#define		KBD_TPM33	0x0019		/*  3.3 rate */
#define		KBD_TPM30	0x001a		/*  3.0 rate */
#define		KBD_TPM27	0x001b		/*  2.7 rate */
#define		KBD_TPM25	0x001c		/*  2.5 rate */
#define		KBD_TPM23	0x001d		/*  2.3 rate */
#define		KBD_TPM21	0x001e		/*  2.1 rate */
#define		KBD_TPM20	0x001f		/*  2.0 rate */


/* get (G) / set (S) the key repetition switch */
#define		KBD_REPEATOFF	0
#define		KBD_REPEATON	1
#define KBDGREPSW	_IOR('K', 4, int)
#define KBDSREPSW	_IOW('K', 5, int)



/**** handling keyboard LEDS and Lock keys ****/

/* get (G) / set (S) the keyboard LEDs,
 * does not influence the state of the lock keys.
 * Note: if keyboard serves tty console mode (VTYs have keyboard focus),
 * the lock keys will still modify the state when used
 */
#define KBDGLEDS	_IOR('K', 6, int)
#define KBDSLEDS	_IOW('K', 7, int)

/* get (G) / set (S) the SCROLL, NUM, CAPS ALTGRLOCK keys
 * (note: ALTGRLOCK or SHIFTLOCK are not necessarily accessible 
 * on your keyboard)
 */
#define 	KBD_LOCKSCROLL	0x0001
#define		KBD_LOCKNUM	0x0002
#define		KBD_LOCKCAPS	0x0004
#define		KBD_LOCKALTGR	0x0008
#define		KBD_LOCKSHIFT	0x0010
#define KBDGLOCK	_IOR('K', 8, int)
#define KBDSLOCK	_IOW('K', 9, int)



/**** making noise ****/

/* get (G) / set (S) the beeper frequency and tone duration
 * the nr param determines the VTY which parameters are changed
 * VTY# = 0...n, n < max_vtys
 * nr = -1: actual vty
 * nr = -2: Set the system default beep frequency
 *
 * in some emulations, you can also set pitch and duration by an ESC code
 */
#define		KBD_ACTVTY	-1
#define		KBD_DEFLT	-2
struct kbd_bell {
	int	pitch;
	int	duration;
	int	nr;	
};

#define KBDGETBEEP      _IOWR('K',28, struct kbd_bell)
#define KBDSETBEEP      _IOW('K',29, struct kbd_bell)

/* do a beep of specified frequency and duration
 * the argument nr is unused
 * a NULL arg performs a default system beep
 */
#define KBDBELL		_IOW('K',30, struct kbd_bell)



/**** I/O access ****/

/* This call allows programs to access I/O ports. 
 * The ioctl is intended to perform several tasks for the XFree86 Xserver,
 * but currently has other interesting applications. This is why it is
 * priviledged and can only be executed by root (or with setuid-root).
 * In future the ioctl might be restricted to allow access to video ports
 * only.
 */
#define		X_MODE_ON	1
#define		X_MODE_OFF	0
#define CONSOLE_X_MODE	_IOW('K',22,int)


/**** keyboard overloading ****/

/* Codrv allows loading of strings to keys in six layers.
 * Any string may have a length of up to KBDMAXOVLKEYSIZE XCHARS.
 * !!! Warning: This ioctl uses the type XCHAR. In future, this may
 * !!! no longer be a char type, so str*** functions might not work any more
 * !!! some day.
 * The available layers are:
 *
 * - unshifted
 * - with shift key
 * - with ctrl key
 * - with meta key (usually ALT-left)
 * - with altgr key (usually ALT-right)
 * - with shift+altgr key
 *
 * There are no combinations: shift-ctrl, ctrl-alt, shift-meta.
 * The combination ctrl-altleft-somekey is reserved for system purposes.
 * These keys are usually processed before the above keys. To gain control
 * over these keys, you must run the keyboard in raw mode (/dev/kbd) and
 * do ALL the processing yourself. The Xserver for instance does it this way.
 * The following special keys are currently defined:
 * 
 * CTRL-ALTLEFT-DELETE:	Reboot
 * CTRL-ALTLEFT-ESCAPE: Call the debugger (if compiled into the kernel)
 * CTRL-ALTLEFT-KP+:	Switch to next resolution (Xserver only)
 * CTRL-ALTLEFT-KP-:	Switch to previous resolution (Xserver only)
 */

/* values for type field of various kbd_overload ioctls */
#define		KBD_NONE	0	/* no function, key is disabled */
#define		KBD_SHIFT	1	/* keyboard shift */
#define		KBD_META	2	/* (ALT) alternate shift, sets bit8 to ASCII code */
#define		KBD_NUM		3	/* numeric shift  cursors vs. numeric */
#define		KBD_CTL		4	/* control shift  -- allows ctl function */
#define		KBD_CAPS	5	/* caps shift -- swaps case of letter */
#define		KBD_ASCII	6	/* ascii code for this key */
#define		KBD_SCROLL	7	/* stop output */
#define		KBD_FUNC	8	/* function key */
#define		KBD_KP		9	/* Keypad keys */
#define 	KBD_BREAK	10	/* The damned BREAK key, ignored in ioctl */
#define 	KBD_ALTGR	11	/* AltGr Translation feature */
#define		KBD_SHFTLOCK	12	/* some people are accustomed to this nonsense */
#define         KBD_ALTGRLOCK   13      /* Useful for 8-bit national kbds (cyrillic) */
#define         KBD_DOALTCAPS   0x0400  /* change by altgr + caps shift */
#define         KBD_DOCAPS      0x0800  /* change by caps shift */
#define 	KBD_DIACPFX	0x4000	/* Key carries a diacritical prefix */
#define 	KBD_OVERLOAD	0x8000	/* Key is overloaded, ignored in ioctl */
#define		KBD_MASK	0x001f	/* mask for type */ 

#define KBDMAXOVLKEYSIZE	15	/* excl. zero byte */
struct kbd_ovlkey {
	u_short	keynum;
	u_short	type;
	XCHAR	unshift[KBDMAXOVLKEYSIZE+1];
	XCHAR	shift[KBDMAXOVLKEYSIZE+1];
	XCHAR	ctrl[KBDMAXOVLKEYSIZE+1];
	XCHAR	meta[KBDMAXOVLKEYSIZE+1];
	XCHAR	altgr[KBDMAXOVLKEYSIZE+1];
	XCHAR	shiftaltgr[KBDMAXOVLKEYSIZE+1];
};


/* Get (G) / Set (S) a key assignment. This will influence the current
 * key value only
 */
#define KBDGCKEY	_IOWR('K',16, struct kbd_ovlkey)
#define KBDSCKEY	_IOW('K',17, struct kbd_ovlkey)

/* Get (G) the default (old) key assignment. You cannot overwrite the
 * default setting, so this ioctl is unpaired
 */
#define KBDGOKEY	_IOWR('K',18, struct kbd_ovlkey)



/* Remove a key assignment for a key, i.e. restore default setting for key
 * arg = keynum
 */
#define KBDRMKEY	_IOW('K', 19, int)

/* Restore the default key setting */
#define KBDDEFAULT	_IO('K',20)



/* Set behavior of unassigned key layers
 * Note that there is a hack from further versions which uses
 * the flags KBD_C0 and KBD_A0 for this. This is still supported, but
 * is not recommended way to do. It may disappear in future
 * (what means that it won't :-))
 */
#define		KBD_CLEARCTRL	2
#define		KBD_CLEARMETA	4
#define		KBD_CLEARALT	1
#ifdef notyet
	#define		KBD_CLEARNORM	8
	#define		KBD_CLEARSHIFT	16
	#define		KBD_CLEARSHALT	32
#endif
#define	KBDSCLRLYR	_IOW('K',31,int)

/* get (G) / set (S) CAPSLOCK LED behaviour.
 * Not all of this keys may be accessible at your keyboard
 * Note: For compatibility, the S ioctl returns the old state in arg
 */
#define		KBD_CAPSCAPS	0	/* LED follows CAPSLOCK state */
#define		KBD_CAPSSHIFT	1	/* LED follows SHIFTLOCK state */
#define		KBD_CAPSALTGR	2	/* LED follows ALTGRLOCK state */
#define		KBD_CAPSINIT	0x04	/* bit to set to set a default for all VTYs */
#define KBDGCAPSLED	_IOR('K',27,int)
#define KBDSCAPSLED	_IOWR('K',25,int)

/* extended functions: functions that are triggered by a keypress
 * before key is converted to ASCII
 *
 * use function KBD_HOTKEYDELETE to remove a hotkey from a key
 */
struct kbd_hotkey {
	u_short	key;
	u_short modifier;
	u_short	function;
};
#define KBDGSPECF	_IOWR('K',32,struct kbd_hotkey)
#define KBDSSPECF	_IOW('K',33,struct kbd_hotkey)

/* extended function prefixes (in modifier field)
 * 	bit set triggers a special function on the key layer
 */
#define 	KBD_NOEXT	0x00	/* trigger never */
#define		KBD_EXT_N	0x01	/* on normal key (normal layer) */
#define		KBD_EXT_S	0x02	/* on shift key (shift layer) */
#define		KBD_EXT_C	0x04	/* on ctrl key (ctrl layer) */
#define		KBD_EXT_A	0x08	/* on alt key (alt layer) */
#define		KBD_EXT_SK	0x10	/* on syskey (PRINTSCREEN) (Meta Layer) */
#define		KBD_EXT_CA	0x20	/* on ctrl-alt (shift alt layer) */

/* extended functions (in function field) */
#define		KBD_VTY0	0	/* select vty 0 */
#define		KBD_VTY1	1	/* select vty 1 */
#define		KBD_VTY2	2	/* select vty 2 */
#define		KBD_VTY3	3	/* select vty 3 */
#define		KBD_VTY4	4	/* select vty 4 */
#define		KBD_VTY5	5	/* select vty 5 */
#define		KBD_VTY6	6	/* select vty 6 */
#define		KBD_VTY7	7	/* select vty 7 */
#define		KBD_VTY8	8	/* select vty 8 */
#define		KBD_VTY9	9	/* select vty 9 */
#define		KBD_VTY10	10	/* select vty 10 */
#define		KBD_VTY11	11	/* select vty 11 */
#define		KBD_VTYUP	0x80	/* select next vty */
#define		KBD_VTYDOWN	0x81	/* select previous vty */
#define		KBD_RESETKEY	0x82	/* the CTRL-ALT-DEL key (movable) */
#define		KBD_DEBUGKEY	0x83	/* the CTRL-ALT-ESC key (debugger) */

#define		KBD_HOTKEYDELETE 0xff	/* use to delete a hotkey KBDSSPECF */



/* These are names used in older versions of keycap/codrv */
/* do not use the following functions any longer in future */
#ifdef COMPAT_CO011
#define KBDRESET	KBDCOLDRESET
#define KBDRESET8042	KBDWARMRESET
#define KBDFORCEASCII	_IOW('K', 24, int)	/* no op in codrv-0.1.2 */
#define 	KBD_SCROLLLOCK	KBD_LOCKSCROLL
#define		KBD_NUMLOCK	KBD_LOCKNUM
#define		KBD_CAPSLOCK	KBD_LOCKCAPS
#define KBDASGNLEDS     KBDSCAPSLED
#ifndef KERNEL
struct kbd_sound {
	int pitch;	/* Frequency in Hz */
	int duration;	/* Time in msec */
};
#endif
#define KBDSETBELL	_IOW('K',21, struct kbd_sound)	/* do some music */
#define OLDKBDSETBEEP      _IOW('K',26, struct kbd_sound) /* change beep settings */

struct oldkbd_ovlkey {
	u_short	keynum;
	u_short	type;
	char	unshift[KBDMAXOVLKEYSIZE+1];
	char	shift[KBDMAXOVLKEYSIZE+1];
	char	ctrl[KBDMAXOVLKEYSIZE+1];
	char	altgr[KBDMAXOVLKEYSIZE+1];
};
#define OLDKBDGCKEY	_IOWR('K',16, struct oldkbd_ovlkey)	/* get current key values */



#endif /*COMPAT_CO011*/

/***************************************************************************
 *   IOCTLs for Video Adapter
 ***************************************************************************/

/* to define the cursor shape for ioctl */
struct cursorshape {
	int start;	/* topmost scanline, range 0...31 */
	int end;	/* bottom scanline, range 0...31 */
};

#define VGAGCURSOR	_IOR('V',100, struct cursorshape) /* get cursor shape */
#define VGASCURSOR	_IOW('V',101, struct cursorshape) /* set cursor shape */



/**** information ****/

/* the video information structure for ioctl */
struct videoinfo {
	char	name[20];	/* ASCIZ name of detected card */
	short	type;		/* Adapter type, see below */
	short	subtype;	/* Adapter specific subtype */
	short	ram;		/* in KBytes */
	short	iobase;		/* Address of 6845: 0x3b0 / 0x3d0 */
};

/* Get information about the videoboard */
#define VGAGINFO	_IOR('V',102, struct videoinfo)

/* recognized Adapter types */
#define		VG_UNKNOWN	0
#define		VG_MONO		1
#define		VG_CGA		2
#define		VG_EGA		3
#define		VG_VGA		4
#define		VG_CHIPS	5
/*	CHIPS & TECHNOLOGIES has subtypes:
 *		0x10	82c451
 *		0x11	82c452
 *		0x20	82c455
 *		0x30	82c453
 *		0x50	82c455
 */
#define		VG_GENOA	6
/*	GENOA has subtypes:
 *		0x33/0x55	5100-5400, ET3000 based
 *		0x22		6100
 *		0x00		6200,6300
 *		0x11		6400,6600
 */
#define		VG_PARADISE	7
/*	PARADISE has subtypes:
 *		01	PVGA1A,WD90C90
 *		02	WD90C00
 *		03	WD90C10
 *		04	WD90C11
 */
#define		VG_TVGA		8
/*	TVGA	has subtypes:
 *		00-02	8800
 *		03	8900B
 *		04	8900C
 *		13	8900C
 *		23	9000
 */
#define		VG_ET3000	9
#define		VG_ET4000	10
#define		VG_VIDEO7	11
/*	VIDEO7  has subtypes:
 *		0x80-0xfe	VEGA VGA
 *		0x70-0x7e	V7VGA FASTWRITE/VRAM
 *		0x50-0x59	V7VGA version 5
 *		0x41-0x49	1024i
 */
#define		VG_ATI		12
/*	ATI	has subtypes:
 *		0x01nn	18800
 *		0x02nn	18800-1
 *		0x03nn	28800-2
 *		0x04nn-05nn
 *	with nn:
 *		0x01	VGA WONDER
 *		0x02	EGA WONDER800+
 *		0x03	VGA BASIC 16+
 */	



/**** Screen blanking ****/

/* Get (G) / Set (S) screen blanker timeout (seconds),
 * time=0 disables blanking
 *
 * The blanking state is coded in bits 31 and 30 of word returned by get
 */
#define		VGA_BLANKOFF	0x00000000	/* display is on, no blanking */
#define		VGA_BLANKON	0x40000000	/* display is on, wait for blank */
#define		VGA_BLANKED	0x80000000	/* display is dark */
#define	VGAGBLANK	_IOR('V',2,int)
#define VGASBLANK	_IOW('V',3,int)



/**** Text/Attribute direct access, block move ****/

struct vga_block {
	short	mode;
	short	pagenum;
	short	x0,y0;		/* upper left coordinates 0..x-1, 0..y-1 */
	short	x1,y1;		/* lower right coordinates >= x0,y0 */
	u_char	*map;		/* must be allocated by user process ! */
};

/* mode word */
#define		VGA_SCREEN	0x01	/* entire screen, ignore x,y */
#define		VGA_WINDOW	0x02	/* use x,y for a rectangular window */
#define		VGA_TEXT	0x10	/* copy text information only */
#define		VGA_ATTR	0x20	/* copy attribute information only */
#define		VGA_BOTH	0x30	/* copy text and attribute */
#define		VGA_ALL		0x31	/* copy complete screen */

/* Get (G) / Set (S) a rectangular block of screen
 * The virtual screen need not be visible.
 * The buffer must be provided by the user process and must be large enough
 * use VGAGVRES to find out how many bytes
 * pagenum: 0..n, n < max_vty, VTY number
 *	    -1, actual VTY
 */
#define VGAGBLOCK	_IOWR('V',4,struct vga_block)
#define VGASBLOCK	_IOW('V',5,struct vga_block)



#define VGA_TXTPAGE0	0
#define VGA_TXTPAGE1	1
#ifdef notyet
#define VGA_GFXPAGE	2
#endif
#define	VGA_PC8CODING	0x80	/* obsolete ! */

/* maximum dimension of pixels
 * Note: this is the space reserved in the fontchar map, but
 * does not mean, that this resolution is accepted in the current release
 * codrv-0.1.2 accepts 8x16 / "9x16" fonts only
 */
#define	VGA_MAXX	16
#define VGA_MAXY	16

struct fchar {
	XCHAR	encoding;	/* encoding of character */
	char	_f1_,_f2_,_f3_;	/* filler */
	u_char	map[VGA_MAXX/8*VGA_MAXY];
};

struct fmap {
	short	page;	/* page to load */
	short	nr;	/* nr of characters to load */
	char	x,y;	/* x,y pixel width */
	XCHAR	start;	/* first character in sequence (get only) */
	struct fchar *fntmap;	/* allocated by user process */
};

/* get (G) / set (S) font map. Must provide page,nr,start for get */
#define	VGAGFONTMAP	_IOWR('V',6,struct fmap)
#define	VGASFONTMAP	_IOW('V',7,struct fmap)



/* do not use the following functions any longer in future */
#ifdef COMPAT_CO011
/* miscellaneous functions: */
#define VGA_DIS1	1	/* disable font 1 */
#define VGA_GTENC	2	/* get current encoding */
#define VGA_SBLANK	3	/* set screen blanking timeout (use VGASBLANK!) */
#define VGA_GBLANK	4	/* get screen blanking timeout (use VGAGBLANK!) */

struct miscfcns {
	u_char	cmd;
	union {
		short	enc[2];	
		int	timeout;
	} u;
};	
#define	VGAMISCFCNS	_IOWR('V',107,struct miscfcns)	/* misc functions */


/* Font mapping this needs at least an EGA card (else EINVAL) */
#define 	VGAFNTLATIN1	0x00
#define		VGAFNTEXTEND1	0x01
#define		VGAFNTEXTEND2	0x02
#define		VGAFNTGREEK	0x03
#define		VGAFNTCYRILLIC	0x04
#define		VGAFNTHEBREW	0x05
#define		VGAFNTARABIAN	0x06

#define VGA_FNTNCHARS	256
#define VGA_FNTCSIZE    15

struct fontchar {
	u_char	page;		/* which font page */
	u_char	idx;		/* which char in font page */
	u_char	cmap[VGA_FNTCSIZE];	/* character bitmap */
};

#define OLDVGAGCHAR	_IOWR('V',105,struct fontchar) /* get character of font */
#define OLDVGASCHAR	_IOW('V',106,struct fontchar)	/* set character in font */

struct fontmap {
	u_char	page;		/* page to load */
	u_short	encoding;	/* font encoding */
	u_char	map[VGA_FNTNCHARS*VGA_FNTCSIZE];
};

#define	OLDVGAGFNTMAP	_IOWR('V',103,struct fontmap)	/* get font */
#define VGAGFNTMAP	OLDVGAGFNTMAP
#define	OLDVGASFNTMAP	_IOW('V',104,struct fontmap)	/* set font */
#define VGASFNTMAP	OLDVGASFNTMAP

#endif




struct textpage {
	u_char	pagenum;	/* note: only page 0 used by vtys */
#define	VGA_TEXTATTR	0
#define	VGA_TEXTDATA	1
	u_char	ad;
#define	VGA_LINES	50	/* only 25 used for now */
#define	VGA_COLUMNS	80
	u_char	map[VGA_LINES*VGA_COLUMNS];
};

#define VGAGPAGE	_IOWR('V',108,struct textpage)	/* get a data page */
#define VGASPAGE	_IOW('V',109,struct textpage)	/* set a data page */

/**** Signalling access ****/

/* Use "take control" in an application program to signal the kernel
 * that the program wants to use video memory (such as Xserver)
 * before the program switches modes
 *
 * Use "give control" to return the control to the kernel. The application
 * should have restored the original state before giving back control.
 * Close /dev/vga also returns control.
 *
 * However, the kernel remains the master in the house, and reserves the right
 * to grab control back at any time. (It usually doesn't).
 *
 */
#define	VGATAKECTRL	_IO('V',8)
#define VGAGIVECTRL	_IO('V',9)

/***************************************************************************
 *   Pandora's box, don't even think of using the following ioctl's
 *   (if you happen to find some; codrv_experimental might not be
 *   available at your system)
 ***************************************************************************/

#ifdef PANDORA
#include "codrv_experimental.h"
#endif



/***************************************************************************
 *   XFree86 pccons support
 ***************************************************************************/

#ifdef COMPAT_PCCONS
/* The following calls are special to the old pccons driver and are
 * not understood or supported by codrv. 
 * This file serves as a central definition base for these calls
 * in order to avoid defining them in applications that want to 
 * use them.
 *
 * One word of warning: There are different purpose tty ioctls
 * with the same encoding, see <sys/ioctl.h>
 * TIOCSDTR = _IO('t', 121)
 * TIOCCBRK = _IO('t', 122)
 *
 */
#define CONSOLE_X_MODE_ON _IO('t',121)
#define CONSOLE_X_MODE_OFF _IO('t',122)
#define CONSOLE_X_BELL _IOW('t',123,int[2])
#endif /* COMPAT_PCCONS */

#endif	/* _IOCTL_PC_H_ */

OpenPOWER on IntegriCloud