77 #define UNIFI_SME_MGT_SHORT_TIMEOUT 10000
78 #define UNIFI_SME_MGT_LONG_TIMEOUT 19000
79 #define UNIFI_SME_SYS_LONG_TIMEOUT 10000
82 # define sme_wait_for_reply(priv, t) _sme_wait_for_reply(priv, t, __func__)
84 # define sme_wait_for_reply(priv, t) _sme_wait_for_reply(priv, t, NULL)
91 unifi_error(priv,
"sme_init_request: Invalid priv\n");
99 unifi_error(priv,
"sme_init_request: Failed to get SME semaphore\n");
115 unifi_error(priv,
"sme_complete_request: Invalid priv\n");
121 "sme_complete_request: request not pending %s (s:%d)\n",
122 (func ? func :
""), priv->sme_reply.request_status);
126 "sme_complete_request: completed %s (s:%d)\n",
127 (func ? func :
""), priv->sme_reply.request_status);
130 priv->sme_reply.reply_status = reply_status;
146 unifi_error(priv,
"sme_cancel_request: Invalid priv\n");
153 "sme_cancel_request: no request was pending (s:%d)\n",
154 priv->sme_reply.request_status);
159 "sme_cancel_request: request cancelled (s:%d)\n",
160 priv->sme_reply.request_status);
164 priv->sme_reply.reply_status = reply_status;
174 unsigned long timeout,
const char *
func)
178 unifi_trace(priv,
UDBG5,
"sme_wait_for_reply: %s sleep\n", func ? func :
"");
182 unifi_trace(priv,
UDBG5,
"sme_wait_for_reply: %s awake (%d)\n", func ? func :
"", r);
186 unifi_info(priv,
"ERESTARTSYS in _sme_wait_for_reply\n");
191 unifi_trace(priv,
UDBG5,
"Cancelled waiting for SME to reply (%s s:%d, t:%d, r:%d)\n",
192 (func ? func :
""), priv->sme_reply.request_status, timeout, r);
199 unifi_notice(priv,
"Timeout waiting for SME to reply (%s s:%d, t:%d)\n",
200 (func ? func :
""), priv->sme_reply.request_status, timeout);
211 func ? func :
"", r);
222 #ifdef CSR_SUPPORT_WEXT
227 #ifdef CSR_SUPPORT_WEXT_AP
231 if (priv->smepriv ==
NULL) {
232 unifi_error(priv,
"sme_mgt_wifi_on: invalid smepriv\n");
236 if (priv->mib_data.length) {
238 dataList = &priv->mib_data;
244 #ifdef CSR_SUPPORT_WEXT_AP
245 r = sme_init_request(priv);
251 #ifdef CSR_SUPPORT_WEXT_AP
254 "sme_mgt_wifi_on: unifi_mgt_wifi_oo_req <-- (r=%d, status=%d)\n",
255 r, priv->sme_reply.reply_status);
267 if (priv->smepriv ==
NULL) {
268 unifi_error(priv,
"sme_mgt_wifi_off: invalid smepriv\n");
272 r = sme_init_request(priv);
286 "sme_mgt_wifi_off: unifi_mgt_wifi_off_req <-- (r=%d, status=%d)\n",
287 r, priv->sme_reply.reply_status);
297 if (priv->smepriv ==
NULL) {
298 unifi_error(priv,
"sme_mgt_key: invalid smepriv\n");
302 r = sme_init_request(priv);
327 if (priv->smepriv ==
NULL) {
328 unifi_error(priv,
"sme_mgt_scan_full: invalid smepriv\n");
334 r = sme_init_request(priv);
342 "channel list - num_channels: %d, active scan\n",
347 specific_ssid->
length?1:0,
353 (
u16)num_channels, channel_list,
361 unifi_trace(priv,
UDBG4,
"sme_mgt_scan_full: <-- (status=%d)\n", priv->sme_reply.reply_status);
373 long scan_results_len)
375 u16 scan_result_list_count;
380 char *current_ev = scan_results;
382 if (priv->smepriv ==
NULL) {
383 unifi_error(priv,
"sme_mgt_scan_results_get_async: invalid smepriv\n");
387 r = sme_init_request(priv);
398 scan_result_list_count = priv->sme_reply.reply_scan_results_count;
399 scan_result_list = priv->sme_reply.reply_scan_results;
401 "scan_results: Scan returned %d, numElements=%d\n",
402 r, scan_result_list_count);
405 for (i = 0; i < scan_result_list_count; ++
i) {
406 scan_result = &scan_result_list[
i];
414 scan_results + scan_results_len,
418 kfree(scan_result_list);
419 priv->sme_reply.reply_scan_results_count = 0;
420 priv->sme_reply.reply_scan_results =
NULL;
432 kfree(scan_result_list);
433 priv->sme_reply.reply_scan_results_count = 0;
434 priv->sme_reply.reply_scan_results =
NULL;
437 "scan_results: Scan translated to %d bytes\n",
438 current_ev - scan_results);
439 return (current_ev - scan_results);
447 if (priv->smepriv ==
NULL) {
448 unifi_error(priv,
"sme_mgt_connect: invalid smepriv\n");
453 priv->connection_config.ssid.length,
454 priv->connection_config.ssid.ssid);
456 r = sme_init_request(priv);
467 if (priv->sme_reply.reply_status) {
469 priv->sme_reply.reply_status);
480 if (priv->smepriv ==
NULL) {
481 unifi_error(priv,
"sme_mgt_disconnect: invalid smepriv\n");
485 r = sme_init_request(priv);
496 unifi_trace(priv,
UDBG4,
"sme_mgt_disconnect: <-- (status=%d)\n", priv->sme_reply.reply_status);
507 if (priv->smepriv ==
NULL) {
508 unifi_error(priv,
"sme_mgt_pmkid: invalid smepriv\n");
512 r = sme_init_request(priv);
524 unifi_trace(priv,
UDBG4,
"sme_mgt_pmkid: <-- (status=%d)\n", priv->sme_reply.reply_status);
530 unsigned char *varbind,
int *
length)
534 if (priv->smepriv ==
NULL) {
535 unifi_error(priv,
"sme_mgt_mib_get: invalid smepriv\n");
539 r = sme_init_request(priv);
559 unifi_trace(priv,
UDBG4,
"sme_mgt_mib_get: <-- (status=%d)\n", priv->sme_reply.reply_status);
564 unsigned char *varbind,
int length)
568 if (priv->smepriv ==
NULL) {
569 unifi_error(priv,
"sme_mgt_mib_get: invalid smepriv\n");
573 r = sme_init_request(priv);
584 unifi_trace(priv,
UDBG4,
"sme_mgt_mib_set: <-- (status=%d)\n", priv->sme_reply.reply_status);
592 #ifdef CSR_SME_USERSPACE
595 if (priv->smepriv ==
NULL) {
596 unifi_error(priv,
"sme_mgt_set_value_async: invalid smepriv\n");
600 r = sme_init_request(priv);
613 "sme_mgt_set_value_async: unifi_mgt_set_value_req <-- (r=%d status=%d)\n",
614 r, priv->sme_reply.reply_status);
618 if (priv->smepriv ==
NULL) {
619 unifi_error(priv,
"sme_mgt_set_value: invalid smepriv\n");
622 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
623 status = CsrWifiSmeMgtPowerConfigSetReq(priv->smepriv, *powerConfig);
624 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
631 #ifdef CSR_SME_USERSPACE
634 if (priv->smepriv ==
NULL) {
635 unifi_error(priv,
"sme_mgt_sme_config_set: invalid smepriv\n");
639 r = sme_init_request(priv);
650 "sme_mgt_sme_config_set: CsrWifiSmeSmeStaConfigSetReq <-- (r=%d status=%d)\n",
651 r, priv->sme_reply.reply_status);
653 r = sme_init_request(priv);
665 "sme_mgt_sme_config_set: CsrWifiSmeSmeCommonConfigSetReq <-- (r=%d status=%d)\n",
666 r, priv->sme_reply.reply_status);
671 if (priv->smepriv ==
NULL) {
672 unifi_error(priv,
"sme_mgt_sme_config_set: invalid smepriv\n");
675 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
676 status = CsrWifiSmeMgtSmeConfigSetReq(priv->smepriv, *staConfig);
677 status = CsrWifiSmeMgtDeviceConfigSetReq(priv->smepriv, *deviceConfig);
678 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
683 #ifdef CSR_SUPPORT_WEXT
687 #ifdef CSR_SME_USERSPACE
690 if (priv->smepriv ==
NULL) {
691 unifi_error(priv,
"sme_mgt_mib_config_set: invalid smepriv\n");
695 r = sme_init_request(priv);
708 "sme_mgt_mib_config_set: unifi_mgt_set_mib_config_req <-- (r=%d status=%d)\n",
709 r, priv->sme_reply.reply_status);
713 if (priv->smepriv ==
NULL) {
714 unifi_error(priv,
"sme_mgt_mib_config_set: invalid smepriv\n");
717 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
718 status = CsrWifiSmeMgtMibConfigSetReq(priv->smepriv, *mibConfig);
719 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
726 #ifdef CSR_SME_USERSPACE
729 if (priv->smepriv ==
NULL) {
730 unifi_error(priv,
"sme_mgt_coex_config_set: invalid smepriv\n");
734 r = sme_init_request(priv);
747 "sme_mgt_coex_config_set: unifi_mgt_set_mib_config_req <-- (r=%d status=%d)\n",
748 r, priv->sme_reply.reply_status);
752 if (priv->smepriv ==
NULL) {
753 unifi_error(priv,
"sme_mgt_coex_config_set: invalid smepriv\n");
756 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
757 status = CsrWifiSmeMgtCoexConfigSetReq(priv->smepriv, *coexConfig);
758 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
767 #ifdef CSR_SME_USERSPACE
770 if (priv->smepriv ==
NULL) {
771 unifi_error(priv,
"sme_mgt_host_config_set: invalid smepriv\n");
775 r = sme_init_request(priv);
788 "sme_mgt_host_config_set: unifi_mgt_set_host_config_req <-- (r=%d status=%d)\n",
789 r, priv->sme_reply.reply_status);
793 if (priv->smepriv ==
NULL) {
794 unifi_error(priv,
"sme_mgt_host_config_set: invalid smepriv\n");
797 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
798 status = CsrWifiSmeMgtHostConfigSetReq(priv->smepriv, *hostConfig);
799 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
804 #ifdef CSR_SUPPORT_WEXT
808 #ifdef CSR_SME_USERSPACE
811 if (priv->smepriv ==
NULL) {
812 unifi_error(priv,
"sme_mgt_versions_get: invalid smepriv\n");
816 unifi_trace(priv,
UDBG4,
"sme_mgt_versions_get: unifi_mgt_versions_get_req -->\n");
817 r = sme_init_request(priv);
830 if (versions !=
NULL) {
831 memcpy((
unsigned char*)versions,
832 (
unsigned char*)&priv->sme_reply.versions,
837 "sme_mgt_versions_get: unifi_mgt_versions_get_req <-- (r=%d status=%d)\n",
838 r, priv->sme_reply.reply_status);
843 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
844 status = CsrWifiSmeMgtVersionsGetReq(priv->smepriv, versions);
845 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
854 #ifdef CSR_SME_USERSPACE
857 if (priv->smepriv ==
NULL) {
858 unifi_error(priv,
"sme_mgt_power_config_get: invalid smepriv\n");
862 unifi_trace(priv,
UDBG4,
"sme_mgt_power_config_get: unifi_mgt_power_config_req -->\n");
863 r = sme_init_request(priv);
876 if (powerConfig !=
NULL) {
877 memcpy((
unsigned char*)powerConfig,
878 (
unsigned char*)&priv->sme_reply.powerConfig,
883 "sme_mgt_get_versions: unifi_mgt_power_config_req <-- (r=%d status=%d)\n",
884 r, priv->sme_reply.reply_status);
889 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
890 status = CsrWifiSmeMgtPowerConfigGetReq(priv->smepriv, powerConfig);
891 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
898 #ifdef CSR_SME_USERSPACE
901 if (priv->smepriv ==
NULL) {
902 unifi_error(priv,
"sme_mgt_host_config_get: invalid smepriv\n");
906 unifi_trace(priv,
UDBG4,
"sme_mgt_host_config_get: unifi_mgt_host_config_get_req -->\n");
907 r = sme_init_request(priv);
920 if (hostConfig !=
NULL) {
921 memcpy((
unsigned char*)hostConfig,
922 (
unsigned char*)&priv->sme_reply.hostConfig,
927 "sme_mgt_host_config_get: unifi_mgt_host_config_get_req <-- (r=%d status=%d)\n",
928 r, priv->sme_reply.reply_status);
933 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
934 status = CsrWifiSmeMgtHostConfigGetReq(priv->smepriv, hostConfig);
935 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
942 #ifdef CSR_SME_USERSPACE
945 if (priv->smepriv ==
NULL) {
946 unifi_error(priv,
"sme_mgt_sme_config_get: invalid smepriv\n");
950 unifi_trace(priv,
UDBG4,
"sme_mgt_sme_config_get: unifi_mgt_sme_config_get_req -->\n");
953 r = sme_init_request(priv);
965 if (deviceConfig !=
NULL) {
966 memcpy((
unsigned char*)deviceConfig,
967 (
unsigned char*)&priv->sme_reply.deviceConfig,
972 r = sme_init_request(priv);
984 if (staConfig !=
NULL) {
985 memcpy((
unsigned char*)staConfig,
986 (
unsigned char*)&priv->sme_reply.staConfig,
991 "sme_mgt_sme_config_get: unifi_mgt_sme_config_get_req <-- (r=%d status=%d)\n",
992 r, priv->sme_reply.reply_status);
997 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
998 status = CsrWifiSmeMgtSmeConfigGetReq(priv->smepriv, staConfig);
999 status = CsrWifiSmeMgtDeviceConfigGetReq(priv->smepriv, deviceConfig);
1000 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
1007 #ifdef CSR_SME_USERSPACE
1010 if (priv->smepriv ==
NULL) {
1011 unifi_error(priv,
"sme_mgt_coex_info_get: invalid smepriv\n");
1015 unifi_trace(priv,
UDBG4,
"sme_mgt_coex_info_get: unifi_mgt_coex_info_get_req -->\n");
1016 r = sme_init_request(priv);
1029 if (coexInfo !=
NULL) {
1030 memcpy((
unsigned char*)coexInfo,
1031 (
unsigned char*)&priv->sme_reply.coexInfo,
1036 "sme_mgt_coex_info_get: unifi_mgt_coex_info_get_req <-- (r=%d status=%d)\n",
1037 r, priv->sme_reply.reply_status);
1042 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
1043 status = CsrWifiSmeMgtCoexInfoGetReq(priv->smepriv, coexInfo);
1044 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
1049 #ifdef CSR_SUPPORT_WEXT
1053 #ifdef CSR_SME_USERSPACE
1056 if (priv->smepriv ==
NULL) {
1057 unifi_error(priv,
"sme_mgt_coex_config_get: invalid smepriv\n");
1061 unifi_trace(priv,
UDBG4,
"sme_mgt_coex_config_get: unifi_mgt_coex_config_get_req -->\n");
1062 r = sme_init_request(priv);
1075 if (coexConfig !=
NULL) {
1076 memcpy((
unsigned char*)coexConfig,
1077 (
unsigned char*)&priv->sme_reply.coexConfig,
1082 "sme_mgt_coex_config_get: unifi_mgt_coex_config_get_req <-- (r=%d status=%d)\n",
1083 r, priv->sme_reply.reply_status);
1088 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
1089 status = CsrWifiSmeMgtCoexConfigGetReq(priv->smepriv, coexConfig);
1090 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
1097 #ifdef CSR_SME_USERSPACE
1100 if (priv->smepriv ==
NULL) {
1101 unifi_error(priv,
"sme_mgt_mib_config_get: invalid smepriv\n");
1105 unifi_trace(priv,
UDBG4,
"sme_mgt_mib_config_get: unifi_mgt_mib_config_get_req -->\n");
1106 r = sme_init_request(priv);
1119 if (mibConfig !=
NULL) {
1120 memcpy((
unsigned char*)mibConfig,
1121 (
unsigned char*)&priv->sme_reply.mibConfig,
1126 "sme_mgt_mib_config_get: unifi_mgt_mib_config_get_req <-- (r=%d status=%d)\n",
1127 r, priv->sme_reply.reply_status);
1132 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
1133 status = CsrWifiSmeMgtMibConfigGetReq(priv->smepriv, mibConfig);
1134 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
1141 #ifdef CSR_SME_USERSPACE
1144 if (priv->smepriv ==
NULL) {
1145 unifi_error(priv,
"sme_mgt_connection_info_get: invalid smepriv\n");
1149 unifi_trace(priv,
UDBG4,
"sme_mgt_connection_info_get: unifi_mgt_connection_info_get_req -->\n");
1150 r = sme_init_request(priv);
1163 if (connectionInfo !=
NULL) {
1164 memcpy((
unsigned char*)connectionInfo,
1165 (
unsigned char*)&priv->sme_reply.connectionInfo,
1170 "sme_mgt_connection_info_get: unifi_mgt_connection_info_get_req <-- (r=%d status=%d)\n",
1171 r, priv->sme_reply.reply_status);
1176 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
1177 status = CsrWifiSmeMgtConnectionInfoGetReq(priv->smepriv, connectionInfo);
1178 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
1185 #ifdef CSR_SME_USERSPACE
1188 if (priv->smepriv ==
NULL) {
1189 unifi_error(priv,
"sme_mgt_connection_config_get: invalid smepriv\n");
1193 unifi_trace(priv,
UDBG4,
"sme_mgt_connection_config_get: unifi_mgt_connection_config_get_req -->\n");
1194 r = sme_init_request(priv);
1207 if (connectionConfig !=
NULL) {
1208 memcpy((
unsigned char*)connectionConfig,
1209 (
unsigned char*)&priv->sme_reply.connectionConfig,
1214 "sme_mgt_connection_config_get: unifi_mgt_connection_config_get_req <-- (r=%d status=%d)\n",
1215 r, priv->sme_reply.reply_status);
1220 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
1221 status = CsrWifiSmeMgtConnectionConfigGetReq(priv->smepriv, connectionConfig);
1222 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
1229 #ifdef CSR_SME_USERSPACE
1232 if (priv->smepriv ==
NULL) {
1233 unifi_error(priv,
"sme_mgt_connection_stats_get: invalid smepriv\n");
1237 unifi_trace(priv,
UDBG4,
"sme_mgt_connection_stats_get: unifi_mgt_connection_stats_get_req -->\n");
1238 r = sme_init_request(priv);
1251 if (connectionStats !=
NULL) {
1252 memcpy((
unsigned char*)connectionStats,
1253 (
unsigned char*)&priv->sme_reply.connectionStats,
1258 "sme_mgt_connection_stats_get: unifi_mgt_connection_stats_get_req <-- (r=%d status=%d)\n",
1259 r, priv->sme_reply.reply_status);
1264 CsrWifiSmeMgtClaimSyncAccess(priv->smepriv);
1265 status = CsrWifiSmeMgtConnectionStatsGetReq(priv->smepriv, connectionStats);
1266 CsrWifiSmeMgtReleaseSyncAccess(priv->smepriv);
1276 if (priv->smepriv ==
NULL) {
1277 unifi_error(priv,
"sme_mgt_packet_filter_set: invalid smepriv\n");
1280 if (priv->packet_filters.arp_filter) {
1281 ipAddress.
a[0] = (priv->sta_ip_address ) & 0xFF;
1282 ipAddress.
a[1] = (priv->sta_ip_address >> 8) & 0xFF;
1283 ipAddress.
a[2] = (priv->sta_ip_address >> 16) & 0xFF;
1284 ipAddress.
a[3] = (priv->sta_ip_address >> 24) & 0xFF;
1288 "sme_mgt_packet_filter_set: IP address %d.%d.%d.%d\n",
1289 ipAddress.
a[0], ipAddress.
a[1],
1290 ipAddress.
a[2], ipAddress.
a[3]);
1294 priv->packet_filters.tclas_ies_length,
1295 priv->filter_tclas_ies,
1296 priv->packet_filters.filter_mode,
1306 if (priv->smepriv ==
NULL) {
1307 unifi_error(priv,
"sme_mgt_tspec: invalid smepriv\n");
1311 r = sme_init_request(priv);
1317 action, tid,
TRUE, 0,
1325 unifi_trace(priv,
UDBG4,
"sme_mgt_tspec: <-- (status=%d)\n", priv->sme_reply.reply_status);
1336 if (priv->smepriv ==
NULL) {
1337 unifi_error(priv,
"sme_sys_suspend: invalid smepriv\n");
1341 r = sme_init_request(priv);
1352 "suspend: SME did not reply %s, ",
1381 unifi_notice(priv,
"WOL csr_sdio_linux_remove_irq failed\n");
1395 unifi_error(priv,
"WOL CsrSdioInterruptEnable failed %d\n", csrResult);
1413 unifi_trace(priv,
UDBG1,
"sme_sys_suspend: <-- (r=%d status=%d)\n", r, priv->sme_reply.reply_status);
1424 if (priv->smepriv ==
NULL) {
1425 unifi_error(priv,
"sme_sys_resume: invalid smepriv\n");
1429 r = sme_init_request(priv);
1439 "resume: SME did not reply, return success anyway\n");
1445 #ifdef CSR_SUPPORT_WEXT_AP
1450 if (priv->smepriv ==
NULL) {
1451 unifi_error(priv,
"sme_ap_stop: invalid smepriv\n");
1455 r = sme_init_request(priv);
1468 "sme_ap_stop <-- (r=%d status=%d)\n",
1469 r, priv->sme_reply.reply_status);
1475 CsrWifiSmeApConfig_t * ap_config)
1481 if (priv->smepriv ==
NULL) {
1482 unifi_error(priv,
"sme_ap_start: invalid smepriv\n");
1486 r = sme_init_request(priv);
1492 ap_config->ssid,1,ap_config->channel,
1493 ap_config->credentials,ap_config->max_connections,
1494 p2p_go_param,
FALSE);
1502 "sme_ap_start <-- (r=%d status=%d)\n",
1503 r, priv->sme_reply.reply_status);
1515 if (priv->smepriv ==
NULL) {
1516 unifi_error(priv,
"sme_ap_config: invalid smepriv\n");
1520 r = sme_init_request(priv);
1531 "sme_ap_config <-- (r=%d status=%d)\n",
1532 r, priv->sme_reply.reply_status);