xref: /linux/include/uapi/linux/kd.h (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2607ca46eSDavid Howells #ifndef _UAPI_LINUX_KD_H
3607ca46eSDavid Howells #define _UAPI_LINUX_KD_H
4607ca46eSDavid Howells #include <linux/types.h>
5607ca46eSDavid Howells #include <linux/compiler.h>
6607ca46eSDavid Howells 
7607ca46eSDavid Howells /* 0x4B is 'K', to avoid collision with termios and vt */
8607ca46eSDavid Howells 
9607ca46eSDavid Howells #define GIO_FONT	0x4B60	/* gets font in expanded form */
10607ca46eSDavid Howells #define PIO_FONT	0x4B61	/* use font in expanded form */
11607ca46eSDavid Howells 
12607ca46eSDavid Howells #define GIO_FONTX	0x4B6B	/* get font using struct consolefontdesc */
13607ca46eSDavid Howells #define PIO_FONTX	0x4B6C	/* set font using struct consolefontdesc */
14607ca46eSDavid Howells struct consolefontdesc {
15607ca46eSDavid Howells 	unsigned short charcount;	/* characters in font (256 or 512) */
16607ca46eSDavid Howells 	unsigned short charheight;	/* scan lines per character (1-32) */
17607ca46eSDavid Howells 	char __user *chardata;		/* font data in expanded form */
18607ca46eSDavid Howells };
19607ca46eSDavid Howells 
20607ca46eSDavid Howells #define PIO_FONTRESET   0x4B6D	/* reset to default font */
21607ca46eSDavid Howells 
22607ca46eSDavid Howells #define GIO_CMAP	0x4B70	/* gets colour palette on VGA+ */
23607ca46eSDavid Howells #define PIO_CMAP	0x4B71	/* sets colour palette on VGA+ */
24607ca46eSDavid Howells 
25607ca46eSDavid Howells #define KIOCSOUND	0x4B2F	/* start sound generation (0 for off) */
26607ca46eSDavid Howells #define KDMKTONE	0x4B30	/* generate tone */
27607ca46eSDavid Howells 
28607ca46eSDavid Howells #define KDGETLED	0x4B31	/* return current led state */
29607ca46eSDavid Howells #define KDSETLED	0x4B32	/* set led state [lights, not flags] */
30607ca46eSDavid Howells #define 	LED_SCR		0x01	/* scroll lock led */
31607ca46eSDavid Howells #define 	LED_NUM		0x02	/* num lock led */
32607ca46eSDavid Howells #define 	LED_CAP		0x04	/* caps lock led */
33607ca46eSDavid Howells 
34607ca46eSDavid Howells #define KDGKBTYPE	0x4B33	/* get keyboard type */
35607ca46eSDavid Howells #define 	KB_84		0x01
36607ca46eSDavid Howells #define 	KB_101		0x02 	/* this is what we always answer */
37607ca46eSDavid Howells #define 	KB_OTHER	0x03
38607ca46eSDavid Howells 
39607ca46eSDavid Howells #define KDADDIO		0x4B34	/* add i/o port as valid */
40607ca46eSDavid Howells #define KDDELIO		0x4B35	/* del i/o port as valid */
41607ca46eSDavid Howells #define KDENABIO	0x4B36	/* enable i/o to video board */
42607ca46eSDavid Howells #define KDDISABIO	0x4B37	/* disable i/o to video board */
43607ca46eSDavid Howells 
44607ca46eSDavid Howells #define KDSETMODE	0x4B3A	/* set text/graphics mode */
45607ca46eSDavid Howells #define		KD_TEXT		0x00
46607ca46eSDavid Howells #define		KD_GRAPHICS	0x01
47607ca46eSDavid Howells #define		KD_TEXT0	0x02	/* obsolete */
48607ca46eSDavid Howells #define		KD_TEXT1	0x03	/* obsolete */
49607ca46eSDavid Howells #define KDGETMODE	0x4B3B	/* get current mode */
50607ca46eSDavid Howells 
51607ca46eSDavid Howells #define KDMAPDISP	0x4B3C	/* map display into address space */
52607ca46eSDavid Howells #define KDUNMAPDISP	0x4B3D	/* unmap display from address space */
53607ca46eSDavid Howells 
54607ca46eSDavid Howells typedef char scrnmap_t;
55607ca46eSDavid Howells #define		E_TABSZ		256
56607ca46eSDavid Howells #define GIO_SCRNMAP	0x4B40	/* get screen mapping from kernel */
57607ca46eSDavid Howells #define PIO_SCRNMAP	0x4B41	/* put screen mapping table in kernel */
58607ca46eSDavid Howells #define GIO_UNISCRNMAP  0x4B69	/* get full Unicode screen mapping */
59607ca46eSDavid Howells #define PIO_UNISCRNMAP  0x4B6A  /* set full Unicode screen mapping */
60607ca46eSDavid Howells 
61607ca46eSDavid Howells #define GIO_UNIMAP	0x4B66	/* get unicode-to-font mapping from kernel */
62607ca46eSDavid Howells struct unipair {
63607ca46eSDavid Howells 	unsigned short unicode;
64607ca46eSDavid Howells 	unsigned short fontpos;
65607ca46eSDavid Howells };
66607ca46eSDavid Howells struct unimapdesc {
67607ca46eSDavid Howells 	unsigned short entry_ct;
68607ca46eSDavid Howells 	struct unipair __user *entries;
69607ca46eSDavid Howells };
70607ca46eSDavid Howells #define PIO_UNIMAP	0x4B67	/* put unicode-to-font mapping in kernel */
71607ca46eSDavid Howells #define PIO_UNIMAPCLR	0x4B68	/* clear table, possibly advise hash algorithm */
72607ca46eSDavid Howells struct unimapinit {
73607ca46eSDavid Howells 	unsigned short advised_hashsize;  /* 0 if no opinion */
74607ca46eSDavid Howells 	unsigned short advised_hashstep;  /* 0 if no opinion */
75607ca46eSDavid Howells 	unsigned short advised_hashlevel; /* 0 if no opinion */
76607ca46eSDavid Howells };
77607ca46eSDavid Howells 
78607ca46eSDavid Howells #define UNI_DIRECT_BASE 0xF000	/* start of Direct Font Region */
79607ca46eSDavid Howells #define UNI_DIRECT_MASK 0x01FF	/* Direct Font Region bitmask */
80607ca46eSDavid Howells 
81607ca46eSDavid Howells #define		K_RAW		0x00
82607ca46eSDavid Howells #define		K_XLATE		0x01
83607ca46eSDavid Howells #define		K_MEDIUMRAW	0x02
84607ca46eSDavid Howells #define		K_UNICODE	0x03
85607ca46eSDavid Howells #define		K_OFF		0x04
86607ca46eSDavid Howells #define KDGKBMODE	0x4B44	/* gets current keyboard mode */
87607ca46eSDavid Howells #define KDSKBMODE	0x4B45	/* sets current keyboard mode */
88607ca46eSDavid Howells 
89607ca46eSDavid Howells #define		K_METABIT	0x03
90607ca46eSDavid Howells #define		K_ESCPREFIX	0x04
91607ca46eSDavid Howells #define KDGKBMETA	0x4B62	/* gets meta key handling mode */
92607ca46eSDavid Howells #define KDSKBMETA	0x4B63	/* sets meta key handling mode */
93607ca46eSDavid Howells 
94607ca46eSDavid Howells #define		K_SCROLLLOCK	0x01
95607ca46eSDavid Howells #define		K_NUMLOCK	0x02
96607ca46eSDavid Howells #define		K_CAPSLOCK	0x04
97607ca46eSDavid Howells #define	KDGKBLED	0x4B64	/* get led flags (not lights) */
98607ca46eSDavid Howells #define	KDSKBLED	0x4B65	/* set led flags (not lights) */
99607ca46eSDavid Howells 
100607ca46eSDavid Howells struct kbentry {
101607ca46eSDavid Howells 	unsigned char kb_table;
102607ca46eSDavid Howells 	unsigned char kb_index;
103607ca46eSDavid Howells 	unsigned short kb_value;
104607ca46eSDavid Howells };
105607ca46eSDavid Howells #define		K_NORMTAB	0x00
106607ca46eSDavid Howells #define		K_SHIFTTAB	0x01
107607ca46eSDavid Howells #define		K_ALTTAB	0x02
108607ca46eSDavid Howells #define		K_ALTSHIFTTAB	0x03
109607ca46eSDavid Howells 
110607ca46eSDavid Howells #define KDGKBENT	0x4B46	/* gets one entry in translation table */
111607ca46eSDavid Howells #define KDSKBENT	0x4B47	/* sets one entry in translation table */
112607ca46eSDavid Howells 
113607ca46eSDavid Howells struct kbsentry {
114607ca46eSDavid Howells 	unsigned char kb_func;
115607ca46eSDavid Howells 	unsigned char kb_string[512];
116607ca46eSDavid Howells };
117607ca46eSDavid Howells #define KDGKBSENT	0x4B48	/* gets one function key string entry */
118607ca46eSDavid Howells #define KDSKBSENT	0x4B49	/* sets one function key string entry */
119607ca46eSDavid Howells 
120607ca46eSDavid Howells struct kbdiacr {
121607ca46eSDavid Howells         unsigned char diacr, base, result;
122607ca46eSDavid Howells };
123607ca46eSDavid Howells struct kbdiacrs {
124607ca46eSDavid Howells         unsigned int kb_cnt;    /* number of entries in following array */
125607ca46eSDavid Howells 	struct kbdiacr kbdiacr[256];    /* MAX_DIACR from keyboard.h */
126607ca46eSDavid Howells };
127607ca46eSDavid Howells #define KDGKBDIACR      0x4B4A  /* read kernel accent table */
128607ca46eSDavid Howells #define KDSKBDIACR      0x4B4B  /* write kernel accent table */
129607ca46eSDavid Howells 
130607ca46eSDavid Howells struct kbdiacruc {
131607ca46eSDavid Howells 	unsigned int diacr, base, result;
132607ca46eSDavid Howells };
133607ca46eSDavid Howells struct kbdiacrsuc {
134607ca46eSDavid Howells         unsigned int kb_cnt;    /* number of entries in following array */
135607ca46eSDavid Howells 	struct kbdiacruc kbdiacruc[256];    /* MAX_DIACR from keyboard.h */
136607ca46eSDavid Howells };
137607ca46eSDavid Howells #define KDGKBDIACRUC    0x4BFA  /* read kernel accent table - UCS */
138607ca46eSDavid Howells #define KDSKBDIACRUC    0x4BFB  /* write kernel accent table - UCS */
139607ca46eSDavid Howells 
140607ca46eSDavid Howells struct kbkeycode {
141607ca46eSDavid Howells 	unsigned int scancode, keycode;
142607ca46eSDavid Howells };
143607ca46eSDavid Howells #define KDGETKEYCODE	0x4B4C	/* read kernel keycode table entry */
144607ca46eSDavid Howells #define KDSETKEYCODE	0x4B4D	/* write kernel keycode table entry */
145607ca46eSDavid Howells 
146607ca46eSDavid Howells #define KDSIGACCEPT	0x4B4E	/* accept kbd generated signals */
147607ca46eSDavid Howells 
148607ca46eSDavid Howells struct kbd_repeat {
149607ca46eSDavid Howells 	int delay;	/* in msec; <= 0: don't change */
150607ca46eSDavid Howells 	int period;	/* in msec; <= 0: don't change */
151607ca46eSDavid Howells 			/* earlier this field was misnamed "rate" */
152607ca46eSDavid Howells };
153607ca46eSDavid Howells 
154607ca46eSDavid Howells #define KDKBDREP        0x4B52  /* set keyboard delay/repeat rate;
155607ca46eSDavid Howells 				 * actually used values are returned */
156607ca46eSDavid Howells 
157607ca46eSDavid Howells #define KDFONTOP	0x4B72	/* font operations */
158607ca46eSDavid Howells 
159607ca46eSDavid Howells struct console_font_op {
160607ca46eSDavid Howells 	unsigned int op;	/* operation code KD_FONT_OP_* */
161607ca46eSDavid Howells 	unsigned int flags;	/* KD_FONT_FLAG_* */
162607ca46eSDavid Howells 	unsigned int width, height;	/* font size */
163607ca46eSDavid Howells 	unsigned int charcount;
164*24d69384SSamuel Thibault 	unsigned char __user *data;	/* font data with vpitch fixed to 32 for
165*24d69384SSamuel Thibault 					 * KD_FONT_OP_SET/GET
166*24d69384SSamuel Thibault 					 */
167607ca46eSDavid Howells };
168607ca46eSDavid Howells 
169607ca46eSDavid Howells struct console_font {
170607ca46eSDavid Howells 	unsigned int width, height;	/* font size */
171607ca46eSDavid Howells 	unsigned int charcount;
172*24d69384SSamuel Thibault 	unsigned char *data;	/* font data with vpitch fixed to 32 for
173*24d69384SSamuel Thibault 				 * KD_FONT_OP_SET/GET
174*24d69384SSamuel Thibault 				 */
175607ca46eSDavid Howells };
176607ca46eSDavid Howells 
177607ca46eSDavid Howells #define KD_FONT_OP_SET		0	/* Set font */
178607ca46eSDavid Howells #define KD_FONT_OP_GET		1	/* Get font */
179607ca46eSDavid Howells #define KD_FONT_OP_SET_DEFAULT	2	/* Set font to default, data points to name / NULL */
1807a089ec7SPeilin Ye #define KD_FONT_OP_COPY		3	/* Obsolete, do not use */
181*24d69384SSamuel Thibault #define KD_FONT_OP_SET_TALL	4	/* Set font with vpitch = height */
182*24d69384SSamuel Thibault #define KD_FONT_OP_GET_TALL	5	/* Get font with vpitch = height */
183607ca46eSDavid Howells 
184607ca46eSDavid Howells #define KD_FONT_FLAG_DONT_RECALC 	1	/* Don't recalculate hw charcell size [compat] */
185607ca46eSDavid Howells 
186607ca46eSDavid Howells /* note: 0x4B00-0x4B4E all have had a value at some time;
187607ca46eSDavid Howells    don't reuse for the time being */
188607ca46eSDavid Howells /* note: 0x4B60-0x4B6D, 0x4B70-0x4B72 used above */
189607ca46eSDavid Howells 
190607ca46eSDavid Howells #endif /* _UAPI_LINUX_KD_H */
191