VirtualBox

Changeset 88192 in vbox


Ignore:
Timestamp:
Mar 18, 2021 12:29:30 PM (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

    r88174 r88192  
    3939 * @{
    4040 */
    41 #define VTD_MMIO_OFF_VERSION                                    0x000  /**< Version. */
    42 #define VTD_MMIO_OFF_CAP                                        0x008  /**< Capability. */
    43 #define VTD_MMIO_OFF_EXT_CAP                                    0x010  /**< Extended Capability. */
    44 #define VTD_MMIO_OFF_GLOBAL_CMD                                 0x018  /**< Global Command. */
    45 #define VTD_MMIO_OFF_GLOBAL_STATUS                              0x01c  /**< Global Status. */
    46 #define VTD_MMIO_OFF_ROOT_TBL_ADDR                              0x020  /**< Root Table Address. */
    47 #define VTD_MMIO_OFF_CTX_CMD                                    0x028  /**< Context Command. */
    48 
    49 #define VTD_MMIO_OFF_FAULT_STATUS                               0x034  /**< Fault Status.*/
    50 #define VTD_MMIO_OFF_FAULT_EVT_CTRL                             0x038  /**< Fault Event Control.*/
    51 #define VTD_MMIO_OFF_FAULT_EVT_DATA                             0x03c  /**< Fault Event Data. */
    52 #define VTD_MMIO_OFF_FAULT_EVT_ADDR                             0x040  /**< Fault Event Address. */
    53 #define VTD_MMIO_OFF_FAULT_EVT_UP_ADDR                          0x044  /**< Fault Event Upper Address. */
    54 
    55 #define VTD_MMIO_OFF_ADV_FAULT_LOG                              0x058  /**< Advance Fault Log. */
    56 
    57 #define VTD_MMIO_OFF_PROT_MEM_EN                                0x064  /**< Protected Memory Enable (PMEN). */
    58 #define VTD_MMIO_OFF_PROT_LO_MEM_BASE                           0x064  /**< Protected Low Memory Base. */
    59 #define VTD_MMIO_OFF_PROT_LO_MEM_LIMIT                          0x068  /**< Protected Low Memory Limit. */
    60 #define VTD_MMIO_OFF_PROT_HI_MEM_BASE                           0x070  /**< Protected High Memory Base. */
    61 #define VTD_MMIO_OFF_PROT_HI_MEM_LIMIT                          0x078  /**< Protected High Memory Limit. */
    62 
    63 #define VTD_MMIO_OFF_INV_QUEUE_HEAD                             0x080  /**< Invalidation Queue Head. */
    64 #define VTD_MMIO_OFF_INV_QUEUE_TAIL                             0x088  /**< Invalidation Queue Tail. */
    65 #define VTD_MMIO_OFF_INV_QUEUE_ADDR                             0x090  /**< Invalidation Queue Address. */
    66 #define VTD_MMIO_OFF_INV_COMP_STATUS                            0x09c  /**< Invalidation Completion Status. */
    67 #define VTD_MMIO_OFF_INV_COMP_EVT_CTRL                          0x0a0  /**< Invalidation Completion Event Control. */
    68 #define VTD_MMIO_OFF_INV_COMP_EVT_DATA                          0x0a4  /**< Invalidation Completion Event Data. */
    69 #define VTD_MMIO_OFF_INV_COMP_EVT_ADDR                          0x0a8  /**< Invalidation Completion Event Address. */
    70 #define VTD_MMIO_OFF_INV_COMP_EVT_UP_ADDR                       0x0ac  /**< Invalidation Completion Event Upper Address. */
    71 #define VTD_MMIO_OFF_INV_QUEUE_ERR_RECORD                       0x0b0  /**< Invalidation Completion Queue Error Record. */
    72 
    73 #define VTD_MMIO_OFF_IRT_ADDR                                   0x0b8  /**< Interrupt Remapping Table Address. */
    74 
    75 #define VTD_MMIO_OFF_PAGE_REQ_QUEUE_HEAD                        0x0c0  /**< Page Request Queue Head. */
    76 #define VTD_MMIO_OFF_PAGE_REQ_QUEUE_TAIL                        0x0c8  /**< Page Request Queue Tail. */
    77 #define VTD_MMIO_OFF_PAGE_REQ_STATUS                            0x0dc  /**< Page Request Status. */
    78 #define VTD_MMIO_OFF_PAGE_REQ_EVT_CTRL                          0x0e0  /**< Page Request Event Control. */
    79 #define VTD_MMIO_OFF_PAGE_REQ_EVT_DATA                          0x0e4  /**< Page Request Event Data. */
    80 #define VTD_MMIO_OFF_PAGE_REQ_EVT_ADDR                          0x0e8  /**< Page Request Event Address. */
    81 #define VTD_MMIO_OFF_PAGE_REQ_EVT_UP_ADDR                       0x0ec  /**< Page Request Event Upper Address. */
    82 
    83 #define VTD_MMIO_OFF_MTRR_CAP                                   0x100  /**< MTRR Capabliity. */
    84 #define VTD_MMIO_OFF_MTRR_DEF_TYPE                              0x108  /**< MTRR Default Type. */
    85 
    86 #define VTD_MMIO_OFF_MTRR_FIXED_00000                           0x120  /**< Fixed-range MTRR Register for 64K at 00000. */
    87 #define VTD_MMIO_OFF_MTRR_FIXED_80000                           0x128  /**< Fixed-range MTRR Register for 16K at 80000. */
    88 #define VTD_MMIO_OFF_MTRR_FIXED_A0000                           0x130  /**< Fixed-range MTRR Register for 16K at a0000. */
    89 #define VTD_MMIO_OFF_MTRR_FIXED_C0000                           0x138  /**< Fixed-range MTRR Register for  4K at c0000. */
    90 #define VTD_MMIO_OFF_MTRR_FIXED_C8000                           0x140  /**< Fixed-range MTRR Register for  4K at c8000. */
    91 #define VTD_MMIO_OFF_MTRR_FIXED_D0000                           0x148  /**< Fixed-range MTRR Register for  4K at d0000. */
    92 #define VTD_MMIO_OFF_MTRR_FIXED_D8000                           0x150  /**< Fixed-range MTRR Register for  4K at d8000. */
    93 #define VTD_MMIO_OFF_MTRR_FIXED_E0000                           0x158  /**< Fixed-range MTRR Register for  4K at e0000. */
    94 #define VTD_MMIO_OFF_MTRR_FIXED_E8000                           0x160  /**< Fixed-range MTRR Register for  4K at e8000. */
    95 #define VTD_MMIO_OFF_MTRR_FIXED_F0000                           0x168  /**< Fixed-range MTRR Register for  4K at f0000. */
    96 #define VTD_MMIO_OFF_MTRR_FIXED_F8000                           0x170  /**< Fixed-range MTRR Register for  4K at f8000. */
    97 
    98 #define VTD_MMIO_OFF_MTRR_VAR_BASE_0                            0x180  /**< Variable-range MTRR Base 0. */
    99 #define VTD_MMIO_OFF_MTRR_VAR_MASK_0                            0x188  /**< Variable-range MTRR Mask 0. */
    100 #define VTD_MMIO_OFF_MTRR_VAR_BASE_1                            0x190  /**< Variable-range MTRR Base 1. */
    101 #define VTD_MMIO_OFF_MTRR_VAR_MASK_1                            0x198  /**< Variable-range MTRR Mask 1. */
    102 #define VTD_MMIO_OFF_MTRR_VAR_BASE_2                            0x1a0  /**< Variable-range MTRR Base 2. */
    103 #define VTD_MMIO_OFF_MTRR_VAR_MASK_2                            0x1a8  /**< Variable-range MTRR Mask 2. */
    104 #define VTD_MMIO_OFF_MTRR_VAR_BASE_3                            0x1b0  /**< Variable-range MTRR Base 3. */
    105 #define VTD_MMIO_OFF_MTRR_VAR_MASK_3                            0x1b8  /**< Variable-range MTRR Mask 3. */
    106 #define VTD_MMIO_OFF_MTRR_VAR_BASE_4                            0x1c0  /**< Variable-range MTRR Base 4. */
    107 #define VTD_MMIO_OFF_MTRR_VAR_MASK_4                            0x1c8  /**< Variable-range MTRR Mask 4. */
    108 #define VTD_MMIO_OFF_MTRR_VAR_BASE_5                            0x1d0  /**< Variable-range MTRR Base 5. */
    109 #define VTD_MMIO_OFF_MTRR_VAR_MASK_5                            0x1d8  /**< Variable-range MTRR Mask 5. */
    110 #define VTD_MMIO_OFF_MTRR_VAR_BASE_6                            0x1e0  /**< Variable-range MTRR Base 6. */
    111 #define VTD_MMIO_OFF_MTRR_VAR_MASK_6                            0x1e8  /**< Variable-range MTRR Mask 6. */
    112 #define VTD_MMIO_OFF_MTRR_VAR_BASE_7                            0x1f0  /**< Variable-range MTRR Base 7. */
    113 #define VTD_MMIO_OFF_MTRR_VAR_MASK_7                            0x1f8  /**< Variable-range MTRR Mask 7. */
    114 #define VTD_MMIO_OFF_MTRR_VAR_BASE_8                            0x200  /**< Variable-range MTRR Base 8. */
    115 #define VTD_MMIO_OFF_MTRR_VAR_MASK_8                            0x208  /**< Variable-range MTRR Mask 8. */
    116 #define VTD_MMIO_OFF_MTRR_VAR_BASE_9                            0x210  /**< Variable-range MTRR Base 9. */
    117 #define VTD_MMIO_OFF_MTRR_VAR_MASK_9                            0x218  /**< Variable-range MTRR Mask 9. */
    118 
    119 #define VTD_MMIO_OFF_VIRT_CMD_CAP                               0xe00  /**< Virtual Command Capability. */
    120 #define VTD_MMIO_OFF_VIRT_CMD                                   0xe10  /**< Virtual Command. */
    121 #define VTD_MMIO_OFF_VIRT_CMD_RESP                              0xe20  /**< Virtual Command Response. */
     41#define VTD_MMIO_GROUP_0_OFF_FIRST                              0x000
     42#define VTD_MMIO_OFF_VER_REG                                    0x000  /**< Version. */
     43#define VTD_MMIO_OFF_CAP_REG                                    0x008  /**< Capability. */
     44#define VTD_MMIO_OFF_ECAP_REG                                   0x010  /**< Extended Capability. */
     45#define VTD_MMIO_OFF_GCMD_REG                                   0x018  /**< Global Command. */
     46#define VTD_MMIO_OFF_GSTS_REG                                   0x01c  /**< Global Status. */
     47#define VTD_MMIO_OFF_RTADDR_REG                                 0x020  /**< Root Table Address. */
     48#define VTD_MMIO_OFF_CCMD_REG                                   0x028  /**< Context Command. */
     49
     50#define VTD_MMIO_OFF_FSTS_REG                                   0x034  /**< Fault Status.*/
     51#define VTD_MMIO_OFF_FECTL_REG                                  0x038  /**< Fault Event Control.*/
     52#define VTD_MMIO_OFF_FEDATA_REG                                 0x03c  /**< Fault Event Data. */
     53#define VTD_MMIO_OFF_FEADDR_REG                                 0x040  /**< Fault Event Address. */
     54#define VTD_MMIO_OFF_FEUADDR_REG                                0x044  /**< Fault Event Upper Address. */
     55
     56#define VTD_MMIO_OFF_AFLOG_REG                                  0x058  /**< Advance Fault Log. */
     57
     58#define VTD_MMIO_OFF_PMEN_REG                                   0x064  /**< Protected Memory Enable (PMEN). */
     59#define VTD_MMIO_OFF_PLMBASE_REG                                0x068  /**< Protected Low Memory Base. */
     60#define VTD_MMIO_OFF_PLMLIMIT_REG                               0x06c  /**< Protected Low Memory Limit. */
     61#define VTD_MMIO_OFF_PHMBASE_REG                                0x070  /**< Protected High Memory Base. */
     62#define VTD_MMIO_OFF_PHMLIMIT_REG                               0x078  /**< Protected High Memory Limit. */
     63
     64#define VTD_MMIO_OFF_IQH_REG                                    0x080  /**< Invalidation Queue Head. */
     65#define VTD_MMIO_OFF_IQT_REG                                    0x088  /**< Invalidation Queue Tail. */
     66#define VTD_MMIO_OFF_IQA_REG                                    0x090  /**< Invalidation Queue Address. */
     67#define VTD_MMIO_OFF_ICS_REG                                    0x09c  /**< Invalidation Completion Status. */
     68#define VTD_MMIO_OFF_IECTL_REG                                  0x0a0  /**< Invalidation Completion Event Control. */
     69#define VTD_MMIO_OFF_IEDATA_REG                                 0x0a4  /**< Invalidation Completion Event Data. */
     70#define VTD_MMIO_OFF_IEADDR_REG                                 0x0a8  /**< Invalidation Completion Event Address. */
     71#define VTD_MMIO_OFF_IEUADDR_REG                                0x0ac  /**< Invalidation Completion Event Upper Address. */
     72#define VTD_MMIO_OFF_IQERCD_REG                                 0x0b0  /**< Invalidation Queue Error Record. */
     73
     74#define VTD_MMIO_OFF_IRTA_REG                                   0x0b8  /**< Interrupt Remapping Table Address. */
     75
     76#define VTD_MMIO_OFF_PQH_REG                                    0x0c0  /**< Page Request Queue Head. */
     77#define VTD_MMIO_OFF_PQT_REG                                    0x0c8  /**< Page Request Queue Tail. */
     78#define VTD_MMIO_OFF_PQA_REG                                    0x0d0  /**< Page Request Queue Address. */
     79#define VTD_MMIO_OFF_PRS_REG                                    0x0dc  /**< Page Request Status. */
     80#define VTD_MMIO_OFF_PECTL_REG                                  0x0e0  /**< Page Request Event Control. */
     81#define VTD_MMIO_OFF_PEDATA_REG                                 0x0e4  /**< Page Request Event Data. */
     82#define VTD_MMIO_OFF_PEADDR_REG                                 0x0e8  /**< Page Request Event Address. */
     83#define VTD_MMIO_OFF_PEUADDR_REG                                0x0ec  /**< Page Request Event Upper Address. */
     84
     85#define VTD_MMIO_OFF_MTRRCAP_REG                                0x100  /**< MTRR Capabliity. */
     86#define VTD_MMIO_OFF_MTRRDEF_REG                                0x108  /**< MTRR Default Type. */
     87
     88#define VTD_MMIO_OFF_MTRR_FIX64_00000_REG                       0x120  /**< Fixed-range MTRR Register for 64K at 00000. */
     89#define VTD_MMIO_OFF_MTRR_FIX16K_80000_REG                      0x128  /**< Fixed-range MTRR Register for 16K at 80000. */
     90#define VTD_MMIO_OFF_MTRR_FIX16K_A0000_REG                      0x130  /**< Fixed-range MTRR Register for 16K at a0000. */
     91#define VTD_MMIO_OFF_MTRR_FIX4K_C0000_REG                       0x138  /**< Fixed-range MTRR Register for  4K at c0000. */
     92#define VTD_MMIO_OFF_MTRR_FIX4K_C8000_REG                       0x140  /**< Fixed-range MTRR Register for  4K at c8000. */
     93#define VTD_MMIO_OFF_MTRR_FIX4K_D0000_REG                       0x148  /**< Fixed-range MTRR Register for  4K at d0000. */
     94#define VTD_MMIO_OFF_MTRR_FIX4K_D8000_REG                       0x150  /**< Fixed-range MTRR Register for  4K at d8000. */
     95#define VTD_MMIO_OFF_MTRR_FIX4K_E0000_REG                       0x158  /**< Fixed-range MTRR Register for  4K at e0000. */
     96#define VTD_MMIO_OFF_MTRR_FIX4K_E8000_REG                       0x160  /**< Fixed-range MTRR Register for  4K at e8000. */
     97#define VTD_MMIO_OFF_MTRR_FIX4K_F0000_REG                       0x168  /**< Fixed-range MTRR Register for  4K at f0000. */
     98#define VTD_MMIO_OFF_MTRR_FIX4K_F8000_REG                       0x170  /**< Fixed-range MTRR Register for  4K at f8000. */
     99
     100#define VTD_MMIO_OFF_MTRR_PHYSBASE0_REG                         0x180  /**< Variable-range MTRR Base 0. */
     101#define VTD_MMIO_OFF_MTRR_PHYSMASK0_REG                         0x188  /**< Variable-range MTRR Mask 0. */
     102#define VTD_MMIO_OFF_MTRR_PHYSBASE1_REG                         0x190  /**< Variable-range MTRR Base 1. */
     103#define VTD_MMIO_OFF_MTRR_PHYSMASK1_REG                         0x198  /**< Variable-range MTRR Mask 1. */
     104#define VTD_MMIO_OFF_MTRR_PHYSBASE2_REG                         0x1a0  /**< Variable-range MTRR Base 2. */
     105#define VTD_MMIO_OFF_MTRR_PHYSMASK2_REG                         0x1a8  /**< Variable-range MTRR Mask 2. */
     106#define VTD_MMIO_OFF_MTRR_PHYSBASE3_REG                         0x1b0  /**< Variable-range MTRR Base 3. */
     107#define VTD_MMIO_OFF_MTRR_PHYSMASK3_REG                         0x1b8  /**< Variable-range MTRR Mask 3. */
     108#define VTD_MMIO_OFF_MTRR_PHYSBASE4_REG                         0x1c0  /**< Variable-range MTRR Base 4. */
     109#define VTD_MMIO_OFF_MTRR_PHYSMASK4_REG                         0x1c8  /**< Variable-range MTRR Mask 4. */
     110#define VTD_MMIO_OFF_MTRR_PHYSBASE5_REG                         0x1d0  /**< Variable-range MTRR Base 5. */
     111#define VTD_MMIO_OFF_MTRR_PHYSMASK5_REG                         0x1d8  /**< Variable-range MTRR Mask 5. */
     112#define VTD_MMIO_OFF_MTRR_PHYSBASE6_REG                         0x1e0  /**< Variable-range MTRR Base 6. */
     113#define VTD_MMIO_OFF_MTRR_PHYSMASK6_REG                         0x1e8  /**< Variable-range MTRR Mask 6. */
     114#define VTD_MMIO_OFF_MTRR_PHYSBASE7_REG                         0x1f0  /**< Variable-range MTRR Base 7. */
     115#define VTD_MMIO_OFF_MTRR_PHYSMASK7_REG                         0x1f8  /**< Variable-range MTRR Mask 7. */
     116#define VTD_MMIO_OFF_MTRR_PHYSBASE8_REG                         0x200  /**< Variable-range MTRR Base 8. */
     117#define VTD_MMIO_OFF_MTRR_PHYSMASK8_REG                         0x208  /**< Variable-range MTRR Mask 8. */
     118#define VTD_MMIO_OFF_MTRR_PHYSBASE9_REG                         0x210  /**< Variable-range MTRR Base 9. */
     119#define VTD_MMIO_OFF_MTRR_PHYSMASK9_REG                         0x218  /**< Variable-range MTRR Mask 9. */
     120#define VTD_MMIO_GROUP_0_OFF_LAST                               VTD_MMIO_OFF_MTRR_PHYSMASK9_REG
     121#define VTD_MMIO_GROUP_0_OFF_END                                (VTD_MMIO_GROUP_0_OFF_LAST + 8 /* sizeof MTRR_PHYSMASK9_REG */)
     122
     123#define VTD_MMIO_GROUP_1_OFF_FIRST                              0x000
     124#define VTD_MMIO_OFF_VCCAP_REG                                  0xe00  /**< Virtual Command Capability. */
     125#define VTD_MMIO_OFF_VCMD_REG                                   0xe10  /**< Virtual Command. */
     126#define VTD_MMIO_OFF_VCRSP_REG                                  0xe20  /**< Virtual Command Response. */
     127#define VTD_MMIO_GROUP_1_OFF_LAST                               VTD_MMIO_OFF_VCRSP_REG
     128#define VTD_MMIO_GROUP_1_OFF_END                                (VTD_MMIO_GROUP_1_OFF_LAST + 8 /* sizeof VCRSP_REG */)
     129
     130#define VTD_MMIO_GROUP_0_SIZE                                   (VTD_MMIO_GROUP_0_OFF_END - VTD_MMIO_GROUP_0_OFF_FIRST) /*bytes*/
     131#define VTD_MMIO_GROUP_1_SIZE                                   (VTD_MMIO_GROUP_1_OFF_END - VTD_MMIO_GROUP_1_OFF_FIRST) /*bytes*/
    122132/** @} */
    123133
  • trunk/src/VBox/Devices/Bus/DevIommuIntel.cpp

    r88153 r88192  
    3636/** The current saved state version. */
    3737#define IOMMU_SAVED_STATE_VERSION                   1
    38 /** The IOMMU device instance magic. */
    39 #define IOMMU_MAGIC                                 0x10acce55
    4038
    4139
     
    5250    /** The MMIO handle. */
    5351    IOMMMIOHANDLE               hMmio;
     52
     53    /** IOMMU registers (group 0). */
     54    uint8_t                     abRegs0[VTD_MMIO_GROUP_0_SIZE];
     55    /** IOMMU registers (group 1). */
     56    uint8_t                     abRegs1[VTD_MMIO_GROUP_1_SIZE];
    5457} IOMMU;
    5558/** Pointer to the IOMMU device state. */
     
    108111typedef CTX_SUFF(PIOMMU) PIOMMUCC;
    109112
     113/**
     114 * IOMMU register attributes.
     115 */
     116typedef struct IOMMUREGATTR
     117{
     118    /** Name of the register. */
     119    const char   *pszName;
     120    /** RW: Read/write mask. */
     121    uint64_t      fRwMask;
     122    /** RO: Read-only mask. */
     123    uint64_t      fRoMask;
     124    /** WO: Write-only mask. */
     125    uint64_t      fWoMask;
     126    /** RW1C: Read-only Status, Write-1-to-clear mask. */
     127    uint64_t      fRw1cMask;
     128} IOMMUREGATTR;
     129/** Pointer to an IOMMU register attributes struct. */
     130typedef IOMMUREGATTR *PIOMMUREGATTR;
     131/** Pointer to a const IOMMU register attributes struct. */
     132typedef IOMMUREGATTR const *PCIOMMUREGATTR;
     133
    110134
    111135#ifndef VBOX_DEVICE_STRUCT_TESTCASE
     
    216240static DECLCALLBACK(int) iommuIntelR3Construct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfg)
    217241{
    218     RT_NOREF3(pDevIns, iInstance, pCfg);
     242    RT_NOREF(pCfg);
     243
     244    PIOMMU   pThis   = PDMDEVINS_2_DATA(pDevIns, PIOMMU);
     245    PIOMMUR3 pThisR3 = PDMDEVINS_2_DATA_CC(pDevIns, PIOMMUR3);
     246    pThisR3->pDevInsR3 = pDevIns;
     247
     248    LogFlowFunc(("iInstance=%d\n", iInstance));
     249    NOREF(iInstance);
     250
     251    /*
     252     * Register the IOMMU with PDM.
     253     */
     254    PDMIOMMUREGR3 IommuReg;
     255    RT_ZERO(IommuReg);
     256    IommuReg.u32Version       = PDM_IOMMUREGCC_VERSION;
     257    IommuReg.pfnMemAccess     = iommuIntelMemAccess;
     258    IommuReg.pfnMemBulkAccess = iommuIntelMemBulkAccess;
     259    IommuReg.pfnMsiRemap      = iommuIntelMsiRemap;
     260    IommuReg.u32TheEnd        = PDM_IOMMUREGCC_VERSION;
     261    int rc = PDMDevHlpIommuRegister(pDevIns, &IommuReg, &pThisR3->CTX_SUFF(pIommuHlp), &pThis->idxIommu);
     262    if (RT_FAILURE(rc))
     263        return PDMDEV_SET_ERROR(pDevIns, rc, N_("Failed to register ourselves as an IOMMU device"));
     264    if (pThisR3->CTX_SUFF(pIommuHlp)->u32Version != PDM_IOMMUHLPR3_VERSION)
     265        return PDMDevHlpVMSetError(pDevIns, VERR_VERSION_MISMATCH, RT_SRC_POS,
     266                                   N_("IOMMU helper version mismatch; got %#x expected %#x"),
     267                                   pThisR3->CTX_SUFF(pIommuHlp)->u32Version, PDM_IOMMUHLPR3_VERSION);
     268    if (pThisR3->CTX_SUFF(pIommuHlp)->u32TheEnd != PDM_IOMMUHLPR3_VERSION)
     269        return PDMDevHlpVMSetError(pDevIns, VERR_VERSION_MISMATCH, RT_SRC_POS,
     270                                   N_("IOMMU helper end-version mismatch; got %#x expected %#x"),
     271                                   pThisR3->CTX_SUFF(pIommuHlp)->u32TheEnd, PDM_IOMMUHLPR3_VERSION);
     272    /*
     273     * Use PDM's critical section (via helpers) for the IOMMU device.
     274     */
     275    rc = PDMDevHlpSetDeviceCritSect(pDevIns, PDMDevHlpCritSectGetNop(pDevIns));
     276    AssertRCReturn(rc, rc);
     277
     278    /*
     279     * Initialize read-only PCI configuration space.
     280     */
     281    PPDMPCIDEV pPciDev = pDevIns->apPciDevs[0];
     282    PDMPCIDEV_ASSERT_VALID(pDevIns, pPciDev);
     283
     284    /** @todo Figure out the PCI vendor/product and other stuff. Can't seem to find
     285     *        this yet. Maybe dump info from real hw. */
     286
    219287    return VERR_NOT_IMPLEMENTED;
    220288}
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