VirtualBox

Changeset 36663 in vbox


Ignore:
Timestamp:
Apr 13, 2011 3:57:33 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
71145
Message:

PCI: tweaks

Location:
trunk/src/VBox/Devices/Bus
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Bus/DevPciIch9.cpp

    r36288 r36663  
    891891
    892892    rc = MsiInit(pPciDev, pMsiReg);
    893     if (rc != VINF_SUCCESS)
     893    if (RT_FAILURE(rc))
    894894        return rc;
    895895
    896896    rc = MsixInit(pPciDev->Int.s.CTX_SUFF(pBus)->CTX_SUFF(pPciHlp), pPciDev, pMsiReg);
    897     if (rc != VINF_SUCCESS)
     897    if (RT_FAILURE(rc))
    898898        return rc;
    899899
    900     return rc;
     900    return VINF_SUCCESS;
    901901}
    902902
     
    18741874    if ((u32Address + len) > 256 && (u32Address + len) < 4096)
    18751875    {
    1876         AssertMsgReturn(false, ("Read from extended registers falled back to generic code\n"), 0);
    1877     }
    1878 
    1879     AssertMsgReturn(u32Address + len <= 256, ("Read after end of PCI config space\n"),
     1876        AssertMsgReturn(false, ("Read from extended registers fallen back to generic code\n"), 0);
     1877    }
     1878
     1879    AssertMsgReturn(u32Address + len <= 256, ("Read after the end of PCI config space\n"),
    18801880                    0);
    18811881    if (   pciDevIsMsiCapable(aDev)
     
    19561956    if ((u32Address + len) > 256 && (u32Address + len) < 4096)
    19571957    {
    1958         AssertMsgReturnVoid(false, ("Write to extended registers falled back to generic code\n"));
     1958        AssertMsgReturnVoid(false, ("Write to extended registers fallen back to generic code\n"));
    19591959    }
    19601960
  • trunk/src/VBox/Devices/Bus/MsiCommon.cpp

    r36574 r36663  
    102102}
    103103
    104 
     104#ifdef IN_RING3
    105105void     MsiPciConfigWrite(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, uint32_t u32Address, uint32_t val, unsigned len)
    106106{
     
    214214}
    215215
    216 
    217216int MsiInit(PPCIDEVICE pDev, PPDMMSIREG pMsiReg)
    218217{
    219218    if (pMsiReg->cMsiVectors == 0)
    220219         return VINF_SUCCESS;
     220
     221    /* We cannot init MSI on raw devices yet. */
     222    Assert(!pciDevIsPassthrough(pDev));
    221223
    222224    uint16_t   cVectors    = pMsiReg->cMsiVectors;
     
    261263}
    262264
     265#endif /* IN_RING3 */
     266
    263267
    264268bool     MsiIsEnabled(PPCIDEVICE pDev)
  • trunk/src/VBox/Devices/Bus/MsiCommon.h

    r33315 r36663  
    2828#endif
    2929
     30#ifdef IN_RING3
    3031/* Init MSI support in the device. */
    3132int      MsiInit(PPCIDEVICE pDev, PPDMMSIREG pMsiReg);
     33#endif
    3234
    3335/* If MSI is enabled, so that MSINotify() shall be used for notifications.  */
     
    3739void     MsiNotify(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, int iVector, int iLevel);
    3840
     41#ifdef IN_RING3
    3942/* PCI config space accessors for MSI registers */
    4043void     MsiPciConfigWrite(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, uint32_t u32Address, uint32_t val, unsigned len);
    4144uint32_t MsiPciConfigRead (PPDMDEVINS pDevIns, PPCIDEVICE pDev, uint32_t u32Address, unsigned len);
     45#endif
    4246
    43 
     47#ifdef IN_RING3
    4448/* Init MSI-X support in the device. */
    45 #ifdef IN_RING3
    4649int      MsixInit(PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, PPDMMSIREG pMsiReg);
    4750#endif
     
    5356void     MsixNotify(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, int iVector, int iLevel);
    5457
     58#ifdef IN_RING3
    5559/* PCI config space accessors for MSI-X */
    5660void     MsixPciConfigWrite(PPDMDEVINS pDevIns, PCPDMPCIHLP pPciHlp, PPCIDEVICE pDev, uint32_t u32Address, uint32_t val, unsigned len);
    5761uint32_t MsixPciConfigRead (PPDMDEVINS pDevIns, PPCIDEVICE pDev, uint32_t u32Address, unsigned len);
     62#endif
  • trunk/src/VBox/Devices/Bus/MsixCommon.cpp

    r36574 r36663  
    167167         return VINF_SUCCESS;
    168168
    169     uint16_t   cVectors    = pMsiReg->cMsixVectors;
     169     /* We cannot init MSI-X on raw devices yet. */
     170    Assert(!pciDevIsPassthrough(pDev));
     171
     172    uint16_t   cVectors    = pMsiReg->cMsixVectors;   
    170173    uint8_t    iCapOffset  = pMsiReg->iMsixCapOffset;
    171174    uint8_t    iNextOffset = pMsiReg->iMsixNextOffset;
     
    173176
    174177    if (cVectors > VBOX_MSIX_MAX_ENTRIES)
     178    {
     179        AssertMsgFailed(("Too many MSI-X vectors: %d\n", cVectors));
    175180        return VERR_TOO_MUCH_DATA;
     181    }
    176182
    177183    if (iBar > 5)
     184    {
     185        AssertMsgFailed(("Using wrong BAR for MSI-X: %d\n", iBar));
    178186        return VERR_INVALID_PARAMETER;
     187    }
    179188
    180189    Assert(iCapOffset != 0 && iCapOffset < 0xff && iNextOffset < 0xff);
    181190
    182     int rc;
    183 
    184     rc = PDMDevHlpPCIIORegionRegister (pDev->pDevIns, iBar, 0x1000, PCI_ADDRESS_SPACE_MEM, msixMap);
    185     if (RT_FAILURE (rc))
    186         return rc;
     191    int rc = VINF_SUCCESS;
     192
     193    /* If device is passthrough, BAR is registered using common mechanism. */
     194    if (!pciDevIsPassthrough(pDev))
     195    {
     196        rc = PDMDevHlpPCIIORegionRegister (pDev->pDevIns, iBar, 0x1000, PCI_ADDRESS_SPACE_MEM, msixMap);
     197        if (RT_FAILURE (rc))
     198            return rc;
     199    }
    187200
    188201    pDev->Int.s.u8MsixCapOffset = iCapOffset;
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