VirtualBox

Changeset 36028 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 21, 2011 9:54:29 AM (14 years ago)
Author:
vboxsync
Message:

PCI: more host API, lifetime issues

Location:
trunk/src/VBox/HostDrivers/VBoxPci
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/VBoxPci/VBoxPci.c

    r35986 r36028  
    101101}
    102102
     103/**
     104 * @copydoc RAWPCIDEVPORT:: pfnDeinit
     105 */
     106DECLHIDDEN(int) vboxPciDevDeinit(PRAWPCIDEVPORT pPort, uint32_t fFlags)
     107{
     108    PVBOXRAWPCIINS pThis = DEVPORT_2_VBOXRAWPCIINS(pPort);
     109
     110    int rc = vboxPciOsDevDeinit(pThis, fFlags);
     111
     112    return rc;
     113}
     114
     115
     116DECLHIDDEN(int) vboxPciDevGetRegionInfo(PRAWPCIDEVPORT pPort,
     117                                        int32_t        iRegion,
     118                                        RTHCPHYS       *pRegionStart,
     119                                        uint64_t       *pu64RegionSize,
     120                                        bool           *pfPresent,
     121                                        bool           *pfMmio)
     122{
     123    PVBOXRAWPCIINS pThis = DEVPORT_2_VBOXRAWPCIINS(pPort);
     124
     125    int rc = vboxPciOsDevGetRegionInfo(pThis, iRegion,
     126                                       pRegionStart, pu64RegionSize,
     127                                       pfPresent, pfMmio);
     128
     129    return rc;
     130}
     131
     132DECLHIDDEN(int) vboxPciDevMapRegion(PRAWPCIDEVPORT pPort,
     133                                    int32_t        iRegion,
     134                                    RTHCPHYS       pRegionStart,
     135                                    uint64_t       u64RegionSize,
     136                                    RTR0PTR        *pRegionBase)
     137{
     138#if 0
     139    PVBOXRAWPCIINS pThis = DEVPORT_2_VBOXRAWPCIINS(pPort);
     140
     141    int rc = vboxPciOsDevMapRegion(pThis, iRegion, pRegionStart, pu64RegionSize, pRegionBase);
     142
     143    return rc;
     144#else
     145    return VINF_SUCCESS;
     146#endif
     147}
     148
     149
     150/**
     151 * @copydoc RAWPCIDEVPORT:: pfnPciCfgRead
     152 */
     153DECLHIDDEN(int) vboxPciDevPciCfgRead(PRAWPCIDEVPORT pPort, uint32_t Register, PCIRAWMEMLOC      *pValue)
     154{
     155    PVBOXRAWPCIINS pThis = DEVPORT_2_VBOXRAWPCIINS(pPort);
     156
     157    int rc = vboxPciOsDevPciCfgRead(pThis, Register, pValue);
     158
     159    return rc;
     160}
     161
     162/**
     163 * @copydoc RAWPCIDEVPORT:: pfnPciCfgWrite
     164 */
     165DECLHIDDEN(int) vboxPciDevPciCfgWrite(PRAWPCIDEVPORT pPort, uint32_t Register, PCIRAWMEMLOC *pValue)
     166{
     167    PVBOXRAWPCIINS pThis = DEVPORT_2_VBOXRAWPCIINS(pPort);
     168
     169    int rc = vboxPciOsDevPciCfgWrite(pThis, Register, pValue);
     170
     171    return rc;
     172}
    103173
    104174/**
     
    110180 * @param   ppDevPort           Where to store the pointer to our port interface.
    111181 */
    112 static int vboxPciNewInstance(PVBOXRAWPCIGLOBALS pGlobals, 
    113                               uint32_t           u32HostAddress, 
     182static int vboxPciNewInstance(PVBOXRAWPCIGLOBALS pGlobals,
     183                              uint32_t           u32HostAddress,
    114184                              uint32_t           fFlags,
    115185                              PRAWPCIDEVPORT     *ppDevPort)
     
    122192    pNew->pGlobals                      = pGlobals;
    123193    pNew->hSpinlock                     = NIL_RTSPINLOCK;
    124     pNew->cRefs                         = 1;   
     194    pNew->cRefs                         = 1;
    125195    pNew->pNext                         = NULL;
    126196    pNew->HostPciAddress                = u32HostAddress;
    127197
    128198    pNew->DevPort.u32Version            = RAWPCIDEVPORT_VERSION;
     199
    129200    pNew->DevPort.pfnRetain             = vboxPciDevRetain;
    130201    pNew->DevPort.pfnRelease            = vboxPciDevRelease;
    131202    pNew->DevPort.pfnInit               = vboxPciDevInit;
     203    pNew->DevPort.pfnDeinit             = vboxPciDevDeinit;
     204    pNew->DevPort.pfnGetRegionInfo      = vboxPciDevGetRegionInfo;
     205    pNew->DevPort.pfnMapRegion          = vboxPciDevMapRegion;
     206    pNew->DevPort.pfnPciCfgRead         = vboxPciDevPciCfgRead;
     207    pNew->DevPort.pfnPciCfgWrite        = vboxPciDevPciCfgWrite;
     208
    132209    pNew->DevPort.u32VersionEnd         = RAWPCIDEVPORT_VERSION;
    133    
     210
    134211    rc = RTSpinlockCreate(&pNew->hSpinlock);
    135212
     
    155232 * @copydoc RAWPCIFACTORY::pfnCreateAndConnect
    156233 */
    157 static DECLCALLBACK(int) vboxPciFactoryCreateAndConnect(PRAWPCIFACTORY       pFactory, 
    158                                                         uint32_t             u32HostAddress, 
     234static DECLCALLBACK(int) vboxPciFactoryCreateAndConnect(PRAWPCIFACTORY       pFactory,
     235                                                        uint32_t             u32HostAddress,
    159236                                                        uint32_t             fFlags,
    160237                                                        PRAWPCIDEVPORT       *ppDevPort)
     
    320397    int rc = vboxPciInitGlobals(pGlobals);
    321398    if (RT_SUCCESS(rc))
    322     {     
     399    {
    323400        rc = vboxPciInitIdc(pGlobals);
    324401        if (RT_SUCCESS(rc))
     
    335412{
    336413    int rc = vboxPciDeleteIdc(pGlobals);
    337    
     414
    338415    if (RT_SUCCESS(rc))
    339416        vboxPciDeleteGlobals(pGlobals);
  • trunk/src/VBox/HostDrivers/VBoxPci/VBoxPciInternal.h

    r35992 r36028  
    5454    uint32_t           HostPciAddress;
    5555
     56#ifdef RT_OS_LINUX
     57    struct pci_dev  *  pPciDev;
     58#endif
     59
    5660    /** The session this interface is associated with. */
    5761    PSUPDRVSESSION     pSession;
    5862    /** The SUPR0 object id. */
    5963    void               *pvObj;
    60    
     64
    6165    /** Port, given to the outside world. */
    6266    RAWPCIDEVPORT      DevPort;
     
    9599DECLHIDDEN(int)  vboxPciOsDevInit  (PVBOXRAWPCIINS pIns, uint32_t fFlags);
    96100DECLHIDDEN(int)  vboxPciOsDevDeinit(PVBOXRAWPCIINS pIns, uint32_t fFlags);
     101DECLHIDDEN(int)  vboxPciOsDevGetRegionInfo(PVBOXRAWPCIINS pIns,
     102                                           int32_t        iRegion,
     103                                           RTHCPHYS       *pRegionStart,
     104                                           uint64_t       *pu64RegionSize,
     105                                           bool           *pfPresent,
     106                                           bool           *pfMmio);
     107DECLHIDDEN(int)  vboxPciOsDevPciCfgWrite(PVBOXRAWPCIINS pIns, uint32_t Register, PCIRAWMEMLOC *pValue);
     108DECLHIDDEN(int)  vboxPciOsDevPciCfgRead (PVBOXRAWPCIINS pIns, uint32_t Register, PCIRAWMEMLOC *pValue);
    97109
    98110RT_C_DECLS_END
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