summaryrefslogtreecommitdiffstats
path: root/sys/dev/atkbdc/atkbd.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/atkbdc/atkbd.c')
-rw-r--r--sys/dev/atkbdc/atkbd.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c
index 643554d..f2f5d74 100644
--- a/sys/dev/atkbdc/atkbd.c
+++ b/sys/dev/atkbdc/atkbd.c
@@ -1097,10 +1097,17 @@ get_typematic(keyboard_t *kbd)
x86regs_t regs;
uint8_t *p;
- if (!(kbd->kb_config & KB_CONF_PROBE_TYPEMATIC))
- return (ENODEV);
-
- if (x86bios_get_intr(0x15) == 0 || x86bios_get_intr(0x16) == 0)
+ /*
+ * Traditional entry points of int 0x15 and 0x16 are fixed
+ * and later BIOSes follow them. (U)EFI CSM specification
+ * also mandates these fixed entry points.
+ *
+ * Validate the entry points here before we proceed further.
+ * It's known that some recent laptops does not have the
+ * same entry point and hang on boot if we call it.
+ */
+ if (x86bios_get_intr(0x15) != 0xf000f859 ||
+ x86bios_get_intr(0x16) != 0xf000e82e)
return (ENODEV);
/* Is BIOS system configuration table supported? */
OpenPOWER on IntegriCloud