diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/rtl8192cu/mac.c')
| -rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192cu/mac.c | 18 | 
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c index 85b6bdb163c..da4f587199e 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c @@ -289,14 +289,30 @@ void rtl92c_set_key(struct ieee80211_hw *hw, u32 key_index,  				macaddr = cam_const_broad;  				entry_id = key_index;  			} else { +				if (mac->opmode == NL80211_IFTYPE_AP || +				    mac->opmode == NL80211_IFTYPE_MESH_POINT) { +					entry_id = rtl_cam_get_free_entry(hw, +								 p_macaddr); +					if (entry_id >=  TOTAL_CAM_ENTRY) { +						RT_TRACE(rtlpriv, COMP_SEC, +							 DBG_EMERG, +							 "Can not find free hw security cam entry\n"); +						return; +					} +				} else { +					entry_id = CAM_PAIRWISE_KEY_POSITION; +				} +  				key_index = PAIRWISE_KEYIDX; -				entry_id = CAM_PAIRWISE_KEY_POSITION;  				is_pairwise = true;  			}  		}  		if (rtlpriv->sec.key_len[key_index] == 0) {  			RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,  				 "delete one entry\n"); +			if (mac->opmode == NL80211_IFTYPE_AP || +			    mac->opmode == NL80211_IFTYPE_MESH_POINT) +				rtl_cam_del_entry(hw, p_macaddr);  			rtl_cam_delete_one_entry(hw, p_macaddr, entry_id);  		} else {  			RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD,  |