Changeset 36448 in vbox
- Timestamp:
- Mar 28, 2011 12:37:43 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/rawpci.h
r36441 r36448 50 50 } PCIRAWMEMINFOACTION; 51 51 52 /** 53 * Per-VM capability flag bits. 54 */ 55 typedef enum PCIRAWVMFLAGS 56 { 57 /** If we can use IOMMU in this VM. */ 58 PCIRAW_VMFLAGS_HAS_IOMMU = (1 << 0), 59 PCIRAW_VMFLAGS_32BIT_HACK = 0x7fffffff 60 } PCIRAWVMFLAGS; 61 52 62 /* Forward declaration. */ 53 struct RAWPCI VM;63 struct RAWPCIPERVM; 54 64 55 65 /** … … 69 79 * @param Action Action performed (i.e. if page was mapped or unmapped). 70 80 */ 71 typedef DECLCALLBACK(int) FNRAWPCICONTIGPHYSMEMINFO(struct RAWPCI VM* pVmData, RTHCPHYS HostStart, RTGCPHYS GuestStart, uint64_t cMemSize, PCIRAWMEMINFOACTION Action);81 typedef DECLCALLBACK(int) FNRAWPCICONTIGPHYSMEMINFO(struct RAWPCIPERVM* pVmData, RTHCPHYS HostStart, RTGCPHYS GuestStart, uint64_t cMemSize, PCIRAWMEMINFOACTION Action); 72 82 typedef FNRAWPCICONTIGPHYSMEMINFO *PFNRAWPCICONTIGPHYSMEMINFO; 73 83 74 84 /** Data being part of the VM structure. */ 75 typedef struct RAWPCI VM85 typedef struct RAWPCIPERVM 76 86 { 77 87 /** Shall only be interpreted by the host PCI driver. */ … … 79 89 /** Callback called when mapping of host pages to the guest changes. */ 80 90 PFNRAWPCICONTIGPHYSMEMINFO pfnContigMemInfo; 81 } RAWPCIVM; 82 typedef RAWPCIVM *PRAWPCIVM; 91 /** Flags describing VM capabilities (such as IOMMU presence). */ 92 uint32_t fVmCaps; 93 } RAWPCIPERVM; 94 typedef RAWPCIPERVM *PRAWPCIPERVM; 83 95 84 96 /** Parameters buffer for PCIRAWR0_DO_OPEN_DEVICE call */ … … 90 102 /* out */ 91 103 PCIRAWDEVHANDLE Device; 104 uint32_t fDevFlags; 92 105 } PCIRAWREQOPENDEVICE; 93 106 … … 496 509 uint32_t u32HostAddress, 497 510 uint32_t fFlags, 498 PRAWPCIVM pVmCtx, 499 PRAWPCIDEVPORT *ppDevPort)); 511 PRAWPCIPERVM pVmCtx, 512 PRAWPCIDEVPORT *ppDevPort, 513 uint32_t *pfDevFlags)); 500 514 501 515 … … 511 525 DECLR0CALLBACKMEMBER(int, pfnInitVm,(PRAWPCIFACTORY pFactory, 512 526 PVM pVM, 513 PRAWPCI VMpPciData));527 PRAWPCIPERVM pPciData)); 514 528 515 529 /** … … 524 538 DECLR0CALLBACKMEMBER(void, pfnDeinitVm,(PRAWPCIFACTORY pFactory, 525 539 PVM pVM, 526 PRAWPCI VMpPciData));540 PRAWPCIPERVM pPciData)); 527 541 } RAWPCIFACTORY; 528 542 -
trunk/include/VBox/vmm/gvm.h
r35361 r36448 102 102 uint8_t padding[256]; 103 103 } gmm; 104 105 /** The RAWPCIVM per vm data. */ 106 union 107 { 108 #ifdef ___VBox_rawpci_h 109 struct RAWPCIPERVM s; 110 #endif 111 uint8_t padding[64]; 112 } rawpci; 113 104 114 105 115 /** GVMCPU array for the configured number of virtual CPUs. */ -
trunk/include/VBox/vmm/vm.h
r36329 r36448 1013 1013 } cfgm; 1014 1014 1015 /** RAWPCIVM part. */1016 union1017 {1018 #ifdef ___VBox_rawpci_h1019 struct RAWPCIVM s;1020 #endif1021 uint8_t padding[64]; /* multiple of 8 */1022 } rawpci;1023 1015 1024 1016 /** Padding for aligning the cpu array on a page boundary. */ 1025 uint8_t abAlignment2[1 438];1017 uint8_t abAlignment2[1502]; 1026 1018 1027 1019 /* ---- end small stuff ---- */ -
trunk/src/VBox/HostDrivers/VBoxPci/VBoxPci.c
r36436 r36448 409 409 uint32_t u32HostAddress, 410 410 uint32_t fFlags, 411 PRAWPCIVM pVmCtx, 412 PRAWPCIDEVPORT *ppDevPort) 411 PRAWPCIPERVM pVmCtx, 412 PRAWPCIDEVPORT *ppDevPort, 413 uint32_t *pfDevFlags) 413 414 { 414 415 int rc; … … 476 477 uint32_t u32HostAddress, 477 478 uint32_t fFlags, 478 PRAWPCIVM pVmCtx, 479 PRAWPCIDEVPORT *ppDevPort) 479 PRAWPCIPERVM pVmCtx, 480 PRAWPCIDEVPORT *ppDevPort, 481 uint32_t *pfDevFlags) 480 482 { 481 483 PVBOXRAWPCIGLOBALS pGlobals = (PVBOXRAWPCIGLOBALS)((uint8_t *)pFactory - RT_OFFSETOF(VBOXRAWPCIGLOBALS, RawPciFactory)); … … 496 498 } 497 499 498 rc = vboxPciNewInstance(pGlobals, u32HostAddress, fFlags, pVmCtx, ppDevPort );500 rc = vboxPciNewInstance(pGlobals, u32HostAddress, fFlags, pVmCtx, ppDevPort, pfDevFlags); 499 501 500 502 unlock: … … 521 523 static DECLCALLBACK(int) vboxPciFactoryInitVm(PRAWPCIFACTORY pFactory, 522 524 PVM pVM, 523 PRAWPCI VMpVmData)525 PRAWPCIPERVM pVmData) 524 526 { 525 527 PVBOXRAWPCIDRVVM pThis = (PVBOXRAWPCIDRVVM)RTMemAllocZ(sizeof(VBOXRAWPCIDRVVM)); … … 533 535 { 534 536 rc = vboxPciOsInitVm(pThis, pVM, pVmData); 535 #ifdef VBOX_WITH_IOMMU536 /* If IOMMU notification routine in pVmData->pfnContigMemInfo537 is not set - we have no IOMMU hardware. */538 #endif539 537 540 538 if (RT_SUCCESS(rc)) 541 539 { 540 #ifdef VBOX_WITH_IOMMU 541 /* If IOMMU notification routine in pVmData->pfnContigMemInfo 542 is set - we have functional IOMMU hardware. */ 543 if (pVmData->pfnContigMemInfo) 544 pVmData->fVmCaps |= PCIRAW_VMFLAGS_HAS_IOMMU; 545 #endif 542 546 pVmData->pDriverData = pThis; 543 547 return VINF_SUCCESS; … … 557 561 static DECLCALLBACK(void) vboxPciFactoryDeinitVm(PRAWPCIFACTORY pFactory, 558 562 PVM pVM, 559 PRAWPCI VMpPciData)563 PRAWPCIPERVM pPciData) 560 564 { 561 565 if (pPciData->pDriverData) -
trunk/src/VBox/HostDrivers/VBoxPci/VBoxPciInternal.h
r36422 r36448 86 86 void *pIrqContext; 87 87 88 PRAWPCI VMpVmCtx;88 PRAWPCIPERVM pVmCtx; 89 89 } VBOXRAWPCIINS; 90 90 … … 139 139 DECLHIDDEN(void) vboxPciShutdown(PVBOXRAWPCIGLOBALS pGlobals); 140 140 141 DECLHIDDEN(int) vboxPciOsInitVm(PVBOXRAWPCIDRVVM pThis, PVM pVM, PRAWPCI VM pVmData);141 DECLHIDDEN(int) vboxPciOsInitVm(PVBOXRAWPCIDRVVM pThis, PVM pVM, PRAWPCIPERVM pVmData); 142 142 DECLHIDDEN(void) vboxPciOsDeinitVm(PVBOXRAWPCIDRVVM pThis, PVM pVM); 143 143 -
trunk/src/VBox/VMM/VMMR0/PGMR0.cpp
r36441 r36448 20 20 *******************************************************************************/ 21 21 #define LOG_GROUP LOG_GROUP_PGM 22 #include <VBox/rawpci.h> 22 23 #include <VBox/vmm/pgm.h> 23 24 #include <VBox/vmm/gmm.h> 25 #include <VBox/vmm/gvm.h> 24 26 #include "PGMInternal.h" 25 27 #include <VBox/vmm/vm.h> … … 194 196 manager. It shall use the global VM handle, not the user VM handle to 195 197 store the per-VM info (domain) since that is all ring-0 stuff, thus 196 passing pGVM here. I've tentitively prefixed the functions 'GP icRawR0',198 passing pGVM here. I've tentitively prefixed the functions 'GPciRawR0', 197 199 we can discuss the PciRaw code re-organtization when I'm back from 198 200 vacation. … … 235 237 AssertReturn(!(GCPhys & PAGE_OFFSET_MASK), VERR_INTERNAL_ERROR_3); 236 238 AssertReturn(!(HCPhys & PAGE_OFFSET_MASK), VERR_INTERNAL_ERROR_3); 239 240 if (pGVM->rawpci.s.pfnContigMemInfo) 241 /** @todo: what do we do on failure? */ 242 pGVM->rawpci.s.pfnContigMemInfo(&pGVM->rawpci.s, HCPhys, GCPhys, PAGE_SIZE, PCIRAW_MEMINFO_MAP); 243 237 244 return VINF_SUCCESS; 238 245 } … … 254 261 { 255 262 AssertReturn(!(GCPhys & PAGE_OFFSET_MASK), VERR_INTERNAL_ERROR_3); 263 264 if (pGVM->rawpci.s.pfnContigMemInfo) 265 /** @todo: what do we do on failure? */ 266 pGVM->rawpci.s.pfnContigMemInfo(&pGVM->rawpci.s, 0, GCPhys, PAGE_SIZE, PCIRAW_MEMINFO_UNMAP); 267 256 268 return VINF_SUCCESS; 257 269 }
Note:
See TracChangeset
for help on using the changeset viewer.