diff options
author | yokota <yokota@FreeBSD.org> | 1999-03-10 10:36:53 +0000 |
---|---|---|
committer | yokota <yokota@FreeBSD.org> | 1999-03-10 10:36:53 +0000 |
commit | 1c67fa8f3d842ef1daea6a8442e829e386fafdd5 (patch) | |
tree | 41f00cd620389bf07e2912551d080e830f0dc85a /sys/dev/syscons/syscons.c | |
parent | 6eb9a9adf91724bc8f8bb0516ce6bc9f52b58d95 (diff) | |
download | FreeBSD-src-1c67fa8f3d842ef1daea6a8442e829e386fafdd5.zip FreeBSD-src-1c67fa8f3d842ef1daea6a8442e829e386fafdd5.tar.gz |
Keyboard driver update in preparation for the USB keyboard driver.
- Refined internal interface in keyboard drivers so that:
1. the side effect of device probe is kept minimal,
2. polling mode function is added,
3. and new ioctl and configuration options are added (see below).
- Added new ioctl: KDSETREPEAT
Set keyboard typematic rate. There has existed an ioctl command,
KDSETRAD, for the same purpose. However, KDSETRAD is dependent on
the AT keyboard. KDSETREPEAT provides more generic interface.
KDSETRAD will still be supported in the atkbd driver.
- Added new configuration options:
ATKBD_DFLT_KEYMAP
Specify a keymap to be used as the default, built-in keymap.
(There has been undocumented options, DKKEYMAP, UKKEYMAP, GRKEYMAP,
SWKEYMAP, RUKEYMAP, ESKEYMAP, and ISKEYMAP to set the default keymap.
These options are now gone for good. The new option is more general.)
KBD_DISABLE_KEYMAP_LOADING
Don't allow the user to change the keymap.
Diffstat (limited to 'sys/dev/syscons/syscons.c')
-rw-r--r-- | sys/dev/syscons/syscons.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c index 1e3f5e0..a874dbb 100644 --- a/sys/dev/syscons/syscons.c +++ b/sys/dev/syscons/syscons.c @@ -25,7 +25,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: syscons.c,v 1.297 1999/01/30 12:17:30 phk Exp $ + * $Id: syscons.c,v 1.298 1999/02/05 11:52:11 yokota Exp $ */ #include "sc.h" @@ -263,6 +263,8 @@ static const int nsccons = MAXCONS+2; (*kbdsw[(kbd)->kb_index]->clear_state)((kbd)) #define kbd_get_fkeystr(kbd, fkey, len) \ (*kbdsw[(kbd)->kb_index]->get_fkeystr)((kbd), (fkey), (len)) +#define kbd_poll(kbd, on) \ + (*kbdsw[(kbd)->kb_index]->poll)((kbd), (on)) /* prototypes */ static kbd_callback_func_t sckbdevent; @@ -1566,10 +1568,16 @@ scioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) *(int *)data = scp->status & LOCK_MASK; return 0; - case KDSETRAD: /* set keyboard repeat & delay rates */ + case KDSETREPEAT: /* set keyboard repeat & delay rates (new) */ + error = kbd_ioctl(kbd, cmd, data); + if (error == ENOIOCTL) + error = ENODEV; + return error; + + case KDSETRAD: /* set keyboard repeat & delay rates (old) */ if (*(int *)data & ~0x7f) return EINVAL; - error = kbd_ioctl(kbd, KDSETRAD, data); + error = kbd_ioctl(kbd, cmd, data); if (error == ENOIOCTL) error = ENODEV; return error; @@ -1996,7 +2004,9 @@ sccngetch(int flags) cur_console->kbd_mode = K_XLATE; kbd_ioctl(kbd, KDSKBMODE, (caddr_t)&cur_console->kbd_mode); + kbd_poll(kbd, TRUE); c = scgetc(kbd, SCGETC_CN | flags); + kbd_poll(kbd, FALSE); cur_console->kbd_mode = cur_mode; kbd_ioctl(kbd, KDSKBMODE, (caddr_t)&cur_console->kbd_mode); |