--- sys/conf/options.amd64 +++ sys/conf/options.amd64 @@ -53,6 +53,7 @@ ATKBD_DFLT_KEYMAP opt_atkbd.h # EOF # ------------------------------- HAMMER opt_cpu.h +DEV_PSM opt_psm.h PSM_HOOKRESUME opt_psm.h PSM_RESETAFTERSUSPEND opt_psm.h PSM_DEBUG opt_psm.h --- sys/conf/options.i386 +++ sys/conf/options.i386 @@ -93,6 +93,7 @@ VESA_DEBUG opt_vesa.h # AGP debugging support AGP_DEBUG opt_agp.h +DEV_PSM opt_psm.h PSM_DEBUG opt_psm.h PSM_HOOKRESUME opt_psm.h PSM_RESETAFTERSUSPEND opt_psm.h --- sys/conf/options.sparc64 +++ sys/conf/options.sparc64 @@ -19,6 +19,7 @@ OFW_PCI_DEBUG opt_ofw_pci.h PMAP_STATS opt_pmap.h +DEV_PSM opt_psm.h PSM_DEBUG opt_psm.h PSM_HOOKRESUME opt_psm.h PSM_RESETAFTERSUSPEND opt_psm.h --- sys/dev/acpica/acpi.c +++ sys/dev/acpica/acpi.c @@ -31,6 +31,8 @@ __FBSDID("$FreeBSD$"); #include "opt_acpi.h" +#include "opt_psm.h" + #include #include #include @@ -65,6 +67,9 @@ __FBSDID("$FreeBSD$"); #include #include +#ifdef DEV_PSM +#include +#endif #include @@ -1258,6 +1263,20 @@ acpi_set_resource(device_t dev, device_t child, int type, int rid, } } +#ifdef DEV_PSM + /* + * Ignore I/O port resources for PS/2 mouse devices. Some BIOSes + * place the I/O port resources for the AT keyboard controller + * under the PS/2 mouse device instead of the keyboard device. + * Rather than engaging in crazy gymnastics to move the resources + * over to the keyboard controller, just ignore any I/O port + * resources and rely on the default hints to provide resources + * for the keyboard controller. + */ + if (type == SYS_RES_IOPORT && ISA_PNP_PROBE(dev, child, psmcpnp_ids) == 0) + return (0); +#endif + /* If the resource is already allocated, fail. */ if (resource_list_busy(rl, type, rid)) return (EBUSY); --- sys/dev/atkbdc/psm.c +++ sys/dev/atkbdc/psm.c @@ -4921,7 +4921,7 @@ static driver_t psmcpnp_driver = { 1, /* no softc */ }; -static struct isa_pnp_id psmcpnp_ids[] = { +struct isa_pnp_id psmcpnp_ids[] = { { 0x030fd041, "PS/2 mouse port" }, /* PNP0F03 */ { 0x0e0fd041, "PS/2 mouse port" }, /* PNP0F0E */ { 0x120fd041, "PS/2 mouse port" }, /* PNP0F12 */ --- sys/dev/atkbdc/psm.h +++ sys/dev/atkbdc/psm.h @@ -29,4 +29,6 @@ #define PSM_DRIVER_NAME "psm" +extern struct isa_pnp_id psmcpnp_ids[]; + #endif /* !_DEV_ATKBDC_PSM_H_ */