Enable busmaserting ans io decoder if not already done by the BIOS.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32878 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Marcus Overhagen 2009-08-31 23:25:35 +00:00
parent 5a5f7ad65e
commit 9781bd2e09
1 changed files with 20 additions and 0 deletions

View File

@ -482,6 +482,8 @@ ata_adapter_detect_channel(pci_device_module_info *pci, pci_device *pci_device,
device_node **node, bool supports_compatibility_mode) device_node **node, bool supports_compatibility_mode)
{ {
uint8 api; uint8 api;
uint16 pcicmdOld;
uint16 pcicmdNew;
SHOW_FLOW0( 3, "" ); SHOW_FLOW0( 3, "" );
@ -520,6 +522,24 @@ ata_adapter_detect_channel(pci_device_module_info *pci, pci_device *pci_device,
command_block_base, control_block_base, intnum); command_block_base, control_block_base, intnum);
} }
// this should be done in ata_adapter_init_controller but there is crashes
pcicmdOld = pcicmdNew = pci->read_pci_config(pci_device, PCI_command, 2);
if ((pcicmdNew & PCI_command_io) == 0) {
TRACE("PCI-ATA: enabling io decoder\n");
pcicmdNew |= PCI_command_io;
}
if ((pcicmdNew & PCI_command_master) == 0) {
TRACE("PCI-ATA: enabling bus mastering\n");
pcicmdNew |= PCI_command_master;
}
if (pcicmdOld != pcicmdNew) {
pci->write_pci_config(pci_device, PCI_command, 2, pcicmdNew);
TRACE("PCI-ATA: pcicmd old 0x%04x, new 0x%04x\n",
pcicmdOld, pcicmdNew);
}
if (supports_compatibility_mode) { if (supports_compatibility_mode) {
// read status of primary(!) channel to detect simplex // read status of primary(!) channel to detect simplex
uint8 status = pci->read_io_8(pci_device, bus_master_base uint8 status = pci->read_io_8(pci_device, bus_master_base