Changeset 32860 in vbox
- Timestamp:
- Oct 1, 2010 11:30:38 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
-
include/VBox/msi.h (modified) (1 diff)
-
src/VBox/Devices/Bus/DevPCI.cpp (modified) (1 diff)
-
src/VBox/Devices/Bus/DevPciIch9.cpp (modified) (20 diffs)
-
src/VBox/Devices/Bus/MsiCommon.cpp (modified) (6 diffs)
-
src/VBox/Devices/Bus/MsiCommon.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/msi.h
r32820 r32860 96 96 #define VBOX_MSI_CAP_PENDING_BITS_64 0x14 97 97 98 /* At the moment, we implement MSI withoutper-vector masking */99 #define VBOX_MSI_CAP_SIZE_32 0x 0a100 #define VBOX_MSI_CAP_SIZE_64 0x 0c98 /* We implement MSI with per-vector masking */ 99 #define VBOX_MSI_CAP_SIZE_32 0x14 100 #define VBOX_MSI_CAP_SIZE_64 0x18 101 101 102 102 /** -
trunk/src/VBox/Devices/Bus/DevPCI.cpp
r32820 r32860 1381 1381 { 0x20, 2, 1, 2, "MEMORY_BASE" }, // fWritable = ?? 1382 1382 { 0x22, 2, 1, 2, "MEMORY_LIMIT" }, // fWritable = ?? 1383 { 0x24, 4, 1, 1, "BASE_ADDRESS_ 4" },1383 { 0x24, 4, 1, 1, "BASE_ADDRESS_5" }, 1384 1384 { 0x24, 2, 1, 2, "PREF_MEMORY_BASE" }, // fWritable = ?? 1385 1385 { 0x26, 2, 1, 2, "PREF_MEMORY_LIMIT" }, // fWritable = ?? -
trunk/src/VBox/Devices/Bus/DevPciIch9.cpp
r32820 r32860 134 134 * Saved state version of the ICH9 PCI bus device. 135 135 */ 136 #define VBOX_ICH9PCI_SAVED_STATE_VERSION 1 136 #define VBOX_ICH9PCI_SAVED_STATE_VERSION_NOMSI 1 137 #define VBOX_ICH9PCI_SAVED_STATE_VERSION_MSI 2 138 #define VBOX_ICH9PCI_SAVED_STATE_VERSION_CURRENT VBOX_ICH9PCI_SAVED_STATE_VERSION_MSI 137 139 138 140 /** Converts a bus instance pointer to a device instance pointer. */ … … 180 182 static int ich9pciRegisterInternal(PPCIBUS pBus, int iDev, PPCIDEVICE pPciDev, const char *pszName); 181 183 static void ich9pciUpdateMappings(PCIDevice *pDev); 182 static DECLCALLBACK(uint32_t) ich9pciConfigRead (PCIDevice *aDev, uint32_t u32Address, unsigned len);184 static DECLCALLBACK(uint32_t) ich9pciConfigReadDev(PCIDevice *aDev, uint32_t u32Address, unsigned len); 183 185 DECLINLINE(PPCIDEVICE) ich9pciFindBridge(PPCIBUS pBus, uint8_t iBus); 184 186 static void ich9pciBiosInitDevice(PPCIGLOBALS pGlobals, uint8_t uBus, uint8_t uDevFn, uint8_t cBridgeDepth, uint8_t *paBridgePositions); … … 409 411 R3PTRTYPE(PCIDevice *) aDev = pGlobals->aPciBus.apDevices[pPciAddr->iDeviceFunc]; 410 412 *pu32 = aDev->Int.s.pfnConfigRead(aDev, pPciAddr->iRegister, len); 411 Log(("ich9pci ConfigRead: %s: addr=%02x val=%08x len=%d\n", aDev->name, pPciAddr->iRegister, *pu32, len));413 Log(("ich9pciDataReadAddr: %s: addr=%02x val=%08x len=%d\n", aDev->name, pPciAddr->iRegister, *pu32, len)); 412 414 #else 413 415 return VINF_IOM_HC_IOPORT_READ; … … 529 531 { 530 532 Log2(("Raise a MSI interrupt: %d\n", iIrq)); 531 MSINotify(pGlobals->aPciBus.CTX_SUFF(pDevIns), pPciDev, iIrq); 533 /* We only trigger MSI on level up, as technically it's matching flip-flop best (maybe even assert that level == PDM_IRQ_LEVEL_FLIP_FLOP) */ 534 if ((iLevel & PDM_IRQ_LEVEL_HIGH) != 0) 535 MSINotify(pGlobals->aPciBus.CTX_SUFF(pDevIns), pPciDev, iIrq); 532 536 return; 533 537 } … … 673 677 { 674 678 /* IO access allowed */ 675 uNew = ich9pciConfigRead (pDev, uConfigReg, 4);679 uNew = ich9pciConfigReadDev(pDev, uConfigReg, 4); 676 680 uNew &= ~(iRegionSize - 1); 677 681 uLast = uNew + iRegionSize - 1; … … 687 691 if (iCmd & PCI_COMMAND_MEMACCESS) 688 692 { 689 uNew = ich9pciConfigRead (pDev, uConfigReg, 4);693 uNew = ich9pciConfigReadDev(pDev, uConfigReg, 4); 690 694 /* the ROM slot has a specific enable bit */ 691 695 if (iRegion == PCI_ROM_SLOT && !(uNew & 1)) … … 885 889 SSMR3PutMem(pSSM, pDev->config, sizeof(pDev->config)); 886 890 887 /* IRQ pin state*/888 int rc = SSMR3Put S32(pSSM, pDev->Int.s.uIrqPinState);891 /* Device flags */ 892 int rc = SSMR3PutU32(pSSM, pDev->Int.s.uFlags); 889 893 if (RT_FAILURE(rc)) 890 894 return rc; 895 896 /* IRQ pin state */ 897 rc = SSMR3PutS32(pSSM, pDev->Int.s.uIrqPinState); 898 if (RT_FAILURE(rc)) 899 return rc; 900 901 /* MSI info */ 902 rc = SSMR3PutU8(pSSM, pDev->Int.s.u8MsiCapOffset); 903 if (RT_FAILURE(rc)) 904 return rc; 905 rc = SSMR3PutU8(pSSM, pDev->Int.s.u8MsiCapSize); 906 if (RT_FAILURE(rc)) 907 return rc; 908 909 /* MSI-X info */ 910 rc = SSMR3PutU8(pSSM, pDev->Int.s.u8MsixCapOffset); 911 if (RT_FAILURE(rc)) 912 return rc; 913 rc = SSMR3PutU8(pSSM, pDev->Int.s.u8MsixCapSize); 914 if (RT_FAILURE(rc)) 915 return rc; 891 916 } 892 917 } … … 896 921 static DECLCALLBACK(int) ich9pciR3SaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM) 897 922 { 898 PPCIBUS pThis = PDMINS_2_DATA(pDevIns, PPCIBUS); 899 return ich9pciR3CommonSaveExec(pThis, pSSM); 923 PPCIGLOBALS pThis = PDMINS_2_DATA(pDevIns, PPCIGLOBALS); 924 925 /* 926 * Bus state data. 927 */ 928 SSMR3PutU32(pSSM, pThis->uConfigReg); 929 930 /* 931 * Save IRQ states. 932 */ 933 for (int i = 0; i < PCI_APIC_IRQ_PINS; i++) 934 SSMR3PutU32(pSSM, pThis->uaPciApicIrqLevels[i]); 935 936 SSMR3PutU32(pSSM, ~0); /* separator */ 937 938 return ich9pciR3CommonSaveExec(&pThis->aPciBus, pSSM); 900 939 } 901 940 … … 997 1036 { VBOX_PCI_CLASS_PROG, 1, 0, 3, "CLASS_PROG" }, 998 1037 { VBOX_PCI_CLASS_SUB, 1, 0, 3, "CLASS_SUB" }, 999 { VBOX_PCI_CLASS_ DEVICE, 1, 0, 3, "CLASS_BASE" },1038 { VBOX_PCI_CLASS_BASE, 1, 0, 3, "CLASS_BASE" }, 1000 1039 { VBOX_PCI_CACHE_LINE_SIZE, 1, 1, 3, "CACHE_LINE_SIZE" }, 1001 1040 { VBOX_PCI_LATENCY_TIMER, 1, 1, 3, "LATENCY_TIMER" }, … … 1016 1055 { VBOX_PCI_MEMORY_BASE, 2, 1, 2, "MEMORY_BASE" }, // fWritable = ?? 1017 1056 { VBOX_PCI_MEMORY_LIMIT, 2, 1, 2, "MEMORY_LIMIT" }, // fWritable = ?? 1018 { VBOX_PCI_BASE_ADDRESS_ 4, 4, 1, 1, "BASE_ADDRESS_4" },1057 { VBOX_PCI_BASE_ADDRESS_5, 4, 1, 1, "BASE_ADDRESS_5" }, 1019 1058 { VBOX_PCI_PREF_MEMORY_BASE, 2, 1, 2, "PREF_MEMORY_BASE" }, // fWritable = ?? 1020 1059 { VBOX_PCI_PREF_MEMORY_LIMIT, 2, 1, 2, "PREF_MEMORY_LIMIT" }, // fWritable = ?? … … 1034 1073 { VBOX_PCI_MIN_GNT, 1, 0, 1, "MIN_GNT" }, 1035 1074 { VBOX_PCI_BRIDGE_CONTROL, 2, 1, 2, "BRIDGE_CONTROL" }, // fWritable = !? 1036 { VBOX_PCI_MAX_LAT, 1, 0, 3, "MAX_LAT" }, // fBridge=!?1075 { VBOX_PCI_MAX_LAT, 1, 0, 1, "MAX_LAT" }, 1037 1076 /* The COMMAND register must come last as it requires the *ADDRESS* 1038 1077 registers to be restored before we pretent to change it from 0 to … … 1206 1245 1207 1246 /* get the data */ 1247 DevTmp.Int.s.uFlags = 0; 1248 DevTmp.Int.s.u8MsiCapOffset = 0; 1249 DevTmp.Int.s.u8MsiCapSize = 0; 1250 DevTmp.Int.s.u8MsixCapOffset = 0; 1251 DevTmp.Int.s.u8MsixCapSize = 0; 1208 1252 DevTmp.Int.s.uIrqPinState = ~0; /* Invalid value in case we have an older saved state to force a state change in pciSetIrq. */ 1209 1253 SSMR3GetMem(pSSM, DevTmp.config, sizeof(DevTmp.config)); 1210 1254 1255 rc = SSMR3GetU32(pSSM, &DevTmp.Int.s.uFlags); 1256 if (RT_FAILURE(rc)) 1257 return rc; 1258 1211 1259 rc = SSMR3GetS32(pSSM, &DevTmp.Int.s.uIrqPinState); 1260 if (RT_FAILURE(rc)) 1261 return rc; 1262 1263 rc = SSMR3GetU8(pSSM, &DevTmp.Int.s.u8MsiCapOffset); 1264 if (RT_FAILURE(rc)) 1265 return rc; 1266 1267 rc = SSMR3GetU8(pSSM, &DevTmp.Int.s.u8MsiCapSize); 1268 if (RT_FAILURE(rc)) 1269 return rc; 1270 1271 rc = SSMR3GetU8(pSSM, &DevTmp.Int.s.u8MsixCapOffset); 1272 if (RT_FAILURE(rc)) 1273 return rc; 1274 1275 rc = SSMR3GetU8(pSSM, &DevTmp.Int.s.u8MsixCapSize); 1212 1276 if (RT_FAILURE(rc)) 1213 1277 return rc; … … 1255 1319 static DECLCALLBACK(int) ich9pciR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass) 1256 1320 { 1321 PPCIGLOBALS pThis = PDMINS_2_DATA(pDevIns, PPCIGLOBALS); 1322 PPCIBUS pBus = &pThis->aPciBus; 1323 uint32_t u32; 1324 int rc; 1325 1326 /* We ignore this version as there's no saved state with it anyway */ 1327 if (uVersion == VBOX_ICH9PCI_SAVED_STATE_VERSION_NOMSI) 1328 return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION; 1329 if (uVersion > VBOX_ICH9PCI_SAVED_STATE_VERSION_MSI) 1330 return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION; 1331 1332 /* 1333 * Bus state data. 1334 */ 1335 SSMR3GetU32(pSSM, &pThis->uConfigReg); 1336 1337 /* 1338 * Load IRQ states. 1339 */ 1340 for (int i = 0; i < PCI_APIC_IRQ_PINS; i++) 1341 SSMR3GetU32(pSSM, (uint32_t*)&pThis->uaPciApicIrqLevels[i]); 1342 1343 /* separator */ 1344 rc = SSMR3GetU32(pSSM, &u32); 1345 if (RT_FAILURE(rc)) 1346 return rc; 1347 if (u32 != (uint32_t)~0) 1348 AssertMsgFailedReturn(("u32=%#x\n", u32), rc); 1349 1350 return ich9pciR3CommonLoadExec(pBus, pSSM, uVersion, uPass); 1351 } 1352 1353 static DECLCALLBACK(int) ich9pcibridgeR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass) 1354 { 1257 1355 PPCIBUS pThis = PDMINS_2_DATA(pDevIns, PPCIBUS); 1258 if (uVersion > VBOX_ICH9PCI_SAVED_STATE_VERSION) 1259 return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION; 1260 return ich9pciR3CommonLoadExec(pThis, pSSM, uVersion, uPass); 1261 } 1262 1263 static DECLCALLBACK(int) ich9pcibridgeR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass) 1264 { 1265 PPCIBUS pThis = PDMINS_2_DATA(pDevIns, PPCIBUS); 1266 if (uVersion > VBOX_ICH9PCI_SAVED_STATE_VERSION) 1356 if (uVersion > VBOX_ICH9PCI_SAVED_STATE_VERSION_MSI) 1267 1357 return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION; 1268 1358 return ich9pciR3CommonLoadExec(pThis, pSSM, uVersion, uPass); … … 1584 1674 } 1585 1675 1586 static DECLCALLBACK(uint32_t) ich9pciConfigRead (PCIDevice *aDev, uint32_t u32Address, unsigned len)1676 static DECLCALLBACK(uint32_t) ich9pciConfigReadDev(PCIDevice *aDev, uint32_t u32Address, unsigned len) 1587 1677 { 1588 1678 if ((u32Address + len) > 256 && (u32Address + len) < 4096) … … 1596 1686 ) 1597 1687 { 1598 return MSIPciConfigRead(aDev , u32Address, len);1688 return MSIPciConfigRead(aDev->Int.s.CTX_SUFF(pBus)->CTX_SUFF(pDevIns), aDev, u32Address, len); 1599 1689 } 1600 1690 … … 1618 1708 * registers and their writability policy. 1619 1709 */ 1620 static DECLCALLBACK(void) ich9pciConfigWrite (PCIDevice *aDev, uint32_t u32Address,1621 uint32_t val, unsigned len)1710 static DECLCALLBACK(void) ich9pciConfigWriteDev(PCIDevice *aDev, uint32_t u32Address, 1711 uint32_t val, unsigned len) 1622 1712 { 1623 1713 if ((u32Address + len) > 256 && (u32Address + len) < 4096) … … 1633 1723 ) 1634 1724 { 1635 MSIPciConfigWrite(aDev , u32Address, val, len);1725 MSIPciConfigWrite(aDev->Int.s.CTX_SUFF(pBus)->CTX_SUFF(pDevIns), aDev, u32Address, val, len); 1636 1726 return; 1637 1727 } … … 1905 1995 pPciDev->Int.s.pBusR0 = MMHyperR3ToR0(PDMDevHlpGetVM(pBus->CTX_SUFF(pDevIns)), pBus); 1906 1996 pPciDev->Int.s.pBusRC = MMHyperR3ToRC(PDMDevHlpGetVM(pBus->CTX_SUFF(pDevIns)), pBus); 1907 pPciDev->Int.s.pfnConfigRead = ich9pciConfigRead ;1908 pPciDev->Int.s.pfnConfigWrite = ich9pciConfigWrite ;1997 pPciDev->Int.s.pfnConfigRead = ich9pciConfigReadDev; 1998 pPciDev->Int.s.pfnConfigWrite = ich9pciConfigWriteDev; 1909 1999 pBus->apDevices[iDev] = pPciDev; 1910 2000 if (PCIIsPci2PciBridge(pPciDev)) … … 2145 2235 } 2146 2236 2237 rc = PDMDevHlpSSMRegisterEx(pDevIns, VBOX_ICH9PCI_SAVED_STATE_VERSION_CURRENT, 2238 sizeof(*pBus) + 16*128, "pgm", 2239 NULL, NULL, NULL, 2240 NULL, ich9pciR3SaveExec, NULL, 2241 NULL, ich9pciR3LoadExec, NULL); 2242 if (RT_FAILURE(rc)) 2243 return rc; 2244 2147 2245 2148 2246 /** @todo: other chipset devices shall be registered too */ … … 2286 2384 * to make changes easier. 2287 2385 */ 2288 rc = PDMDevHlpSSMRegisterEx(pDevIns, VBOX_ICH9PCI_SAVED_STATE_VERSION, sizeof(*pBus) + 16*128, "pgm", 2386 rc = PDMDevHlpSSMRegisterEx(pDevIns, VBOX_ICH9PCI_SAVED_STATE_VERSION_CURRENT, 2387 sizeof(*pBus) + 16*128, 2388 "pgm" /* before */, 2289 2389 NULL, NULL, NULL, 2290 2390 NULL, ich9pcibridgeR3SaveExec, NULL, -
trunk/src/VBox/Devices/Bus/MsiCommon.cpp
r32822 r32860 35 35 } 36 36 37 DECLINLINE(uint32_t*) msiGetMaskBits(PPCIDEVICE pDev) 38 { 39 uint8_t iOff = msiIs64Bit(pDev) ? VBOX_MSI_CAP_MASK_BITS_64 : VBOX_MSI_CAP_MASK_BITS_32; 40 iOff += pDev->Int.s.u8MsiCapOffset; 41 return (uint32_t*)(pDev->config + iOff); 42 } 43 44 DECLINLINE(uint32_t*) msiGetPendingBits(PPCIDEVICE pDev) 45 { 46 uint8_t iOff = msiIs64Bit(pDev) ? VBOX_MSI_CAP_PENDING_BITS_64 : VBOX_MSI_CAP_PENDING_BITS_32; 47 iOff += pDev->Int.s.u8MsiCapOffset; 48 return (uint32_t*)(pDev->config + iOff); 49 } 50 37 51 DECLINLINE(bool) msiIsEnabled(PPCIDEVICE pDev) 38 52 { … … 70 84 } 71 85 72 void MSIPciConfigWrite(PPCIDEVICE pDev, uint32_t u32Address, uint32_t val, unsigned len) 86 DECLINLINE(bool) msiBitJustCleared(uint32_t u32OldValue, 87 uint32_t u32NewValue, 88 uint32_t u32Mask) 89 { 90 return (!!(u32OldValue & u32Mask) && !(u32NewValue & u32Mask)); 91 } 92 93 94 void MSIPciConfigWrite(PPDMDEVINS pDevIns, PPCIDEVICE pDev, uint32_t u32Address, uint32_t val, unsigned len) 73 95 { 74 96 int32_t iOff = u32Address - pDev->Int.s.u8MsiCapOffset; … … 78 100 79 101 uint32_t uAddr = u32Address; 102 bool f64Bit = msiIs64Bit(pDev); 103 80 104 for (uint32_t i = 0; i < len; i++) 81 105 { 82 switch (i + iOff) 106 uint32_t reg = i + iOff; 107 switch (reg) 83 108 { 84 109 case 0: /* Capability ID, ro */ 85 110 case 1: /* Next pointer, ro */ 86 111 break; 87 case 2:112 case VBOX_MSI_CAP_MESSAGE_CONTROL: 88 113 /* don't change read-only bits: 1-3,7 */ 89 114 val &= UINT32_C(~0x8e); 90 115 pDev->config[uAddr] &= ~val; 91 116 break; 92 case 3:117 case VBOX_MSI_CAP_MESSAGE_CONTROL + 1: 93 118 /* don't change read-only bit 8, and reserved 9-15 */ 94 119 break; 95 120 default: 96 pDev->config[uAddr] = val; 121 if (pDev->config[uAddr] != val) 122 { 123 int32_t maskUpdated = -1; 124 125 /* If we're enabling masked vector, and have pending messages 126 for this vector, we have to send this message now */ 127 if ( !f64Bit 128 && (reg >= VBOX_MSI_CAP_MASK_BITS_32) 129 && (reg < VBOX_MSI_CAP_MASK_BITS_32 + 4) 130 ) 131 { 132 maskUpdated = reg - VBOX_MSI_CAP_MASK_BITS_32; 133 } 134 if ( f64Bit 135 && (reg >= VBOX_MSI_CAP_MASK_BITS_64) 136 && (reg < VBOX_MSI_CAP_MASK_BITS_64 + 4) 137 ) 138 { 139 maskUpdated = reg - VBOX_MSI_CAP_MASK_BITS_64; 140 } 141 142 if (maskUpdated != -1) 143 { 144 for (int iBitNum = 0; i<8; i++) 145 { 146 int32_t iBit = 1 << iBitNum; 147 if (msiBitJustCleared(pDev->config[uAddr], val, iBit)) 148 { 149 /* To ensure that we're no longer masked */ 150 pDev->config[uAddr] &= ~iBit; 151 MSINotify(pDevIns, pDev, maskUpdated*8 + iBitNum); 152 } 153 } 154 } 155 156 pDev->config[uAddr] = val; 157 } 97 158 } 98 159 uAddr++; … … 101 162 } 102 163 103 uint32_t MSIPciConfigRead (PP CIDEVICE pDev, uint32_t u32Address, unsigned len)164 uint32_t MSIPciConfigRead (PPDMDEVINS pDevIns, PPCIDEVICE pDev, uint32_t u32Address, unsigned len) 104 165 { 105 166 int32_t iOff = u32Address - pDev->Int.s.u8MsiCapOffset; 106 167 107 Log2(("MSIPciConfigRead: %d (%d)\n", iOff, len));108 109 168 Assert(iOff >= 0 && (PCIIsMsiCapable(pDev) && iOff < pDev->Int.s.u8MsiCapSize)); 169 uint32_t rv = 0; 110 170 111 171 switch (len) 112 172 { 113 173 case 1: 114 return PCIDevGetByte(pDev, u32Address); 174 rv = PCIDevGetByte(pDev, u32Address); 175 break; 115 176 case 2: 116 return PCIDevGetWord(pDev, u32Address); 177 rv = PCIDevGetWord(pDev, u32Address); 178 break; 179 case 4: 180 rv = PCIDevGetDWord(pDev, u32Address); 181 break; 117 182 default: 118 case 4: 119 return PCIDevGetDWord(pDev, u32Address); 120 } 183 Assert(false); 184 } 185 186 Log2(("MSIPciConfigRead: %d (%d) -> %x\n", iOff, len, rv)); 187 188 return rv; 121 189 } 122 190 … … 137 205 138 206 bool f64bit = (iMsiFlags & VBOX_PCI_MSI_FLAGS_64BIT) != 0; 207 /* We always support per-vector masking */ 208 iMsiFlags |= VBOX_PCI_MSI_FLAGS_MASKBIT; 139 209 140 210 pDev->Int.s.u8MsiCapOffset = iCapOffset; … … 162 232 AssertMsg(msiIsEnabled(pDev), ("Must be enabled to use that")); 163 233 234 uint32_t uMask = *msiGetMaskBits(pDev); 235 uint32_t* upPending = msiGetPendingBits(pDev); 236 237 if ((uMask & (1<<iVector)) != 0) 238 { 239 *upPending |= (1<<iVector); 240 return; 241 } 242 164 243 RTGCPHYS GCAddr = msiGetMsiAddress(pDev); 165 244 uint32_t u32Value = msiGetMsiData(pDev, iVector); 166 245 246 *upPending &= ~(1<<iVector); 247 167 248 PDMDevHlpPhysWrite(pDevIns, GCAddr, &u32Value, sizeof(u32Value)); 168 249 } -
trunk/src/VBox/Devices/Bus/MsiCommon.h
r32820 r32860 24 24 25 25 /* PCI config space accessors for MSI registers */ 26 void MSIPciConfigWrite(PP CIDEVICE pDev, uint32_t u32Address, uint32_t val, unsigned len);27 uint32_t MSIPciConfigRead (PP CIDEVICE pDev, uint32_t u32Address, unsigned len);26 void MSIPciConfigWrite(PPDMDEVINS pDevIns, PPCIDEVICE pDev, uint32_t u32Address, uint32_t val, unsigned len); 27 uint32_t MSIPciConfigRead (PPDMDEVINS pDevIns, PPCIDEVICE pDev, uint32_t u32Address, unsigned len);
Note:
See TracChangeset
for help on using the changeset viewer.

