Skip to content

Commit 6755e61

Browse files
Jing Liumstsirkin
Jing Liu
authored andcommitted
hw/pci: add PCI resource reserve capability to legacy PCI bridge
Add hint to firmware (e.g. SeaBIOS) to reserve addtional BUS/IO/MEM/PREF resource for legacy pci-pci bridge. Add the resource reserve capability deleting in pci_bridge_dev_exitfn. Signed-off-by: Jing Liu <[email protected]> Reviewed-by: Marcel Apfelbaum<[email protected]> Reviewed-by: Michael S. Tsirkin <[email protected]> Signed-off-by: Michael S. Tsirkin <[email protected]>
1 parent 9e89939 commit 6755e61

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

hw/pci-bridge/pci_bridge_dev.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ struct PCIBridgeDev {
4646
uint32_t flags;
4747

4848
OnOffAuto msi;
49+
50+
/* additional resources to reserve */
51+
PCIResReserve res_reserve;
4952
};
5053
typedef struct PCIBridgeDev PCIBridgeDev;
5154

@@ -95,6 +98,12 @@ static void pci_bridge_dev_realize(PCIDevice *dev, Error **errp)
9598
error_free(local_err);
9699
}
97100

101+
err = pci_bridge_qemu_reserve_cap_init(dev, 0,
102+
bridge_dev->res_reserve, errp);
103+
if (err) {
104+
goto cap_error;
105+
}
106+
98107
if (shpc_present(dev)) {
99108
/* TODO: spec recommends using 64 bit prefetcheable BAR.
100109
* Check whether that works well. */
@@ -103,6 +112,8 @@ static void pci_bridge_dev_realize(PCIDevice *dev, Error **errp)
103112
}
104113
return;
105114

115+
cap_error:
116+
msi_uninit(dev);
106117
msi_error:
107118
slotid_cap_cleanup(dev);
108119
slotid_error:
@@ -116,6 +127,8 @@ static void pci_bridge_dev_realize(PCIDevice *dev, Error **errp)
116127
static void pci_bridge_dev_exitfn(PCIDevice *dev)
117128
{
118129
PCIBridgeDev *bridge_dev = PCI_BRIDGE_DEV(dev);
130+
131+
pci_del_capability(dev, PCI_CAP_ID_VNDR, sizeof(PCIBridgeQemuCap));
119132
if (msi_present(dev)) {
120133
msi_uninit(dev);
121134
}
@@ -162,6 +175,17 @@ static Property pci_bridge_dev_properties[] = {
162175
ON_OFF_AUTO_AUTO),
163176
DEFINE_PROP_BIT(PCI_BRIDGE_DEV_PROP_SHPC, PCIBridgeDev, flags,
164177
PCI_BRIDGE_DEV_F_SHPC_REQ, true),
178+
DEFINE_PROP_UINT32("bus-reserve", PCIBridgeDev,
179+
res_reserve.bus, -1),
180+
DEFINE_PROP_SIZE("io-reserve", PCIBridgeDev,
181+
res_reserve.io, -1),
182+
DEFINE_PROP_SIZE("mem-reserve", PCIBridgeDev,
183+
res_reserve.mem_non_pref, -1),
184+
DEFINE_PROP_SIZE("pref32-reserve", PCIBridgeDev,
185+
res_reserve.mem_pref_32, -1),
186+
DEFINE_PROP_SIZE("pref64-reserve", PCIBridgeDev,
187+
res_reserve.mem_pref_64, -1),
188+
165189
DEFINE_PROP_END_OF_LIST(),
166190
};
167191

0 commit comments

Comments
 (0)