void LBAOutOfRangeBare_r12::SendCmdToHdw(SharedSQPtr sq, SharedCQPtr cq, SharedCmdPtr cmd, string qualify) { uint32_t numCE; uint32_t isrCount; uint32_t isrCountB4; string work; uint16_t uniqueId; if ((numCE = cq->ReapInquiry(isrCountB4, true)) != 0) { cq->Dump( FileSystem::PrepDumpFile(mGrpName, mTestName, "cq", "notEmpty"), "Test assumption have not been met"); throw FrmwkEx(HERE, "Require 0 CE's within CQ %d, not upheld, found %d", cq->GetQId(), numCE); } LOG_NRM("Send the cmd to hdw via SQ %d", sq->GetQId()); sq->Send(cmd, uniqueId); work = str(boost::format( "Just B4 ringing SQ %d doorbell, dump entire SQ") % sq->GetQId()); sq->Dump(FileSystem::PrepDumpFile(mGrpName, mTestName, "sq." + cmd->GetName(), qualify), work); sq->Ring(); LOG_NRM("Wait for the CE to arrive in CQ %d", cq->GetQId()); if (cq->ReapInquiryWaitSpecify(CALC_TIMEOUT_ms(1), 1, numCE, isrCount) == false) { work = str(boost::format( "Unable to see any CE's in CQ %d, dump entire CQ") % cq->GetQId()); cq->Dump( FileSystem::PrepDumpFile(mGrpName, mTestName, "cq." + cmd->GetName(), qualify), work); throw FrmwkEx(HERE, "Unable to see CE for issued cmd"); } else if (numCE != 1) { work = str(boost::format( "Unable to see any CE's in CQ %d, dump entire CQ") % cq->GetQId()); cq->Dump( FileSystem::PrepDumpFile(mGrpName, mTestName, "cq." + cmd->GetName(), qualify), work); throw FrmwkEx(HERE, "1 cmd caused %d CE's to arrive in CQ %d", numCE, cq->GetQId()); } work = str(boost::format("Just B4 reaping CQ %d, dump entire CQ") % cq->GetQId()); cq->Dump(FileSystem::PrepDumpFile(mGrpName, mTestName, "cq." + cmd->GetName(), qualify), work); // throws if an error occurs IO::ReapCE(cq, numCE, isrCount, mGrpName, mTestName, qualify, CESTAT_LBA_OUT_RANGE); // Single cmd submitted on empty ASQ should always yield 1 IRQ on ACQ if (gCtrlrConfig->IrqsEnabled() && cq->GetIrqEnabled() && (isrCount != (isrCountB4 + 1))) { throw FrmwkEx(HERE, "CQ using IRQ's, but IRQ count not expected (%d != %d)", isrCount, (isrCountB4 + 1)); } }