DECLINLINE(uint32_t) msiGetMsiData(PPCIDEVICE pDev, int32_t iVector) { int16_t iOff = msiIs64Bit(pDev) ? VBOX_MSI_CAP_MESSAGE_DATA_64 : VBOX_MSI_CAP_MESSAGE_DATA_32; uint16_t lo = PCIDevGetWord(pDev, pDev->Int.s.u8MsiCapOffset + iOff); // vector encoding into lower bits of message data uint8_t bits = msiGetMme(pDev); uint16_t uMask = ((1 << bits) - 1); lo &= ~uMask; lo |= iVector & uMask; return RT_MAKE_U32(lo, 0); }
void UIMultiScreenLayout::initialize(QMenu *pMenu) { if (m_cHostScreens > 1) { pMenu->addSeparator(); for (int i = 0; i < m_cGuestScreens; ++i) { m_screenMenuList << pMenu->addMenu(tr("Virtual Screen %1").arg(i + 1)); m_screenMenuList.last()->menuAction()->setData(true); QActionGroup *pScreenGroup = new QActionGroup(m_screenMenuList.last()); pScreenGroup->setExclusive(true); connect(pScreenGroup, SIGNAL(triggered(QAction*)), this, SLOT(sltScreenLayoutChanged(QAction*))); for (int a = 0; a < m_cHostScreens; ++a) { QAction *pAction = pScreenGroup->addAction(tr("Use Host Screen %1").arg(a + 1)); pAction->setCheckable(true); pAction->setData(RT_MAKE_U32(i, a)); } m_screenMenuList.last()->addActions(pScreenGroup->actions()); } }
static int ParseUsbIds(PRTSTREAM pInStrm, const char *pszFile) { /* * State data. */ VendorRecord vendor = { 0, 0, 0, "" }; /* * Process the file line-by-line. * * The generic format is that we have top level entries (vendors) starting * in position 0 with sub entries starting after one or more, depending on * the level, tab characters. * * Specifically, the list of vendors and their products will always start * with a vendor line followed by indented products. The first character * on the vendor line is a hex digit (four in total) that makes up the * vendor ID. The product lines equally starts with a 4 digit hex ID value. * * Other lists are assumed to have first lines that doesn't start with any * lower case hex digit. */ uint32_t iLine = 0;; for (;;) { char szLine[_4K]; int rc = RTStrmGetLine(pInStrm, szLine, sizeof(szLine)); if (RT_SUCCESS(rc)) { iLine++; /* Check for vendor line. */ char chType = szLine[0]; if ( RT_C_IS_XDIGIT(chType) && RT_C_IS_SPACE(szLine[4]) && RT_C_IS_XDIGIT(szLine[1]) && RT_C_IS_XDIGIT(szLine[2]) && RT_C_IS_XDIGIT(szLine[3]) ) { if (ParseAlias(szLine, vendor.vendorID, vendor.str) == 0) g_vendors.push_back(vendor); else return RTMsgErrorExit((RTEXITCODE)ERROR_IN_PARSE_LINE, "%s(%d): Error in parsing vendor line: '%s'", pszFile, iLine, szLine); } /* Check for product line. */ else if (szLine[0] == '\t' && vendor.vendorID != 0) { ProductRecord product = { 0, vendor.vendorID, 0, "" }; if (ParseAlias(&szLine[1], product.productID, product.str) == 0) { product.key = RT_MAKE_U32(product.productID, product.vendorID); Assert(product.vendorID == vendor.vendorID); g_products.push_back(product); } else return RTMsgErrorExit((RTEXITCODE)ERROR_IN_PARSE_LINE, "Error in parsing product line: '%s'", szLine); } /* If not a blank or comment line, it is some other kind of data. So, make sure the vendor ID is cleared so we don't try process the sub-items of in some other list as products. */ else if ( chType != '#' && chType != '\0' && *RTStrStripL(szLine) != '\0') vendor.vendorID = 0; } else if (rc == VERR_EOF) return RTEXITCODE_SUCCESS; else return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTStrmGetLine failed: %Rrc", rc); } }