798 lines
26 KiB
C
798 lines
26 KiB
C
|
/* 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_ */
|
|||
|
|