VirtualBox

Changeset 88515 in vbox for trunk


Ignore:
Timestamp:
Apr 15, 2021 5:36:29 AM (4 years ago)
Author:
vboxsync
Message:

Intel IOMMU: bugref:9967 Push IOTLB and FRCD registers beyond 0xe4f which according to the 2021 VT-d spec is reserved.

Location:
trunk
Files:
2 edited

Legend:

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

    r88494 r88515  
    17361736
    17371737
     1738/** @name Virtual Command Extended Operand Register (VCMD_EO_REG).
     1739 * In accordance with the Intel spec.
     1740 * @{ */
     1741/** OB: Operand B. */
     1742#define VTD_BF_VCMD_EO_REG_OB_SHIFT                             0
     1743#define VTD_BF_VCMD_EO_REG_OB_MASK                              UINT32_C(0xffffffffffffffff)
     1744
     1745/** RW: Read/write mask. */
     1746#define VTD_VCMD_EO_REG_RW_MASK                                 VTD_BF_VCMD_EO_REG_OB_MASK
     1747/** @} */
     1748
     1749
    17381750/** @name Virtual Command Register (VCMD_REG).
    17391751 * In accordance with the Intel spec.
  • trunk/src/VBox/Devices/Bus/DevIommuIntel.cpp

    r88495 r88515  
    7272#define DMAR_MMIO_GROUP_0_SIZE                      (DMAR_MMIO_GROUP_0_OFF_END - DMAR_MMIO_GROUP_0_OFF_FIRST)
    7373/**< Implementation-specific MMIO offset of IVA_REG. */
    74 #define DMAR_MMIO_OFF_IVA_REG                       0xe40
     74#define DMAR_MMIO_OFF_IVA_REG                       0xe50
    7575/**< Implementation-specific MMIO offset of IOTLB_REG. */
    76 #define DMAR_MMIO_OFF_IOTLB_REG                     0xe48
     76#define DMAR_MMIO_OFF_IOTLB_REG                     0xe58
    7777   /**< Implementation-specific MMIO offset of FRCD_LO_REG. */
    78 #define DMAR_MMIO_OFF_FRCD_LO_REG                   0xe60
     78#define DMAR_MMIO_OFF_FRCD_LO_REG                   0xe70
    7979/**< Implementation-specific MMIO offset of FRCD_HI_REG. */
    80 #define DMAR_MMIO_OFF_FRCD_HI_REG                   0xe68
     80#define DMAR_MMIO_OFF_FRCD_HI_REG                   0xe78
    8181AssertCompile(!(DMAR_MMIO_OFF_FRCD_LO_REG & 0xf));
    8282
     
    397397    /* Offset  Register                  Low                                        High */
    398398    /* 0xe00   VCCAP_REG             */  DMAR_LO_U32(VTD_VCCAP_REG_RW_MASK),        DMAR_HI_U32(VTD_VCCAP_REG_RW_MASK),
    399     /* 0xe08   Reserved              */  0,                                         0,
     399    /* 0xe08   VCMD_EO_REG           */  DMAR_LO_U32(VTD_VCMD_EO_REG_RW_MASK),      DMAR_HI_U32(VTD_VCMD_EO_REG_RW_MASK),
    400400    /* 0xe10   VCMD_REG              */  0,                                         0, /* RO: VCS not supported. */
    401401    /* 0xe18   VCMDRSVD_REG          */  0,                                         0,
     
    404404    /* 0xe30   Reserved              */  0,                                         0,
    405405    /* 0xe38   Reserved              */  0,                                         0,
    406     /* 0xe40   IVA_REG               */  DMAR_LO_U32(VTD_IVA_REG_RW_MASK),          DMAR_HI_U32(VTD_IVA_REG_RW_MASK),
    407     /* 0xe48   IOTLB_REG             */  DMAR_LO_U32(VTD_IOTLB_REG_RW_MASK),        DMAR_HI_U32(VTD_IOTLB_REG_RW_MASK),
    408     /* 0xe50   Reserved              */  0,                                         0,
    409     /* 0xe58   Reserved              */  0,                                         0,
    410     /* 0xe60   FRCD_REG_LO           */  DMAR_LO_U32(VTD_FRCD_REG_LO_RW_MASK),      DMAR_HI_U32(VTD_FRCD_REG_LO_RW_MASK),
    411     /* 0xe68   FRCD_REG_HI           */  DMAR_LO_U32(VTD_FRCD_REG_HI_RW_MASK),      DMAR_HI_U32(VTD_FRCD_REG_HI_RW_MASK),
     406    /* 0xe40   Reserved              */  0,                                         0,
     407    /* 0xe48   Reserved              */  0,                                         0,
     408    /* 0xe50   IVA_REG               */  DMAR_LO_U32(VTD_IVA_REG_RW_MASK),          DMAR_HI_U32(VTD_IVA_REG_RW_MASK),
     409    /* 0xe58   IOTLB_REG             */  DMAR_LO_U32(VTD_IOTLB_REG_RW_MASK),        DMAR_HI_U32(VTD_IOTLB_REG_RW_MASK),
     410    /* 0xe60   Reserved              */  0,                                         0,
     411    /* 0xe68   Reserved              */  0,                                         0,
     412    /* 0xe70   FRCD_REG_LO           */  DMAR_LO_U32(VTD_FRCD_REG_LO_RW_MASK),      DMAR_HI_U32(VTD_FRCD_REG_LO_RW_MASK),
     413    /* 0xe78   FRCD_REG_HI           */  DMAR_LO_U32(VTD_FRCD_REG_HI_RW_MASK),      DMAR_HI_U32(VTD_FRCD_REG_HI_RW_MASK),
    412414};
    413415AssertCompile(sizeof(g_au32RwMasks1) == DMAR_MMIO_GROUP_1_SIZE);
     
    421423    /* Offset  Register                  Low                                        High */
    422424    /* 0xe00   VCCAP_REG             */  0,                                         0,
    423     /* 0xe08   Reserved              */  0,                                         0,
     425    /* 0xe08   VCMD_EO_REG           */  0,                                         0,
    424426    /* 0xe10   VCMD_REG              */  0,                                         0,
    425427    /* 0xe18   VCMDRSVD_REG          */  0,                                         0,
     
    428430    /* 0xe30   Reserved              */  0,                                         0,
    429431    /* 0xe38   Reserved              */  0,                                         0,
    430     /* 0xe40   IVA_REG               */  0,                                         0,
    431     /* 0xe48   IOTLB_REG             */  0,                                         0,
    432     /* 0xe50   Reserved              */  0,                                         0,
    433     /* 0xe58   Reserved              */  0,                                         0,
    434     /* 0xe60   FRCD_REG_LO           */  DMAR_LO_U32(VTD_FRCD_REG_LO_RW1C_MASK),    DMAR_HI_U32(VTD_FRCD_REG_LO_RW1C_MASK),
    435     /* 0xe68   FRCD_REG_HI           */  DMAR_LO_U32(VTD_FRCD_REG_HI_RW1C_MASK),    DMAR_HI_U32(VTD_FRCD_REG_HI_RW1C_MASK),
     432    /* 0xe40   Reserved              */  0,                                         0,
     433    /* 0xe48   Reserved              */  0,                                         0,
     434    /* 0xe50   IVA_REG               */  0,                                         0,
     435    /* 0xe58   IOTLB_REG             */  0,                                         0,
     436    /* 0xe60   Reserved              */  0,                                         0,
     437    /* 0xe68   Reserved              */  0,                                         0,
     438    /* 0xe70   FRCD_REG_LO           */  DMAR_LO_U32(VTD_FRCD_REG_LO_RW1C_MASK),    DMAR_HI_U32(VTD_FRCD_REG_LO_RW1C_MASK),
     439    /* 0xe78   FRCD_REG_HI           */  DMAR_LO_U32(VTD_FRCD_REG_HI_RW1C_MASK),    DMAR_HI_U32(VTD_FRCD_REG_HI_RW1C_MASK),
    436440};
    437441AssertCompile(sizeof(g_au32Rw1cMasks1) == DMAR_MMIO_GROUP_1_SIZE);
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