GIMDev.cpp revision 2ac3892cdc8b16a0dee55e8b4510b8ecea83c95f
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * Guest Interface Manager Device.
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * Copyright (C) 2014 Oracle Corporation
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * This file is part of VirtualBox Open Source Edition (OSE), as
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * available from http://www.virtualbox.org. This file is free software;
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * you can redistribute it and/or modify it under the terms of the GNU
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * General Public License (GPL) as published by the Free Software
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * Foundation, in version 2 as it comes in the "COPYING" file of the
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest/*******************************************************************************
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest* Header Files *
7bf512aea50c834dc9c3ef5a0a228059fcc753a5jenkins*******************************************************************************/
6202ba4d983650b484ebe9607707003fef5e09c6Andrew Forrest * GIM device.
6202ba4d983650b484ebe9607707003fef5e09c6Andrew Forresttypedef struct GIMDEV
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest /** Pointer to the device instance - R3 Ptr. */
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest /** Pointer to the device instance - R0 Ptr. */
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest /** Pointer to the device instance - RC Ptr. */
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest /** Alignment. */
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest/** Pointer to the GIM device state. */
0440e371231a4e5877f4f26b7c7195c5ceda0545Andrew Forrest * @interface_method_impl{PDMDEVREG,pfnConstruct}
0440e371231a4e5877f4f26b7c7195c5ceda0545Andrew Forreststatic DECLCALLBACK(int) gimdevR3Construct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfg)
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest PGIMDEV pThis = PDMINS_2_DATA(pDevIns, PGIMDEV);
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * Initialize relevant state bits.
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest pThis->pDevInsR0 = PDMDEVINS_2_R0PTR(pDevIns);
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest pThis->pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
0440e371231a4e5877f4f26b7c7195c5ceda0545Andrew Forrest * Register ourselves with the GIM VMM component.
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * Get the MMIO2 regions from the GIM provider.
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest PGIMMMIO2REGION pRegionsR3 = GIMR3GetMmio2Regions(pVM, &cRegions);
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest * Register the MMIO2 regions.
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest for (uint32_t i = 0; i < cRegions; i++, pCur++)
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest int rc = PDMDevHlpMMIO2Register(pDevIns, pCur->iRegion, pCur->cbRegion, 0 /* fFlags */, &pCur->pvPageR3,
9401b2513f39074de0be9ae452108d0508a6d59fAndrew Forrest rc = PDMDevHlpMMIO2MapKernel(pDevIns, pCur->iRegion, 0 /* off */, pCur->cbRegion, pCur->szDescription,
&pR0Mapping);
rc = PDMDevHlpMMHyperMapMMIO2(pDevIns, pCur->iRegion, 0 /* off */, pCur->cbRegion, pCur->szDescription,
&pRCMapping);
return VINF_SUCCESS;
return rc;
return VINF_SUCCESS;
sizeof(GIMDEV),
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,