VirtualBox

儲存庫 vbox 的更動 15036


忽略:
時間撮記:
2008-12-5 下午12:42:51 (16 年 以前)
作者:
vboxsync
訊息:

iomMMIODoRead: Handle the _FF and _00 status codes, changed default from 00 to FF when the handler doesn't exist.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp

    r14075 r15036  
    109109        rc = pRange->CTX_SUFF(pfnReadCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser), GCPhysFault, pvData, cb);
    110110    else
    111     {
    112 /** @todo r=bird: this is (probably) wrong, all bits should be set here I
    113  *        think. */
    114         switch (cb)
     111        rc = VINF_IOM_MMIO_UNUSED_FF;
     112    if (rc != VINF_SUCCESS)
     113    {
     114        switch (rc)
    115115        {
    116             case 1: *(uint8_t  *)pvData = 0; break;
    117             case 2: *(uint16_t *)pvData = 0; break;
    118             case 4: *(uint32_t *)pvData = 0; break;
    119             case 8: *(uint64_t *)pvData = 0; break;
    120             default:
    121                 memset(pvData, 0, cb);
     116            case VINF_IOM_MMIO_UNUSED_FF:
     117                switch (cbValue)
     118                {
     119                    case 1: *(uint8_t *)pu32Value  = UINT8_C(0xff); break;
     120                    case 2: *(uint16_t *)pu32Value = UINT16_C(0xffff); break;
     121                    case 4: *(uint32_t *)pu32Value = UINT32_C(0xffffffff); break;
     122                    case 8: *(uint64_t *)pu32Value = UINT64_C(0xffffffffffffffff); break;
     123                    default: AssertReleaseMsgFailed(("cbValue=%d GCPhys=%RGp\n", cbValue, GCPhys)); break;
     124                }
     125                rc = VINF_SUCCESS;
     126                break;
     127
     128            case VINF_IOM_MMIO_UNUSED_00:
     129                switch (cbValue)
     130                {
     131                    case 1: *(uint8_t *)pu32Value  = UINT8_C(0x00); break;
     132                    case 2: *(uint16_t *)pu32Value = UINT16_C(0x0000); break;
     133                    case 4: *(uint32_t *)pu32Value = UINT32_C(0x00000000); break;
     134                    case 8: *(uint64_t *)pu32Value = UINT64_C(0x0000000000000000); break;
     135                    default: AssertReleaseMsgFailed(("cbValue=%d GCPhys=%RGp\n", cbValue, GCPhys)); break;
     136                }
     137                rc = VINF_SUCCESS;
    122138                break;
    123139        }
    124         rc = VINF_SUCCESS;
    125     }
    126     if (rc != VINF_IOM_HC_MMIO_READ)
    127         STAM_COUNTER_INC(&pStats->CTX_SUFF_Z(Read));
     140        if (rc != VINF_IOM_HC_MMIO_READ)
     141            STAM_COUNTER_INC(&pStats->CTX_SUFF_Z(Read));
     142    }
    128143    return rc;
    129144}
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette