AHCI: Add C600 HBA and fix PCI iteration bugs
authorFergus Simpson <afergs@google.com>
Tue, 18 Oct 2016 00:09:30 +0000 (17:09 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 18 Oct 2016 20:02:14 +0000 (16:02 -0400)
commit8ec1aa9282095746afba118ee38089a82a12b1d7
tree4f9a5d914e1686c6fdcdcea2239bdbe2b4b2a809
parent26f49c2678749302e45adbea88d55775d6401d84
AHCI: Add C600 HBA and fix PCI iteration bugs

This commit adds the C600 HBA to the list of recognized Intel HBAs so my
machine with one can use it and makes two fixes to the PCI driver.

It also fixed a bug in the PCI driver. When detecting PCI devices it
iterates over all functions on all devices. A device can have up to 8
functions (0-7) and the driver assumes they are sequential, giving up
when one is not found. This should not be done. A device is detected by
whether function 0 is implemented - if it is not no device is connected.
While a device must implement function 0, it does not need to implement
its other functions sequentially. The C600 for example implements 0, 2,
3, so the driver did not detect functions 2 and 3 and the HBA did not
work. The driver has been changed so that it will only give up if
function 0 is not found.

Another issue was fixed with the PCI driver where it would not detect
devices on bus 0xff - the last bus. There was a comment about issues
with bus 0xff but that doesn't seem to be an issue any more so the
driver will now check the last bus.

Change-Id: I8dcac3f27b4983a9141e5700d73a758389cef75a
Signed-off-by: Fergus Simpson <afergs@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/x86/pci.c
kern/drivers/dev/sdiahci.c