void IllegalCreateQs_r10b::RunCoreTest() { /** \verbatim * Assumptions: * 1) Test CreateResources_r10b has run prior. * \endverbatim */ // Lookup objs which were created in a prior test within group SharedACQPtr acq = CAST_TO_ACQ(gRsrcMngr->GetObj(ACQ_GROUP_ID)) SharedASQPtr asq = CAST_TO_ASQ(gRsrcMngr->GetObj(ASQ_GROUP_ID)) uint32_t numEntries = 2; uint8_t dword; uint32_t mask; uint32_t value; { LOG_NRM("Create IOCQ ID #%d but toxify its QID to 0", IOQ_ID); SharedIOCQPtr iocq = SharedIOCQPtr(new IOCQ(mFd)); iocq->Init(IOQ_ID, numEntries, true, 0); LOG_NRM("Form a Create IOCQ cmd"); SharedCreateIOCQPtr iocqCmd = SharedCreateIOCQPtr(new CreateIOCQ()); iocqCmd->Init(iocq); dword = 10; mask = 0xFFFF; value = 0; SendToxicCmd(asq, acq, iocqCmd, dword, mask, value, CESTAT_INVALID_QID); } { LOG_NRM("Create IOSQ ID #%d but toxify its QID to 0", IOQ_ID); SharedIOSQPtr iosq = SharedIOSQPtr(new IOSQ(mFd)); iosq->Init(IOQ_ID, numEntries, IOQ_ID, 0); LOG_NRM("Form a Create IOSQ cmd"); SharedCreateIOSQPtr iosqCmd = SharedCreateIOSQPtr(new CreateIOSQ()); iosqCmd->Init(iosq); dword = 10; mask = 0xFFFF; value = 0; SendToxicCmd(asq, acq, iosqCmd, dword, mask, value, CESTAT_INVALID_QID); } { LOG_NRM("Create IOSQ ID #%d but wrongly associate to ACQ", IOQ_ID); SharedIOSQPtr iosq = SharedIOSQPtr(new IOSQ(mFd)); iosq->Init(IOQ_ID, numEntries, IOQ_ID, 0); LOG_NRM("Form a Create IOSQ cmd"); SharedCreateIOSQPtr iosqCmd = SharedCreateIOSQPtr(new CreateIOSQ()); iosqCmd->Init(iosq); dword = 11; mask = 0xFFFF0000; value = 0; SendToxicCmd(asq, acq, iosqCmd, dword, mask, value, CESTAT_CQ_INVALID); } }
void UnsupportRsvdFields_r10b::RunCoreTest() { /** \verbatim * Assumptions: * 1) Test CreateResources_r10b has run prior. * \endverbatim */ uint64_t maxIOQEntries = 2; // Lookup objs which were created in a prior test within group SharedASQPtr asq = CAST_TO_ASQ(gRsrcMngr->GetObj(ASQ_GROUP_ID)) SharedACQPtr acq = CAST_TO_ACQ(gRsrcMngr->GetObj(ACQ_GROUP_ID)) LOG_NRM("Setup element sizes for the IOQ's"); uint8_t iocqes = (gInformative->GetIdentifyCmdCtrlr()-> GetValue(IDCTRLRCAP_CQES) & 0xf); uint8_t iosqes = (gInformative->GetIdentifyCmdCtrlr()-> GetValue(IDCTRLRCAP_SQES) & 0xf); gCtrlrConfig->SetIOCQES(iocqes); gCtrlrConfig->SetIOSQES(iosqes); LOG_NRM("Create IOCQ"); SharedIOCQPtr iocq = Queues::CreateIOCQContigToHdw(mGrpName, mTestName, CALC_TIMEOUT_ms(1), asq, acq, IOQ_ID, maxIOQEntries, false, IOCQ_GROUP_ID, true, 0); LOG_NRM("Create IOSQ"); SharedIOSQPtr iosq = SharedIOSQPtr(new IOSQ(gDutFd)); LOG_NRM("Allocate contiguous memory; IOSQ has ID=%d", IOQ_ID); iosq->Init(IOQ_ID, maxIOQEntries, IOQ_ID, 0); LOG_NRM("Form a Create IOSQ cmd to perform queue creation"); SharedCreateIOSQPtr createIOSQCmd = SharedCreateIOSQPtr(new CreateIOSQ()); createIOSQCmd->Init(iosq); LOG_NRM("Set all cmd's rsvd bits"); uint32_t work = createIOSQCmd->GetDword(0); work |= 0x0000fc00; // Set DW0_b15:10 bits createIOSQCmd->SetDword(work, 0); createIOSQCmd->SetDword(0xffffffff, 2); createIOSQCmd->SetDword(0xffffffff, 3); createIOSQCmd->SetDword(0xffffffff, 4); createIOSQCmd->SetDword(0xffffffff, 5); createIOSQCmd->SetDword(0xffffffff, 6); createIOSQCmd->SetDword(0xffffffff, 7); // DW11_b15:3 work = createIOSQCmd->GetDword(11); work |= 0x0000fff8; createIOSQCmd->SetDword(work, 11); createIOSQCmd->SetDword(0xffffffff, 12); createIOSQCmd->SetDword(0xffffffff, 13); createIOSQCmd->SetDword(0xffffffff, 14); createIOSQCmd->SetDword(0xffffffff, 15); IO::SendAndReapCmd(mGrpName, mTestName, CALC_TIMEOUT_ms(1), asq, acq, createIOSQCmd, "", true); WriteReadVerify(iosq, iocq); Queues::DeleteIOSQToHdw(mGrpName, mTestName, CALC_TIMEOUT_ms(1), iosq, asq, acq, "", false); Queues::DeleteIOCQToHdw(mGrpName, mTestName, CALC_TIMEOUT_ms(1), iocq, asq, acq, "", false); }
void MaxQSizeExceed_r10b::RunCoreTest() { /** \verbatim * Assumptions: * 1) Test CreateResources_r10b has run prior. * \endverbatim */ uint64_t mqes; string qualify; uint64_t maxIOQEntries = 2; // Lookup objs which were created in a prior test within group SharedASQPtr asq = CAST_TO_ASQ(gRsrcMngr->GetObj(ASQ_GROUP_ID)) SharedACQPtr acq = CAST_TO_ACQ(gRsrcMngr->GetObj(ACQ_GROUP_ID)) LOG_NRM("Setup element sizes for the IOQ's"); uint8_t iocqes = (gInformative->GetIdentifyCmdCtrlr()-> GetValue(IDCTRLRCAP_CQES) & 0xf); uint8_t iosqes = (gInformative->GetIdentifyCmdCtrlr()-> GetValue(IDCTRLRCAP_SQES) & 0xf); gCtrlrConfig->SetIOCQES(iocqes); gCtrlrConfig->SetIOSQES(iosqes); SharedIOCQPtr iocq = Queues::CreateIOCQContigToHdw(mGrpName, mTestName, DEFAULT_CMD_WAIT_ms, asq, acq, IOQ_ID, maxIOQEntries, false, IOCQ_GROUP_ID, false, 0); if (gRegisters->Read(CTLSPC_CAP, mqes) == false) throw FrmwkEx(HERE, "Unable to determine CAP.MQES"); mqes &= CAP_MQES; mqes = mqes + 1; // convert to 1 - based LOG_NRM("DUT's largest supported IOSQ size = 0x%05lX", mqes); list<uint32_t> illegalQSizes = GetIllegalQSizes(mqes); for (list<uint32_t>::iterator qSize = illegalQSizes.begin(); qSize != illegalQSizes.end(); qSize++) { LOG_NRM("Create an IOSQ object with test lifetime"); SharedIOSQPtr iosq = SharedIOSQPtr(new IOSQ(gDutFd)); LOG_NRM("Issue CreateIOSQ with illegal Q size = 0x%08X", *qSize); iosq->Init(IOQ_ID, *qSize, IOQ_ID, 0); LOG_NRM("Form a Create IOSQ cmd to perform queue creation"); SharedCreateIOSQPtr createIOSQCmd = SharedCreateIOSQPtr(new CreateIOSQ()); createIOSQCmd->Init(iosq); qualify = str(boost::format("qsize.0x%04X") % *qSize); IO::SendAndReapCmd(mGrpName, mTestName, DEFAULT_CMD_WAIT_ms, asq, acq, createIOSQCmd, qualify, false, CESTAT_MAX_Q_SIZE_EXCEED); } LOG_NRM("Issue largest legal sized IOSQ 0x%05lX, should succeed", mqes); LOG_NRM("Create an IOSQ object with test lifetime"); SharedIOSQPtr iosq = SharedIOSQPtr(new IOSQ(gDutFd)); LOG_NRM("Issue CreateIOSQ with legal Q size = 0x%08lX", mqes); iosq->Init(IOQ_ID, mqes, IOQ_ID, 0); LOG_NRM("Form a Create IOSQ cmd to perform queue creation"); SharedCreateIOSQPtr createIOSQCmd = SharedCreateIOSQPtr(new CreateIOSQ()); createIOSQCmd->Init(iosq); qualify = str(boost::format("qsize.0x%04lX") % mqes); IO::SendAndReapCmd(mGrpName, mTestName, DEFAULT_CMD_WAIT_ms, asq, acq, createIOSQCmd, qualify, false); Queues::DeleteIOSQToHdw(mGrpName, mTestName, DEFAULT_CMD_WAIT_ms, iosq, asq, acq, "", false); Queues::DeleteIOCQToHdw(mGrpName, mTestName, DEFAULT_CMD_WAIT_ms, iocq, asq, acq, "", false); }
void InvalidQID_r10b::RunCoreTest() { /** \verbatim * Assumptions: * None. * \endverbatim */ string work; bool enableLog; uint64_t maxIOQEntries = 2; if (gCtrlrConfig->SetState(ST_DISABLE_COMPLETELY) == false) throw FrmwkEx(HERE); LOG_NRM("Create admin queues ACQ and ASQ"); SharedACQPtr acq = SharedACQPtr(new ACQ(mFd)); acq->Init(5); SharedASQPtr asq = SharedASQPtr(new ASQ(mFd)); asq->Init(5); // All queues will use identical IRQ vector IRQ::SetAnySchemeSpecifyNum(1); gCtrlrConfig->SetCSS(CtrlrConfig::CSS_NVM_CMDSET); if (gCtrlrConfig->SetState(ST_ENABLE) == false) throw FrmwkEx(HERE); // Calc X, max no. of IOSQ's DUT supports. uint32_t X = gInformative->GetFeaturesNumOfIOSQs(); LOG_NRM("Maximum num of IOSQ's DUT will support = %d", X); LOG_NRM("Setup element sizes for the IOQ's"); gCtrlrConfig->SetIOCQES(gInformative->GetIdentifyCmdCtrlr()-> GetValue(IDCTRLRCAP_CQES) & 0xf); gCtrlrConfig->SetIOSQES(gInformative->GetIdentifyCmdCtrlr()-> GetValue(IDCTRLRCAP_SQES) & 0xf); LOG_NRM("Create IOCQ with QID = %d", IOQ_ID); SharedIOCQPtr iocq = Queues::CreateIOCQContigToHdw(mGrpName, mTestName, DEFAULT_CMD_WAIT_ms, asq, acq, IOQ_ID, maxIOQEntries, false, IOCQ_GROUP_ID, true, 0); LOG_NRM("Issue CreateIOSQ cmds with QID's ranging from %d to %d", (X + 1), MAX_IOQ_ID); list<uint32_t> illegalQIDs = GetIllegalQIDs(X + 1); for (list<uint32_t>::iterator qId = illegalQIDs.begin(); qId != illegalQIDs.end(); qId++) { LOG_NRM("Process CreateIOSQCmd with iosq id #%d and assoc iocq id #%d", *qId, IOQ_ID); SharedIOSQPtr iosq = SharedIOSQPtr(new IOSQ(mFd)); iosq->Init(*qId, maxIOQEntries, IOQ_ID, 0); SharedCreateIOSQPtr createIOSQCmd = SharedCreateIOSQPtr(new CreateIOSQ()); createIOSQCmd->Init(iosq); work = str(boost::format("iosqId.%d") % *qId); enableLog = false; if ((*qId <= (X + 8)) || (*qId >= (MAX_IOQ_ID - 8))) enableLog = true; LOG_NRM("Send and reap cmd with SQ ID #%d", *qId); IO::SendAndReapCmd(mGrpName, mTestName, DEFAULT_CMD_WAIT_ms, asq, acq, createIOSQCmd, work, enableLog, CESTAT_INVALID_QID); } }