Merge "qcacmn: Fix compilation error in vdev state machine"

Cette révision appartient à :
Linux Build Service Account
2018-09-27 20:34:10 -07:00
révisé par Gerrit - the friendly Code Review server
révision 93850ab144
7 fichiers modifiés avec 124 ajouts et 45 suppressions

Voir le fichier

@@ -338,6 +338,41 @@ static inline void dp_peer_ast_hash_remove(struct dp_soc *soc,
TAILQ_REMOVE(&soc->ast_hash.bins[index], ase, hash_list_elem);
}
/*
* dp_peer_ast_hash_find_by_pdevid() - Find AST entry by MAC address
* and pdev id
* @soc: SoC handle
* @ast_mac_addr: mac address
* @pdev_id: pdev_id
*
* It assumes caller has taken the ast lock to protect the access to
* AST hash table
*
* Return: AST entry
*/
struct dp_ast_entry *dp_peer_ast_hash_find_by_pdevid(struct dp_soc *soc,
uint8_t *ast_mac_addr,
uint8_t pdev_id)
{
union dp_align_mac_addr local_mac_addr_aligned, *mac_addr;
uint32_t index;
struct dp_ast_entry *ase;
qdf_mem_copy(&local_mac_addr_aligned.raw[0],
ast_mac_addr, DP_MAC_ADDR_LEN);
mac_addr = &local_mac_addr_aligned;
index = dp_peer_ast_hash_index(soc, mac_addr);
TAILQ_FOREACH(ase, &soc->ast_hash.bins[index], hash_list_elem) {
if ((pdev_id == ase->pdev_id) &&
!dp_peer_find_mac_addr_cmp(mac_addr, &ase->mac_addr)) {
return ase;
}
}
return NULL;
}
/*
* dp_peer_ast_hash_find() - Find AST entry by MAC address
* @soc: SoC handle
@@ -447,6 +482,7 @@ int dp_peer_add_ast(struct dp_soc *soc,
{
struct dp_ast_entry *ast_entry;
struct dp_vdev *vdev = peer->vdev;
struct dp_pdev *pdev = NULL;
uint8_t next_node_mac[6];
int ret = -1;
@@ -457,6 +493,8 @@ int dp_peer_add_ast(struct dp_soc *soc,
return ret;
}
pdev = vdev->pdev;
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
"%s: peer %pK mac %02x:%02x:%02x:%02x:%02x:%02x",
__func__, peer, mac_addr[0], mac_addr[1], mac_addr[2],
@@ -464,35 +502,50 @@ int dp_peer_add_ast(struct dp_soc *soc,
qdf_spin_lock_bh(&soc->ast_lock);
/* If AST entry already exists , just return from here */
ast_entry = dp_peer_ast_hash_find(soc, mac_addr);
if (ast_entry) {
if (ast_entry->type == CDP_TXRX_AST_TYPE_MEC) {
ast_entry->is_active = TRUE;
/* If AST entry already exists , just return from here
* ast entry with same mac address can exist on different radios
* if ast_override support is enabled use search by pdev in this
* case
*/
if (soc->ast_override_support) {
ast_entry = dp_peer_ast_hash_find_by_pdevid(soc, mac_addr,
pdev->pdev_id);
if (ast_entry) {
qdf_spin_unlock_bh(&soc->ast_lock);
return 0;
}
} else {
ast_entry = dp_peer_ast_hash_find(soc, mac_addr);
/*
* WAR for HK 1.x AST issue
* If an AST entry with same mac address already exists and is
* mapped to a different radio, and if the current radio is
* primary radio , delete the existing AST entry and return.
*
* New AST entry will be created again on next SA_invalid
* frame
*/
if ((ast_entry->pdev_id != vdev->pdev->pdev_id) &&
vdev->pdev->is_primary) {
qdf_print("Deleting ast_pdev=%d pdev=%d addr=%pM\n",
ast_entry->pdev_id,
vdev->pdev->pdev_id, mac_addr);
dp_peer_del_ast(soc, ast_entry);
if (ast_entry) {
if (ast_entry->type == CDP_TXRX_AST_TYPE_MEC) {
ast_entry->is_active = TRUE;
qdf_spin_unlock_bh(&soc->ast_lock);
return 0;
}
/*
* WAR for HK 1.x AST issue
* If an AST entry with same mac address already
* exists and is mapped to a different radio, and
* if the current radio is primary radio , delete
* the existing AST entry and return.
*
* New AST entry will be created again on next
* SA_invalid frame
*/
if ((ast_entry->pdev_id != vdev->pdev->pdev_id) &&
vdev->pdev->is_primary) {
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
"Deleting ast_pdev=%d pdev=%d addr=%pM\n",
ast_entry->pdev_id,
vdev->pdev->pdev_id, mac_addr);
dp_peer_del_ast(soc, ast_entry);
}
qdf_spin_unlock_bh(&soc->ast_lock);
return 0;
}
qdf_spin_unlock_bh(&soc->ast_lock);
return 0;
}
ast_entry = (struct dp_ast_entry *)

Voir le fichier

@@ -93,6 +93,10 @@ void dp_peer_ast_unmap_handler(struct dp_soc *soc,
int dp_peer_update_ast(struct dp_soc *soc, struct dp_peer *peer,
struct dp_ast_entry *ast_entry, uint32_t flags);
struct dp_ast_entry *dp_peer_ast_hash_find_by_pdevid(struct dp_soc *soc,
uint8_t *ast_mac_addr,
uint8_t pdev_id);
struct dp_ast_entry *dp_peer_ast_hash_find(struct dp_soc *soc,
uint8_t *ast_mac_addr);

Voir le fichier

@@ -39,6 +39,17 @@
#define sm_engine_debug(params...) \
QDF_TRACE_DEBUG(QDF_MODULE_ID_SM_ENGINE, params)
#define sm_engine_nofl_alert(params...) \
QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_SM_ENGINE, params)
#define sm_engine_nofl_err(params...) \
QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_SM_ENGINE, params)
#define sm_engine_nofl_warn(params...) \
QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_SM_ENGINE, params)
#define sm_engine_nofl_info(params...) \
QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_SM_ENGINE, params)
#define sm_engine_nofl_debug(params...) \
QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_SM_ENGINE, params)
#define WLAN_SM_ENGINE_HISTORY_SIZE 50
struct wlan_sm;
/**

Voir le fichier

@@ -53,25 +53,24 @@ QDF_STATUS wlan_sm_dispatch(struct wlan_sm *sm, uint16_t event,
if (event < sm->num_event_names)
event_name = sm->event_names[event];
sm_engine_debug("%s: current state %s event %s[%d]",
sm->name,
sm->state_info[sm->cur_state].name,
event_name ? event_name : "UNKNOWN_EVENT",
event);
sm_engine_nofl_info("%s: current state %s[%d] event %s[%d]",
sm->name, sm->state_info[state].name, state,
event_name ? event_name : "UNKNOWN_EVENT",
event);
} else {
sm_engine_debug("%s: current state %s event %d",
sm->name,
sm->state_info[sm->cur_state].name,
event);
sm_engine_nofl_info("%s: current state %s[%d] event %d",
sm->name,
sm->state_info[state].name, state,
event);
}
if (state != WLAN_SM_ENGINE_STATE_NONE) {
event_handled = (*sm->state_info[state].wlan_sm_event) (
sm->ctx, event, event_data_len, event_data);
if (!event_handled) {
sm_engine_err("%s: event %d not handled in state %s",
sm->name, event,
sm->state_info[sm->cur_state].name);
sm_engine_nofl_err("%s: event %d not handled in state %s",
sm->name, event,
sm->state_info[sm->cur_state].name);
return QDF_STATUS_E_INVAL;
}
}
@@ -146,13 +145,15 @@ void wlan_sm_transition_to(struct wlan_sm *sm, uint8_t state)
else
new_sub_st = 0;
sm_engine_debug("%s: transition(state) %s => %s",
sm->name, state_info[old_state].name,
state_info[new_state].name);
sm_engine_debug("%s: transition(sub_state) %s => %s",
sm->name,
ol_sub_st ? state_info[ol_sub_st].name : "IDLE",
new_sub_st ? state_info[new_sub_st].name : "IDLE");
sm_engine_nofl_info("%s: transition(state) %s[%d] => %s[%d]",
sm->name, state_info[old_state].name, old_state,
state_info[new_state].name, new_state);
sm_engine_nofl_info("%s: transition(sub_state) %s[%d] => %s[%d]",
sm->name,
ol_sub_st ? state_info[ol_sub_st].name : "IDLE",
ol_sub_st,
new_sub_st ? state_info[new_sub_st].name : "IDLE",
new_sub_st);
/*
* call the exit function(s) of the current state hierarchy

Voir le fichier

@@ -1783,8 +1783,11 @@ void mlme_vdev_sm_history_print(struct vdev_mlme_obj *vdev_mlme)
QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme)
{
struct wlan_sm *sm;
uint8_t name[WLAN_SM_ENGINE_MAX_NAME];
sm = wlan_sm_create("VDEV MLME", vdev_mlme,
snprintf(name, sizeof(name), "VDEV%d-MLME",
wlan_vdev_get_id(vdev_mlme->vdev));
sm = wlan_sm_create(name, vdev_mlme,
WLAN_VDEV_S_INIT,
sm_info,
QDF_ARRAY_SIZE(sm_info),
@@ -1806,8 +1809,12 @@ QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme)
QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme)
{
struct wlan_sm *sm;
uint8_t name[WLAN_SM_ENGINE_MAX_NAME];
sm = wlan_sm_create("VDEV MLME", vdev_mlme, 0, NULL, 0, NULL, 0);
snprintf(name, sizeof(name), "VDEV%d-MLME",
wlan_vdev_get_id(vdev_mlme->vdev));
sm = wlan_sm_create(name, vdev_mlme, 0, NULL, 0, NULL, 0);
if (!sm) {
mlme_err("VDEV MLME SM allocation failed");
return QDF_STATUS_E_FAILURE;

Voir le fichier

@@ -25,6 +25,7 @@
#include "include/wlan_vdev_mlme.h"
#include "../../core/src/vdev_mlme_sm.h"
#include <wlan_vdev_mlme_api.h>
#include <qdf_module.h>
struct vdev_mlme_obj *wlan_vdev_mlme_get_cmpt_obj(struct wlan_objmgr_vdev *vdev)
{

Voir le fichier

@@ -864,7 +864,9 @@ struct hidden_ssid_vdev_restart_params {
uint32_t info;
uint32_t reg_info_1;
uint32_t reg_info_2;
#ifndef CONFIG_VDEV_SM
qdf_atomic_t hidden_ssid_restart_in_progress;
#endif
};
/**