VirtualBox

Changeset 31042 in vbox


Ignore:
Timestamp:
Jul 23, 2010 9:22:49 AM (14 years ago)
Author:
vboxsync
Message:

Audio/HDA: raises interrupt on Codec stops responds or on RINTCNT limit.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Audio/DevIchIntelHDA.cpp

    r31035 r31042  
    364364    uint64_t    u64DPBase;
    365365    uint8_t     u8CORBRP;
    366     uint8_t     cResponse;
    367366    /* pointer on CORB buf */
    368367    uint32_t    *pu32CorbBuf;
     
    675674    uint8_t corbWp;
    676675    uint8_t rirbWp;
     676    uint8_t u8Counter = 0;
    677677
    678678    PFNCODECVERBPROCESSOR pfn = (PFNCODECVERBPROCESSOR)NULL;
     
    694694        if (RT_FAILURE(rc))
    695695            AssertRCReturn(rc, rc);
     696        Assert(pfn);
    696697        (rirbWp)++;
    697698        rc = pfn(&pState->Codec, cmd, &pState->pu64RirbBuf[rirbWp]);
    698699        if (RT_FAILURE(rc))
    699700            AssertRCReturn(rc, rc);
    700         pState->cResponse++;
     701        u8Counter++;
     702        if (u8Counter == RINTCNT_N(pState))
     703            break;
    701704    }
    702705    pState->au32Regs[ICH6_HDA_REG_CORBRP] = corbRp;
     
    704707    rc = hdaCmdSync(pState, false);
    705708    Log(("hda: CORB(RP:%x, WP:%x) RIRBWP:%x\n", CORBRP(pState), CORBWP(pState), RIRBWP(pState)));
    706     if (   RIRBCTL_RIRB_RIC(pState)
    707         && (pState)->cResponse == RINTCNT_N(pState))
     709    if (RIRBCTL_RIRB_RIC(pState))
    708710    {
    709711        RIRBSTS((pState)) |= HDA_REG_FIELD_FLAG_MASK(RIRBSTS,RINTFL);
    710712        rc = hdaProcessInterrupt(pState);
    711         (pState)->cResponse = 0;
    712713    }
    713714    if (RT_FAILURE(rc))
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