VirtualBox

Changeset 39141 in vbox


Ignore:
Timestamp:
Oct 28, 2011 2:50:47 PM (13 years ago)
Author:
vboxsync
Message:

More ...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/USB/testcase/tstOhciRegisterAccess.cpp

    r39140 r39141  
    5252    "HcDoneHead",
    5353    "HcFmInterval",
     54
    5455    "HcFmRemaining",
    5556    "HcFmNumber",
     
    7273static bool TestOhciWrites(RTVPTRUNION uPtr)
    7374{
    74     return true;
     75    static struct
     76    {
     77        unsigned iReg;
     78        uint32_t uVal1;
     79        uint32_t uVal2;
     80    }  const s_aRegs[] =
     81    {
     82        { 13 /* HcFmInterval */, 0x58871120, 0 }
     83    };
     84
     85    bool fSuccess = true;
     86    for (unsigned i = 0; i < RT_ELEMENTS(s_aRegs); i++)
     87    {
     88        uint32_t const      iReg = s_aRegs[i].iReg;
     89        RTVPTRUNION         uPtrReg;
     90        uPtrReg.pu32 = &uPtr.pu32[iReg];
     91
     92        uint32_t uInitialValue = *uPtrReg.pu32;
     93        LogRel(("TestOhciWrites: %p iReg=%2d %20s = %08RX32\n", uPtrReg.pv, iReg, g_apszRegNms[iReg], uInitialValue));
     94
     95        bool                fDone    = true;
     96        const char         *pszError = NULL;
     97        RTCCUINTREG const   fFlags   = ASMIntDisableFlags();
     98
     99        /*
     100         * DWORD writes.
     101         */
     102        uInitialValue = *uPtrReg.pu32;
     103        *uPtrReg.pu32 = uInitialValue;
     104        uint32_t u32A = *uPtrReg.pu32;
     105        uint32_t const uChangedValue = s_aRegs[i].uVal1 != uInitialValue ? s_aRegs[i].uVal1 : s_aRegs[i].uVal2;
     106        if (u32A == uInitialValue)
     107        {
     108            /* Change the value. */
     109            *uPtrReg.pu32 = uChangedValue;
     110            u32A = *uPtrReg.pu32;
     111            *uPtrReg.pu32 = uInitialValue;
     112            if (u32A != uChangedValue)
     113                pszError = "Writing changed value failed";
     114        }
     115        else
     116            pszError = "Writing back initial value failed";
     117
     118
     119        /*
     120         * Write byte changes.
     121         */
     122        if (!pszError)
     123        {
     124
     125        }
     126
     127
     128        *uPtrReg.pu32 = uInitialValue;
     129
     130        ASMSetFlags(fFlags);
     131        ASMNopPause();
     132
     133        /*
     134         * Complain on failure.
     135         */
     136        if (!fDone)
     137            LogRel(("TestOhciWrites: Warning! Register %s was never stable enough for testing! %08RX32 %08RX32 %08RX32\n",
     138                    g_apszRegNms[iReg], uInitialValue, u32A, uChangedValue, uInitialValue));
     139        else if (pszError)
     140        {
     141            LogRel(("TestOhciWrites: Error! Register %s failed: %s; uInitialValue=%08RX32 uChangedValue=%08RX32 u32A=%08RX32\n",
     142                    g_apszRegNms[iReg], pszError, uInitialValue, uChangedValue, u32A));
     143            fSuccess = false;
     144        }
     145    }
     146
     147    return fSuccess;
    75148}
    76149
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