VirtualBox

Changeset 89897 in vbox


Ignore:
Timestamp:
Jun 24, 2021 6:28:04 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
145355
Message:

DevHda: Avoid indirect register accesses via g_aHdaRegMap. bugref:9890

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Audio/DevHda.h

    r89893 r89897  
    139139} HDAREGDESC;
    140140
     141#ifdef VBOX_STRICT
    141142extern const HDAREGDESC g_aHdaRegMap[HDA_NUM_REGS];
     143#endif
    142144
    143145
     
    163165#define HDA_REG_IND_NAME(x)         HDA_REG_##x
    164166#define HDA_MEM_IND_NAME(x)         HDA_RMX_##x
    165 #define HDA_REG_IND(pThis, x)       ((pThis)->au32Regs[g_aHdaRegMap[x].mem_idx])
    166 #define HDA_REG(pThis, x)           (HDA_REG_IND((pThis), HDA_REG_IND_NAME(x)))
     167
     168/** Direct register access by HDASTATE::au32Reg index. */
     169#define HDA_REG_BY_IDX(a_pThis, a_idxReg)   ((a_pThis)->au32Regs[(a_idxReg)])
     170/** Accesses register @a ShortRegNm. */
     171#define HDA_REG(a_pThis, a_ShortRegNm)      HDA_REG_BY_IDX(a_pThis, HDA_MEM_IND_NAME(a_ShortRegNm))
     172/** Indirect register access via g_aHdaRegMap[].mem_idx. */
     173#define HDA_REG_IND(a_pThis, a_idxMap)      HDA_REG_BY_IDX(a_pThis, g_aHdaRegMap[(a_idxMap)].mem_idx)
    167174
    168175
     
    330337#define HDA_STREAM_RMX_DEF(name, num)           (HDA_RMX_SD##num##name)
    331338/** @note sdnum here _MUST_ be stream reg number [0,7]. */
    332 #define HDA_STREAM_REG(pThis, name, sdnum)      (HDA_REG_IND((pThis), HDA_REG_SD0##name + (sdnum) * 10))
     339#ifdef VBOX_STRICT
     340# define HDA_STREAM_REG(pThis, name, sdnum)      (*hdaStrictStreamRegAccessor((pThis), HDA_REG_SD0##name, HDA_RMX_SD0##name, (sdnum)))
     341#else
     342# define HDA_STREAM_REG(pThis, name, sdnum)      (HDA_REG_BY_IDX((pThis), HDA_RMX_SD0##name + (sdnum) * 10))
     343#endif
    333344
    334345#define HDA_SD_NUM_FROM_REG(pThis, func, reg)   ((reg - HDA_STREAM_REG_DEF(func, 0)) / 10)
     
    816827}
    817828
     829#ifdef VBOX_STRICT
     830DECLINLINE(uint32_t *) hdaStrictStreamRegAccessor(PHDASTATE pThis, uint32_t idxMap0, uint32_t idxReg0, size_t idxStream)
     831{
     832    AssertMsg(idxStream < RT_ELEMENTS(pThis->aStreams), ("%#zx\n", idxStream));
     833    AssertMsg(idxReg0 + idxStream * 10 == g_aHdaRegMap[idxMap0 + idxStream * 10].mem_idx,
     834              ("idxReg0=%d idxStream=%zx\n", idxReg0, idxStream));
     835    return &pThis->au32Regs[idxReg0 + idxStream * 10];
     836}
     837#endif
     838
    818839/* Used by hdaR3StreamSetUp: */
    819840uint8_t hdaSDFIFOWToBytes(uint16_t u16RegFIFOW);
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