VirtualBox

Changeset 108748 in vbox for trunk/src


Ignore:
Timestamp:
Mar 26, 2025 7:48:57 AM (3 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168173
Message:

VMM/GICR3Nem-win.cpp: Adapt to the latest Hyper-V API changes in Windows 11 build 27813, bugref:10392

Location:
trunk/src/VBox/VMM/VMMR3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/GICR3Nem-win.cpp

    r108682 r108748  
    8181/*
    8282 * The following definitions appeared in build 27744 allow interacting with the GIC controller,
    83  * (there is no official SDK for this yet).
     83 * since 27813 the API is public with some changes and available under:
     84 *      https://github.com/MicrosoftDocs/Virtualization-Documentation/blob/main/virtualization/api/hypervisor-platform/headers/WinHvPlatformDefs.h .
    8485 */
    8586/** @todo Better way of defining these which doesn't require casting later on when calling APIs. */
     
    177178#define MY_WHV_LOCAL_INTERRUPT_CONTROLLER_STATE_VERSION 1
    178179
    179 #define MY_WHV_VIRTUAL_PROCESSOR_STATE_TYPE_LOCAL_INTERRUPT_CTRL  (WHV_VIRTUAL_PROCESSOR_STATE_TYPE)0x00001000
    180 #define MY_WHV_VIRTUAL_PROCESSOR_STATE_TYPE_GLOBAL_INTERRUPT_CTRL (WHV_VIRTUAL_PROCESSOR_STATE_TYPE)0x00001003
     180#define WHV_VIRTUAL_PROCESSOR_STATE_TYPE_PFN    RT_BIT_32(31)
     181#define WHV_VIRTUAL_PROCESSOR_STATE_TYPE_ANY_VP RT_BIT_32(30)
     182
     183#define WHvVirtualProcessorStateTypeInterruptControllerState  (WHV_VIRTUAL_PROCESSOR_STATE_TYPE)(0 | WHV_VIRTUAL_PROCESSOR_STATE_TYPE_PFN)
     184#define WHvVirtualProcessorStateTypeGlobalInterruptState      (WHV_VIRTUAL_PROCESSOR_STATE_TYPE)(6 | WHV_VIRTUAL_PROCESSOR_STATE_TYPE_PFN | WHV_VIRTUAL_PROCESSOR_STATE_TYPE_ANY_VP)
    181185
    182186
     
    372376     */
    373377    uint32_t cbWritten = 0;
    374     HRESULT hrc = WHvGetVirtualProcessorState(pThis->hPartition, WHV_ANY_VP, MY_WHV_VIRTUAL_PROCESSOR_STATE_TYPE_GLOBAL_INTERRUPT_CTRL,
     378    HRESULT hrc = WHvGetVirtualProcessorState(pThis->hPartition, WHV_ANY_VP, WHvVirtualProcessorStateTypeGlobalInterruptState,
    375379                                              NULL, 0, &cbWritten);
    376380    AssertLogRelMsgReturn(hrc == WHV_E_INSUFFICIENT_BUFFER,
     
    385389                          VERR_NO_MEMORY);
    386390
    387     hrc = WHvGetVirtualProcessorState(pThis->hPartition, WHV_ANY_VP, MY_WHV_VIRTUAL_PROCESSOR_STATE_TYPE_GLOBAL_INTERRUPT_CTRL,
     391    hrc = WHvGetVirtualProcessorState(pThis->hPartition, WHV_ANY_VP, WHvVirtualProcessorStateTypeGlobalInterruptState,
    388392                                      pState, cbState, &cbWritten);
    389393    AssertLogRelMsg(SUCCEEDED(hrc),
     
    417421        MY_WHV_LOCAL_INTERRUPT_CONTROLLER_STATE LocalState;
    418422
    419         hrc = WHvGetVirtualProcessorState(pThis->hPartition, idCpu, MY_WHV_VIRTUAL_PROCESSOR_STATE_TYPE_LOCAL_INTERRUPT_CTRL,
     423        hrc = WHvGetVirtualProcessorState(pThis->hPartition, idCpu, WHvVirtualProcessorStateTypeInterruptControllerState,
    420424                                          &LocalState, sizeof(LocalState), &cbWritten);
    421425        AssertLogRelMsgReturn(SUCCEEDED(hrc),
     
    494498    AssertRCReturnStmt(rc, RTMemTmpFree(pState), rc);
    495499
    496     HRESULT hrc = WHvSetVirtualProcessorState(pThis->hPartition, WHV_ANY_VP, MY_WHV_VIRTUAL_PROCESSOR_STATE_TYPE_GLOBAL_INTERRUPT_CTRL,
     500    HRESULT hrc = WHvSetVirtualProcessorState(pThis->hPartition, WHV_ANY_VP, WHvVirtualProcessorStateTypeGlobalInterruptState,
    497501                                              pState, cbState);
    498502    RTMemTmpFree(pState);
     
    517521        LocalState.bVersion = MY_WHV_LOCAL_INTERRUPT_CONTROLLER_STATE_VERSION;
    518522
    519         hrc = WHvSetVirtualProcessorState(pThis->hPartition, idCpu, MY_WHV_VIRTUAL_PROCESSOR_STATE_TYPE_LOCAL_INTERRUPT_CTRL,
     523        hrc = WHvSetVirtualProcessorState(pThis->hPartition, idCpu, WHvVirtualProcessorStateTypeInterruptControllerState,
    520524                                          &LocalState, sizeof(LocalState));
    521525        AssertLogRelMsgReturn(SUCCEEDED(hrc),
  • trunk/src/VBox/VMM/VMMR3/NEMR3Native-win-armv8.cpp

    r108411 r108748  
    656656    RTGCPHYS GCPhysMmioBaseIts = 0;
    657657    rc = CFGMR3QueryU64(pGicCfg, "ItsMmioBase", &GCPhysMmioBaseIts);
    658     if (RT_FAILURE(rc))
     658    if (RT_FAILURE(rc) && rc != VERR_CFGM_VALUE_NOT_FOUND)
    659659        return VMSetError(pVM, rc, RT_SRC_POS,
    660660                          "Configuration error: Failed to get the \"ItsMmioBase\" value\n");
     661    rc = VINF_SUCCESS;
    661662
    662663    /*
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