@@ -1166,86 +1166,91 @@ void rtw_joinbss_event_prehandle(struct adapter *adapter, u8 *pbuf)
11661166 pmlmepriv -> link_detect_info .traffic_transition_count = 0 ;
11671167 pmlmepriv -> link_detect_info .low_power_transition_count = 0 ;
11681168
1169- if (pnetwork -> join_res > 0 ) {
1170- spin_lock_bh (& pmlmepriv -> scanned_queue .lock );
1171- if (check_fwstate (pmlmepriv , _FW_UNDER_LINKING )) {
1172- /* s1. find ptarget_wlan */
1173- if (check_fwstate (pmlmepriv , _FW_LINKED )) {
1174- if (the_same_macaddr ) {
1175- ptarget_wlan = rtw_find_network (& pmlmepriv -> scanned_queue , cur_network -> network .mac_address );
1176- } else {
1177- pcur_wlan = rtw_find_network (& pmlmepriv -> scanned_queue , cur_network -> network .mac_address );
1178- if (pcur_wlan )
1179- pcur_wlan -> fixed = false;
1180-
1181- pcur_sta = rtw_get_stainfo (pstapriv , cur_network -> network .mac_address );
1182- if (pcur_sta )
1183- rtw_free_stainfo (adapter , pcur_sta );
1184-
1185- ptarget_wlan = rtw_find_network (& pmlmepriv -> scanned_queue , pnetwork -> network .mac_address );
1186- if (check_fwstate (pmlmepriv , WIFI_STATION_STATE )) {
1187- if (ptarget_wlan )
1188- ptarget_wlan -> fixed = true;
1189- }
1190- }
1169+ if (pnetwork -> join_res == -4 ) {
1170+ rtw_reset_securitypriv (adapter );
1171+ _set_timer (& pmlmepriv -> assoc_timer , 1 );
11911172
1192- } else {
1193- ptarget_wlan = _rtw_find_same_network (& pmlmepriv -> scanned_queue , pnetwork );
1194- if (check_fwstate (pmlmepriv , WIFI_STATION_STATE )) {
1195- if (ptarget_wlan )
1196- ptarget_wlan -> fixed = true;
1197- }
1198- }
1173+ if (check_fwstate (pmlmepriv , _FW_UNDER_LINKING ))
1174+ _clr_fwstate_ (pmlmepriv , _FW_UNDER_LINKING );
11991175
1200- /* s2. update cur_network */
1201- if (ptarget_wlan ) {
1202- rtw_joinbss_update_network (adapter , ptarget_wlan , pnetwork );
1203- } else {
1204- netdev_dbg (adapter -> pnetdev ,
1205- "Can't find ptarget_wlan when joinbss_event callback\n" );
1206- spin_unlock_bh (& pmlmepriv -> scanned_queue .lock );
1207- goto ignore_joinbss_callback ;
1208- }
1176+ spin_unlock_bh (& pmlmepriv -> lock );
1177+ return ;
1178+ }
12091179
1210- /* s3. find ptarget_sta & update ptarget_sta after update cur_network only for station mode */
1211- if (check_fwstate (pmlmepriv , WIFI_STATION_STATE )) {
1212- ptarget_sta = rtw_joinbss_update_stainfo (adapter , pnetwork );
1213- if (!ptarget_sta ) {
1214- spin_unlock_bh (& pmlmepriv -> scanned_queue .lock );
1215- goto ignore_joinbss_callback ;
1216- }
1217- }
1180+ if (pnetwork -> join_res <= 0 ) { /* if join_res < 0 (join fails), then try again */
1181+ _set_timer (& pmlmepriv -> assoc_timer , 1 );
1182+ _clr_fwstate_ (pmlmepriv , _FW_UNDER_LINKING );
1183+ spin_unlock_bh (& pmlmepriv -> lock );
1184+ return ;
1185+ }
12181186
1219- /* s4. indicate connect */
1187+ spin_lock_bh (& pmlmepriv -> scanned_queue .lock );
1188+
1189+ if (!check_fwstate (pmlmepriv , _FW_UNDER_LINKING )) {
1190+ spin_unlock_bh (& pmlmepriv -> scanned_queue .lock );
1191+ spin_unlock_bh (& pmlmepriv -> lock );
1192+ return ;
1193+ }
1194+
1195+ /* s1. find ptarget_wlan */
1196+ if (check_fwstate (pmlmepriv , _FW_LINKED )) {
1197+ if (the_same_macaddr ) {
1198+ ptarget_wlan = rtw_find_network (& pmlmepriv -> scanned_queue , cur_network -> network .mac_address );
1199+ } else {
1200+ pcur_wlan = rtw_find_network (& pmlmepriv -> scanned_queue , cur_network -> network .mac_address );
1201+ if (pcur_wlan )
1202+ pcur_wlan -> fixed = false;
1203+
1204+ pcur_sta = rtw_get_stainfo (pstapriv , cur_network -> network .mac_address );
1205+ if (pcur_sta )
1206+ rtw_free_stainfo (adapter , pcur_sta );
1207+
1208+ ptarget_wlan = rtw_find_network (& pmlmepriv -> scanned_queue , pnetwork -> network .mac_address );
12201209 if (check_fwstate (pmlmepriv , WIFI_STATION_STATE )) {
1221- pmlmepriv -> cur_network_scanned = ptarget_wlan ;
1222- rtw_indicate_connect ( adapter ) ;
1210+ if ( ptarget_wlan )
1211+ ptarget_wlan -> fixed = true ;
12231212 }
1213+ }
1214+ } else {
1215+ ptarget_wlan = _rtw_find_same_network (& pmlmepriv -> scanned_queue , pnetwork );
1216+ if (check_fwstate (pmlmepriv , WIFI_STATION_STATE )) {
1217+ if (ptarget_wlan )
1218+ ptarget_wlan -> fixed = true;
1219+ }
1220+ }
12241221
1225- spin_unlock_bh (& pmlmepriv -> scanned_queue .lock );
1222+ /* s2. update cur_network */
1223+ if (!ptarget_wlan ) {
1224+ netdev_dbg (adapter -> pnetdev ,
1225+ "Can't find ptarget_wlan when joinbss_event callback\n" );
1226+ spin_unlock_bh (& pmlmepriv -> scanned_queue .lock );
1227+ spin_unlock_bh (& pmlmepriv -> lock );
1228+ return ;
1229+ }
12261230
1227- spin_unlock_bh (& pmlmepriv -> lock );
1228- /* s5. Cancel assoc_timer */
1229- timer_delete_sync (& pmlmepriv -> assoc_timer );
1230- spin_lock_bh (& pmlmepriv -> lock );
1231- } else {
1231+ rtw_joinbss_update_network (adapter , ptarget_wlan , pnetwork );
1232+
1233+ /* s3. find ptarget_sta & update ptarget_sta after update cur_network only for station mode */
1234+ if (check_fwstate (pmlmepriv , WIFI_STATION_STATE )) {
1235+ ptarget_sta = rtw_joinbss_update_stainfo (adapter , pnetwork );
1236+ if (!ptarget_sta ) {
12321237 spin_unlock_bh (& pmlmepriv -> scanned_queue .lock );
1238+ spin_unlock_bh (& pmlmepriv -> lock );
1239+ return ;
12331240 }
1234- } else if (pnetwork -> join_res == -4 ) {
1235- rtw_reset_securitypriv (adapter );
1236- _set_timer (& pmlmepriv -> assoc_timer , 1 );
1237-
1238- if (check_fwstate (pmlmepriv , _FW_UNDER_LINKING ))
1239- _clr_fwstate_ (pmlmepriv , _FW_UNDER_LINKING );
1241+ }
12401242
1241- } else {/* if join_res < 0 (join fails), then try again */
1242- _set_timer (& pmlmepriv -> assoc_timer , 1 );
1243- _clr_fwstate_ (pmlmepriv , _FW_UNDER_LINKING );
1243+ /* s4. indicate connect */
1244+ if (check_fwstate (pmlmepriv , WIFI_STATION_STATE )) {
1245+ pmlmepriv -> cur_network_scanned = ptarget_wlan ;
1246+ rtw_indicate_connect (adapter );
12441247 }
12451248
1246- ignore_joinbss_callback :
1249+ spin_unlock_bh ( & pmlmepriv -> scanned_queue . lock );
12471250
12481251 spin_unlock_bh (& pmlmepriv -> lock );
1252+ /* s5. Cancel assoc_timer */
1253+ timer_delete_sync (& pmlmepriv -> assoc_timer );
12491254}
12501255
12511256void rtw_joinbss_event_callback (struct adapter * adapter , u8 * pbuf )
0 commit comments