diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/cam.c')
-rw-r--r-- | drivers/net/wireless/rtlwifi/cam.c | 85 |
1 files changed, 39 insertions, 46 deletions
diff --git a/drivers/net/wireless/rtlwifi/cam.c b/drivers/net/wireless/rtlwifi/cam.c index dc36d7461caa..5c7d57947d23 100644 --- a/drivers/net/wireless/rtlwifi/cam.c +++ b/drivers/net/wireless/rtlwifi/cam.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /****************************************************************************** | 1 | /****************************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2009-2010 Realtek Corporation. | 3 | * Copyright(c) 2009-2012 Realtek Corporation. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms of version 2 of the GNU General Public License as | 6 | * under the terms of version 2 of the GNU General Public License as |
@@ -27,8 +27,6 @@ | |||
27 | * | 27 | * |
28 | *****************************************************************************/ | 28 | *****************************************************************************/ |
29 | 29 | ||
30 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
31 | |||
32 | #include <linux/export.h> | 30 | #include <linux/export.h> |
33 | #include "wifi.h" | 31 | #include "wifi.h" |
34 | #include "cam.h" | 32 | #include "cam.h" |
@@ -55,10 +53,10 @@ static void rtl_cam_program_entry(struct ieee80211_hw *hw, u32 entry_no, | |||
55 | u8 entry_i; | 53 | u8 entry_i; |
56 | 54 | ||
57 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | 55 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, |
58 | ("key_cont_128:\n %x:%x:%x:%x:%x:%x\n", | 56 | "key_cont_128:\n %x:%x:%x:%x:%x:%x\n", |
59 | key_cont_128[0], key_cont_128[1], | 57 | key_cont_128[0], key_cont_128[1], |
60 | key_cont_128[2], key_cont_128[3], | 58 | key_cont_128[2], key_cont_128[3], |
61 | key_cont_128[4], key_cont_128[5])); | 59 | key_cont_128[4], key_cont_128[5]); |
62 | 60 | ||
63 | for (entry_i = 0; entry_i < CAM_CONTENT_COUNT; entry_i++) { | 61 | for (entry_i = 0; entry_i < CAM_CONTENT_COUNT; entry_i++) { |
64 | target_command = entry_i + CAM_CONTENT_COUNT * entry_no; | 62 | target_command = entry_i + CAM_CONTENT_COUNT * entry_no; |
@@ -73,14 +71,12 @@ static void rtl_cam_program_entry(struct ieee80211_hw *hw, u32 entry_no, | |||
73 | rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], | 71 | rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], |
74 | target_command); | 72 | target_command); |
75 | 73 | ||
74 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, "WRITE %x: %x\n", | ||
75 | rtlpriv->cfg->maps[WCAMI], target_content); | ||
76 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | 76 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, |
77 | ("WRITE %x: %x\n", | 77 | "The Key ID is %d\n", entry_no); |
78 | rtlpriv->cfg->maps[WCAMI], target_content)); | 78 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, "WRITE %x: %x\n", |
79 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | 79 | rtlpriv->cfg->maps[RWCAM], target_command); |
80 | ("The Key ID is %d\n", entry_no)); | ||
81 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | ||
82 | ("WRITE %x: %x\n", | ||
83 | rtlpriv->cfg->maps[RWCAM], target_command)); | ||
84 | 80 | ||
85 | } else if (entry_i == 1) { | 81 | } else if (entry_i == 1) { |
86 | 82 | ||
@@ -94,10 +90,10 @@ static void rtl_cam_program_entry(struct ieee80211_hw *hw, u32 entry_no, | |||
94 | rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], | 90 | rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], |
95 | target_command); | 91 | target_command); |
96 | 92 | ||
97 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | 93 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, "WRITE A4: %x\n", |
98 | ("WRITE A4: %x\n", target_content)); | 94 | target_content); |
99 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | 95 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, "WRITE A0: %x\n", |
100 | ("WRITE A0: %x\n", target_command)); | 96 | target_command); |
101 | 97 | ||
102 | } else { | 98 | } else { |
103 | 99 | ||
@@ -114,15 +110,15 @@ static void rtl_cam_program_entry(struct ieee80211_hw *hw, u32 entry_no, | |||
114 | target_command); | 110 | target_command); |
115 | udelay(100); | 111 | udelay(100); |
116 | 112 | ||
117 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | 113 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, "WRITE A4: %x\n", |
118 | ("WRITE A4: %x\n", target_content)); | 114 | target_content); |
119 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | 115 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, "WRITE A0: %x\n", |
120 | ("WRITE A0: %x\n", target_command)); | 116 | target_command); |
121 | } | 117 | } |
122 | } | 118 | } |
123 | 119 | ||
124 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | 120 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, "after set key, usconfig:%x\n", |
125 | ("after set key, usconfig:%x\n", us_config)); | 121 | us_config); |
126 | } | 122 | } |
127 | 123 | ||
128 | u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, u8 *mac_addr, | 124 | u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, u8 *mac_addr, |
@@ -133,14 +129,13 @@ u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, u8 *mac_addr, | |||
133 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 129 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
134 | 130 | ||
135 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, | 131 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, |
136 | ("EntryNo:%x, ulKeyId=%x, ulEncAlg=%x, " | 132 | "EntryNo:%x, ulKeyId=%x, ulEncAlg=%x, ulUseDK=%x MacAddr %pM\n", |
137 | "ulUseDK=%x MacAddr %pM\n", | 133 | ul_entry_idx, ul_key_id, ul_enc_alg, |
138 | ul_entry_idx, ul_key_id, ul_enc_alg, | 134 | ul_default_key, mac_addr); |
139 | ul_default_key, mac_addr)); | ||
140 | 135 | ||
141 | if (ul_key_id == TOTAL_CAM_ENTRY) { | 136 | if (ul_key_id == TOTAL_CAM_ENTRY) { |
142 | RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, | 137 | RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, |
143 | ("<=== ulKeyId exceed!\n")); | 138 | "<=== ulKeyId exceed!\n"); |
144 | return 0; | 139 | return 0; |
145 | } | 140 | } |
146 | 141 | ||
@@ -153,7 +148,7 @@ u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, u8 *mac_addr, | |||
153 | rtl_cam_program_entry(hw, ul_entry_idx, mac_addr, | 148 | rtl_cam_program_entry(hw, ul_entry_idx, mac_addr, |
154 | (u8 *) key_content, us_config); | 149 | (u8 *) key_content, us_config); |
155 | 150 | ||
156 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, ("<===\n")); | 151 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "<===\n"); |
157 | 152 | ||
158 | return 1; | 153 | return 1; |
159 | 154 | ||
@@ -166,7 +161,7 @@ int rtl_cam_delete_one_entry(struct ieee80211_hw *hw, | |||
166 | u32 ul_command; | 161 | u32 ul_command; |
167 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 162 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
168 | 163 | ||
169 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, ("key_idx:%d\n", ul_key_id)); | 164 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "key_idx:%d\n", ul_key_id); |
170 | 165 | ||
171 | ul_command = ul_key_id * CAM_CONTENT_COUNT; | 166 | ul_command = ul_key_id * CAM_CONTENT_COUNT; |
172 | ul_command = ul_command | BIT(31) | BIT(16); | 167 | ul_command = ul_command | BIT(31) | BIT(16); |
@@ -175,9 +170,9 @@ int rtl_cam_delete_one_entry(struct ieee80211_hw *hw, | |||
175 | rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], ul_command); | 170 | rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], ul_command); |
176 | 171 | ||
177 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, | 172 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, |
178 | ("rtl_cam_delete_one_entry(): WRITE A4: %x\n", 0)); | 173 | "rtl_cam_delete_one_entry(): WRITE A4: %x\n", 0); |
179 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, | 174 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, |
180 | ("rtl_cam_delete_one_entry(): WRITE A0: %x\n", ul_command)); | 175 | "rtl_cam_delete_one_entry(): WRITE A0: %x\n", ul_command); |
181 | 176 | ||
182 | return 0; | 177 | return 0; |
183 | 178 | ||
@@ -229,9 +224,9 @@ void rtl_cam_mark_invalid(struct ieee80211_hw *hw, u8 uc_index) | |||
229 | rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], ul_command); | 224 | rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], ul_command); |
230 | 225 | ||
231 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, | 226 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, |
232 | ("rtl_cam_mark_invalid(): WRITE A4: %x\n", ul_content)); | 227 | "rtl_cam_mark_invalid(): WRITE A4: %x\n", ul_content); |
233 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, | 228 | RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, |
234 | ("rtl_cam_mark_invalid(): WRITE A0: %x\n", ul_command)); | 229 | "rtl_cam_mark_invalid(): WRITE A0: %x\n", ul_command); |
235 | } | 230 | } |
236 | EXPORT_SYMBOL(rtl_cam_mark_invalid); | 231 | EXPORT_SYMBOL(rtl_cam_mark_invalid); |
237 | 232 | ||
@@ -279,11 +274,11 @@ void rtl_cam_empty_entry(struct ieee80211_hw *hw, u8 uc_index) | |||
279 | rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], ul_command); | 274 | rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], ul_command); |
280 | 275 | ||
281 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | 276 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, |
282 | ("rtl_cam_empty_entry(): WRITE A4: %x\n", | 277 | "rtl_cam_empty_entry(): WRITE A4: %x\n", |
283 | ul_content)); | 278 | ul_content); |
284 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, | 279 | RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, |
285 | ("rtl_cam_empty_entry(): WRITE A0: %x\n", | 280 | "rtl_cam_empty_entry(): WRITE A0: %x\n", |
286 | ul_command)); | 281 | ul_command); |
287 | } | 282 | } |
288 | 283 | ||
289 | } | 284 | } |
@@ -297,8 +292,7 @@ u8 rtl_cam_get_free_entry(struct ieee80211_hw *hw, u8 *sta_addr) | |||
297 | u8 i, *addr; | 292 | u8 i, *addr; |
298 | 293 | ||
299 | if (NULL == sta_addr) { | 294 | if (NULL == sta_addr) { |
300 | RT_TRACE(rtlpriv, COMP_SEC, DBG_EMERG, | 295 | RT_TRACE(rtlpriv, COMP_SEC, DBG_EMERG, "sta_addr is NULL\n"); |
301 | ("sta_addr is NULL.\n")); | ||
302 | return TOTAL_CAM_ENTRY; | 296 | return TOTAL_CAM_ENTRY; |
303 | } | 297 | } |
304 | /* Does STA already exist? */ | 298 | /* Does STA already exist? */ |
@@ -311,8 +305,8 @@ u8 rtl_cam_get_free_entry(struct ieee80211_hw *hw, u8 *sta_addr) | |||
311 | for (entry_idx = 4; entry_idx < TOTAL_CAM_ENTRY; entry_idx++) { | 305 | for (entry_idx = 4; entry_idx < TOTAL_CAM_ENTRY; entry_idx++) { |
312 | if ((bitmap & BIT(0)) == 0) { | 306 | if ((bitmap & BIT(0)) == 0) { |
313 | RT_TRACE(rtlpriv, COMP_SEC, DBG_EMERG, | 307 | RT_TRACE(rtlpriv, COMP_SEC, DBG_EMERG, |
314 | ("-----hwsec_cam_bitmap: 0x%x entry_idx=%d\n", | 308 | "-----hwsec_cam_bitmap: 0x%x entry_idx=%d\n", |
315 | rtlpriv->sec.hwsec_cam_bitmap, entry_idx)); | 309 | rtlpriv->sec.hwsec_cam_bitmap, entry_idx); |
316 | rtlpriv->sec.hwsec_cam_bitmap |= BIT(0) << entry_idx; | 310 | rtlpriv->sec.hwsec_cam_bitmap |= BIT(0) << entry_idx; |
317 | memcpy(rtlpriv->sec.hwsec_cam_sta_addr[entry_idx], | 311 | memcpy(rtlpriv->sec.hwsec_cam_sta_addr[entry_idx], |
318 | sta_addr, ETH_ALEN); | 312 | sta_addr, ETH_ALEN); |
@@ -331,14 +325,13 @@ void rtl_cam_del_entry(struct ieee80211_hw *hw, u8 *sta_addr) | |||
331 | u8 i, *addr; | 325 | u8 i, *addr; |
332 | 326 | ||
333 | if (NULL == sta_addr) { | 327 | if (NULL == sta_addr) { |
334 | RT_TRACE(rtlpriv, COMP_SEC, DBG_EMERG, | 328 | RT_TRACE(rtlpriv, COMP_SEC, DBG_EMERG, "sta_addr is NULL\n"); |
335 | ("sta_addr is NULL.\n")); | ||
336 | } | 329 | } |
337 | 330 | ||
338 | if ((sta_addr[0]|sta_addr[1]|sta_addr[2]|sta_addr[3]|\ | 331 | if ((sta_addr[0]|sta_addr[1]|sta_addr[2]|sta_addr[3]|\ |
339 | sta_addr[4]|sta_addr[5]) == 0) { | 332 | sta_addr[4]|sta_addr[5]) == 0) { |
340 | RT_TRACE(rtlpriv, COMP_SEC, DBG_EMERG, | 333 | RT_TRACE(rtlpriv, COMP_SEC, DBG_EMERG, |
341 | ("sta_addr is 00:00:00:00:00:00.\n")); | 334 | "sta_addr is 00:00:00:00:00:00\n"); |
342 | return; | 335 | return; |
343 | } | 336 | } |
344 | /* Does STA already exist? */ | 337 | /* Does STA already exist? */ |