VirtualBox

Changeset 35676 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Jan 24, 2011 2:24:34 PM (14 years ago)
Author:
vboxsync
Message:

Main, VMM: PCI passthrough work

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp

    r35358 r35676  
    28122812}
    28132813
     2814/** @interface_method_impl{PDMDEVHLPR3,pfnPciRawRegister} */
     2815static DECLCALLBACK(int) pdmR3DevHlp_PciRawRegister(PPDMDEVINS pDevIns, PPDMPCIRAWREG pPciRawReg, PCPDMPCIRAWHLPR3 *ppPciRawHlpR3)
     2816{
     2817    PDMDEV_ASSERT_DEVINS(pDevIns);
     2818    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
     2819    LogFlow(("pdmR3DevHlp_PciRawRegister: caller='%s'/%d:\n"));
     2820
     2821    /*
     2822     * Validate input.
     2823     */
     2824    if (pPciRawReg->u32Version != PDM_PCIRAWREG_VERSION)
     2825    {
     2826        AssertMsgFailed(("u32Version=%#x expected %#x\n", pPciRawReg->u32Version, PDM_PCIRAWREG_VERSION));
     2827        LogFlow(("pdmR3DevHlp_PciRawRegister: caller='%s'/%d: returns %Rrc (version)\n", pDevIns->pReg->szName, pDevIns->iInstance, VERR_INVALID_PARAMETER));
     2828        return VERR_INVALID_PARAMETER;
     2829    }
     2830
     2831    if (!ppPciRawHlpR3)
     2832    {
     2833        Assert(ppPciRawHlpR3);
     2834        LogFlow(("pdmR3DevHlp_PciRawRegister: caller='%s'/%d: returns %Rrc (ppApicHlpR3)\n", pDevIns->pReg->szName, pDevIns->iInstance, VERR_INVALID_PARAMETER));
     2835        return VERR_INVALID_PARAMETER;
     2836    }
     2837
     2838    /* set the helper pointer and return. */
     2839    *ppPciRawHlpR3 = &g_pdmR3DevPciRawHlp;
     2840    LogFlow(("pdmR3DevHlp_PciRawRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS));
     2841    return VINF_SUCCESS;
     2842}
    28142843
    28152844/** @interface_method_impl{PDMDEVHLPR3,pfnDMACRegister} */
     
    31823211    pdmR3DevHlp_IOAPICRegister,
    31833212    pdmR3DevHlp_HPETRegister,
     3213    pdmR3DevHlp_PciRawRegister,
    31843214    pdmR3DevHlp_DMACRegister,
    31853215    pdmR3DevHlp_DMARegister,
     
    33923422    pdmR3DevHlp_IOAPICRegister,
    33933423    pdmR3DevHlp_HPETRegister,
     3424    pdmR3DevHlp_PciRawRegister,
    33943425    pdmR3DevHlp_DMACRegister,
    33953426    pdmR3DevHlp_DMARegister,
     
    34693500
    34703501/** @} */
    3471 
  • trunk/src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp

    r35358 r35676  
    651651/** @} */
    652652
    653 
     653/** @interface_method_impl{PDMPCIRAWHLPR3,pfnGetRCHelpers} */
     654static DECLCALLBACK(PCPDMPCIRAWHLPRC) pdmR3PciRawHlp_GetRCHelpers(PPDMDEVINS pDevIns)
     655{
     656    PDMDEV_ASSERT_DEVINS(pDevIns);
     657    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
     658    RTRCPTR pRCHelpers = 0;
     659    int rc = PDMR3LdrGetSymbolRC(pDevIns->Internal.s.pVMR3, NULL, "g_pdmRCPciRawHlp", &pRCHelpers);
     660    AssertReleaseRC(rc);
     661    AssertRelease(pRCHelpers);
     662    LogFlow(("pdmR3PciRawHlp_GetGCHelpers: caller='%s'/%d: returns %RRv\n",
     663             pDevIns->pReg->szName, pDevIns->iInstance, pRCHelpers));
     664    return pRCHelpers;
     665}
     666
     667
     668/** @interface_method_impl{PDMPCIRAWHLPR3,pfnGetR0Helpers} */
     669static DECLCALLBACK(PCPDMPCIRAWHLPR0) pdmR3PciRawHlp_GetR0Helpers(PPDMDEVINS pDevIns)
     670{
     671    PDMDEV_ASSERT_DEVINS(pDevIns);
     672    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
     673    PCPDMHPETHLPR0 pR0Helpers = 0;
     674    int rc = PDMR3LdrGetSymbolR0(pDevIns->Internal.s.pVMR3, NULL, "g_pdmR0PciRawHlp", &pR0Helpers);
     675    AssertReleaseRC(rc);
     676    AssertRelease(pR0Helpers);
     677    LogFlow(("pdmR3PciRawHlp_GetR0Helpers: caller='%s'/%d: returns %RHv\n",
     678             pDevIns->pReg->szName, pDevIns->iInstance, pR0Helpers));
     679    return pR0Helpers;
     680}
     681
     682/**
     683 * Raw PCI Device Helpers.
     684 */
     685const PDMPCIRAWHLPR3 g_pdmR3DevPciRawHlp =
     686{
     687    PDM_PCIRAWHLPR3_VERSION,
     688    pdmR3PciRawHlp_GetRCHelpers,
     689    pdmR3PciRawHlp_GetR0Helpers,
     690    PDM_PCIRAWHLPR3_VERSION, /* the end */
     691};
    654692
    655693/* none yet */
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