@@ -242,14 +242,19 @@ void zd_mac_clear(struct zd_mac *mac)
242242static int set_rx_filter (struct zd_mac * mac )
243243{
244244 unsigned long flags ;
245- u32 filter = STA_RX_FILTER ;
245+ struct zd_ioreq32 ioreqs [] = {
246+ {CR_RX_FILTER , STA_RX_FILTER },
247+ { CR_SNIFFER_ON , 0U },
248+ };
246249
247250 spin_lock_irqsave (& mac -> lock , flags );
248- if (mac -> pass_ctrl )
249- filter |= RX_FILTER_CTRL ;
251+ if (mac -> pass_ctrl ) {
252+ ioreqs [0 ].value |= 0xFFFFFFFF ;
253+ ioreqs [1 ].value = 0x1 ;
254+ }
250255 spin_unlock_irqrestore (& mac -> lock , flags );
251256
252- return zd_iowrite32 (& mac -> chip , CR_RX_FILTER , filter );
257+ return zd_iowrite32a (& mac -> chip , ioreqs , ARRAY_SIZE ( ioreqs ) );
253258}
254259
255260static int set_mac_and_bssid (struct zd_mac * mac )
@@ -1056,7 +1061,8 @@ int zd_mac_rx(struct ieee80211_hw *hw, const u8 *buffer, unsigned int length)
10561061 /* Caller has to ensure that length >= sizeof(struct rx_status). */
10571062 status = (struct rx_status * )
10581063 (buffer + (length - sizeof (struct rx_status )));
1059- if (status -> frame_status & ZD_RX_ERROR ) {
1064+ if ((status -> frame_status & ZD_RX_ERROR ) ||
1065+ (status -> frame_status & ~0x21 )) {
10601066 if (mac -> pass_failed_fcs &&
10611067 (status -> frame_status & ZD_RX_CRC32_ERROR )) {
10621068 stats .flag |= RX_FLAG_FAILED_FCS_CRC ;
@@ -1399,7 +1405,7 @@ struct ieee80211_hw *zd_mac_alloc_hw(struct usb_interface *intf)
13991405 ieee80211_hw_set (hw , MFP_CAPABLE );
14001406 ieee80211_hw_set (hw , HOST_BROADCAST_PS_BUFFERING );
14011407 ieee80211_hw_set (hw , RX_INCLUDES_FCS );
1402- ieee80211_hw_set (hw , SIGNAL_UNSPEC );
1408+ ieee80211_hw_set (hw , SIGNAL_DBM );
14031409
14041410 hw -> wiphy -> interface_modes =
14051411 BIT (NL80211_IFTYPE_MESH_POINT ) |
0 commit comments