mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 12:09:58 +00:00
pci_bridge: factor out common code
Reuse common code in pcie_port, override the hardwired-to-0 bits per PCI Express spec. No functional change but makes the code easier to follow. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
ba7d8515c1
commit
45eb768c70
14
hw/pci/pci.c
14
hw/pci/pci.c
@ -668,16 +668,10 @@ static void pci_init_mask_bridge(PCIDevice *d)
|
||||
pci_word_test_and_set_mask(d->config + PCI_PREF_MEMORY_LIMIT,
|
||||
PCI_PREF_RANGE_TYPE_64);
|
||||
|
||||
/* TODO: add this define to pci_regs.h in linux and then in qemu. */
|
||||
#define PCI_BRIDGE_CTL_VGA_16BIT 0x10 /* VGA 16-bit decode */
|
||||
#define PCI_BRIDGE_CTL_DISCARD 0x100 /* Primary discard timer */
|
||||
#define PCI_BRIDGE_CTL_SEC_DISCARD 0x200 /* Secondary discard timer */
|
||||
#define PCI_BRIDGE_CTL_DISCARD_STATUS 0x400 /* Discard timer status */
|
||||
#define PCI_BRIDGE_CTL_DISCARD_SERR 0x800 /* Discard timer SERR# enable */
|
||||
/*
|
||||
* TODO: Bridges default to 10-bit VGA decoding but we currently only
|
||||
* implement 16-bit decoding (no alias support).
|
||||
*/
|
||||
/*
|
||||
* TODO: Bridges default to 10-bit VGA decoding but we currently only
|
||||
* implement 16-bit decoding (no alias support).
|
||||
*/
|
||||
pci_set_word(d->wmask + PCI_BRIDGE_CONTROL,
|
||||
PCI_BRIDGE_CTL_PARITY |
|
||||
PCI_BRIDGE_CTL_SERR |
|
||||
|
@ -55,6 +55,13 @@ void pci_bridge_exitfn(PCIDevice *pci_dev);
|
||||
void pci_bridge_map_irq(PCIBridge *br, const char* bus_name,
|
||||
pci_map_irq_fn map_irq);
|
||||
|
||||
/* TODO: add this define to pci_regs.h in linux and then in qemu. */
|
||||
#define PCI_BRIDGE_CTL_VGA_16BIT 0x10 /* VGA 16-bit decode */
|
||||
#define PCI_BRIDGE_CTL_DISCARD 0x100 /* Primary discard timer */
|
||||
#define PCI_BRIDGE_CTL_SEC_DISCARD 0x200 /* Secondary discard timer */
|
||||
#define PCI_BRIDGE_CTL_DISCARD_STATUS 0x400 /* Discard timer status */
|
||||
#define PCI_BRIDGE_CTL_DISCARD_SERR 0x800 /* Discard timer SERR# enable */
|
||||
|
||||
#endif /* QEMU_PCI_BRIDGE_H */
|
||||
/*
|
||||
* Local variables:
|
||||
|
@ -27,15 +27,17 @@ void pcie_port_init_reg(PCIDevice *d)
|
||||
pci_set_word(d->config + PCI_STATUS, 0);
|
||||
pci_set_word(d->config + PCI_SEC_STATUS, 0);
|
||||
|
||||
/* Unlike conventional pci bridge, some bits are hardwired to 0. */
|
||||
#define PCI_BRIDGE_CTL_VGA_16BIT 0x10 /* VGA 16-bit decode */
|
||||
pci_set_word(d->wmask + PCI_BRIDGE_CONTROL,
|
||||
PCI_BRIDGE_CTL_PARITY |
|
||||
PCI_BRIDGE_CTL_ISA |
|
||||
PCI_BRIDGE_CTL_VGA |
|
||||
PCI_BRIDGE_CTL_VGA_16BIT | /* Req, but no alias support yet */
|
||||
PCI_BRIDGE_CTL_SERR |
|
||||
PCI_BRIDGE_CTL_BUS_RESET);
|
||||
/*
|
||||
* Unlike conventional pci bridge, for some bits the spec states:
|
||||
* Does not apply to PCI Express and must be hardwired to 0.
|
||||
*/
|
||||
pci_word_test_and_clear_mask(d->wmask + PCI_BRIDGE_CONTROL,
|
||||
PCI_BRIDGE_CTL_MASTER_ABORT |
|
||||
PCI_BRIDGE_CTL_FAST_BACK |
|
||||
PCI_BRIDGE_CTL_DISCARD |
|
||||
PCI_BRIDGE_CTL_SEC_DISCARD |
|
||||
PCI_BRIDGE_CTL_DISCARD_STATUS |
|
||||
PCI_BRIDGE_CTL_DISCARD_SERR);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
Loading…
Reference in New Issue
Block a user