VirtualBox

Changeset 88203 in vbox


Ignore:
Timestamp:
Mar 19, 2021 10:33:06 AM (4 years ago)
Author:
vboxsync
Message:

Intel IOMMU: bugref:9967 WIP.

Location:
trunk
Files:
2 edited

Legend:

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

    r88202 r88203  
    11331133                                                                 | VTD_BF_FSTS_REG_APF_MASK | VTD_BF_FSTS_REG_IQE_MASK \
    11341134                                                                 | VTD_BF_FSTS_REG_ICE_MASK | VTD_BF_FSTS_REG_ITE_MASK)
     1135/** RW1C: Read-only-status, Write-1-to-clear status mask. */
     1136#define VTD_FSTS_REG_RW1C_MASK                                  (  VTD_BF_FSTS_REG_PFO_MASK | VTD_BF_FSTS_REG_AFO_MASK \
     1137                                                                 | VTD_BF_FSTS_REG_APF_MASK | VTD_BF_FSTS_REG_IQE_MASK \
     1138                                                                 | VTD_BF_FSTS_REG_ICE_MASK | VTD_BF_FSTS_REG_ITE_MASK)
    11351139/** @} */
    11361140
     
    13591363/** RW: Read/write mask. */
    13601364#define VTD_ICS_REG_RW_MASK                                     VTD_BF_ICS_REG_IWC_MASK
     1365/** RW1C: Read-only-status, Write-1-to-clear status mask. */
     1366#define VTD_ICS_REG_RW1C_MASK                                   VTD_BF_ICS_REG_IWC_MASK
    13611367/** @} */
    13621368
     
    15421548/** RW: Read/write mask. */
    15431549#define VTD_PRS_REG_RW_MASK                                     (VTD_BF_PRS_REG_PPR_MASK | VTD_BF_PRS_REG_PRO_MASK)
     1550/** RW1C: Read-only-status, Write-1-to-clear status mask. */
     1551#define VTD_PRS_REG_RW1C_MASK                                   (VTD_BF_PRS_REG_PPR_MASK | VTD_BF_PRS_REG_PRO_MASK)
    15441552/** @} */
    15451553
  • trunk/src/VBox/Devices/Bus/DevIommuIntel.cpp

    r88202 r88203  
    224224
    225225/**
     226 * Read-only Status, Write-1-to-clear masks for IOMMU registers (group 0).
     227 */
     228static const uint32_t g_aRw1cMasks0[] =
     229{
     230    /* Offset  Register                  Low                      High */
     231    /* 0x000   VER_REG               */  0,
     232    /* 0x004   Reserved              */  0,
     233    /* 0x008   CAP_REG               */  0,                       0,
     234    /* 0x010   ECAP_REG              */  0,                       0,
     235    /* 0x018   GCMD_REG              */  0,
     236    /* 0x01c   GSTS_REG              */  0,
     237    /* 0x020   RTADDR_REG            */  0,                       0,
     238    /* 0x028   CCMD_REG              */  0,                       0,
     239    /* 0x030   Reserved              */  0,
     240    /* 0x034   FSTS_REG              */  VTD_FSTS_REG_RW1C_MASK,
     241    /* 0x038   FECTL_REG             */  0,
     242    /* 0x03c   FEDATA_REG            */  0,
     243    /* 0x040   FEADDR_REG            */  0,
     244    /* 0x044   FEUADDR_REG           */  0,
     245    /* 0x048   Reserved              */  0,                       0,
     246    /* 0x050   Reserved              */  0,                       0,
     247    /* 0x058   AFLOG_REG             */  0,                       0,
     248    /* 0x060   Reserved              */  0,
     249    /* 0x064   PMEN_REG              */  0,
     250    /* 0x068   PLMBASE_REG           */  0,
     251    /* 0x06c   PLMLIMIT_REG          */  0,
     252    /* 0x070   PHMBASE_REG           */  0,                       0,
     253    /* 0x078   PHMLIMIT_REG          */  0,                       0,
     254    /* 0x080   IQH_REG               */  0,                       0,
     255    /* 0x088   IQT_REG               */  0,                       0,
     256    /* 0x090   IQA_REG               */  0,                       0,
     257    /* 0x098   Reserved              */  0,
     258    /* 0x09c   ICS_REG               */  VTD_ICS_REG_RW1C_MASK,
     259    /* 0x0a0   IECTL_REG             */  0,
     260    /* 0x0a4   IEDATA_REG            */  0,
     261    /* 0x0a8   IEADDR_REG            */  0,
     262    /* 0x0ac   IEUADDR_REG           */  0,
     263    /* 0x0b0   IQERCD_REG            */  0,                       0,
     264    /* 0x0b8   IRTA_REG              */  0,                       0,
     265    /* 0x0c0   PQH_REG               */  0,                       0,
     266    /* 0x0c8   PQT_REG               */  0,                       0,
     267    /* 0x0d0   PQA_REG               */  0,                       0,
     268    /* 0x0d8   Reserved              */  0,
     269    /* 0x0dc   PRS_REG               */  0,
     270    /* 0x0e0   PECTL_REG             */  0,
     271    /* 0x0e4   PEDATA_REG            */  0,
     272    /* 0x0e8   PEADDR_REG            */  0,
     273    /* 0x0ec   PEUADDR_REG           */  0,
     274    /* 0x0f0   Reserved              */  0,                       0,
     275    /* 0x0f8   Reserved              */  0,                       0,
     276    /* 0x100   MTRRCAP_REG           */  0,                       0,
     277    /* 0x108   MTRRDEF_REG           */  0,                       0,
     278    /* 0x110   Reserved              */  0,                       0,
     279    /* 0x118   Reserved              */  0,                       0,
     280    /* 0x120   MTRR_FIX64_00000_REG  */  0,                       0,
     281    /* 0x128   MTRR_FIX16K_80000_REG */  0,                       0,
     282    /* 0x130   MTRR_FIX16K_A0000_REG */  0,                       0,
     283    /* 0x138   MTRR_FIX4K_C0000_REG  */  0,                       0,
     284    /* 0x140   MTRR_FIX4K_C8000_REG  */  0,                       0,
     285    /* 0x148   MTRR_FIX4K_D0000_REG  */  0,                       0,
     286    /* 0x150   MTRR_FIX4K_D8000_REG  */  0,                       0,
     287    /* 0x158   MTRR_FIX4K_E0000_REG  */  0,                       0,
     288    /* 0x160   MTRR_FIX4K_E8000_REG  */  0,                       0,
     289    /* 0x168   MTRR_FIX4K_F0000_REG  */  0,                       0,
     290    /* 0x170   MTRR_FIX4K_F8000_REG  */  0,                       0,
     291    /* 0x178   Reserved              */  0,                       0,
     292    /* 0x180   MTRR_PHYSBASE0_REG    */  0,                       0,
     293    /* 0x188   MTRR_PHYSMASK0_REG    */  0,                       0,
     294    /* 0x190   MTRR_PHYSBASE1_REG    */  0,                       0,
     295    /* 0x198   MTRR_PHYSMASK1_REG    */  0,                       0,
     296    /* 0x1a0   MTRR_PHYSBASE2_REG    */  0,                       0,
     297    /* 0x1a8   MTRR_PHYSMASK2_REG    */  0,                       0,
     298    /* 0x1b0   MTRR_PHYSBASE3_REG    */  0,                       0,
     299    /* 0x1b8   MTRR_PHYSMASK3_REG    */  0,                       0,
     300    /* 0x1c0   MTRR_PHYSBASE4_REG    */  0,                       0,
     301    /* 0x1c8   MTRR_PHYSMASK4_REG    */  0,                       0,
     302    /* 0x1d0   MTRR_PHYSBASE5_REG    */  0,                       0,
     303    /* 0x1d8   MTRR_PHYSMASK5_REG    */  0,                       0,
     304    /* 0x1e0   MTRR_PHYSBASE6_REG    */  0,                       0,
     305    /* 0x1e8   MTRR_PHYSMASK6_REG    */  0,                       0,
     306    /* 0x1f0   MTRR_PHYSBASE7_REG    */  0,                       0,
     307    /* 0x1f8   MTRR_PHYSMASK7_REG    */  0,                       0,
     308    /* 0x200   MTRR_PHYSBASE8_REG    */  0,                       0,
     309    /* 0x208   MTRR_PHYSMASK8_REG    */  0,                       0,
     310    /* 0x210   MTRR_PHYSBASE9_REG    */  0,                       0,
     311    /* 0x218   MTRR_PHYSMASK9_REG    */  0,                       0,
     312};
     313AssertCompile(sizeof(g_aRw1cMasks0) == VTD_MMIO_GROUP_0_SIZE);
     314
     315/**
    226316 * Read-write masks for IOMMU registers (group 1).
    227317 */
    228318static const uint32_t g_aRwMasks1[] =
    229319{
    230     /* Offset  Register                  Low                                        High */
    231     /* 0xe00   VCCAP_REG             */  VTD_LO_U32(VTD_VCCAP_REG_RW_MASK),         VTD_HI_U32(VTD_VCCAP_REG_RW_MASK),
    232     /* 0xe08   Reserved              */  0,                                         0,
    233     /* 0xe10   VCMD_REG              */  0,                                         0, /* RO as we don't support VCS. */
    234     /* 0xe18   Reserved              */  0,                                         0,
    235     /* 0xe20   VCRSP_REG             */  0,                                         0, /* RO as we don't support VCS. */
     320    /* Offset  Register                  Low                                 High */
     321    /* 0xe00   VCCAP_REG             */  VTD_LO_U32(VTD_VCCAP_REG_RW_MASK),  VTD_HI_U32(VTD_VCCAP_REG_RW_MASK),
     322    /* 0xe08   Reserved              */  0,                                  0,
     323    /* 0xe10   VCMD_REG              */  0,                                  0, /* RO as we don't support VCS. */
     324    /* 0xe18   Reserved              */  0,                                  0,
     325    /* 0xe20   VCRSP_REG             */  0,                                  0, /* RO as we don't support VCS. */
    236326};
    237327AssertCompile(sizeof(g_aRwMasks1) == VTD_MMIO_GROUP_1_SIZE);
     328
     329/**
     330 * Read-only Status, Write-1-to-clear masks for IOMMU registers (group 1).
     331 */
     332static const uint32_t g_aRw1cMasks1[] =
     333{
     334    /* Offset  Register                  Low  High */
     335    /* 0xe00   VCCAP_REG             */  0,   0,
     336    /* 0xe08   Reserved              */  0,   0,
     337    /* 0xe10   VCMD_REG              */  0,   0,
     338    /* 0xe18   Reserved              */  0,   0,
     339    /* 0xe20   VCRSP_REG             */  0,   0,
     340};
     341AssertCompile(sizeof(g_aRw1cMasks1) == VTD_MMIO_GROUP_1_SIZE);
    238342
    239343
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