Untitled
unknown
plain_text
2 years ago
1.9 kB
5
Indexable
void chSwitchStaMigrationDoneCmdHandler(HOST_CMD_DESC_S *pCmdDesc) { TX_MNG_STA_MIG_PARAMS_S *pMigParams = pCmdDesc->cmdBuff; U32 linkId = stationIdToLinkId(pMigParams->staId, FALSE); if (--g_chSwitchRspCntr == 0) { // itzik: check for all fifos that there is no frames on status fifo of other lmac U32 i; U32 fifoNum; for (fifoNum = 0; i < 32; fifoNum++;) { U32 sttsFifo = SCD_GET_STTS_FIFO_WR_RD_PTRS(fifoNum); U32 rdPtr = SCD_GET_STATUS_FIFO_RDPTR(sttsFifo); U32 wrPtr = SCD_GET_STATUS_FIFO_WRPTR(sttsFifo); for (i = rdPtr; i < wrPtr; i++;) { U32 entry = g_pScdMemoryTableDb->txfStatusFifo[fifoNum].entry[i]; U32 tfdqNum = SHIFT_AND_MASK(entry, SCD_TXF_STTS_FIFO_RTDQ_NUM_MSK, SCD_TXF_STTS_FIFO_RTDQ_NUM_POS); U32 txfMapped = SHIFT_AND_MASK(NEVO_REG_READ(&SCD_STTS_TFDQ0[tfdqNum], SCD_STTS_TFDQ_TXF_NUM_MSK, SCD_STTS_TFDQ_TXF_NUM_POS); U32 txfValid = SHIFT_AND_MASK(NEVO_REG_READ(&SCD_STTS_TFDQ0[tfdqNum], SCD_STTS_TFDQ_TXF_VALID_MSK, SCD_STTS_TFDQ_TXF_VALID_POS); U32 sn = SHIFT_AND_MASK(entry, SCD_TXF_STTS_FIFO_SN_NUMBER_MSK, SCD_TXF_STTS_FIFO_SN_NUMBER_POS); U32 tfdqStatusEntry = g_pScdMemoryTableDb->tfdStatus.tfdQueue[tfdqNum][sn >> 3]; // select dword entry from 0 to 127 U32 tfdqStatusPos = sn % 8; // byte selected index pos U32 tfdqStatusMsk = 0xff << tfdqStatusPos; U32 tfdqStatus = SHIFT_AND_MASK(tfdqStatusEntry, tfdqStatusMsk, tfdqStatusPos); U32 lmacId = tfdqStatus & BIT(3); // bit 3 indicate lmac index if (!txfValid) { continue; } if ((txfMapped < 16 && lmacId == 1) || (txfMapped >= 16 && lmacId == 0)) { SYSASSERT(FALSE, 0xCAFE1, fifoNum, tfdqNum, i); } } } macDomainChannelSwitchComplete(linkId); } }
Editor is loading...