aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rtlwifi/cam.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/rtlwifi/cam.c')
-rw-r--r--drivers/net/wireless/rtlwifi/cam.c85
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
128u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, u8 *mac_addr, 124u8 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}
236EXPORT_SYMBOL(rtl_cam_mark_invalid); 231EXPORT_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? */