/*----------------------------------------------------------------------------*/ P_DOMAIN_INFO_ENTRY rlmDomainGetDomainInfo ( P_ADAPTER_T prAdapter ) { #define REG_DOMAIN_DEF_IDX 14 /* EU (Europe Union) */ #define REG_DOMAIN_GROUP_NUM \ (sizeof(arSupportedRegDomains) / sizeof(DOMAIN_INFO_ENTRY)) UINT_16 i, j; P_DOMAIN_INFO_ENTRY prDomainInfo; P_REG_INFO_T prRegInfo; UINT_16 u2TargetCountryCode; ASSERT(prAdapter); if (prAdapter->prDomainInfo) { return prAdapter->prDomainInfo; } prRegInfo = &prAdapter->prGlueInfo->rRegInfo; DBGLOG(RLM, INFO, ("Domain: map=%d, idx=%d, code=0x%04x\n", prRegInfo->eRegChannelListMap, prRegInfo->ucRegChannelListIndex, prAdapter->rWifiVar.rConnSettings.u2CountryCode)); if (prRegInfo->eRegChannelListMap == REG_CH_MAP_TBL_IDX && prRegInfo->ucRegChannelListIndex < REG_DOMAIN_GROUP_NUM) { prDomainInfo = &arSupportedRegDomains[prRegInfo->ucRegChannelListIndex]; goto L_set_domain_info; } else if (prRegInfo->eRegChannelListMap == REG_CH_MAP_CUSTOMIZED) { prDomainInfo = &prRegInfo->rDomainInfo; goto L_set_domain_info; } u2TargetCountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode; /* If no matched country code, the final one will be used * The final one is for Europe union now. */ for (i = 0; i < REG_DOMAIN_GROUP_NUM; i++) { prDomainInfo = &arSupportedRegDomains[i]; ASSERT((prDomainInfo->u4CountryNum && prDomainInfo->pu2CountryGroup) || prDomainInfo->u4CountryNum == 0); for (j = 0; j < prDomainInfo->u4CountryNum; j++) { if (prDomainInfo->pu2CountryGroup[j] == u2TargetCountryCode) { break; } } if (j < prDomainInfo->u4CountryNum) { break; /* Found */ } } DATA_STRUC_INSPECTING_ASSERT(REG_DOMAIN_DEF_IDX < REG_DOMAIN_GROUP_NUM); if (i >= REG_DOMAIN_GROUP_NUM) { prDomainInfo = &arSupportedRegDomains[REG_DOMAIN_DEF_IDX]; } L_set_domain_info: prAdapter->prDomainInfo = prDomainInfo; return prDomainInfo; }
/*----------------------------------------------------------------------------*/ P_DOMAIN_INFO_ENTRY rlmDomainGetDomainInfo ( P_ADAPTER_T prAdapter ) { #define REG_DOMAIN_GROUP_NUM \ (sizeof(arSupportedRegDomains) / sizeof(DOMAIN_INFO_ENTRY)) UINT_16 i, j; P_DOMAIN_INFO_ENTRY prDomainInfo; P_REG_INFO_T prRegInfo; UINT_16 u2TargetCountryCode; ASSERT(prAdapter); prRegInfo = &prAdapter->prGlueInfo->rRegInfo; DBGLOG(RLM, INFO, ("Domain: map=%d, idx=%d, code=0x%04x\n", prRegInfo->eRegChannelListMap, prRegInfo->ucRegChannelListIndex, prAdapter->rWifiVar.rConnSettings.u2CountryCode)); /* only 1 is set among idx/customized/countryCode in NVRAM */ /* searched by idx */ if (prRegInfo->eRegChannelListMap == REG_CH_MAP_TBL_IDX && prRegInfo->ucRegChannelListIndex < REG_DOMAIN_GROUP_NUM) { prDomainInfo = &arSupportedRegDomains[prRegInfo->ucRegChannelListIndex]; goto L_set_domain_info; } /* searched by customized */ else if (prRegInfo->eRegChannelListMap == REG_CH_MAP_CUSTOMIZED) { prDomainInfo = &prRegInfo->rDomainInfo; goto L_set_domain_info; } /* searched by countryCode */ u2TargetCountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode; for (i = 0; i < REG_DOMAIN_GROUP_NUM; i++) { prDomainInfo = &arSupportedRegDomains[i]; ASSERT((prDomainInfo->u4CountryNum && prDomainInfo->pu2CountryGroup) || prDomainInfo->u4CountryNum == 0); for (j = 0; j < prDomainInfo->u4CountryNum; j++) { if (prDomainInfo->pu2CountryGroup[j] == u2TargetCountryCode) { break; } } if (j < prDomainInfo->u4CountryNum) { break; /* Found */ } } DATA_STRUC_INSPECTING_ASSERT(REG_DOMAIN_DEF_IDX < REG_DOMAIN_GROUP_NUM); /* If no matched countryCode */ if (i >= REG_DOMAIN_GROUP_NUM){ if (prAdapter->prDomainInfo) /* use previous NVRAM setting */ return prAdapter->prDomainInfo; else /* if never set before, use EU */ prDomainInfo = &arSupportedRegDomains[REG_DOMAIN_DEF_IDX]; } L_set_domain_info: prAdapter->prDomainInfo = prDomainInfo; return prDomainInfo; }