mirror of https://github.com/xemu-project/xemu.git
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_word_test_and_set_mask(d->config + PCI_PREF_MEMORY_LIMIT,
|
||||||
PCI_PREF_RANGE_TYPE_64);
|
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 */
|
* TODO: Bridges default to 10-bit VGA decoding but we currently only
|
||||||
#define PCI_BRIDGE_CTL_DISCARD 0x100 /* Primary discard timer */
|
* implement 16-bit decoding (no alias support).
|
||||||
#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).
|
|
||||||
*/
|
|
||||||
pci_set_word(d->wmask + PCI_BRIDGE_CONTROL,
|
pci_set_word(d->wmask + PCI_BRIDGE_CONTROL,
|
||||||
PCI_BRIDGE_CTL_PARITY |
|
PCI_BRIDGE_CTL_PARITY |
|
||||||
PCI_BRIDGE_CTL_SERR |
|
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,
|
void pci_bridge_map_irq(PCIBridge *br, const char* bus_name,
|
||||||
pci_map_irq_fn map_irq);
|
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 */
|
#endif /* QEMU_PCI_BRIDGE_H */
|
||||||
/*
|
/*
|
||||||
* Local variables:
|
* 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_STATUS, 0);
|
||||||
pci_set_word(d->config + PCI_SEC_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 */
|
* Unlike conventional pci bridge, for some bits the spec states:
|
||||||
pci_set_word(d->wmask + PCI_BRIDGE_CONTROL,
|
* Does not apply to PCI Express and must be hardwired to 0.
|
||||||
PCI_BRIDGE_CTL_PARITY |
|
*/
|
||||||
PCI_BRIDGE_CTL_ISA |
|
pci_word_test_and_clear_mask(d->wmask + PCI_BRIDGE_CONTROL,
|
||||||
PCI_BRIDGE_CTL_VGA |
|
PCI_BRIDGE_CTL_MASTER_ABORT |
|
||||||
PCI_BRIDGE_CTL_VGA_16BIT | /* Req, but no alias support yet */
|
PCI_BRIDGE_CTL_FAST_BACK |
|
||||||
PCI_BRIDGE_CTL_SERR |
|
PCI_BRIDGE_CTL_DISCARD |
|
||||||
PCI_BRIDGE_CTL_BUS_RESET);
|
PCI_BRIDGE_CTL_SEC_DISCARD |
|
||||||
|
PCI_BRIDGE_CTL_DISCARD_STATUS |
|
||||||
|
PCI_BRIDGE_CTL_DISCARD_SERR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
Loading…
Reference in New Issue