aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath6kl/wmi.c
diff options
context:
space:
mode:
authorJouni Malinen <jouni@qca.qualcomm.com>2011-09-21 09:57:29 -0400
committerKalle Valo <kvalo@qca.qualcomm.com>2011-09-22 03:40:40 -0400
commit865121361f0be55555c540c3df444ed06e090b33 (patch)
tree20335007b645313e41b11fb4743e5672d33363bd /drivers/net/wireless/ath/ath6kl/wmi.c
parent011a36e1193c02abcdc4853be09275a0fe9d1a32 (diff)
ath6kl: Report PMKSA candidate events through cfg80211
This allows RSN pre-authentication to be used when roaming decisions are done in the target. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath6kl/wmi.c')
-rw-r--r--drivers/net/wireless/ath/ath6kl/wmi.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
index b90d116c018c..47fbb8e7686b 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.c
+++ b/drivers/net/wireless/ath/ath6kl/wmi.c
@@ -1097,6 +1097,35 @@ static int ath6kl_wmi_scan_complete_rx(struct wmi *wmi, u8 *datap, int len)
1097 return 0; 1097 return 0;
1098} 1098}
1099 1099
1100static int ath6kl_wmi_neighbor_report_event_rx(struct wmi *wmi, u8 *datap,
1101 int len)
1102{
1103 struct wmi_neighbor_report_event *ev;
1104 u8 i;
1105
1106 if (len < sizeof(*ev))
1107 return -EINVAL;
1108 ev = (struct wmi_neighbor_report_event *) datap;
1109 if (sizeof(*ev) + ev->num_neighbors * sizeof(struct wmi_neighbor_info)
1110 > len) {
1111 ath6kl_dbg(ATH6KL_DBG_WMI, "truncated neighbor event "
1112 "(num=%d len=%d)\n", ev->num_neighbors, len);
1113 return -EINVAL;
1114 }
1115 for (i = 0; i < ev->num_neighbors; i++) {
1116 ath6kl_dbg(ATH6KL_DBG_WMI, "neighbor %d/%d - %pM 0x%x\n",
1117 i + 1, ev->num_neighbors, ev->neighbor[i].bssid,
1118 ev->neighbor[i].bss_flags);
1119 cfg80211_pmksa_candidate_notify(wmi->parent_dev->net_dev, i,
1120 ev->neighbor[i].bssid,
1121 !!(ev->neighbor[i].bss_flags &
1122 WMI_PREAUTH_CAPABLE_BSS),
1123 GFP_ATOMIC);
1124 }
1125
1126 return 0;
1127}
1128
1100/* 1129/*
1101 * Target is reporting a programming error. This is for 1130 * Target is reporting a programming error. This is for
1102 * developer aid only. Target only checks a few common violations 1131 * developer aid only. Target only checks a few common violations
@@ -2870,6 +2899,7 @@ int ath6kl_wmi_control_rx(struct wmi *wmi, struct sk_buff *skb)
2870 break; 2899 break;
2871 case WMI_NEIGHBOR_REPORT_EVENTID: 2900 case WMI_NEIGHBOR_REPORT_EVENTID:
2872 ath6kl_dbg(ATH6KL_DBG_WMI, "WMI_NEIGHBOR_REPORT_EVENTID\n"); 2901 ath6kl_dbg(ATH6KL_DBG_WMI, "WMI_NEIGHBOR_REPORT_EVENTID\n");
2902 ret = ath6kl_wmi_neighbor_report_event_rx(wmi, datap, len);
2873 break; 2903 break;
2874 case WMI_SCAN_COMPLETE_EVENTID: 2904 case WMI_SCAN_COMPLETE_EVENTID:
2875 ath6kl_dbg(ATH6KL_DBG_WMI, "WMI_SCAN_COMPLETE_EVENTID\n"); 2905 ath6kl_dbg(ATH6KL_DBG_WMI, "WMI_SCAN_COMPLETE_EVENTID\n");