VOID RTMPRemoveRepeaterEntry( IN PRTMP_ADAPTER pAd, IN UCHAR apIdx, IN UCHAR CliIdx) { USHORT HashIdx; REPEATER_CLIENT_ENTRY *pEntry, *pPrevEntry, *pProbeEntry; REPEATER_CLIENT_ENTRY_MAP *pMapEntry, *pPrevMapEntry, *pProbeMapEntry; BOOLEAN bVaild; DBGPRINT(RT_DEBUG_OFF, (" %s. apIdx=%d CliIdx=%d\n", __FUNCTION__,apIdx,CliIdx)); RTMPRemoveRepeaterAsicEntry(pAd, CliIdx); NdisAcquireSpinLock(&pAd->ApCfg.ReptCliEntryLock); pEntry = &pAd->ApCfg.ApCliTab[apIdx].RepeaterCli[CliIdx]; bVaild = TRUE; HashIdx = MAC_ADDR_HASH_INDEX(pEntry->CurrentAddress); pPrevEntry = NULL; pProbeEntry = pAd->ApCfg.ReptCliHash[HashIdx]; ASSERT(pProbeEntry); if (pProbeEntry == NULL) { bVaild = FALSE; goto done; } if (pProbeEntry != NULL) { /* update Hash list*/ do { if (pProbeEntry == pEntry) { if (pPrevEntry == NULL) { pAd->ApCfg.ReptCliHash[HashIdx] = pEntry->pNext; } else { pPrevEntry->pNext = pEntry->pNext; } break; } pPrevEntry = pProbeEntry; pProbeEntry = pProbeEntry->pNext; } while (pProbeEntry); } /* not found !!!*/ ASSERT(pProbeEntry != NULL); if (pProbeEntry == NULL) { bVaild = FALSE; goto done; } pMapEntry = &pAd->ApCfg.ApCliTab[apIdx].RepeaterCliMap[CliIdx]; HashIdx = MAC_ADDR_HASH_INDEX(pEntry->OriginalAddress); pPrevMapEntry = NULL; pProbeMapEntry = pAd->ApCfg.ReptMapHash[HashIdx]; ASSERT(pProbeMapEntry); if (pProbeMapEntry != NULL) { /* update Hash list*/ do { if (pProbeMapEntry == pMapEntry) { if (pPrevMapEntry == NULL) { pAd->ApCfg.ReptMapHash[HashIdx] = pMapEntry->pNext; } else { pPrevMapEntry->pNext = pMapEntry->pNext; } break; } pPrevMapEntry = pProbeMapEntry; pProbeMapEntry = pProbeMapEntry->pNext; } while (pProbeMapEntry); } /* not found !!!*/ ASSERT(pProbeMapEntry != NULL); done: pAd->ApCfg.ApCliTab[apIdx].RepeaterCli[CliIdx].CliConnectState = 0; NdisZeroMemory(pAd->ApCfg.ApCliTab[apIdx].RepeaterCli[CliIdx].OriginalAddress, MAC_ADDR_LEN); if ((bVaild == TRUE) && (pAd->ApCfg.RepeaterCliSize > 0)) pAd->ApCfg.RepeaterCliSize--; /* set the apcli interface be invalid. */ pAd->ApCfg.ApCliTab[apIdx].RepeaterCli[CliIdx].CliValid = FALSE; pAd->ApCfg.ApCliTab[apIdx].RepeaterCli[CliIdx].CliEnable = FALSE; NdisReleaseSpinLock(&pAd->ApCfg.ReptCliEntryLock); return; }
VOID RTMPRemoveRepeaterEntry( IN PRTMP_ADAPTER pAd, IN UCHAR apidx, IN UCHAR CliIdx) { USHORT HashIdx; REPEATER_CLIENT_ENTRY *pEntry, *pPrevEntry, *pProbeEntry; REPEATER_CLIENT_ENTRY_MAP *pMapEntry, *pPrevMapEntry, *pProbeMapEntry; DBGPRINT(RT_DEBUG_ERROR, (" %s.\n", __FUNCTION__)); RTMPRemoveRepeaterAsicEntry(pAd, CliIdx); NdisAcquireSpinLock(&pAd->ApCfg.ReptCliEntryLock); pEntry = &pAd->ApCfg.ApCliTab[apidx].RepeaterCli[CliIdx]; HashIdx = MAC_ADDR_HASH_INDEX(pEntry->CurrentAddress); pPrevEntry = NULL; pProbeEntry = pAd->ApCfg.ReptCliHash[HashIdx]; ASSERT(pProbeEntry); if (pProbeEntry != NULL) { /* update Hash list*/ do { if (pProbeEntry == pEntry) { if (pPrevEntry == NULL) { pAd->ApCfg.ReptCliHash[HashIdx] = pEntry->pNext; } else { pPrevEntry->pNext = pEntry->pNext; } break; } pPrevEntry = pProbeEntry; pProbeEntry = pProbeEntry->pNext; } while (pProbeEntry); } /* not found !!!*/ ASSERT(pProbeEntry != NULL); pMapEntry = &pAd->ApCfg.ApCliTab[apidx].RepeaterCliMap[CliIdx]; HashIdx = MAC_ADDR_HASH_INDEX(pEntry->OriginalAddress); pPrevMapEntry = NULL; pProbeMapEntry = pAd->ApCfg.ReptMapHash[HashIdx]; ASSERT(pProbeMapEntry); if (pProbeMapEntry != NULL) { /* update Hash list*/ do { if (pProbeMapEntry == pMapEntry) { if (pPrevMapEntry == NULL) { pAd->ApCfg.ReptMapHash[HashIdx] = pMapEntry->pNext; } else { pPrevMapEntry->pNext = pMapEntry->pNext; } break; } pPrevMapEntry = pProbeMapEntry; pProbeMapEntry = pProbeMapEntry->pNext; } while (pProbeMapEntry); } /* not found !!!*/ ASSERT(pProbeMapEntry != NULL); pAd->ApCfg.ApCliTab[apidx].RepeaterCli[CliIdx].CliConnectState = 0; NdisZeroMemory(pAd->ApCfg.ApCliTab[apidx].RepeaterCli[CliIdx].OriginalAddress, MAC_ADDR_LEN); pAd->ApCfg.RepeaterCliSize--; NdisReleaseSpinLock(&pAd->ApCfg.ReptCliEntryLock); return; }