The first stage of console driver reorganization: activate new
keyboard and video card drivers.
This commit is contained in:
parent
2ad872c579
commit
c67e8bd332
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=42505
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"$Id: kbdcontrol.c,v 1.18 1998/09/04 10:15:48 yokota Exp $";
|
"$Id: kbdcontrol.c,v 1.19 1998/09/10 12:20:09 yokota Exp $";
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@ -37,6 +37,7 @@ static const char rcsid[] =
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <machine/console.h>
|
#include <machine/console.h>
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "lex.h"
|
#include "lex.h"
|
||||||
@ -417,7 +418,7 @@ print_entry(FILE *fp, int value)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
print_key_definition_line(FILE *fp, int scancode, struct key_t *key)
|
print_key_definition_line(FILE *fp, int scancode, struct keyent_t *key)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -865,14 +866,108 @@ set_history(char *opt)
|
|||||||
warn("setting history buffer size");
|
warn("setting history buffer size");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char
|
||||||
|
*get_kbd_type_name(int type)
|
||||||
|
{
|
||||||
|
static struct {
|
||||||
|
int type;
|
||||||
|
char *name;
|
||||||
|
} name_table[] = {
|
||||||
|
{ KB_84, "AT 84" },
|
||||||
|
{ KB_101, "AT 101/102" },
|
||||||
|
{ KB_OTHER, "generic" },
|
||||||
|
};
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof(name_table)/sizeof(name_table[0]); ++i) {
|
||||||
|
if (type == name_table[i].type)
|
||||||
|
return name_table[i].name;
|
||||||
|
}
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
show_kbd_info(void)
|
||||||
|
{
|
||||||
|
keyboard_info_t info;
|
||||||
|
|
||||||
|
if (ioctl(0, KDGKBINFO, &info) == -1) {
|
||||||
|
warn("unable to obtain keyboard information");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
printf("kbd%d:\n", info.kb_index);
|
||||||
|
printf(" %.*s%d, type:%s (%d)\n",
|
||||||
|
sizeof(info.kb_name), info.kb_name, info.kb_unit,
|
||||||
|
get_kbd_type_name(info.kb_type), info.kb_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
set_keyboard(char *device)
|
||||||
|
{
|
||||||
|
keyboard_info_t info;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
fd = open(device, O_RDONLY);
|
||||||
|
if (fd < 0) {
|
||||||
|
warn("cannot open %s", device);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ioctl(fd, KDGKBINFO, &info) == -1) {
|
||||||
|
warn("unable to obtain keyboard information");
|
||||||
|
close(fd);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* The keyboard device driver won't release the keyboard by
|
||||||
|
* the following ioctl, but it automatically will, when the device
|
||||||
|
* is closed. So, we don't check error here.
|
||||||
|
*/
|
||||||
|
ioctl(fd, CONS_RELKBD, 0);
|
||||||
|
close(fd);
|
||||||
|
#if 1
|
||||||
|
printf("kbd%d\n", info.kb_index);
|
||||||
|
printf(" %.*s%d, type:%s (%d)\n",
|
||||||
|
sizeof(info.kb_name), info.kb_name, info.kb_unit,
|
||||||
|
get_kbd_type_name(info.kb_type), info.kb_type);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (ioctl(0, CONS_SETKBD, info.kb_index) == -1)
|
||||||
|
warn("unable to set keyboard");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
release_keyboard(void)
|
||||||
|
{
|
||||||
|
keyboard_info_t info;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If stdin is not associated with a keyboard, the following ioctl
|
||||||
|
* will fail.
|
||||||
|
*/
|
||||||
|
if (ioctl(0, KDGKBINFO, &info) == -1) {
|
||||||
|
warn("unable to obtain keyboard information");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#if 1
|
||||||
|
printf("kbd%d\n", info.kb_index);
|
||||||
|
printf(" %.*s%d, type:%s (%d)\n",
|
||||||
|
sizeof(info.kb_name), info.kb_name, info.kb_unit,
|
||||||
|
get_kbd_type_name(info.kb_type), info.kb_type);
|
||||||
|
#endif
|
||||||
|
if (ioctl(0, CONS_RELKBD, 0) == -1)
|
||||||
|
warn("unable to release the keyboard");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
usage()
|
usage()
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s\n%s\n%s\n",
|
fprintf(stderr, "%s\n%s\n%s\n",
|
||||||
"usage: kbdcontrol [-dFx] [-b duration.pitch | [quiet.]belltype]",
|
"usage: kbdcontrol [-dFKix] [-b duration.pitch | [quiet.]belltype]",
|
||||||
" [-r delay.repeat | speed] [-l mapfile] [-f # string]",
|
" [-r delay.repeat | speed] [-l mapfile] [-f # string]",
|
||||||
" [-h size] [-L mapfile]");
|
" [-h size] [-k device] [-L mapfile]");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -882,7 +977,7 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
int opt;
|
int opt;
|
||||||
|
|
||||||
while((opt = getopt(argc, argv, "b:df:h:Fl:L:r:x")) != -1)
|
while((opt = getopt(argc, argv, "b:df:h:iKk:Fl:L:r:x")) != -1)
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
case 'b':
|
case 'b':
|
||||||
set_bell_values(optarg);
|
set_bell_values(optarg);
|
||||||
@ -906,6 +1001,15 @@ main(int argc, char **argv)
|
|||||||
case 'h':
|
case 'h':
|
||||||
set_history(optarg);
|
set_history(optarg);
|
||||||
break;
|
break;
|
||||||
|
case 'i':
|
||||||
|
show_kbd_info();
|
||||||
|
break;
|
||||||
|
case 'K':
|
||||||
|
release_keyboard();
|
||||||
|
break;
|
||||||
|
case 'k':
|
||||||
|
set_keyboard(optarg);
|
||||||
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
set_keyrates(optarg);
|
set_keyrates(optarg);
|
||||||
break;
|
break;
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"$Id: vidcontrol.c,v 1.23 1998/09/24 01:36:36 gpalmer Exp $";
|
"$Id: vidcontrol.c,v 1.24 1998/10/01 11:40:22 yokota Exp $";
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@ -431,7 +431,7 @@ static char
|
|||||||
void
|
void
|
||||||
show_adapter_info(void)
|
show_adapter_info(void)
|
||||||
{
|
{
|
||||||
struct video_adapter ad;
|
struct video_adapter_info ad;
|
||||||
|
|
||||||
ad.va_index = 0;
|
ad.va_index = 0;
|
||||||
if (ioctl(0, CONS_ADPINFO, &ad)) {
|
if (ioctl(0, CONS_ADPINFO, &ad)) {
|
||||||
@ -439,11 +439,11 @@ show_adapter_info(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("adapter %d:\n", ad.va_index);
|
printf("fb%d:\n", ad.va_index);
|
||||||
printf(" type:%s%s (%d), flags:0x%08x, CRTC:0x%x\n",
|
printf(" %.*s%d, type:%s%s (%d), flags:0x%x\n",
|
||||||
|
(int)sizeof(ad.va_name), ad.va_name, ad.va_unit,
|
||||||
(ad.va_flags & V_ADP_VESA) ? "VESA " : "",
|
(ad.va_flags & V_ADP_VESA) ? "VESA " : "",
|
||||||
adapter_name(ad.va_type), ad.va_type,
|
adapter_name(ad.va_type), ad.va_type, ad.va_flags);
|
||||||
ad.va_flags, ad.va_crtc_addr);
|
|
||||||
printf(" initial mode:%d, current mode:%d, BIOS mode:%d\n",
|
printf(" initial mode:%d, current mode:%d, BIOS mode:%d\n",
|
||||||
ad.va_initial_mode, ad.va_mode, ad.va_initial_bios_mode);
|
ad.va_initial_mode, ad.va_mode, ad.va_initial_bios_mode);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user