The first stage of console driver reorganization: activate new

keyboard and video card drivers.
This commit is contained in:
Kazutaka YOKOTA 1999-01-11 03:20:32 +00:00
parent 2ad872c579
commit c67e8bd332
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=42505
2 changed files with 115 additions and 11 deletions

View File

@ -28,7 +28,7 @@
#ifndef lint
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 */
#include <ctype.h>
@ -37,6 +37,7 @@ static const char rcsid[] =
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <machine/console.h>
#include "path.h"
#include "lex.h"
@ -417,7 +418,7 @@ print_entry(FILE *fp, int value)
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;
@ -865,14 +866,108 @@ set_history(char *opt)
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
usage()
{
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]",
" [-h size] [-L mapfile]");
" [-h size] [-k device] [-L mapfile]");
exit(1);
}
@ -882,7 +977,7 @@ main(int argc, char **argv)
{
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) {
case 'b':
set_bell_values(optarg);
@ -906,6 +1001,15 @@ main(int argc, char **argv)
case 'h':
set_history(optarg);
break;
case 'i':
show_kbd_info();
break;
case 'K':
release_keyboard();
break;
case 'k':
set_keyboard(optarg);
break;
case 'r':
set_keyrates(optarg);
break;

View File

@ -28,7 +28,7 @@
#ifndef lint
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 */
#include <ctype.h>
@ -431,7 +431,7 @@ static char
void
show_adapter_info(void)
{
struct video_adapter ad;
struct video_adapter_info ad;
ad.va_index = 0;
if (ioctl(0, CONS_ADPINFO, &ad)) {
@ -439,11 +439,11 @@ show_adapter_info(void)
return;
}
printf("adapter %d:\n", ad.va_index);
printf(" type:%s%s (%d), flags:0x%08x, CRTC:0x%x\n",
printf("fb%d:\n", ad.va_index);
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 " : "",
adapter_name(ad.va_type), ad.va_type,
ad.va_flags, ad.va_crtc_addr);
adapter_name(ad.va_type), ad.va_type, ad.va_flags);
printf(" initial mode:%d, current mode:%d, BIOS mode:%d\n",
ad.va_initial_mode, ad.va_mode, ad.va_initial_bios_mode);
}