VirtualBox

Changeset 14419 in vbox for trunk/src/VBox/Devices/Network


Ignore:
Timestamp:
Nov 20, 2008 2:50:10 PM (16 years ago)
Author:
vboxsync
Message:

Call DGFStop instead of returning VERR_INTERNAL_ERROR on I/O port access (avoids guru meditation).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/DevPCNet.cpp

    r13365 r14419  
    31563156}
    31573157
     3158static int pcnetIoportWriteU8(PCNetState *pThis, uint32_t addr, uint32_t val)
     3159{
     3160    int rc = VINF_SUCCESS;
     3161
     3162#ifdef PCNET_DEBUG_IO
     3163    Log2(("#%d pcnetIoportWriteU8: addr=%#010x val=%#06x\n", PCNET_INST_NR,
     3164         addr, val));
     3165#endif
     3166    if (RT_LIKELY(!BCR_DWIO(pThis)))
     3167    {
     3168        switch (addr & 0x0f)
     3169        {
     3170            case 0x04: /* RESET */
     3171                break;
     3172        }
     3173    }
     3174    else
     3175        Log(("#%d pcnetIoportWriteU8: addr=%#010x val=%#06x BCR_DWIO !!\n", PCNET_INST_NR, addr, val));
     3176
     3177    return rc;
     3178}
     3179
     3180static uint32_t pcnetIoportReadU8(PCNetState *pThis, uint32_t addr, int *pRC)
     3181{
     3182    uint32_t val = ~0U;
     3183
     3184    *pRC = VINF_SUCCESS;
     3185
     3186    if (RT_LIKELY(!BCR_DWIO(pThis)))
     3187    {
     3188        switch (addr & 0x0f)
     3189        {
     3190            case 0x04: /* RESET */
     3191                pcnetSoftReset(pThis);
     3192                val = 0;
     3193                break;
     3194        }
     3195    }
     3196    else
     3197        Log(("#%d pcnetIoportReadU8: addr=%#010x val=%#06x BCR_DWIO !!\n", PCNET_INST_NR, addr, val & 0xff));
     3198
     3199    pcnetUpdateIrq(pThis);
     3200
     3201skip_update_irq:
     3202#ifdef PCNET_DEBUG_IO
     3203    Log2(("#%d pcnetIoportReadU8: addr=%#010x val=%#06x\n", PCNET_INST_NR, addr, val & 0xff));
     3204#endif
     3205    return val;
     3206}
     3207
    31583208static int pcnetIoportWriteU16(PCNetState *pThis, uint32_t addr, uint32_t val)
    31593209{
     
    35173567        switch (cb)
    35183568        {
     3569            case 1: *pu32 = pcnetIoportReadU8(pThis, Port, &rc); break;
    35193570            case 2: *pu32 = pcnetIoportReadU16(pThis, Port, &rc); break;
    35203571            case 4: *pu32 = pcnetIoportReadU32(pThis, Port, &rc); break;
    35213572            default:
    3522                 rc = VERR_IOM_IOPORT_UNUSED;
    3523                 break;
     3573                rc = PDMDeviceDBGFStop(pThis->CTX_SUFF(pDevIns), RT_SRC_POS,
     3574                                       "pcnetIOPortRead: unsupported op size: offset=%#10x cb=%u\n",
     3575                                       Port, cb);
    35243576        }
    35253577        PDMCritSectLeave(&pThis->CritSect);
     
    35583610        switch (cb)
    35593611        {
     3612            case 1: rc = pcnetIoportWriteU8(pThis, Port, u32); break;
    35603613            case 2: rc = pcnetIoportWriteU16(pThis, Port, u32); break;
    35613614            case 4: rc = pcnetIoportWriteU32(pThis, Port, u32); break;
    35623615            default:
    3563                 AssertMsgFailed(("Port=%#x cb=%d u32=%#x\n", Port, cb, u32));
    3564                 rc = VERR_INTERNAL_ERROR;
    3565                 break;
     3616                rc = PDMDeviceDBGFStop(pThis->CTX_SUFF(pDevIns), RT_SRC_POS,
     3617                                       "pcnetIOPortWrite: unsupported op size: offset=%#10x cb=%u\n",
     3618                                       Port, cb);
    35663619        }
    35673620        PDMCritSectLeave(&pThis->CritSect);
     
    36093662                case 4:  *(uint32_t *)pv = pcnetMMIOReadU32(pThis, GCPhysAddr); break;
    36103663                default:
    3611                     AssertMsgFailed(("cb=%d\n", cb));
    3612                     rc = VERR_INTERNAL_ERROR;
    3613                     break;
     3664                    rc = PDMDeviceDBGFStop(pThis->CTX_SUFF(pDevIns), RT_SRC_POS,
     3665                                           "pcnetMMIORead: unsupported op size: address=%RGp cb=%u\n",
     3666                                           GCPhysAddr, cb);
    36143667            }
    36153668            PDMCritSectLeave(&pThis->CritSect);
     
    36623715                case 4:  pcnetMMIOWriteU32(pThis, GCPhysAddr, *(uint32_t *)pv); break;
    36633716                default:
    3664                     AssertMsgFailed(("cb=%d\n", cb));
    3665                     rc = VERR_INTERNAL_ERROR;
    3666                     break;
     3717                    rc = PDMDeviceDBGFStop(pThis->CTX_SUFF(pDevIns), RT_SRC_POS,
     3718                                           "pcnetMMIOWrite: unsupported op size: address=%RGp cb=%u\n",
     3719                                           GCPhysAddr, cb);
    36673720            }
    36683721            PDMCritSectLeave(&pThis->CritSect);
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