The change of 5.7's sys/arch/i386/i386/bus_space.c and
authoruaa <uaa@openbsd.org>
Sun, 18 Oct 2015 20:24:10 +0000 (20:24 +0000)
committeruaa <uaa@openbsd.org>
Sun, 18 Oct 2015 20:24:10 +0000 (20:24 +0000)
commitdba8466030b08e4f54bfdb8680a0c87bd64cd21d
tree1b2a6751f4f6f617b671c64e253002a207d6fb62
parent95dd115275fc900cdf835747aa31e3286dd904a7
The change of 5.7's sys/arch/i386/i386/bus_space.c and
sys/arch/i386/include/bus.h invokes the kernel crash at boot
when ignored (disabled) channel is detected.

In all ATA controllers, ignored (disabled) channel is still set cp->hwok = 1.
And pciide_mapregs_native() is not called, wdc_cp->cmd_iot is 0.

5.6 and before, cmd_iot = 0 is treated as I386_BUS_SPACE_IO,
so there is no problem to call bus_space_read_1() in wdcintr().

5.7 and after, cmd_iot is used as function pointer.
We have to initialize it with pciide_mapregs_native() or something,
otherwise set cp->hwok = 0 to prevent calling wdcintr().

When ignored (disabled) channel is found, default_chip_map() should set
cp->hwok = 0. So all controllers do same thing.

ok by deraadt@
sys/dev/pci/pciide.c