VirtualBox

source: vbox/trunk/src/VBox/Main/include/ResourceAssignmentManager.h@ 107044

Last change on this file since 107044 was 106957, checked in by vboxsync, 5 months ago

Main/ResourceAssignmentManager: Rewrite to accomodate for the fact that Windows guests have several requirements on where devices are located (TPM needs to be at fixed 0xfed40000, PL061 GPIO driver doesn't support 64bit MMIO, the GIC re-disitributor emulated by Hyper-V requires 128KiB of MMIO space rather than the 64KiB we currently reserve). This will break saved state compatibility (whether we want to restore this functionality is up for discussion), bugref:10732

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.9 KB
Line 
1/* $Id: ResourceAssignmentManager.h 106957 2024-11-12 12:09:04Z vboxsync $ */
2/** @file
3 * VirtualBox resource assignment (Address ranges, interrupts) manager.
4 */
5
6/*
7 * Copyright (C) 2023-2024 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28#ifndef MAIN_INCLUDED_ResourceAssignmentManager_h
29#define MAIN_INCLUDED_ResourceAssignmentManager_h
30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
34#include "VBox/types.h"
35#include "VirtualBoxBase.h"
36
37class ResourceAssignmentManager
38{
39private:
40 struct State;
41 State *m_pState;
42 RTGCPHYS m_GCPhysMmioHint;
43
44 ResourceAssignmentManager();
45
46public:
47 static ResourceAssignmentManager *createInstance(PCVMMR3VTABLE pVMM, ChipsetType_T chipsetType, IommuType_T iommuType,
48 uint32_t cInterrupts, RTGCPHYS GCPhysMmioHint);
49
50 ~ResourceAssignmentManager();
51
52 /*
53 * The allocation order for memory regions should be:
54 * 1. All regions which require a fixed address (including RAM regions).
55 * 2. The 32-bit MMIO regions.
56 * 3. All the other MMIO regions.
57 */
58 HRESULT assignFixedRomRegion(const char *pszName, RTGCPHYS GCPhysStart, RTGCPHYS cbRegion);
59 HRESULT assignFixedRamRegion(const char *pszName, RTGCPHYS GCPhysStart, RTGCPHYS cbRegion);
60 HRESULT assignFixedMmioRegion(const char *pszName, RTGCPHYS GCPhysStart, RTGCPHYS cbRegion);
61
62 HRESULT assignMmioRegionAligned(const char *pszName, RTGCPHYS cbRegion, RTGCPHYS cbAlignment, PRTGCPHYS pGCPhysStart, PRTGCPHYS pcbRegion,
63 bool fOnly32Bit);
64 HRESULT assignMmioRegion(const char *pszName, RTGCPHYS cbRegion, PRTGCPHYS pGCPhysStart, PRTGCPHYS pcbRegion);
65 HRESULT assignMmio32Region(const char *pszName, RTGCPHYS cbRegion, PRTGCPHYS pGCPhysStart, PRTGCPHYS pcbRegion);
66
67 HRESULT assignInterrupts(const char *pszName, uint32_t cInterrupts, uint32_t *piInterruptFirst);
68 HRESULT assignSingleInterrupt(const char *pszName, uint32_t *piInterrupt);
69
70 HRESULT queryMmioRegion(PRTGCPHYS pGCPhysMmioStart, PRTGCPHYS pcbMmio);
71 HRESULT queryMmio32Region(PRTGCPHYS pGCPhysMmioStart, PRTGCPHYS pcbMmio);
72
73 void dumpMemoryRegionsToReleaseLog(void);
74};
75
76#endif /* !MAIN_INCLUDED_ResourceAssignmentManager_h */
Note: See TracBrowser for help on using the repository browser.

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