VirtualBox

Changeset 89454 in vbox


Ignore:
Timestamp:
Jun 2, 2021 8:00:30 AM (3 years ago)
Author:
vboxsync
Message:

Intel IOMMU: bugref:9967 Address translation, WIP.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Bus/DevIommuIntel.cpp

    r89453 r89454  
    19151915 *
    19161916 * @returns @c true if it's supported, @c false otherwise.
    1917  * @param   pThis               The shared DMAR device state.
    1918  * @param   pCtxEntry           The context entry.
    1919  * @param   pcPagingLevel       Where to store the paging level. Optional, can be
    1920  *                              NULL.
     1917 * @param   pThis           The shared DMAR device state.
     1918 * @param   pCtxEntry       The context entry.
     1919 * @param   pcPagingLevel   Where to store the paging level. Optional, can be NULL.
    19211920 */
    19221921static bool dmarDrLegacyModeIsAwValid(PCDMAR pThis, PCVTD_CONTEXT_ENTRY_T pCtxEntry, uint8_t *pcPagingLevel)
     
    22792278                                        if (pMemReqRemap->Req.enmAddrType == PCIADDRTYPE_UNTRANSLATED)
    22802279                                        {
    2281                                             /** @todo Check AW == maximum SAGAW bit? */
    2282                                             pMemReqRemap->Iotlbe.GCPhysBase = pMemReqRemap->Req.uDmaAddr & X86_PAGE_4K_BASE_MASK;
    2283                                             pMemReqRemap->Iotlbe.cShift     = X86_PAGE_4K_SHIFT;
    2284                                             pMemReqRemap->Iotlbe.fPerm      = DMAR_PERM_ALL;
    2285                                             pMemReqRemap->Iotlbe.idDomain   = idDomain;
    2286                                             pMemReqRemap->cbContiguous      = pMemReqRemap->Req.cbDma;
    2287                                             return VINF_SUCCESS;
     2280                                            if (dmarDrLegacyModeIsAwValid(pThis, &CtxEntry, NULL /* pcPagingLevel */))
     2281                                            {
     2282                                                pMemReqRemap->Iotlbe.GCPhysBase = pMemReqRemap->Req.uDmaAddr & X86_PAGE_4K_BASE_MASK;
     2283                                                pMemReqRemap->Iotlbe.cShift     = X86_PAGE_4K_SHIFT;
     2284                                                pMemReqRemap->Iotlbe.fPerm      = DMAR_PERM_ALL;
     2285                                                pMemReqRemap->Iotlbe.idDomain   = idDomain;
     2286                                                pMemReqRemap->cbContiguous      = pMemReqRemap->Req.cbDma;
     2287                                                return VINF_SUCCESS;
     2288                                            }
     2289                                            dmarAtFaultRecord(pDevIns, kDmarDiag_Atf_Lgn_1_3, VTDATFAULT_LGN_1_3, pMemReqRemap);
    22882290                                        }
    2289                                         dmarAtFaultRecord(pDevIns, kDmarDiag_Atf_Lct_5, VTDATFAULT_LCT_5, pMemReqRemap);
     2291                                        else
     2292                                            dmarAtFaultRecord(pDevIns, kDmarDiag_Atf_Lct_5, VTDATFAULT_LCT_5, pMemReqRemap);
    22902293                                        break;
    22912294                                    }
     
    35383541        dmarRegWriteRaw64(pThis, VTD_MMIO_OFF_CAP_REG, pThis->fCapReg);
    35393542
    3540         pThis->fHawBaseMask = ~(UINT64_MAX << cGstPhysAddrBits) & X86_PAGE_4K_BASE_MASK;
    3541         pThis->fInvMgawMask = UINT64_MAX << cGstPhysAddrBits;
     3543        pThis->fHawBaseMask    = ~(UINT64_MAX << cGstPhysAddrBits) & X86_PAGE_4K_BASE_MASK;
     3544        pThis->fInvMgawMask    = UINT64_MAX << cGstPhysAddrBits;
    35423545        pThis->cMaxPagingLevel = vtdCapRegGetMaxPagingLevel(fSagaw);
    35433546    }
Note: See TracChangeset for help on using the changeset viewer.

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