VirtualBox

Changeset 13368

Show
Ignore:
Timestamp:
10/17/08 13:35:13 (3 months ago)
Author:
vboxsync
Message:

Started with IOMR3MMIORegisterR3 extension for MMIO ranges backed by RAM, so it will be possible to turn off protection temporarily.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/include/VBox/iom.h

    r12989 r13368  
    8585                            ) 
    8686 
     87/** 
     88 * MMIO type 
     89 */ 
     90typedef enum IOMMMIOTYPE 
     91{ 
     92    /** 'Normal' MMIO. Reads and writes always fault. */ 
     93    IOMMMIOTYPE_MMIO = 1, 
     94    /** MMIO region backed by memory; protection can be turned off temporarily. */ 
     95    IOMMMIOTYPE_MMIO_WITH_RAM_BACKING, 
     96    /** The usual 32-bit type size hack. */ 
     97    IOMMMIOTYPE_32BIT_HACK = 0x7fffffff 
     98} IOMMMIOTYPE; 
    8799 
    88100/** 
     
    250262VMMR3DECL(int)  IOMR3IOPortDeregister(PVM pVM, PPDMDEVINS pDevIns, RTIOPORT PortStart, RTUINT cPorts); 
    251263 
    252 VMMR3DECL(int)  IOMR3MMIORegisterR3(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTUINT cbRange, RTHCPTR pvUser, 
     264VMMR3DECL(int)  IOMR3MMIORegisterR3(PVM pVM, PPDMDEVINS pDevIns, IOMMMIOTYPE enmMMIOType, RTGCPHYS GCPhysStart, RTUINT cbRange, RTHCPTR pvUser, 
    253265                                    R3PTRTYPE(PFNIOMMMIOWRITE) pfnWriteCallback, 
    254266                                    R3PTRTYPE(PFNIOMMMIOREAD)  pfnReadCallback, 
  • trunk/include/VBox/pdmdev.h

    r13367 r13368  
    27762776     * @returns VBox status. 
    27772777     * @param   pDevIns             The device instance to register the MMIO with. 
     2778     * @param   enmMMIOType         MMIO Type 
    27782779     * @param   GCPhysStart         First physical address in the range. 
    27792780     * @param   cbRange             The size of the range (in bytes). 
     
    27842785     * @param   pszDesc             Pointer to description string. This must not be freed. 
    27852786     */ 
    2786     DECLR3CALLBACKMEMBER(int, pfnMMIORegisterEx,(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTUINT cbRange, RTHCPTR pvUser, 
     2787    DECLR3CALLBACKMEMBER(int, pfnMMIORegisterEx,(PPDMDEVINS pDevIns, IOMMMIOTYPE enmMMIOType, RTGCPHYS GCPhysStart, RTUINT cbRange, RTHCPTR pvUser, 
    27872788                                                 PFNIOMMMIOWRITE pfnWrite, PFNIOMMMIOREAD pfnRead, PFNIOMMMIOFILL pfnFill, 
    27882789                                                 const char *pszDesc)); 
     
    32673268 * @copydoc PDMDEVHLPR3::pfnMMIORegisterEx 
    32683269 */ 
    3269 DECLINLINE(int) PDMDevHlpMMIORegisterEx(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTUINT cbRange, RTHCPTR pvUser, 
     3270DECLINLINE(int) PDMDevHlpMMIORegisterEx(PPDMDEVINS pDevIns, IOMMMIOTYPE enmMMIOType, RTGCPHYS GCPhysStart, RTUINT cbRange, RTHCPTR pvUser, 
    32703271                                        PFNIOMMMIOWRITE pfnWrite, PFNIOMMMIOREAD pfnRead, PFNIOMMMIOFILL pfnFill, 
    32713272                                        const char *pszDesc) 
    32723273{ 
    3273     return pDevIns->pDevHlpR3->pfnMMIORegisterEx(pDevIns, GCPhysStart, cbRange, pvUser, pfnWrite, pfnRead, pfnFill, pszDesc); 
     3274    return pDevIns->pDevHlpR3->pfnMMIORegisterEx(pDevIns, enmMMIOType, GCPhysStart, cbRange, pvUser, pfnWrite, pfnRead, pfnFill, pszDesc); 
    32743275} 
    32753276 
  • trunk/src/VBox/VMM/IOM.cpp

    r13005 r13368  
    13511351 * @param   pVM                 VM handle. 
    13521352 * @param   pDevIns             PDM device instance owning the MMIO range. 
     1353 * @param   enmMMIOType         MMIO Type 
    13531354 * @param   GCPhysStart         First physical address in the range. 
    13541355 * @param   cbRange             The size of the range (in bytes). 
     
    13591360 * @param   pszDesc             Pointer to description string. This must not be freed. 
    13601361 */ 
    1361 VMMR3DECL(int)  IOMR3MMIORegisterR3(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTUINT cbRange, RTHCPTR pvUser, 
     1362VMMR3DECL(int)  IOMR3MMIORegisterR3(PVM pVM, PPDMDEVINS pDevIns, IOMMMIOTYPE enmMMIOType, RTGCPHYS GCPhysStart, RTUINT cbRange, RTHCPTR pvUser, 
    13621363                                    R3PTRTYPE(PFNIOMMMIOWRITE) pfnWriteCallback, R3PTRTYPE(PFNIOMMMIOREAD) pfnReadCallback, 
    13631364                                    R3PTRTYPE(PFNIOMMMIOFILL) pfnFillCallback, const char *pszDesc) 
  • trunk/src/VBox/VMM/PDMDevHlp.cpp

    r13367 r13368  
    211211             pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, GCPhysStart, cbRange, pvUser, pfnWrite, pfnRead, pfnFill, pszDesc, pszDesc)); 
    212212 
    213     int rc = IOMR3MMIORegisterR3(pDevIns->Internal.s.pVMR3, pDevIns, GCPhysStart, cbRange, pvUser, pfnWrite, pfnRead, pfnFill, pszDesc); 
     213    int rc = IOMR3MMIORegisterR3(pDevIns->Internal.s.pVMR3, pDevIns, IOMMMIOTYPE_MMIO, GCPhysStart, cbRange, pvUser, pfnWrite, pfnRead, pfnFill, pszDesc); 
     214 
     215    LogFlow(("pdmR3DevHlp_MMIORegister: caller='%s'/%d: returns %Vrc\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, rc)); 
     216    return rc; 
     217
     218 
     219/** 
     220 * @copydoc PDMDEVHLPR3::pfnMMIORegisterEx 
     221 */ 
     222static DECLCALLBACK(int) pdmR3DevHlp_MMIORegisterEx(PPDMDEVINS pDevIns, IOMMMIOTYPE enmMMIOType, RTGCPHYS GCPhysStart, RTUINT cbRange, RTHCPTR pvUser, 
     223                                                    PFNIOMMMIOWRITE pfnWrite, PFNIOMMMIOREAD pfnRead, PFNIOMMMIOFILL pfnFill, 
     224                                                    const char *pszDesc) 
     225
     226    PDMDEV_ASSERT_DEVINS(pDevIns); 
     227    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3); 
     228    LogFlow(("pdmR3DevHlp_MMIORegister: caller='%s'/%d: GCPhysStart=%VGp cbRange=%#x pvUser=%p pfnWrite=%p pfnRead=%p pfnFill=%p pszDesc=%p:{%s}\n", 
     229             pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, GCPhysStart, cbRange, pvUser, pfnWrite, pfnRead, pfnFill, pszDesc, pszDesc)); 
     230 
     231    int rc = IOMR3MMIORegisterR3(pDevIns->Internal.s.pVMR3, pDevIns, enmMMIOType, GCPhysStart, cbRange, pvUser, pfnWrite, pfnRead, pfnFill, pszDesc); 
    214232 
    215233    LogFlow(("pdmR3DevHlp_MMIORegister: caller='%s'/%d: returns %Vrc\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, rc)); 
     
    26022620    int rc = PDMR3UnregisterVMMDevHeap(pDevIns->Internal.s.pVMR3, GCPhys); 
    26032621    return rc; 
    2604 } 
    2605  
    2606 /** 
    2607  * @copydoc PDMDEVHLPR3::pfnMMIORegisterEx 
    2608  */ 
    2609 static DECLCALLBACK(int) pdmR3DevHlp_MMIORegisterEx(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTUINT cbRange, RTHCPTR pvUser, 
    2610                                                     PFNIOMMMIOWRITE pfnWrite, PFNIOMMMIOREAD pfnRead, PFNIOMMMIOFILL pfnFill, 
    2611                                                     const char *pszDesc) 
    2612 { 
    2613     PDMDEV_ASSERT_DEVINS(pDevIns); 
    2614     VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3); 
    2615  
    2616     /** @todo */ 
    2617     return VERR_NOT_SUPPORTED; 
    26182622} 
    26192623 

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy