PCI: add bridge control flags and use them.
This commit is contained in:
@@ -655,6 +655,19 @@ struct pci_module_info {
|
|||||||
#define PCI_pin_d 0x04
|
#define PCI_pin_d 0x04
|
||||||
#define PCI_pin_max 0x04
|
#define PCI_pin_max 0x04
|
||||||
|
|
||||||
|
/** PCI bridge control register bits */
|
||||||
|
#define PCI_bridge_parity_error_response 0x0001 /* 1/0 Parity Error Response */
|
||||||
|
#define PCI_bridge_serr 0x0002 /* 1/0 SERR# en/disabled */
|
||||||
|
#define PCI_bridge_isa 0x0004 /* 1/0 ISA en/disabled */
|
||||||
|
#define PCI_bridge_vga 0x0008 /* 1/0 VGA en/disabled */
|
||||||
|
#define PCI_bridge_master_abort 0x0020 /* 1/0 Master Abort mode */
|
||||||
|
#define PCI_bridge_secondary_bus_reset 0x0040 /* 1/0 Secondary bus reset */
|
||||||
|
#define PCI_bridge_secondary_bus_fastback 0x0080 /* 1/0 fast back-to-back en/disabled */
|
||||||
|
#define PCI_bridge_primary_discard_timeout 0x0100 /* 1/0 primary discard timeout */
|
||||||
|
#define PCI_bridge_secondary_discard_timeout 0x0200 /* 1/0 secondary discard timeout */
|
||||||
|
#define PCI_bridge_discard_timer_status 0x0400 /* 1/0 discard timer status */
|
||||||
|
#define PCI_bridge_discard_timer_serr 0x0800 /* 1/0 discard timer serr */
|
||||||
|
|
||||||
/** PCI Capability Codes */
|
/** PCI Capability Codes */
|
||||||
#define PCI_cap_id_reserved 0x00
|
#define PCI_cap_id_reserved 0x00
|
||||||
#define PCI_cap_id_pm 0x01 /* Power management */
|
#define PCI_cap_id_pm 0x01 /* Power management */
|
||||||
|
|||||||
@@ -892,16 +892,21 @@ PCI::_ConfigureBridges(PCIBus *bus)
|
|||||||
// Enable: Parity Error Response, SERR, Master Abort Mode, Discard
|
// Enable: Parity Error Response, SERR, Master Abort Mode, Discard
|
||||||
// Timer SERR
|
// Timer SERR
|
||||||
// Clear: Discard Timer Status
|
// Clear: Discard Timer Status
|
||||||
bridgeControlNew |= (1 << 0) | (1 << 1) | (1 << 5) | (1 << 10)
|
bridgeControlNew |= PCI_bridge_parity_error_response
|
||||||
| (1 << 11);
|
| PCI_bridge_serr | PCI_bridge_master_abort
|
||||||
|
| PCI_bridge_discard_timer_status
|
||||||
|
| PCI_bridge_discard_timer_serr;
|
||||||
// Set discard timer to 2^15 PCI clocks
|
// Set discard timer to 2^15 PCI clocks
|
||||||
bridgeControlNew &= ~((1 << 8) | (1 << 9));
|
bridgeControlNew &= ~(PCI_bridge_primary_discard_timeout
|
||||||
|
| PCI_bridge_secondary_discard_timeout);
|
||||||
WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
|
WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
|
||||||
PCI_bridge_control, 2, bridgeControlNew);
|
PCI_bridge_control, 2, bridgeControlNew);
|
||||||
bridgeControlNew = ReadConfig(dev->domain, dev->bus, dev->device,
|
bridgeControlNew = ReadConfig(dev->domain, dev->bus, dev->device,
|
||||||
dev->function, PCI_bridge_control, 2);
|
dev->function, PCI_bridge_control, 2);
|
||||||
dprintf("PCI: dom %u, bus %u, dev %2u, func %u, changed PCI bridge control from 0x%04x to 0x%04x\n",
|
dprintf("PCI: dom %u, bus %u, dev %2u, func %u, changed PCI bridge"
|
||||||
dev->domain, dev->bus, dev->device, dev->function, bridgeControlOld, bridgeControlNew);
|
" control from 0x%04x to 0x%04x\n", dev->domain, dev->bus,
|
||||||
|
dev->device, dev->function, bridgeControlOld,
|
||||||
|
bridgeControlNew);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->child)
|
if (dev->child)
|
||||||
|
|||||||
Reference in New Issue
Block a user