VirtualBox

Changeset 31378 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Aug 5, 2010 4:09:21 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
64435
Message:

Audio/HDA: switch BDLE on end of BDLE and send interrupt depending on IOC flag of BDLE.

File:
1 edited

Legend:

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

    r31377 r31378  
    11351135{
    11361136    dump_bd(pState);
    1137     pState->u32Cvi;
    11381137    uint8_t  bdle[16];
    11391138    PDMDevHlpPhysRead(ICH6_HDASTATE_2_DEVINS(pState), SDBDPL(pState, 4) + pState->u32Cvi*16, bdle, 16);
     
    12061205                PDMDevHlpPhysRead(ICH6_HDASTATE_2_DEVINS(pState), (pState->u64DPBase & ~0x1) + 4*8, &u32Counter, 4);
    12071206                written = write_audio(pState, avail, &fStop);
    1208                 if (fStop)
     1207                if (   fStop
     1208                    && pState->u32CviLen != pState->u32CviPos)
    12091209                    break;
    12101210                SDLPIB(pState, 4) += written; /* bytes ? */
     
    12121212                u32Counter += written;
    12131213                PDMDevHlpPhysWrite(ICH6_HDASTATE_2_DEVINS(pState), (pState->u64DPBase & ~0x1) + 4*8, &u32Counter, 4);
    1214                 if (pState->u32CviPos == pState->u32CviLen
     1214                if (   pState->u32CviPos == pState->u32CviLen
    12151215                    || SDLPIB(pState, 4) == SDLCBL(pState, 4))
    12161216                {
    12171217                    if (   SDCTL(pState, 4) & HDA_REG_FIELD_FLAG_MASK(SDCTL, ICE)
    1218                         && (   pState->u32CviPos == pState->u32CviLen
     1218                        && (   (   pState->u32CviPos == pState->u32CviLen
     1219                                && pState->fCviIoc)
    12191220                            || SDLPIB(pState, 4) == SDLCBL(pState, 4)))
    12201221                    {
     
    12281229                            PDMDevHlpPhysWrite(ICH6_HDASTATE_2_DEVINS(pState), (pState->u64DPBase & ~0x1)  + 4*8, &u32Counter, 4);
    12291230                        }
    1230                         if (pState->u32CviPos == pState->u32CviLen)
    1231                         {
    1232                             pState->u32CviPos = 0;
    1233                             pState->u32Cvi++;
    1234                             if (pState->u32Cvi == SDLVI(pState, 4) + 1)
    1235                                 pState->u32Cvi = 0;
    1236                         }
    12371231                    }
     1232                    if (pState->u32CviPos == pState->u32CviLen)
     1233                    {
     1234                        pState->u32CviPos = 0;
     1235                        pState->u32Cvi++;
     1236                        if (pState->u32Cvi == SDLVI(pState, 4) + 1)
     1237                            pState->u32Cvi = 0;
     1238                    }
     1239                    fStop = false;
    12381240                }
    12391241                fetch_bd(pState);
Note: See TracChangeset for help on using the changeset viewer.

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