From 3a261b12ba712500c22f2573fe0ecf720a38fff1 Mon Sep 17 00:00:00 2001 From: sobomax Date: Wed, 26 Apr 2006 06:05:16 +0000 Subject: Use the same method for detecting actual presence of AT-style keyboard controller as we use in boot blocks (querying status register until bit 1 goes off). If that doesn't happed during reasonable period assume that the hardware doesn't have AT-style keyboard controller. This makes FreeBSD working almost OOB on MacBook Pro (still there are issues with putting second CPU core on-line, but since installation CD comes with UP kernel with this change one should be able to install FreeBSD without playing tricks with hints). Other legacy-free hardware (e.g. IBM NetVista S40) should benefit from this as well, but since I don't have any I can't verify. It should make no difference on the ordinary i386 hardware (since in that case that hardware already would be having an issues with A20 routines in boot blocks). I don't know much about AT-style keyboard controller on other platforms (and don't have dedicated access to one), therefore, the code is restricted to i386 for now. I suspect that amd64 may need this as well, but I would rather leave this decision to someone who knows better about the platform(s) in question. I have tested this change on as many "ordinary i386 boxes" as I can get my hands on, and it doesn't create any false negatives on hardware with AT-style keyboard present. MFC after: 1 month --- sys/dev/atkbdc/atkbd.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'sys/dev/atkbdc/atkbd.c') diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c index eedc469..9987787 100644 --- a/sys/dev/atkbdc/atkbd.c +++ b/sys/dev/atkbdc/atkbd.c @@ -282,11 +282,12 @@ atkbd_configure(int flags) int arg[2]; int i; - /* probe the keyboard controller */ - atkbdc_configure(); - - /* if the driver is disabled, unregister the keyboard if any */ - if (resource_disabled("atkbd", ATKBD_DEFAULT)) { + /* + * Probe the keyboard controller, if not present or if the driver + * is disabled, unregister the keyboard if any. + */ + if (atkbdc_configure() != 0 || + resource_disabled("atkbd", ATKBD_DEFAULT)) { i = kbd_find_keyboard(ATKBD_DRIVER_NAME, ATKBD_DEFAULT); if (i >= 0) { kbd = kbd_get_keyboard(i); -- cgit v1.1