|
@@ -394,31 +394,6 @@ int wma_peer_sta_kickout_event_handler(void *handle, uint8_t *event,
|
|
|
(void *)del_sta_ctx, 0);
|
|
|
goto exit_handler;
|
|
|
#endif /* FEATURE_WLAN_TDLS */
|
|
|
- case WMI_PEER_STA_KICKOUT_REASON_XRETRY:
|
|
|
- if (wma->interfaces[vdev_id].type == WMI_VDEV_TYPE_STA &&
|
|
|
- (wma->interfaces[vdev_id].sub_type == 0 ||
|
|
|
- wma->interfaces[vdev_id].sub_type ==
|
|
|
- WMI_UNIFIED_VDEV_SUBTYPE_P2P_CLIENT) &&
|
|
|
- !qdf_mem_cmp(bssid,
|
|
|
- macaddr, QDF_MAC_ADDR_SIZE)) {
|
|
|
- wma_sta_kickout_event(HOST_STA_KICKOUT_REASON_XRETRY,
|
|
|
- vdev_id, macaddr);
|
|
|
- /*
|
|
|
- * KICKOUT event is for current station-AP connection.
|
|
|
- * Treat it like final beacon miss. Station may not have
|
|
|
- * missed beacons but not able to transmit frames to AP
|
|
|
- * for a long time. Must disconnect to get out of
|
|
|
- * this sticky situation.
|
|
|
- * In future implementation, roaming module will also
|
|
|
- * handle this event and perform a scan.
|
|
|
- */
|
|
|
- WMA_LOGW("%s: WMI_PEER_STA_KICKOUT_REASON_XRETRY event for STA",
|
|
|
- __func__);
|
|
|
- wma_beacon_miss_handler(wma, vdev_id,
|
|
|
- kickout_event->rssi);
|
|
|
- goto exit_handler;
|
|
|
- }
|
|
|
- break;
|
|
|
|
|
|
case WMI_PEER_STA_KICKOUT_REASON_UNSPECIFIED:
|
|
|
/*
|
|
@@ -449,6 +424,7 @@ int wma_peer_sta_kickout_event_handler(void *handle, uint8_t *event,
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
+ case WMI_PEER_STA_KICKOUT_REASON_XRETRY:
|
|
|
case WMI_PEER_STA_KICKOUT_REASON_INACTIVITY:
|
|
|
/*
|
|
|
* Handle SA query kickout is same as inactivity kickout.
|
|
@@ -473,15 +449,22 @@ int wma_peer_sta_kickout_event_handler(void *handle, uint8_t *event,
|
|
|
del_sta_ctx->vdev_id = vdev_id;
|
|
|
qdf_mem_copy(del_sta_ctx->addr2, macaddr, QDF_MAC_ADDR_SIZE);
|
|
|
qdf_mem_copy(del_sta_ctx->bssId, addr, QDF_MAC_ADDR_SIZE);
|
|
|
- del_sta_ctx->reasonCode = HAL_DEL_STA_REASON_CODE_KEEP_ALIVE;
|
|
|
+ if (kickout_event->reason ==
|
|
|
+ WMI_PEER_STA_KICKOUT_REASON_SA_QUERY_TIMEOUT)
|
|
|
+ del_sta_ctx->reasonCode =
|
|
|
+ HAL_DEL_STA_REASON_CODE_SA_QUERY_TIMEOUT;
|
|
|
+ else if (kickout_event->reason == WMI_PEER_STA_KICKOUT_REASON_XRETRY)
|
|
|
+ del_sta_ctx->reasonCode = HAL_DEL_STA_REASON_CODE_XRETRY;
|
|
|
+ else
|
|
|
+ del_sta_ctx->reasonCode = HAL_DEL_STA_REASON_CODE_KEEP_ALIVE;
|
|
|
+
|
|
|
if (wmi_service_enabled(wma->wmi_handle,
|
|
|
wmi_service_hw_db2dbm_support))
|
|
|
del_sta_ctx->rssi = kickout_event->rssi;
|
|
|
else
|
|
|
del_sta_ctx->rssi = kickout_event->rssi +
|
|
|
WMA_TGT_NOISE_FLOOR_DBM;
|
|
|
- wma_sta_kickout_event(HOST_STA_KICKOUT_REASON_KEEP_ALIVE,
|
|
|
- vdev_id, macaddr);
|
|
|
+ wma_sta_kickout_event(del_sta_ctx->reasonCode, vdev_id, macaddr);
|
|
|
wma_send_msg(wma, SIR_LIM_DELETE_STA_CONTEXT_IND, (void *)del_sta_ctx,
|
|
|
0);
|
|
|
wma_lost_link_info_handler(wma, vdev_id, del_sta_ctx->rssi);
|