VirtualBox

Changeset 89236 in vbox


Ignore:
Timestamp:
May 24, 2021 9:30:08 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
144579
Message:

Intel IOMMU: bugref:9967 Address translation, WIP.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/iommu-intel.h

    r89235 r89236  
    23222322 * In accordance with the Intel spec.
    23232323 * @{ */
    2324 typedef enum VTDINTRFAULT
     2324typedef enum VTDIRFAULT
    23252325{
    23262326    /** Reserved bits invalid in remappable interrupt. */
    2327     VTDINTRFAULT_REMAPPABLE_INTR_RSVD = 0x20,
     2327    VTDIRFAULT_REMAPPABLE_INTR_RSVD = 0x20,
     2328
    23282329    /** Interrupt index for remappable interrupt exceeds table size or referenced
    23292330     *  address above host address width (HAW) */
    2330     VTDINTRFAULT_INTR_INDEX_INVALID = 0x21,
     2331    VTDIRFAULT_INTR_INDEX_INVALID = 0x21,
     2332
    23312333    /** The IRTE is not present.  */
    2332     VTDINTRFAULT_IRTE_NOT_PRESENT = 0x22,
     2334    VTDIRFAULT_IRTE_NOT_PRESENT = 0x22,
    23332335    /** Reading IRTE from memory failed. */
    2334     VTDINTRFAULT_IRTE_READ_FAILED = 0x23,
     2336    VTDIRFAULT_IRTE_READ_FAILED = 0x23,
    23352337    /** IRTE reserved bits invalid for an IRTE with Present bit set. */
    2336     VTDINTRFAULT_IRTE_PRESENT_RSVD = 0x24,
     2338    VTDIRFAULT_IRTE_PRESENT_RSVD = 0x24,
     2339
    23372340    /** Compatibility format interrupt (CFI) blocked due to EIME being enabled or CFIs
    23382341     *  were disabled. */
    2339     VTDINTRFAULT_CFI_BLOCKED = 0x25,
     2342    VTDIRFAULT_CFI_BLOCKED = 0x25,
     2343
    23402344    /** IRTE SID, SVT, SQ bits invalid for an IRTE with Present bit set. */
    2341     VTDINTRFAULT_IRTE_PRESENT_INVALID = 0x26,
     2345    VTDIRFAULT_IRTE_PRESENT_INVALID = 0x26,
     2346
    23422347    /** Reading posted interrupt descriptor (PID) failed. */
    2343     VTDINTRFAULT_PID_READ_FAILED = 0x27,
     2348    VTDIRFAULT_PID_READ_FAILED = 0x27,
    23442349    /** PID reserved bits invalid. */
    2345     VTDINTRFAULT_PID_RSVD = 0x28,
     2350    VTDIRFAULT_PID_RSVD = 0x28,
     2351
    23462352    /** Untranslated interrupt requested (without PASID) is invalid. */
    2347     VTDINTRFAULT_IR_WITHOUT_PASID_INVALID = 0x29
    2348 } VTDINTRFAULT;
    2349 AssertCompileSize(VTDINTRFAULT, 4);
     2353    VTDIRFAULT_IR_WITHOUT_PASID_INVALID = 0x29
     2354} VTDIRFAULT;
     2355AssertCompileSize(VTDIRFAULT, 4);
    23502356/** @} */
    23512357
     
    23542360 * In accordance with the Intel spec.
    23552361 * @{ */
    2356 typedef enum VTDADDRFAULT
     2362typedef enum VTDATFAULT
    23572363{
    23582364    /* Legacy root table faults (LRT). */
    2359     VTDADDRFAULT_LRT_1   = 0x8,
    2360     VTDADDRFAULT_LRT_2   = 0x1,
    2361     VTDADDRFAULT_LRT_3   = 0xa,
     2365    VTDATFAULT_LRT_1   = 0x8,
     2366    VTDATFAULT_LRT_2   = 0x1,
     2367    VTDATFAULT_LRT_3   = 0xa,
    23622368
    23632369    /* Legacy Context-Table Faults (LCT). */
    2364     VTDADDRFAULT_LCT_1   = 0x9,
    2365     VTDADDRFAULT_LCT_2   = 0x2,
    2366     VTDADDRFAULT_LCT_3   = 0xb,
    2367     VTDADDRFAULT_LCT_4_0 = 0x3,
    2368     VTDADDRFAULT_LCT_4_1 = 0x3,
    2369     VTDADDRFAULT_LCT_4_2 = 0x3,
    2370     VTDADDRFAULT_LCT_4_3 = 0x3,
    2371     VTDADDRFAULT_LCT_5   = 0xd,
     2370    VTDATFAULT_LCT_1   = 0x9,
     2371    VTDATFAULT_LCT_2   = 0x2,
     2372    VTDATFAULT_LCT_3   = 0xb,
     2373    VTDATFAULT_LCT_4_0 = 0x3,
     2374    VTDATFAULT_LCT_4_1 = 0x3,
     2375    VTDATFAULT_LCT_4_2 = 0x3,
     2376    VTDATFAULT_LCT_4_3 = 0x3,
     2377    VTDATFAULT_LCT_5   = 0xd,
    23722378
    23732379    /* Legacy Second-Level Table Faults (LSL). */
    2374     VTDADDRFAULT_LSL_1   = 0x7,
    2375     VTDADDRFAULT_LSL_2   = 0xc,
     2380    VTDATFAULT_LSL_1   = 0x7,
     2381    VTDATFAULT_LSL_2   = 0xc,
    23762382
    23772383    /* Legacy General Faults (LGN). */
    2378     VTDADDRFAULT_LGN_1_0 = 0x4,
    2379     VTDADDRFAULT_LGN_1_1 = 0x4,
    2380     VTDADDRFAULT_LGN_1_2 = 0x4,
    2381     VTDADDRFAULT_LGN_1_3 = 0x4,
    2382     VTDADDRFAULT_LGN_2   = 0x5,
    2383     VTDADDRFAULT_LGN_3   = 0x6,
    2384     VTDADDRFAULT_LGN_4   = 0xe,
     2384    VTDATFAULT_LGN_1_0 = 0x4,
     2385    VTDATFAULT_LGN_1_1 = 0x4,
     2386    VTDATFAULT_LGN_1_2 = 0x4,
     2387    VTDATFAULT_LGN_1_3 = 0x4,
     2388    VTDATFAULT_LGN_2   = 0x5,
     2389    VTDATFAULT_LGN_3   = 0x6,
     2390    VTDATFAULT_LGN_4   = 0xe,
    23852391
    23862392    /* Root-Table Address Register Faults (RTA). */
    2387     VTDADDRFAULT_RTA_1_0 = 0x30,
    2388     VTDADDRFAULT_RTA_1_1 = 0x30,
    2389     VTDADDRFAULT_RTA_1_2 = 0x30,
    2390     VTDADDRFAULT_RTA_1_3 = 0x30,
    2391     VTDADDRFAULT_RTA_2   = 0x31,
    2392     VTDADDRFAULT_RTA_3   = 0x32,
    2393     VTDADDRFAULT_RTA_4   = 0x33,
     2393    VTDATFAULT_RTA_1_0 = 0x30,
     2394    VTDATFAULT_RTA_1_1 = 0x30,
     2395    VTDATFAULT_RTA_1_2 = 0x30,
     2396    VTDATFAULT_RTA_1_3 = 0x30,
     2397    VTDATFAULT_RTA_2   = 0x31,
     2398    VTDATFAULT_RTA_3   = 0x32,
     2399    VTDATFAULT_RTA_4   = 0x33,
    23942400
    23952401    /* Scalable-Mode Root-Table Faults (SRT). */
    2396     VTDADDRFAULT_SRT_1   = 0x38,
    2397     VTDADDRFAULT_SRT_2   = 0x39,
    2398     VTDADDRFAULT_SRT_3   = 0x3a,
     2402    VTDATFAULT_SRT_1   = 0x38,
     2403    VTDATFAULT_SRT_2   = 0x39,
     2404    VTDATFAULT_SRT_3   = 0x3a,
    23992405
    24002406    /* Scalable-Mode Context-Table Faults (SCT). */
    2401     VTDADDRFAULT_SCT_1   = 0x40,
    2402     VTDADDRFAULT_SCT_2   = 0x41,
    2403     VTDADDRFAULT_SCT_3   = 0x42,
    2404     VTDADDRFAULT_SCT_4_0 = 0x43,
    2405     VTDADDRFAULT_SCT_4_1 = 0x43,
    2406     VTDADDRFAULT_SCT_4_2 = 0x43,
    2407     VTDADDRFAULT_SCT_5   = 0x44,
    2408     VTDADDRFAULT_SCT_6   = 0x45,
    2409     VTDADDRFAULT_SCT_7   = 0x46,
    2410     VTDADDRFAULT_SCT_8   = 0x47,
    2411     VTDADDRFAULT_SCT_9   = 0x48,
     2407    VTDATFAULT_SCT_1   = 0x40,
     2408    VTDATFAULT_SCT_2   = 0x41,
     2409    VTDATFAULT_SCT_3   = 0x42,
     2410    VTDATFAULT_SCT_4_0 = 0x43,
     2411    VTDATFAULT_SCT_4_1 = 0x43,
     2412    VTDATFAULT_SCT_4_2 = 0x43,
     2413    VTDATFAULT_SCT_5   = 0x44,
     2414    VTDATFAULT_SCT_6   = 0x45,
     2415    VTDATFAULT_SCT_7   = 0x46,
     2416    VTDATFAULT_SCT_8   = 0x47,
     2417    VTDATFAULT_SCT_9   = 0x48,
    24122418
    24132419    /* Scalable-Mode PASID-Directory Faults (SPD). */
    2414     VTDADDRFAULT_SPD_1   = 0x50,
    2415     VTDADDRFAULT_SPD_2   = 0x51,
    2416     VTDADDRFAULT_SPD_3   = 0x52,
     2420    VTDATFAULT_SPD_1   = 0x50,
     2421    VTDATFAULT_SPD_2   = 0x51,
     2422    VTDATFAULT_SPD_3   = 0x52,
    24172423
    24182424    /* Scalable-Mode PASID-Table Faults (SPT). */
    2419     VTDADDRFAULT_SPT_1   = 0x58,
    2420     VTDADDRFAULT_SPT_2   = 0x59,
    2421     VTDADDRFAULT_SPT_3   = 0x5a,
    2422     VTDADDRFAULT_SPT_4_0 = 0x5b,
    2423     VTDADDRFAULT_SPT_4_1 = 0x5b,
    2424     VTDADDRFAULT_SPT_4_2 = 0x5b,
    2425     VTDADDRFAULT_SPT_4_3 = 0x5b,
    2426     VTDADDRFAULT_SPT_4_4 = 0x5b,
    2427     VTDADDRFAULT_SPT_5   = 0x5c,
    2428     VTDADDRFAULT_SPT_6   = 0x5d,
     2425    VTDATFAULT_SPT_1   = 0x58,
     2426    VTDATFAULT_SPT_2   = 0x59,
     2427    VTDATFAULT_SPT_3   = 0x5a,
     2428    VTDATFAULT_SPT_4_0 = 0x5b,
     2429    VTDATFAULT_SPT_4_1 = 0x5b,
     2430    VTDATFAULT_SPT_4_2 = 0x5b,
     2431    VTDATFAULT_SPT_4_3 = 0x5b,
     2432    VTDATFAULT_SPT_4_4 = 0x5b,
     2433    VTDATFAULT_SPT_5   = 0x5c,
     2434    VTDATFAULT_SPT_6   = 0x5d,
    24292435
    24302436    /* Scalable-Mode First-Level Table Faults (SFL). */
    2431     VTDADDRFAULT_SFL_1   = 0x70,
    2432     VTDADDRFAULT_SFL_2   = 0x71,
    2433     VTDADDRFAULT_SFL_3   = 0x72,
    2434     VTDADDRFAULT_SFL_4   = 0x73,
    2435     VTDADDRFAULT_SFL_5   = 0x74,
    2436     VTDADDRFAULT_SFL_6   = 0x75,
    2437     VTDADDRFAULT_SFL_7   = 0x76,
    2438     VTDADDRFAULT_SFL_8   = 0x77,
    2439     VTDADDRFAULT_SFL_9   = 0x90,
    2440     VTDADDRFAULT_SFL_10  = 0x91,
     2437    VTDATFAULT_SFL_1   = 0x70,
     2438    VTDATFAULT_SFL_2   = 0x71,
     2439    VTDATFAULT_SFL_3   = 0x72,
     2440    VTDATFAULT_SFL_4   = 0x73,
     2441    VTDATFAULT_SFL_5   = 0x74,
     2442    VTDATFAULT_SFL_6   = 0x75,
     2443    VTDATFAULT_SFL_7   = 0x76,
     2444    VTDATFAULT_SFL_8   = 0x77,
     2445    VTDATFAULT_SFL_9   = 0x90,
     2446    VTDATFAULT_SFL_10  = 0x91,
    24412447
    24422448    /* Scalable-Mode Second-Level Table Faults (SSL). */
    2443     VTDADDRFAULT_SSL_1   = 0x78,
    2444     VTDADDRFAULT_SSL_2   = 0x79,
    2445     VTDADDRFAULT_SSL_3   = 0x7a,
    2446     VTDADDRFAULT_SSL_4   = 0x7b,
    2447     VTDADDRFAULT_SSL_5   = 0x7c,
    2448     VTDADDRFAULT_SSL_6   = 0x7d,
     2449    VTDATFAULT_SSL_1   = 0x78,
     2450    VTDATFAULT_SSL_2   = 0x79,
     2451    VTDATFAULT_SSL_3   = 0x7a,
     2452    VTDATFAULT_SSL_4   = 0x7b,
     2453    VTDATFAULT_SSL_5   = 0x7c,
     2454    VTDATFAULT_SSL_6   = 0x7d,
    24492455
    24502456    /* Scalable-Mode General Faults (SGN). */
    2451     VTDADDRFAULT_SGN_1   = 0x80,
    2452     VTDADDRFAULT_SGN_2   = 0x81,
    2453     VTDADDRFAULT_SGN_3   = 0x82,
    2454     VTDADDRFAULT_SGN_4_0 = 0x83,
    2455     VTDADDRFAULT_SGN_4_1 = 0x83,
    2456     VTDADDRFAULT_SGN_4_2 = 0x83,
    2457     VTDADDRFAULT_SGN_5   = 0x84,
    2458     VTDADDRFAULT_SGN_6   = 0x85,
    2459     VTDADDRFAULT_SGN_7   = 0x86,
    2460     VTDADDRFAULT_SGN_8   = 0x87,
    2461     VTDADDRFAULT_SGN_9   = 0x88,
    2462     VTDADDRFAULT_SGN_10  = 0x89
    2463 } VTDADDRFAULT;
    2464 AssertCompileSize(VTDADDRFAULT, 4);
     2457    VTDATFAULT_SGN_1   = 0x80,
     2458    VTDATFAULT_SGN_2   = 0x81,
     2459    VTDATFAULT_SGN_3   = 0x82,
     2460    VTDATFAULT_SGN_4_0 = 0x83,
     2461    VTDATFAULT_SGN_4_1 = 0x83,
     2462    VTDATFAULT_SGN_4_2 = 0x83,
     2463    VTDATFAULT_SGN_5   = 0x84,
     2464    VTDATFAULT_SGN_6   = 0x85,
     2465    VTDATFAULT_SGN_7   = 0x86,
     2466    VTDATFAULT_SGN_8   = 0x87,
     2467    VTDATFAULT_SGN_9   = 0x88,
     2468    VTDATFAULT_SGN_10  = 0x89
     2469} VTDATFAULT;
     2470AssertCompileSize(VTDATFAULT, 4);
    24652471/** @} */
    24662472
  • trunk/src/VBox/Devices/Bus/DevIommuIntel.cpp

    r89235 r89236  
    684684 *
    685685 * @returns @c true if qualified, @c false otherwise.
    686  * @param   enmIntrFault    The interrupt remapping fault condition.
    687  */
    688 static bool vtdIrFaultIsQualified(VTDINTRFAULT enmIntrFault)
    689 {
    690     switch (enmIntrFault)
    691     {
    692         case VTDINTRFAULT_IRTE_NOT_PRESENT:
    693         case VTDINTRFAULT_IRTE_PRESENT_RSVD:
    694         case VTDINTRFAULT_IRTE_PRESENT_INVALID:
    695         case VTDINTRFAULT_PID_READ_FAILED:
    696         case VTDINTRFAULT_PID_RSVD:
     686 * @param   enmIrFault      The interrupt remapping fault condition.
     687 */
     688static bool vtdIrFaultIsQualified(VTDIRFAULT enmIrFault)
     689{
     690    switch (enmIrFault)
     691    {
     692        case VTDIRFAULT_IRTE_NOT_PRESENT:
     693        case VTDIRFAULT_IRTE_PRESENT_RSVD:
     694        case VTDIRFAULT_IRTE_PRESENT_INVALID:
     695        case VTDIRFAULT_PID_READ_FAILED:
     696        case VTDIRFAULT_PID_RSVD:
    697697            return true;
    698698        default:
     
    13021302 * @param   pDevIns         The IOMMU device instance.
    13031303 * @param   enmDiag         The diagnostic reason.
    1304  * @param   enmIntrFault    The interrupt fault reason.
     1304 * @param   enmIrFault    The interrupt fault reason.
    13051305 * @param   idDevice        The device ID (bus, device, function).
    13061306 * @param   idxIntr         The interrupt index.
    13071307 */
    1308 static void dmarIntrFaultRecord(PPDMDEVINS pDevIns, DMARDIAG enmDiag, VTDINTRFAULT enmIntrFault, uint16_t idDevice,
    1309                                 uint16_t idxIntr)
     1308static void dmarIrFaultRecord(PPDMDEVINS pDevIns, DMARDIAG enmDiag, VTDIRFAULT enmIrFault, uint16_t idDevice, uint16_t idxIntr)
    13101309{
    13111310    uint64_t const uFrcdHi = RT_BF_MAKE(VTD_BF_1_FRCD_REG_SID, idDevice)
    1312                            | RT_BF_MAKE(VTD_BF_1_FRCD_REG_FR,  enmIntrFault)
     1311                           | RT_BF_MAKE(VTD_BF_1_FRCD_REG_FR,  enmIrFault)
    13131312                           | RT_BF_MAKE(VTD_BF_1_FRCD_REG_F,   1);
    13141313    uint64_t const uFrcdLo = (uint64_t)idxIntr << 48;
     
    13251324 * @param   pDevIns         The IOMMU device instance.
    13261325 * @param   enmDiag         The diagnostic reason.
    1327  * @param   enmIntrFault    The interrupt fault reason.
     1326 * @param   enmIrFault    The interrupt fault reason.
    13281327 * @param   idDevice        The device ID (bus, device, function).
    13291328 * @param   idxIntr         The interrupt index.
    13301329 * @param   pIrte           The IRTE that caused this fault.
    13311330 */
    1332 static void dmarIntrFaultRecordQualified(PPDMDEVINS pDevIns, DMARDIAG enmDiag, VTDINTRFAULT enmIntrFault, uint16_t idDevice,
    1333                                          uint16_t idxIntr, PCVTD_IRTE_T pIrte)
    1334 {
    1335     Assert(vtdIrFaultIsQualified(enmIntrFault));
     1331static void dmarIrFaultRecordQualified(PPDMDEVINS pDevIns, DMARDIAG enmDiag, VTDIRFAULT enmIrFault, uint16_t idDevice,
     1332                                       uint16_t idxIntr, PCVTD_IRTE_T pIrte)
     1333{
     1334    Assert(vtdIrFaultIsQualified(enmIrFault));
    13361335    Assert(pIrte);
    13371336    if (!(pIrte->au64[0] & VTD_BF_0_IRTE_FPD_MASK))
    1338         return dmarIntrFaultRecord(pDevIns, enmDiag, enmIntrFault, idDevice, idxIntr);
     1337        return dmarIrFaultRecord(pDevIns, enmDiag, enmIrFault, idDevice, idxIntr);
    13391338}
    13401339
     
    13431342 * Records an address translation fault (extensive version).
    13441343 *
    1345  * @param   pDevIns         The IOMMU device instance.
    1346  * @param   enmDiag         The diagnostic reason.
    1347  * @param   enmAddrFault    The address translation fault reason.
    1348  * @param   idDevice        The device ID (bus, device, function).
    1349  * @param   uFaultAddr      The page address of the faulted request.
    1350  * @param   enmReqType      The type of the faulted request.
    1351  * @param   uAddrType       The address type of the faulted request (only applicable
    1352  *                          when device-TLB is supported).
    1353  * @param   fHasPasid       Whether the faulted request has a PASID TLP prefix.
    1354  * @param   uPasid          The PASID value when a PASID TLP prefix is present.
    1355  * @param   fReqAttr        The attributes of the faulted requested
    1356  *                          (VTD_REQ_ATTR_XXX).
    1357  */
    1358 static void dmarAddrFaultRecordEx(PPDMDEVINS pDevIns, DMARDIAG enmDiag, VTDADDRFAULT enmAddrFault, uint16_t idDevice,
    1359                                   uint64_t uFaultAddr, VTDREQTYPE enmReqType, uint8_t uAddrType, bool fHasPasid, uint32_t uPasid,
    1360                                   uint8_t fReqAttr)
     1344 * @param   pDevIns     The IOMMU device instance.
     1345 * @param   enmDiag     The diagnostic reason.
     1346 * @param   enmAtFault  The address translation fault reason.
     1347 * @param   idDevice    The device ID (bus, device, function).
     1348 * @param   uFaultAddr  The page address of the faulted request.
     1349 * @param   enmReqType  The type of the faulted request.
     1350 * @param   uAddrType   The address type of the faulted request (only applicable
     1351 *                      when device-TLB is supported).
     1352 * @param   fHasPasid   Whether the faulted request has a PASID TLP prefix.
     1353 * @param   uPasid      The PASID value when a PASID TLP prefix is present.
     1354 * @param   fReqAttr    The attributes of the faulted requested (VTD_REQ_ATTR_XXX).
     1355 */
     1356static void dmarAtFaultRecordEx(PPDMDEVINS pDevIns, DMARDIAG enmDiag, VTDATFAULT enmAtFault, uint16_t idDevice,
     1357                                uint64_t uFaultAddr, VTDREQTYPE enmReqType, uint8_t uAddrType, bool fHasPasid, uint32_t uPasid,
     1358                                uint8_t fReqAttr)
    13611359{
    13621360    uint8_t const fType1 = enmReqType & RT_BIT(1);
     
    13691367                           | RT_BF_MAKE(VTD_BF_1_FRCD_REG_EXE,  fExec)
    13701368                           | RT_BF_MAKE(VTD_BF_1_FRCD_REG_PRIV, fPriv)
    1371                            | RT_BF_MAKE(VTD_BF_1_FRCD_REG_FR,   enmAddrFault)
     1369                           | RT_BF_MAKE(VTD_BF_1_FRCD_REG_FR,   enmAtFault)
    13721370                           | RT_BF_MAKE(VTD_BF_1_FRCD_REG_PV,   uPasid)
    13731371                           | RT_BF_MAKE(VTD_BF_1_FRCD_REG_AT,   uAddrType)
     
    13851383 * where the device-TLB and PASID is not relevant/present.
    13861384 *
    1387  * @param   pDevIns         The IOMMU device instance.
    1388  * @param   enmDiag         The diagnostic reason.
    1389  * @param   enmAddrFault    The address translation fault reason.
    1390  * @param   idDevice        The device ID (bus, device, function).
    1391  * @param   uFaultAddr      The page address of the faulted request.
    1392  * @param   enmReqType      The type of the faulted request.
    1393  */
    1394 static void dmarAddrFaultRecord(PPDMDEVINS pDevIns, DMARDIAG enmDiag, VTDADDRFAULT enmAddrFault, uint16_t idDevice,
    1395                                   uint64_t uFaultAddr, VTDREQTYPE enmReqType)
    1396 {
    1397     dmarAddrFaultRecordEx(pDevIns, enmDiag, enmAddrFault, idDevice, uFaultAddr, enmReqType, 0 /* uAddrType */,
     1385 * @param   pDevIns     The IOMMU device instance.
     1386 * @param   enmDiag     The diagnostic reason.
     1387 * @param   enmAtFault  The address translation fault reason.
     1388 * @param   idDevice    The device ID (bus, device, function).
     1389 * @param   uFaultAddr  The page address of the faulted request.
     1390 * @param   enmReqType  The type of the faulted request.
     1391 */
     1392static void dmarAtFaultRecord(PPDMDEVINS pDevIns, DMARDIAG enmDiag, VTDATFAULT enmAtFault, uint16_t idDevice,
     1393                              uint64_t uFaultAddr, VTDREQTYPE enmReqType)
     1394{
     1395    dmarAtFaultRecordEx(pDevIns, enmDiag, enmAtFault, idDevice, uFaultAddr, enmReqType, 0 /* uAddrType */,
    13981396                          false /* fHasPasid */, 0 /* uPasid */, 0 /* fReqAttr */);
    13991397}
     
    17541752
    17551753/**
    1756  * Performs a PCI target abort for a DMA operation.
     1754 * Performs a PCI target abort for a DMA remapping operation.
    17571755 *
    17581756 * @param   pDevIns     The IOMMU device instance.
    17591757 */
    1760 static void dmarDmaTargetAbort(PPDMDEVINS pDevIns)
     1758static void dmarDrTargetAbort(PPDMDEVINS pDevIns)
    17611759{
    17621760    /** @todo r=ramshankar: I don't know for sure if a PCI target abort is caused or not
     
    17701768
    17711769/**
    1772  * Validates the table translation mode for a DMA request.
     1770 * Validates the table translation mode for a DMA remapping operation.
    17731771 *
    17741772 * @returns @c true if the TTM is valid, @c false otherwise.
     
    17791777 * @param   enmReqType      The type of the request (for fault recording).
    17801778 */
    1781 static bool dmarDmaIsTtmValid(PPDMDEVINS pDevIns, uint64_t uRtaddrReg, uint16_t idDevice, uint64_t uIova, VTDREQTYPE enmReqType)
     1779static bool dmarDrIsTtmValid(PPDMDEVINS pDevIns, uint64_t uRtaddrReg, uint16_t idDevice, uint64_t uIova, VTDREQTYPE enmReqType)
    17821780{
    17831781    bool fValid = true;
     
    17931791            if (pThis->fExtCapReg & VTD_BF_ECAP_REG_SMTS_MASK)
    17941792                break;
    1795             dmarAddrFaultRecord(pDevIns, kDmarDiag_Atf_Rta_1_3, VTDADDRFAULT_RTA_1_3, idDevice, uIova, enmReqType);
     1793            dmarAtFaultRecord(pDevIns, kDmarDiag_Atf_Rta_1_3, VTDATFAULT_RTA_1_3, idDevice, uIova, enmReqType);
    17961794            fValid = false;
    17971795            break;
     
    18011799        {
    18021800            if (pThis->fExtCapReg & VTD_BF_ECAP_REG_ADMS_MASK)
    1803                 dmarDmaTargetAbort(pDevIns);
     1801                dmarDrTargetAbort(pDevIns);
    18041802            else
    1805                 dmarAddrFaultRecord(pDevIns, kDmarDiag_Atf_Rta_1_1, VTDADDRFAULT_RTA_1_1, idDevice, uIova, enmReqType);
     1803                dmarAtFaultRecord(pDevIns, kDmarDiag_Atf_Rta_1_1, VTDATFAULT_RTA_1_1, idDevice, uIova, enmReqType);
    18061804            fValid = false;
    18071805            break;
     
    18101808        default:
    18111809        {
    1812             dmarAddrFaultRecord(pDevIns, kDmarDiag_Atf_Rta_1_2, VTDADDRFAULT_RTA_1_2, idDevice, uIova, enmReqType);
     1810            dmarAtFaultRecord(pDevIns, kDmarDiag_Atf_Rta_1_2, VTDATFAULT_RTA_1_2, idDevice, uIova, enmReqType);
    18131811            fValid = false;
    18141812            break;
     
    18871885        }
    18881886
    1889         bool fTtmValid = dmarDmaIsTtmValid(pDevIns, uRtaddrReg, idDevice, uIova, enmReqType);
     1887        bool const fTtmValid = dmarDrIsTtmValid(pDevIns, uRtaddrReg, idDevice, uIova, enmReqType);
    18901888        if (!fTtmValid)
    18911889            return VERR_IOMMU_ADDR_TRANSLATION_FAILED;
     
    20642062                                return VINF_SUCCESS;
    20652063                            }
    2066                             dmarIntrFaultRecordQualified(pDevIns, kDmarDiag_Ir_Rfi_Irte_Mode_Invalid,
    2067                                                          VTDINTRFAULT_IRTE_PRESENT_RSVD, idDevice, idxIntr, &Irte);
     2064                            dmarIrFaultRecordQualified(pDevIns, kDmarDiag_Ir_Rfi_Irte_Mode_Invalid,
     2065                                                         VTDIRFAULT_IRTE_PRESENT_RSVD, idDevice, idxIntr, &Irte);
    20682066                        }
    20692067                        else
    2070                             dmarIntrFaultRecordQualified(pDevIns, enmIrDiag, VTDINTRFAULT_IRTE_PRESENT_RSVD, idDevice, idxIntr,
     2068                            dmarIrFaultRecordQualified(pDevIns, enmIrDiag, VTDIRFAULT_IRTE_PRESENT_RSVD, idDevice, idxIntr,
    20712069                                                         &Irte);
    20722070                    }
    20732071                    else
    2074                         dmarIntrFaultRecordQualified(pDevIns, kDmarDiag_Ir_Rfi_Irte_Rsvd, VTDINTRFAULT_IRTE_PRESENT_RSVD,
     2072                        dmarIrFaultRecordQualified(pDevIns, kDmarDiag_Ir_Rfi_Irte_Rsvd, VTDIRFAULT_IRTE_PRESENT_RSVD,
    20752073                                                     idDevice, idxIntr, &Irte);
    20762074                }
    20772075                else
    2078                     dmarIntrFaultRecordQualified(pDevIns, kDmarDiag_Ir_Rfi_Irte_Not_Present, VTDINTRFAULT_IRTE_NOT_PRESENT,
     2076                    dmarIrFaultRecordQualified(pDevIns, kDmarDiag_Ir_Rfi_Irte_Not_Present, VTDIRFAULT_IRTE_NOT_PRESENT,
    20792077                                                 idDevice, idxIntr, &Irte);
    20802078            }
    20812079            else
    2082                 dmarIntrFaultRecord(pDevIns, kDmarDiag_Ir_Rfi_Irte_Read_Failed, VTDINTRFAULT_IRTE_READ_FAILED, idDevice, idxIntr);
     2080                dmarIrFaultRecord(pDevIns, kDmarDiag_Ir_Rfi_Irte_Read_Failed, VTDIRFAULT_IRTE_READ_FAILED, idDevice, idxIntr);
    20832081        }
    20842082        else
    2085             dmarIntrFaultRecord(pDevIns, kDmarDiag_Ir_Rfi_Intr_Index_Invalid, VTDINTRFAULT_INTR_INDEX_INVALID, idDevice, idxIntr);
     2083            dmarIrFaultRecord(pDevIns, kDmarDiag_Ir_Rfi_Intr_Index_Invalid, VTDIRFAULT_INTR_INDEX_INVALID, idDevice, idxIntr);
    20862084    }
    20872085    else
    2088         dmarIntrFaultRecord(pDevIns, kDmarDiag_Ir_Rfi_Rsvd, VTDINTRFAULT_REMAPPABLE_INTR_RSVD, idDevice, 0 /* idxIntr */);
     2086        dmarIrFaultRecord(pDevIns, kDmarDiag_Ir_Rfi_Rsvd, VTDIRFAULT_REMAPPABLE_INTR_RSVD, idDevice, 0 /* idxIntr */);
    20892087    return VERR_IOMMU_INTR_REMAP_DENIED;
    20902088}
     
    21302128                || !(uGstsReg & VTD_BF_GSTS_REG_CFIS_MASK))
    21312129            {
    2132                 dmarIntrFaultRecord(pDevIns, kDmarDiag_Ir_Cfi_Blocked, VTDINTRFAULT_CFI_BLOCKED, idDevice, 0 /* idxIntr */);
     2130                dmarIrFaultRecord(pDevIns, kDmarDiag_Ir_Cfi_Blocked, VTDIRFAULT_CFI_BLOCKED, idDevice, 0 /* idxIntr */);
    21332131                return VERR_IOMMU_INTR_REMAP_DENIED;
    21342132            }
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette