diff options
Diffstat (limited to 'src/dev')
-rw-r--r-- | src/dev/pcidev.cc | 20 | ||||
-rw-r--r-- | src/dev/pcireg.h | 13 |
2 files changed, 15 insertions, 18 deletions
diff --git a/src/dev/pcidev.cc b/src/dev/pcidev.cc index 9e6d5cd37..3e4238908 100644 --- a/src/dev/pcidev.cc +++ b/src/dev/pcidev.cc @@ -429,12 +429,12 @@ CREATE_SIM_OBJECT(PciConfigData) data->config.headerType = htole(HeaderType); data->config.bist = htole(BIST); - data->config.baseAddr0 = htole(BAR0); - data->config.baseAddr1 = htole(BAR1); - data->config.baseAddr2 = htole(BAR2); - data->config.baseAddr3 = htole(BAR3); - data->config.baseAddr4 = htole(BAR4); - data->config.baseAddr5 = htole(BAR5); + data->config.baseAddr[0] = htole(BAR0); + data->config.baseAddr[1] = htole(BAR1); + data->config.baseAddr[2] = htole(BAR2); + data->config.baseAddr[3] = htole(BAR3); + data->config.baseAddr[4] = htole(BAR4); + data->config.baseAddr[5] = htole(BAR5); data->config.cardbusCIS = htole(CardbusCIS); data->config.subsystemVendorID = htole(SubsystemVendorID); data->config.subsystemID = htole(SubsystemVendorID); @@ -451,6 +451,14 @@ CREATE_SIM_OBJECT(PciConfigData) data->BARSize[4] = BAR4Size; data->BARSize[5] = BAR5Size; + for (int i = 0; i < 6; ++i) { + uint32_t barsize = data->BARSize[i]; + if (barsize != 0 && !isPowerOf2(barsize)) { + fatal("%s: BAR %d size %d is not a power of 2\n", + getInstanceName(), i, data->BARSize[i]); + } + } + return data; } diff --git a/src/dev/pcireg.h b/src/dev/pcireg.h index a48abd4fa..df57acdb0 100644 --- a/src/dev/pcireg.h +++ b/src/dev/pcireg.h @@ -54,18 +54,7 @@ union PCIConfig { uint8_t latencyTimer; uint8_t headerType; uint8_t bist; - union { - uint32_t baseAddr[6]; - - struct { - uint32_t baseAddr0; - uint32_t baseAddr1; - uint32_t baseAddr2; - uint32_t baseAddr3; - uint32_t baseAddr4; - uint32_t baseAddr5; - }; - }; + uint32_t baseAddr[6]; uint32_t cardbusCIS; uint16_t subsystemVendorID; uint16_t subsystemID; |