VirtualBox

Changeset 81929 in vbox for trunk/src/VBox/Devices/PC


Ignore:
Timestamp:
Nov 18, 2019 12:44:16 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
134726
Message:

DevPcArch: Converted to new PDM device style. bugref:9218

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/DevPcArch.cpp

    r81591 r81929  
    4848
    4949/**
    50  * @callback_method_impl{FNIOMIOPORTIN, Math coprocessor.}
    51  */
    52 static DECLCALLBACK(int) pcarchIOPortFPURead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
     50 * @callback_method_impl{FNIOMIOPORTNEWIN, Math coprocessor.}
     51 * @note offPort is absolute
     52 */
     53static DECLCALLBACK(VBOXSTRICTRC)
     54pcarchIOPortFPURead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
    5355{
    5456    int rc;
    5557    NOREF(pvUser); NOREF(pDevIns); NOREF(pu32);
    56     rc = PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d\n", Port, cb);
     58    rc = PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d\n", offPort, cb);
    5759    if (rc == VINF_SUCCESS)
    5860        rc = VERR_IOM_IOPORT_UNUSED;
     
    6163
    6264/**
    63  * @callback_method_impl{FNIOMIOPORTOUT, Math coprocessor.}
     65 * @callback_method_impl{FNIOMIOPORTNEWOUT, Math coprocessor.}
     66 * @note    offPort is absolute
    6467 * @todo Add IGNNE support.
    6568 */
    66 static DECLCALLBACK(int) pcarchIOPortFPUWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
     69static DECLCALLBACK(VBOXSTRICTRC)
     70pcarchIOPortFPUWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
    6771{
    6872    int rc = VINF_SUCCESS;
     
    7074    if (cb == 1)
    7175    {
    72         switch (Port)
     76        switch (offPort)
    7377        {
    7478            /*
     
    8084#if 0
    8185                if (!u32)
    82                     rc = PDMDeviceDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d u32=%#x\n", Port, cb, u32);
     86                    rc = PDMDeviceDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d u32=%#x\n", offPort, cb, u32);
    8387#endif
    8488                /* pDevIns->pHlp->pfnPICSetIrq(pDevIns, 13, 0); */
     
    97101            case 0xfc:
    98102            default:
    99                 rc = PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d u32=%#x\n", Port, cb, u32);
     103                rc = PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d u32=%#x\n", offPort, cb, u32);
    100104                break;
    101105        }
     
    104108    }
    105109    else
    106         rc = PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d u32=%#x\n", Port, cb, u32);
     110        rc = PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d u32=%#x\n", offPort, cb, u32);
    107111    return rc;
    108112}
     
    143147SeeAlso: #P0416,#P0417,MSR 00001000h
    144148 * @endverbatim
    145  */
    146 static DECLCALLBACK(int)
    147 pcarchIOPortPS2SysControlPortARead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
     149 * @note    offPort is absolute
     150 */
     151static DECLCALLBACK(VBOXSTRICTRC)
     152pcarchIOPortPS2SysControlPortARead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
    148153{
    149154    RT_NOREF1(pvUser);
     
    153158        return VINF_SUCCESS;
    154159    }
    155     return PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d\n", Port, cb);
     160    return PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d\n", offPort, cb);
    156161}
    157162
     
    160165 * @callback_method_impl{FNIOMIOPORTOUT, PS/2 system control port A.}
    161166 * @see     Remark and todo of pcarchIOPortPS2SysControlPortARead().
    162  */
    163 static DECLCALLBACK(int)
    164 pcarchIOPortPS2SysControlPortAWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
     167 * @note    offPort is absolute
     168 */
     169static DECLCALLBACK(VBOXSTRICTRC)
     170pcarchIOPortPS2SysControlPortAWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
    165171{
    166172    NOREF(pvUser);
     
    182188        return VINF_SUCCESS;
    183189    }
    184     return PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d u32=%#x\n", Port, cb, u32);
    185 }
    186 
    187 
    188 /**
    189  * @callback_method_impl{FNIOMMMIOWRITE, Ignores writes to the reserved memory.}
    190  */
    191 static DECLCALLBACK(int) pcarchReservedMemoryWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr,
    192                                                    void const *pv, unsigned cb)
    193 {
    194     Log2(("pcarchReservedMemoryRead: %#RGp LB %#x %.*Rhxs\n", GCPhysAddr, cb, RT_MIN(cb, 16), pv));
    195     NOREF(pDevIns); NOREF(pvUser); NOREF(GCPhysAddr); NOREF(pv); NOREF(cb);
     190    return PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Port=%#x cb=%d u32=%#x\n", offPort, cb, u32);
     191}
     192
     193
     194/**
     195 * @callback_method_impl{FNIOMMMIONEWWRITE, Ignores writes to the reserved memory.}
     196 * @note    off is an absolute address.
     197 */
     198static DECLCALLBACK(VBOXSTRICTRC)
     199pcarchReservedMemoryWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS off, void const *pv, unsigned cb)
     200{
     201    Log2(("pcarchReservedMemoryRead: %#RGp LB %#x %.*Rhxs\n", off, cb, RT_MIN(cb, 16), pv));
     202    RT_NOREF(pDevIns, pvUser, off, pv, cb);
    196203    return VINF_SUCCESS;
    197204}
     
    199206
    200207/**
    201  * @callback_method_impl{FNIOMMMIOREAD, The reserved memory reads as 0xff.}
    202  */
    203 static DECLCALLBACK(int) pcarchReservedMemoryRead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr, void *pv, unsigned cb)
    204 {
    205     Log2(("pcarchReservedMemoryRead: %#RGp LB %#x\n", GCPhysAddr, cb));
    206     NOREF(pDevIns); NOREF(pvUser); NOREF(GCPhysAddr);
     208 * @callback_method_impl{FNIOMMMIONEWREAD, The reserved memory reads as 0xff.}
     209 * @note    off is an absolute address.
     210 */
     211static DECLCALLBACK(VBOXSTRICTRC)
     212pcarchReservedMemoryRead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS off, void *pv, unsigned cb)
     213{
     214    Log2(("pcarchReservedMemoryRead: %#RGp LB %#x\n", off, cb));
     215    RT_NOREF(pDevIns, pvUser, off);
    207216    memset(pv, 0xff, cb);
    208217    return VINF_SUCCESS;
     
    231240            while (GCPhysCur < GCPhysEnd && PGMPhysIsGCPhysNormal(pVM, GCPhysCur));
    232241
    233             int rc = PDMDevHlpMMIORegister(pDevIns, GCPhysStart, GCPhysCur - GCPhysStart, NULL /*pvUser*/,
    234                                            IOMMMIO_FLAGS_READ_PASSTHRU | IOMMMIO_FLAGS_WRITE_PASSTHRU,
    235                                            pcarchReservedMemoryWrite, pcarchReservedMemoryRead,
    236                                            MMR3HeapAPrintf(pVM, MM_TAG_PGM_PHYS /* bad bird*/, "PC Arch Reserved #%u", iRegion));
     242            IOMMMIOHANDLE hMmioRegion;
     243            int rc = PDMDevHlpMmioCreateAndMap(pDevIns, GCPhysStart, GCPhysCur - GCPhysStart,
     244                                               pcarchReservedMemoryWrite, pcarchReservedMemoryRead,
     245                                               IOMMMIO_FLAGS_READ_PASSTHRU | IOMMMIO_FLAGS_WRITE_PASSTHRU | IOMMMIO_FLAGS_ABS,
     246                                               MMR3HeapAPrintf(pVM, MM_TAG_PGM_PHYS /* bad bird*/, "PC Arch Reserved #%u", iRegion),
     247                                               &hMmioRegion);
    237248            AssertLogRelRCReturn(rc, rc);
    238249            iRegion++;
     
    268279     * Register I/O Ports
    269280     */
    270     rc = PDMDevHlpIOPortRegister(pDevIns, 0xF0, 0x10, NULL,
    271                                  pcarchIOPortFPUWrite, pcarchIOPortFPURead,
    272                                  NULL, NULL, "Math Co-Processor (DOS/OS2 mode)");
    273     if (RT_FAILURE(rc))
    274         return rc;
    275     rc = PDMDevHlpIOPortRegister(pDevIns, 0x92, 1, NULL,
    276                                  pcarchIOPortPS2SysControlPortAWrite, pcarchIOPortPS2SysControlPortARead,
    277                                  NULL, NULL, "PS/2 system control port A (A20 and more)");
    278     if (RT_FAILURE(rc))
    279         return rc;
     281    IOMIOPORTHANDLE hIoPorts;
     282    rc = PDMDevHlpIoPortCreateFlagsAndMap(pDevIns, 0xf0 /*uPort*/, 0x10 /*cPorts*/, IOM_IOPORT_F_ABS,
     283                                          pcarchIOPortFPUWrite, pcarchIOPortFPURead,
     284                                          "Math Co-Processor (DOS/OS2 mode)", NULL /*paExtDescs*/, &hIoPorts);
     285    AssertRCReturn(rc, rc);
     286    rc = PDMDevHlpIoPortCreateFlagsAndMap(pDevIns, 0x92 /*uPort*/, 1 /*cPorts*/, IOM_IOPORT_F_ABS,
     287                                          pcarchIOPortPS2SysControlPortAWrite, pcarchIOPortPS2SysControlPortARead,
     288                                          "PS/2 system control port A (A20 and more)", NULL /*paExtDescs*/, &hIoPorts);
     289    AssertRCReturn(rc, rc);
    280290
    281291    return VINF_SUCCESS;
     
    291301    /* .uReserved0 = */             0,
    292302    /* .szName = */                 "pcarch",
    293     /* .fFlags = */                 PDM_DEVREG_FLAGS_DEFAULT_BITS,
     303    /* .fFlags = */                 PDM_DEVREG_FLAGS_DEFAULT_BITS | PDM_DEVREG_FLAGS_NEW_STYLE,
    294304    /* .fClass = */                 PDM_DEVREG_CLASS_ARCH,
    295305    /* .cMaxInstances = */          1,
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