Changeset 87470 in vbox for trunk/src/VBox/Devices/Bus
- Timestamp:
- Jan 28, 2021 5:22:32 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 142490
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Bus/DevIommuAmd.cpp
r87458 r87470 1793 1793 * @param off The MMIO offset of the register being accessed. 1794 1794 */ 1795 static PCIOMMUREGACC iommuAmdGetRegAccess ForOffset(uint32_t off)1795 static PCIOMMUREGACC iommuAmdGetRegAccess(uint32_t off) 1796 1796 { 1797 1797 /* Figure out which table the register belongs to and validate its index. */ … … 1819 1819 else 1820 1820 return NULL; 1821 1822 1821 return pReg; 1823 1822 } … … 1835 1834 * @thread EMT. 1836 1835 */ 1837 static VBOXSTRICTRC iommuAmd WriteRegister(PPDMDEVINS pDevIns, uint32_t off, uint8_t cb, uint64_t uValue)1836 static VBOXSTRICTRC iommuAmdRegisterWrite(PPDMDEVINS pDevIns, uint32_t off, uint8_t cb, uint64_t uValue) 1838 1837 { 1839 1838 /* … … 1847 1846 1848 1847 PIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU); 1849 PCIOMMUREGACC pReg = iommuAmdGetRegAccess ForOffset(off);1848 PCIOMMUREGACC pReg = iommuAmdGetRegAccess(off); 1850 1849 if (pReg) 1851 1850 { /* likely */ } … … 1947 1946 * @thread EMT. 1948 1947 */ 1949 static VBOXSTRICTRC iommuAmdRe adRegister(PPDMDEVINS pDevIns, uint32_t off, uint64_t *puResult)1948 static VBOXSTRICTRC iommuAmdRegisterRead(PPDMDEVINS pDevIns, uint32_t off, uint64_t *puResult) 1950 1949 { 1951 1950 Assert(off < IOMMU_MMIO_REGION_SIZE); 1952 1951 Assert(!(off & 7) || !(off & 3)); 1952 1953 Log4Func(("off=%#x\n", off)); 1953 1954 1954 1955 PIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU); … … 1956 1957 PDMPCIDEV_ASSERT_VALID(pDevIns, pPciDev); NOREF(pPciDev); 1957 1958 1958 Log4Func(("off=%#x\n", off)); 1959 1960 PCIOMMUREGACC pReg = iommuAmdGetRegAccessForOffset(off); 1959 PCIOMMUREGACC pReg = iommuAmdGetRegAccess(off); 1961 1960 if (pReg) 1962 1961 { /* likely */ } … … 2011 2010 * @remarks The IOMMU lock may or may not be held. 2012 2011 */ 2013 static void iommuAmd RaiseMsiInterrupt(PPDMDEVINS pDevIns)2012 static void iommuAmdMsiInterruptRaise(PPDMDEVINS pDevIns) 2014 2013 { 2015 2014 LogFlowFunc(("\n")); … … 2030 2029 * @remarks The IOMMU lock may or may not be held. 2031 2030 */ 2032 static void iommuAmd ClearMsiInterrupt(PPDMDEVINS pDevIns)2031 static void iommuAmdMsiInterruptClear(PPDMDEVINS pDevIns) 2033 2032 { 2034 2033 if (iommuAmdIsMsiEnabled(pDevIns)) … … 2046 2045 * @thread Any. 2047 2046 */ 2048 static int iommuAmd WriteEvtLogEntry(PPDMDEVINS pDevIns, PCEVT_GENERIC_T pEvent)2047 static int iommuAmdEvtLogEntryWrite(PPDMDEVINS pDevIns, PCEVT_GENERIC_T pEvent) 2049 2048 { 2050 2049 PIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU); … … 2085 2084 IOMMU_CTRL_T const Ctrl = iommuAmdGetCtrl(pThis); 2086 2085 if (Ctrl.n.u1EvtIntrEn) 2087 iommuAmd RaiseMsiInterrupt(pDevIns);2086 iommuAmdMsiInterruptRaise(pDevIns); 2088 2087 } 2089 2088 else … … 2095 2094 IOMMU_CTRL_T const Ctrl = iommuAmdGetCtrl(pThis); 2096 2095 if (Ctrl.n.u1EvtIntrEn) 2097 iommuAmd RaiseMsiInterrupt(pDevIns);2096 iommuAmdMsiInterruptRaise(pDevIns); 2098 2097 } 2099 2098 } … … 2111 2110 * @thread Any. 2112 2111 */ 2113 static void iommuAmd SetHwError(PPDMDEVINS pDevIns, PCEVT_GENERIC_T pEvent)2112 static void iommuAmdHwErrorSet(PPDMDEVINS pDevIns, PCEVT_GENERIC_T pEvent) 2114 2113 { 2115 2114 IOMMU_ASSERT_LOCKED(pDevIns); … … 2140 2139 * @param pEvtPageTabHwErr Where to store the initialized event. 2141 2140 */ 2142 static void iommuAmd InitPageTabHwErrorEvent(uint16_t uDevId, uint16_t uDomainId, RTGCPHYS GCPhysPtEntity, IOMMUOP enmOp,2141 static void iommuAmdPageTabHwErrorEventInit(uint16_t uDevId, uint16_t uDomainId, RTGCPHYS GCPhysPtEntity, IOMMUOP enmOp, 2143 2142 PEVT_PAGE_TAB_HW_ERR_T pEvtPageTabHwErr) 2144 2143 { … … 2165 2164 * @thread Any. 2166 2165 */ 2167 static void iommuAmd RaisePageTabHwErrorEvent(PPDMDEVINS pDevIns, IOMMUOP enmOp, PEVT_PAGE_TAB_HW_ERR_T pEvtPageTabHwErr)2166 static void iommuAmdPageTabHwErrorEventRaise(PPDMDEVINS pDevIns, IOMMUOP enmOp, PEVT_PAGE_TAB_HW_ERR_T pEvtPageTabHwErr) 2168 2167 { 2169 2168 AssertCompile(sizeof(EVT_GENERIC_T) == sizeof(EVT_PAGE_TAB_HW_ERR_T)); … … 2172 2171 IOMMU_LOCK_NORET(pDevIns); 2173 2172 2174 iommuAmd SetHwError(pDevIns, (PCEVT_GENERIC_T)pEvent);2175 iommuAmd WriteEvtLogEntry(pDevIns, (PCEVT_GENERIC_T)pEvent);2173 iommuAmdHwErrorSet(pDevIns, (PCEVT_GENERIC_T)pEvent); 2174 iommuAmdEvtLogEntryWrite(pDevIns, (PCEVT_GENERIC_T)pEvent); 2176 2175 if (enmOp != IOMMUOP_CMD) 2177 2176 iommuAmdSetPciTargetAbort(pDevIns); … … 2192 2191 * @param pEvtCmdHwErr Where to store the initialized event. 2193 2192 */ 2194 static void iommuAmd InitCmdHwErrorEvent(RTGCPHYS GCPhysAddr, PEVT_CMD_HW_ERR_T pEvtCmdHwErr)2193 static void iommuAmdCmdHwErrorEventInit(RTGCPHYS GCPhysAddr, PEVT_CMD_HW_ERR_T pEvtCmdHwErr) 2195 2194 { 2196 2195 memset(pEvtCmdHwErr, 0, sizeof(*pEvtCmdHwErr)); … … 2209 2208 * @thread Any. 2210 2209 */ 2211 static void iommuAmd RaiseCmdHwErrorEvent(PPDMDEVINS pDevIns, PCEVT_CMD_HW_ERR_T pEvtCmdHwErr)2210 static void iommuAmdCmdHwErrorEventRaise(PPDMDEVINS pDevIns, PCEVT_CMD_HW_ERR_T pEvtCmdHwErr) 2212 2211 { 2213 2212 AssertCompile(sizeof(EVT_GENERIC_T) == sizeof(EVT_CMD_HW_ERR_T)); … … 2217 2216 IOMMU_LOCK_NORET(pDevIns); 2218 2217 2219 iommuAmd SetHwError(pDevIns, (PCEVT_GENERIC_T)pEvent);2220 iommuAmd WriteEvtLogEntry(pDevIns, (PCEVT_GENERIC_T)pEvent);2218 iommuAmdHwErrorSet(pDevIns, (PCEVT_GENERIC_T)pEvent); 2219 iommuAmdEvtLogEntryWrite(pDevIns, (PCEVT_GENERIC_T)pEvent); 2221 2220 ASMAtomicAndU64(&pThis->Status.u64, ~IOMMU_STATUS_CMD_BUF_RUNNING); 2222 2221 … … 2237 2236 * @param pEvtDevTabHwErr Where to store the initialized event. 2238 2237 */ 2239 static void iommuAmd InitDevTabHwErrorEvent(uint16_t uDevId, RTGCPHYS GCPhysDte, IOMMUOP enmOp,2238 static void iommuAmdDevTabHwErrorEventInit(uint16_t uDevId, RTGCPHYS GCPhysDte, IOMMUOP enmOp, 2240 2239 PEVT_DEV_TAB_HW_ERROR_T pEvtDevTabHwErr) 2241 2240 { … … 2261 2260 * @thread Any. 2262 2261 */ 2263 static void iommuAmd RaiseDevTabHwErrorEvent(PPDMDEVINS pDevIns, IOMMUOP enmOp, PEVT_DEV_TAB_HW_ERROR_T pEvtDevTabHwErr)2262 static void iommuAmdDevTabHwErrorEventRaise(PPDMDEVINS pDevIns, IOMMUOP enmOp, PEVT_DEV_TAB_HW_ERROR_T pEvtDevTabHwErr) 2264 2263 { 2265 2264 AssertCompile(sizeof(EVT_GENERIC_T) == sizeof(EVT_DEV_TAB_HW_ERROR_T)); … … 2268 2267 IOMMU_LOCK_NORET(pDevIns); 2269 2268 2270 iommuAmd SetHwError(pDevIns, (PCEVT_GENERIC_T)pEvent);2271 iommuAmd WriteEvtLogEntry(pDevIns, (PCEVT_GENERIC_T)pEvent);2269 iommuAmdHwErrorSet(pDevIns, (PCEVT_GENERIC_T)pEvent); 2270 iommuAmdEvtLogEntryWrite(pDevIns, (PCEVT_GENERIC_T)pEvent); 2272 2271 if (enmOp != IOMMUOP_CMD) 2273 2272 iommuAmdSetPciTargetAbort(pDevIns); … … 2288 2287 * @param pEvtIllegalCmd Where to store the initialized event. 2289 2288 */ 2290 static void iommuAmdI nitIllegalCmdEvent(RTGCPHYS GCPhysCmd, PEVT_ILLEGAL_CMD_ERR_T pEvtIllegalCmd)2289 static void iommuAmdIllegalCmdEventInit(RTGCPHYS GCPhysCmd, PEVT_ILLEGAL_CMD_ERR_T pEvtIllegalCmd) 2291 2290 { 2292 2291 Assert(!(GCPhysCmd & UINT64_C(0xf))); … … 2303 2302 * @param pEvtIllegalCmd The illegal command error event. 2304 2303 */ 2305 static void iommuAmd RaiseIllegalCmdEvent(PPDMDEVINS pDevIns, PCEVT_ILLEGAL_CMD_ERR_T pEvtIllegalCmd)2304 static void iommuAmdIllegalCmdEventRaise(PPDMDEVINS pDevIns, PCEVT_ILLEGAL_CMD_ERR_T pEvtIllegalCmd) 2306 2305 { 2307 2306 AssertCompile(sizeof(EVT_GENERIC_T) == sizeof(EVT_ILLEGAL_DTE_T)); … … 2311 2310 IOMMU_LOCK_NORET(pDevIns); 2312 2311 2313 iommuAmd WriteEvtLogEntry(pDevIns, pEvent);2312 iommuAmdEvtLogEntryWrite(pDevIns, pEvent); 2314 2313 ASMAtomicAndU64(&pThis->Status.u64, ~IOMMU_STATUS_CMD_BUF_RUNNING); 2315 2314 … … 2332 2331 * @param pEvtIllegalDte Where to store the initialized event. 2333 2332 */ 2334 static void iommuAmdI nitIllegalDteEvent(uint16_t uDevId, uint64_t uIova, bool fRsvdNotZero, IOMMUOP enmOp,2333 static void iommuAmdIllegalDteEventInit(uint16_t uDevId, uint64_t uIova, bool fRsvdNotZero, IOMMUOP enmOp, 2335 2334 PEVT_ILLEGAL_DTE_T pEvtIllegalDte) 2336 2335 { … … 2359 2358 * @thread Any. 2360 2359 */ 2361 static void iommuAmd RaiseIllegalDteEvent(PPDMDEVINS pDevIns, IOMMUOP enmOp, PCEVT_ILLEGAL_DTE_T pEvtIllegalDte,2360 static void iommuAmdIllegalDteEventRaise(PPDMDEVINS pDevIns, IOMMUOP enmOp, PCEVT_ILLEGAL_DTE_T pEvtIllegalDte, 2362 2361 EVT_ILLEGAL_DTE_TYPE_T enmEvtType) 2363 2362 { … … 2367 2366 IOMMU_LOCK_NORET(pDevIns); 2368 2367 2369 iommuAmd WriteEvtLogEntry(pDevIns, pEvent);2368 iommuAmdEvtLogEntryWrite(pDevIns, pEvent); 2370 2369 if (enmOp != IOMMUOP_CMD) 2371 2370 iommuAmdSetPciTargetAbort(pDevIns); … … 2395 2394 * @param pEvtIoPageFault Where to store the initialized event. 2396 2395 */ 2397 static void iommuAmdI nitIoPageFaultEvent(uint16_t uDevId, uint16_t uDomainId, uint64_t uIova, bool fPresent, bool fRsvdNotZero,2396 static void iommuAmdIoPageFaultEventInit(uint16_t uDevId, uint16_t uDomainId, uint64_t uIova, bool fPresent, bool fRsvdNotZero, 2398 2397 bool fPermDenied, IOMMUOP enmOp, PEVT_IO_PAGE_FAULT_T pEvtIoPageFault) 2399 2398 { … … 2431 2430 * @thread Any. 2432 2431 */ 2433 static void iommuAmd RaiseIoPageFaultEvent(PPDMDEVINS pDevIns, PCDTE_T pDte, PCIRTE_T pIrte, IOMMUOP enmOp,2432 static void iommuAmdIoPageFaultEventRaise(PPDMDEVINS pDevIns, PCDTE_T pDte, PCIRTE_T pIrte, IOMMUOP enmOp, 2434 2433 PCEVT_IO_PAGE_FAULT_T pEvtIoPageFault, EVT_IO_PAGE_FAULT_TYPE_T enmEvtType) 2435 2434 { … … 2488 2487 { 2489 2488 if (!fSuppressEvtLogging) 2490 iommuAmd WriteEvtLogEntry(pDevIns, pEvent);2489 iommuAmdEvtLogEntryWrite(pDevIns, pEvent); 2491 2490 if (enmOp != IOMMUOP_CMD) 2492 2491 iommuAmdSetPciTargetAbort(pDevIns); … … 2499 2498 /* Access is blocked and only creates an event log entry. */ 2500 2499 if (!fSuppressEvtLogging) 2501 iommuAmd WriteEvtLogEntry(pDevIns, pEvent);2500 iommuAmdEvtLogEntryWrite(pDevIns, pEvent); 2502 2501 break; 2503 2502 } … … 2513 2512 Assert(enmOp == IOMMUOP_INTR_REQ); 2514 2513 if (!fSuppressEvtLogging) 2515 iommuAmd WriteEvtLogEntry(pDevIns, pEvent);2514 iommuAmdEvtLogEntryWrite(pDevIns, pEvent); 2516 2515 iommuAmdSetPciTargetAbort(pDevIns); 2517 2516 break; … … 2531 2530 Assert(enmOp != IOMMUOP_TRANSLATE_REQ); /** @todo IOMMU: We don't support translation requests yet. */ 2532 2531 if (!fSuppressEvtLogging) 2533 iommuAmd WriteEvtLogEntry(pDevIns, pEvent);2532 iommuAmdEvtLogEntryWrite(pDevIns, pEvent); 2534 2533 if ( enmOp == IOMMUOP_MEM_READ 2535 2534 || enmOp == IOMMUOP_MEM_WRITE) … … 2576 2575 2577 2576 /** 2578 * Reads a device table entry f rom guest memorygiven the device ID.2577 * Reads a device table entry for the given the device ID. 2579 2578 * 2580 2579 * @returns VBox status code. … … 2586 2585 * @thread Any. 2587 2586 */ 2588 static int iommuAmd ReadDte(PPDMDEVINS pDevIns, uint16_t uDevId, IOMMUOP enmOp, PDTE_T pDte)2587 static int iommuAmdDteRead(PPDMDEVINS pDevIns, uint16_t uDevId, IOMMUOP enmOp, PDTE_T pDte) 2589 2588 { 2590 2589 PCIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU); … … 2617 2616 2618 2617 EVT_DEV_TAB_HW_ERROR_T EvtDevTabHwErr; 2619 iommuAmd InitDevTabHwErrorEvent(uDevId, GCPhysDte, enmOp, &EvtDevTabHwErr);2620 iommuAmd RaiseDevTabHwErrorEvent(pDevIns, enmOp, &EvtDevTabHwErr);2618 iommuAmdDevTabHwErrorEventInit(uDevId, GCPhysDte, enmOp, &EvtDevTabHwErr); 2619 iommuAmdDevTabHwErrorEventRaise(pDevIns, enmOp, &EvtDevTabHwErr); 2621 2620 return VERR_IOMMU_DTE_READ_FAILED; 2622 2621 } … … 2624 2623 /* Raise an I/O page fault for out-of-bounds acccess. */ 2625 2624 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 2626 iommuAmdI nitIoPageFaultEvent(uDevId, 0 /* uDomainId */, 0 /* uIova */, false /* fPresent */, false /* fRsvdNotZero */,2625 iommuAmdIoPageFaultEventInit(uDevId, 0 /* uDomainId */, 0 /* uIova */, false /* fPresent */, false /* fRsvdNotZero */, 2627 2626 false /* fPermDenied */, enmOp, &EvtIoPageFault); 2628 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, kIoPageFaultType_DevId_Invalid);2627 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, kIoPageFaultType_DevId_Invalid); 2629 2628 return VERR_IOMMU_DTE_BAD_OFFSET; 2630 2629 } … … 2648 2647 * @thread Any. 2649 2648 */ 2650 static int iommuAmd WalkIoPageTable(PPDMDEVINS pDevIns, uint16_t uDevId, uint64_t uIova, uint8_t fAccess, PCDTE_T pDte,2649 static int iommuAmdIoPageTableWalk(PPDMDEVINS pDevIns, uint16_t uDevId, uint64_t uIova, uint8_t fAccess, PCDTE_T pDte, 2651 2650 IOMMUOP enmOp, PIOWALKRESULT pWalkResult) 2652 2651 { … … 2666 2665 LogFunc(("Translation valid bit not set -> IOPF\n")); 2667 2666 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 2668 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, uIova, false /* fPresent */, false /* fRsvdNotZero */,2667 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, uIova, false /* fPresent */, false /* fRsvdNotZero */, 2669 2668 false /* fPermDenied */, enmOp, &EvtIoPageFault); 2670 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault,2669 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, 2671 2670 kIoPageFaultType_DteTranslationDisabled); 2672 2671 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; … … 2701 2700 LogFunc(("Invalid root page table level %#x (uDevId=%#x) -> IOPF\n", uMaxLevel, uDevId)); 2702 2701 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 2703 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */,2702 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */, 2704 2703 false /* fPermDenied */, enmOp, &EvtIoPageFault); 2705 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault,2704 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, 2706 2705 kIoPageFaultType_PteInvalidLvlEncoding); 2707 2706 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; … … 2716 2715 LogFunc(("Permission denied (fAccess=%#x fRootPtePerm=%#x) -> IOPF\n", fAccess, fRootPtePerm)); 2717 2716 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 2718 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */,2717 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */, 2719 2718 true /* fPermDenied */, enmOp, &EvtIoPageFault); 2720 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, kIoPageFaultType_PermDenied);2719 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, kIoPageFaultType_PermDenied); 2721 2720 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; 2722 2721 } … … 2761 2760 LogFunc(("Failed to read page table entry at %#RGp. rc=%Rrc -> PageTabHwError\n", GCPhysPtEntity, rc)); 2762 2761 EVT_PAGE_TAB_HW_ERR_T EvtPageTabHwErr; 2763 iommuAmd InitPageTabHwErrorEvent(uDevId, pDte->n.u16DomainId, GCPhysPtEntity, enmOp, &EvtPageTabHwErr);2764 iommuAmd RaisePageTabHwErrorEvent(pDevIns, enmOp, &EvtPageTabHwErr);2762 iommuAmdPageTabHwErrorEventInit(uDevId, pDte->n.u16DomainId, GCPhysPtEntity, enmOp, &EvtPageTabHwErr); 2763 iommuAmdPageTabHwErrorEventRaise(pDevIns, enmOp, &EvtPageTabHwErr); 2765 2764 return VERR_IOMMU_IPE_2; 2766 2765 } … … 2774 2773 LogFunc(("Page table entry not present (uDevId=%#x) -> IOPF\n", uDevId)); 2775 2774 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 2776 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, uIova, false /* fPresent */, false /* fRsvdNotZero */,2775 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, uIova, false /* fPresent */, false /* fRsvdNotZero */, 2777 2776 false /* fPermDenied */, enmOp, &EvtIoPageFault); 2778 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, kIoPageFaultType_PermDenied);2777 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, kIoPageFaultType_PermDenied); 2779 2778 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; 2780 2779 } … … 2788 2787 LogFunc(("Page table entry access denied (uDevId=%#x fAccess=%#x fPtePerm=%#x) -> IOPF\n", uDevId, fAccess, fPtePerm)); 2789 2788 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 2790 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */,2789 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */, 2791 2790 true /* fPermDenied */, enmOp, &EvtIoPageFault); 2792 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, kIoPageFaultType_PermDenied);2791 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, kIoPageFaultType_PermDenied); 2793 2792 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; 2794 2793 } … … 2825 2824 LogFunc(("Page size invalid cShift=%#x -> IOPF\n", cShift)); 2826 2825 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 2827 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */,2826 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */, 2828 2827 false /* fPermDenied */, enmOp, &EvtIoPageFault); 2829 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault,2828 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, 2830 2829 kIoPageFaultType_PteInvalidPageSize); 2831 2830 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; … … 2840 2839 LogFunc(("Next level of PDE invalid uNextLevel=%#x -> IOPF\n", uNextLevel)); 2841 2840 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 2842 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */,2841 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */, 2843 2842 false /* fPermDenied */, enmOp, &EvtIoPageFault); 2844 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault,2843 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, 2845 2844 kIoPageFaultType_PteInvalidLvlEncoding); 2846 2845 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; … … 2857 2856 LogFunc(("Next level (%#x) must be less than the current level (%#x) -> IOPF\n", uNextLevel, uLevel)); 2858 2857 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 2859 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */,2858 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */, 2860 2859 false /* fPermDenied */, enmOp, &EvtIoPageFault); 2861 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault,2860 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, 2862 2861 kIoPageFaultType_PteInvalidLvlEncoding); 2863 2862 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; … … 2875 2874 LogFunc(("IOVA of skipped levels are not zero %#RX64 (SkipMask=%#RX64) -> IOPF\n", uIova, uIovaSkipMask)); 2876 2875 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 2877 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */,2876 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, uIova, true /* fPresent */, false /* fRsvdNotZero */, 2878 2877 false /* fPermDenied */, enmOp, &EvtIoPageFault); 2879 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault,2878 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, 2880 2879 kIoPageFaultType_SkippedLevelIovaNotZero); 2881 2880 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; … … 2904 2903 * @thread Any. 2905 2904 */ 2906 static int iommuAmd LookupDeviceTable(PPDMDEVINS pDevIns, uint16_t uDevId, uint64_t uIova, size_t cbAccess, uint8_t fAccess,2907 2905 static int iommuAmdDteLookup(PPDMDEVINS pDevIns, uint16_t uDevId, uint64_t uIova, size_t cbAccess, uint8_t fAccess, 2906 IOMMUOP enmOp, PRTGCPHYS pGCPhysSpa, size_t *pcbContiguous) 2908 2907 { 2909 2908 PIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU); … … 2915 2914 /* Read the device table entry from memory. */ 2916 2915 DTE_T Dte; 2917 int rc = iommuAmd ReadDte(pDevIns, uDevId, enmOp, &Dte);2916 int rc = iommuAmdDteRead(pDevIns, uDevId, enmOp, &Dte); 2918 2917 if (RT_SUCCESS(rc)) 2919 2918 { … … 2939 2938 IOWALKRESULT WalkResult; 2940 2939 RT_ZERO(WalkResult); 2941 rc = iommuAmd WalkIoPageTable(pDevIns, uDevId, uIovaPage, fAccess, &Dte, enmOp, &WalkResult);2940 rc = iommuAmdIoPageTableWalk(pDevIns, uDevId, uIovaPage, fAccess, &Dte, enmOp, &WalkResult); 2942 2941 if (RT_SUCCESS(rc)) 2943 2942 { … … 3003 3002 LogFunc(("Invalid DTE reserved bits (u64[0]=%#RX64 u64[1]=%#RX64) -> Illegal DTE\n", fRsvd0, fRsvd1)); 3004 3003 EVT_ILLEGAL_DTE_T Event; 3005 iommuAmdI nitIllegalDteEvent(uDevId, uIova, true /* fRsvdNotZero */, enmOp, &Event);3006 iommuAmd RaiseIllegalDteEvent(pDevIns, enmOp, &Event, kIllegalDteType_RsvdNotZero);3004 iommuAmdIllegalDteEventInit(uDevId, uIova, true /* fRsvdNotZero */, enmOp, &Event); 3005 iommuAmdIllegalDteEventRaise(pDevIns, enmOp, &Event, kIllegalDteType_RsvdNotZero); 3007 3006 rc = VERR_IOMMU_ADDR_TRANSLATION_FAILED; 3008 3007 } … … 3088 3087 3089 3088 /* Lookup the IOVA from the device table. */ 3090 int rc = iommuAmd LookupDeviceTable(pDevIns, uDevId, uIova, cbAccess, fAccess, enmOp, pGCPhysSpa, pcbContiguous);3089 int rc = iommuAmdDteLookup(pDevIns, uDevId, uIova, cbAccess, fAccess, enmOp, pGCPhysSpa, pcbContiguous); 3091 3090 if (RT_SUCCESS(rc)) 3092 3091 { /* likely */ } … … 3160 3159 { 3161 3160 size_t cbContig; 3162 int rc = iommuAmdLookupDeviceTable(pDevIns, uDevId, pauIovas[i], X86_PAGE_SIZE, fAccess, enmOp, &paGCPhysSpa[i], 3163 &cbContig); 3161 int rc = iommuAmdDteLookup(pDevIns, uDevId, pauIovas[i], X86_PAGE_SIZE, fAccess, enmOp, &paGCPhysSpa[i], &cbContig); 3164 3162 if (RT_SUCCESS(rc)) 3165 3163 { /* likely */ } … … 3198 3196 * @thread Any. 3199 3197 */ 3200 static int iommuAmd ReadIrte(PPDMDEVINS pDevIns, uint16_t uDevId, PCDTE_T pDte, RTGCPHYS GCPhysIn, uint32_t uDataIn,3198 static int iommuAmdIrteRead(PPDMDEVINS pDevIns, uint16_t uDevId, PCDTE_T pDte, RTGCPHYS GCPhysIn, uint32_t uDataIn, 3201 3199 IOMMUOP enmOp, PIRTE_T pIrte) 3202 3200 { … … 3218 3216 3219 3217 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 3220 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, GCPhysIn, false /* fPresent */, false /* fRsvdNotZero */,3218 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, GCPhysIn, false /* fPresent */, false /* fRsvdNotZero */, 3221 3219 false /* fPermDenied */, enmOp, &EvtIoPageFault); 3222 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, kIoPageFaultType_IrteAddrInvalid);3220 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, NULL /* pIrte */, enmOp, &EvtIoPageFault, kIoPageFaultType_IrteAddrInvalid); 3223 3221 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; 3224 3222 } … … 3252 3250 * @thread Any. 3253 3251 */ 3254 static int iommuAmd RemapIntr(PPDMDEVINS pDevIns, uint16_t uDevId, PCDTE_T pDte, IOMMUOP enmOp, PCMSIMSG pMsiIn,3252 static int iommuAmdIntrRemap(PPDMDEVINS pDevIns, uint16_t uDevId, PCDTE_T pDte, IOMMUOP enmOp, PCMSIMSG pMsiIn, 3255 3253 PMSIMSG pMsiOut) 3256 3254 { … … 3258 3256 3259 3257 IRTE_T Irte; 3260 int rc = iommuAmd ReadIrte(pDevIns, uDevId, pDte, pMsiIn->Addr.u64, pMsiIn->Data.u32, enmOp, &Irte);3258 int rc = iommuAmdIrteRead(pDevIns, uDevId, pDte, pMsiIn->Addr.u64, pMsiIn->Data.u32, enmOp, &Irte); 3261 3259 if (RT_SUCCESS(rc)) 3262 3260 { … … 3281 3279 LogFunc(("Interrupt type (%#x) invalid -> IOPF\n", Irte.n.u3IntrType)); 3282 3280 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 3283 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, pMsiIn->Addr.u64, Irte.n.u1RemapEnable,3281 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, pMsiIn->Addr.u64, Irte.n.u1RemapEnable, 3284 3282 true /* fRsvdNotZero */, false /* fPermDenied */, enmOp, &EvtIoPageFault); 3285 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, &Irte, enmOp, &EvtIoPageFault, kIoPageFaultType_IrteRsvdIntType);3283 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, &Irte, enmOp, &EvtIoPageFault, kIoPageFaultType_IrteRsvdIntType); 3286 3284 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; 3287 3285 } … … 3289 3287 LogFunc(("Guest mode not supported -> IOPF\n")); 3290 3288 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 3291 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, pMsiIn->Addr.u64, Irte.n.u1RemapEnable,3289 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, pMsiIn->Addr.u64, Irte.n.u1RemapEnable, 3292 3290 true /* fRsvdNotZero */, false /* fPermDenied */, enmOp, &EvtIoPageFault); 3293 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, &Irte, enmOp, &EvtIoPageFault, kIoPageFaultType_IrteRsvdNotZero);3291 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, &Irte, enmOp, &EvtIoPageFault, kIoPageFaultType_IrteRsvdNotZero); 3294 3292 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; 3295 3293 } … … 3297 3295 LogFunc(("Remapping disabled -> IOPF\n")); 3298 3296 EVT_IO_PAGE_FAULT_T EvtIoPageFault; 3299 iommuAmdI nitIoPageFaultEvent(uDevId, pDte->n.u16DomainId, pMsiIn->Addr.u64, Irte.n.u1RemapEnable,3297 iommuAmdIoPageFaultEventInit(uDevId, pDte->n.u16DomainId, pMsiIn->Addr.u64, Irte.n.u1RemapEnable, 3300 3298 false /* fRsvdNotZero */, false /* fPermDenied */, enmOp, &EvtIoPageFault); 3301 iommuAmd RaiseIoPageFaultEvent(pDevIns, pDte, &Irte, enmOp, &EvtIoPageFault, kIoPageFaultType_IrteRemapEn);3299 iommuAmdIoPageFaultEventRaise(pDevIns, pDte, &Irte, enmOp, &EvtIoPageFault, kIoPageFaultType_IrteRemapEn); 3302 3300 return VERR_IOMMU_ADDR_TRANSLATION_FAILED; 3303 3301 } … … 3319 3317 * @thread Any. 3320 3318 */ 3321 static int iommuAmd LookupIntrTable(PPDMDEVINS pDevIns, uint16_t uDevId, IOMMUOP enmOp, PCMSIMSG pMsiIn, PMSIMSG pMsiOut)3319 static int iommuAmdIntrTableLookup(PPDMDEVINS pDevIns, uint16_t uDevId, IOMMUOP enmOp, PCMSIMSG pMsiIn, PMSIMSG pMsiOut) 3322 3320 { 3323 3321 /* Read the device table entry from memory. */ … … 3327 3325 3328 3326 DTE_T Dte; 3329 int rc = iommuAmd ReadDte(pDevIns, uDevId, enmOp, &Dte);3327 int rc = iommuAmdDteRead(pDevIns, uDevId, enmOp, &Dte); 3330 3328 if (RT_SUCCESS(rc)) 3331 3329 { … … 3344 3342 fRsvd1)); 3345 3343 EVT_ILLEGAL_DTE_T Event; 3346 iommuAmdI nitIllegalDteEvent(uDevId, pMsiIn->Addr.u64, true /* fRsvdNotZero */, enmOp, &Event);3347 iommuAmd RaiseIllegalDteEvent(pDevIns, enmOp, &Event, kIllegalDteType_RsvdNotZero);3344 iommuAmdIllegalDteEventInit(uDevId, pMsiIn->Addr.u64, true /* fRsvdNotZero */, enmOp, &Event); 3345 iommuAmdIllegalDteEventRaise(pDevIns, enmOp, &Event, kIllegalDteType_RsvdNotZero); 3348 3346 return VERR_IOMMU_INTR_REMAP_FAILED; 3349 3347 } … … 3397 3395 NOREF(pThis); 3398 3396 3399 return iommuAmd RemapIntr(pDevIns, uDevId, &Dte, enmOp, pMsiIn, pMsiOut);3397 return iommuAmdIntrRemap(pDevIns, uDevId, &Dte, enmOp, pMsiIn, pMsiOut); 3400 3398 } 3401 3399 3402 3400 LogFunc(("Invalid interrupt table length %#x -> Illegal DTE\n", uIntrTabLen)); 3403 3401 EVT_ILLEGAL_DTE_T Event; 3404 iommuAmdI nitIllegalDteEvent(uDevId, pMsiIn->Addr.u64, false /* fRsvdNotZero */, enmOp, &Event);3405 iommuAmd RaiseIllegalDteEvent(pDevIns, enmOp, &Event, kIllegalDteType_RsvdIntTabLen);3402 iommuAmdIllegalDteEventInit(uDevId, pMsiIn->Addr.u64, false /* fRsvdNotZero */, enmOp, &Event); 3403 iommuAmdIllegalDteEventRaise(pDevIns, enmOp, &Event, kIllegalDteType_RsvdIntTabLen); 3406 3404 return VERR_IOMMU_INTR_REMAP_FAILED; 3407 3405 } … … 3424 3422 LogFunc(("IntCtl mode invalid %#x -> Illegal DTE\n", uIntrCtrl)); 3425 3423 EVT_ILLEGAL_DTE_T Event; 3426 iommuAmdI nitIllegalDteEvent(uDevId, pMsiIn->Addr.u64, true /* fRsvdNotZero */, enmOp, &Event);3427 iommuAmd RaiseIllegalDteEvent(pDevIns, enmOp, &Event, kIllegalDteType_RsvdIntCtl);3424 iommuAmdIllegalDteEventInit(uDevId, pMsiIn->Addr.u64, true /* fRsvdNotZero */, enmOp, &Event); 3425 iommuAmdIllegalDteEventRaise(pDevIns, enmOp, &Event, kIllegalDteType_RsvdIntCtl); 3428 3426 return VERR_IOMMU_INTR_REMAP_FAILED; 3429 3427 } … … 3507 3505 /** @todo Cache? */ 3508 3506 3509 return iommuAmd LookupIntrTable(pDevIns, uDevId, IOMMUOP_INTR_REQ, pMsiIn, pMsiOut);3507 return iommuAmdIntrTableLookup(pDevIns, uDevId, IOMMUOP_INTR_REQ, pMsiIn, pMsiOut); 3510 3508 } 3511 3509 … … 3528 3526 3529 3527 uint64_t const uValue = cb == 8 ? *(uint64_t const *)pv : *(uint32_t const *)pv; 3530 return iommuAmd WriteRegister(pDevIns, off, cb, uValue);3528 return iommuAmdRegisterWrite(pDevIns, off, cb, uValue); 3531 3529 } 3532 3530 … … 3545 3543 3546 3544 uint64_t uResult; 3547 VBOXSTRICTRC rcStrict = iommuAmdRe adRegister(pDevIns, off, &uResult);3545 VBOXSTRICTRC rcStrict = iommuAmdRegisterRead(pDevIns, off, &uResult); 3548 3546 if (cb == 8) 3549 3547 *(uint64_t *)pv = uResult; … … 3567 3565 * @thread Command thread. 3568 3566 */ 3569 static int iommuAmdR3 ProcessCmd(PPDMDEVINS pDevIns, PCCMD_GENERIC_T pCmd, RTGCPHYS GCPhysCmd, PEVT_GENERIC_T pEvtError)3567 static int iommuAmdR3CmdProcess(PPDMDEVINS pDevIns, PCCMD_GENERIC_T pCmd, RTGCPHYS GCPhysCmd, PEVT_GENERIC_T pEvtError) 3570 3568 { 3571 3569 IOMMU_ASSERT_NOT_LOCKED(pDevIns); … … 3597 3595 LogFunc(("Cmd(%#x): Failed to write StoreData (%#RX64) to %#RGp, rc=%Rrc\n", bCmd, u64Data, 3598 3596 GCPhysStore, rc)); 3599 iommuAmd InitCmdHwErrorEvent(GCPhysStore, (PEVT_CMD_HW_ERR_T)pEvtError);3597 iommuAmdCmdHwErrorEventInit(GCPhysStore, (PEVT_CMD_HW_ERR_T)pEvtError); 3600 3598 return VERR_IOMMU_CMD_HW_ERROR; 3601 3599 } … … 3612 3610 3613 3611 if (fRaiseInt) 3614 iommuAmd RaiseMsiInterrupt(pDevIns);3612 iommuAmdMsiInterruptRaise(pDevIns); 3615 3613 } 3616 3614 return VINF_SUCCESS; 3617 3615 } 3618 iommuAmdI nitIllegalCmdEvent(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError);3616 iommuAmdIllegalCmdEventInit(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError); 3619 3617 return VERR_IOMMU_CMD_INVALID_FORMAT; 3620 3618 } … … 3656 3654 return VINF_SUCCESS; 3657 3655 } 3658 iommuAmdI nitIllegalCmdEvent(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError);3656 iommuAmdIllegalCmdEventInit(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError); 3659 3657 return VERR_IOMMU_CMD_INVALID_FORMAT; 3660 3658 #else … … 3673 3671 return VERR_NOT_IMPLEMENTED; 3674 3672 } 3675 iommuAmdI nitIllegalCmdEvent(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError);3673 iommuAmdIllegalCmdEventInit(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError); 3676 3674 return VERR_IOMMU_CMD_NOT_SUPPORTED; 3677 3675 } … … 3693 3691 return VINF_SUCCESS; 3694 3692 } 3695 iommuAmdI nitIllegalCmdEvent(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError);3693 iommuAmdIllegalCmdEventInit(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError); 3696 3694 return VERR_IOMMU_CMD_NOT_SUPPORTED; 3697 3695 } … … 3703 3701 /* We don't support PPR requests yet. */ 3704 3702 Assert(!pThis->ExtFeat.n.u1PprSup); 3705 iommuAmdI nitIllegalCmdEvent(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError);3703 iommuAmdIllegalCmdEventInit(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError); 3706 3704 return VERR_IOMMU_CMD_NOT_SUPPORTED; 3707 3705 } … … 3716 3714 return VINF_SUCCESS; 3717 3715 } 3718 iommuAmdI nitIllegalCmdEvent(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError);3716 iommuAmdIllegalCmdEventInit(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError); 3719 3717 return VERR_IOMMU_CMD_NOT_SUPPORTED; 3720 3718 } … … 3723 3721 STAM_COUNTER_DEC(&pThis->StatCmd); 3724 3722 LogFunc(("Cmd(%#x): Unrecognized\n", bCmd)); 3725 iommuAmdI nitIllegalCmdEvent(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError);3723 iommuAmdIllegalCmdEventInit(GCPhysCmd, (PEVT_ILLEGAL_CMD_ERR_T)pEvtError); 3726 3724 return VERR_IOMMU_CMD_NOT_SUPPORTED; 3727 3725 } … … 3812 3810 { 3813 3811 PCCMD_GENERIC_T pCmd = (PCCMD_GENERIC_T)((uintptr_t)pvCmds + offHead); 3814 rc = iommuAmdR3 ProcessCmd(pDevIns, pCmd, GCPhysCmdBufBase + offHead, &EvtError);3812 rc = iommuAmdR3CmdProcess(pDevIns, pCmd, GCPhysCmdBufBase + offHead, &EvtError); 3815 3813 if (RT_FAILURE(rc)) 3816 3814 { … … 3819 3817 { 3820 3818 Assert(EvtError.n.u4EvtCode == IOMMU_EVT_ILLEGAL_CMD_ERROR); 3821 iommuAmd RaiseIllegalCmdEvent(pDevIns, (PCEVT_ILLEGAL_CMD_ERR_T)&EvtError);3819 iommuAmdIllegalCmdEventRaise(pDevIns, (PCEVT_ILLEGAL_CMD_ERR_T)&EvtError); 3822 3820 } 3823 3821 else if (rc == VERR_IOMMU_CMD_HW_ERROR) … … 3825 3823 Assert(EvtError.n.u4EvtCode == IOMMU_EVT_COMMAND_HW_ERROR); 3826 3824 LogFunc(("Raising command hardware error. Cmd=%#x -> COMMAND_HW_ERROR\n", pCmd->n.u4Opcode)); 3827 iommuAmd RaiseCmdHwErrorEvent(pDevIns, (PCEVT_CMD_HW_ERR_T)&EvtError);3825 iommuAmdCmdHwErrorEventRaise(pDevIns, (PCEVT_CMD_HW_ERR_T)&EvtError); 3828 3826 } 3829 3827 break; … … 3836 3834 LogFunc(("Failed to read command at %#RGp. rc=%Rrc -> COMMAND_HW_ERROR\n", GCPhysCmdBufBase, rc)); 3837 3835 EVT_CMD_HW_ERR_T EvtCmdHwErr; 3838 iommuAmd InitCmdHwErrorEvent(GCPhysCmdBufBase, &EvtCmdHwErr);3839 iommuAmd RaiseCmdHwErrorEvent(pDevIns, &EvtCmdHwErr);3836 iommuAmdCmdHwErrorEventInit(GCPhysCmdBufBase, &EvtCmdHwErr); 3837 iommuAmdCmdHwErrorEventRaise(pDevIns, &EvtCmdHwErr); 3840 3838 IOMMU_UNLOCK(pDevIns); 3841 3839 } … … 4638 4636 { 4639 4637 DTE_T Dte; 4640 rc = iommuAmd ReadDte(pDevIns, uDevId, IOMMUOP_TRANSLATE_REQ, &Dte);4638 rc = iommuAmdDteRead(pDevIns, uDevId, IOMMUOP_TRANSLATE_REQ, &Dte); 4641 4639 if (RT_SUCCESS(rc)) 4642 4640 {
Note:
See TracChangeset
for help on using the changeset viewer.