mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 13:49:24 -04:00
qcacld-3.0: remove references to datapath structures from other modules
Core datapath structures should be opaque to non-datapath modules, remove the references to them. Change-Id: I3618253566a971c27f16b14923d1ff8028718918 CRs-Fixed: 994638
This commit is contained in:
parent
b08959a747
commit
10d357a17c
10 changed files with 435 additions and 152 deletions
|
|
@ -40,6 +40,7 @@
|
|||
#include <ol_txrx_api.h> /* ol_sec_type */
|
||||
#include <wlan_defs.h> /* MAX_SPATIAL_STREAM */
|
||||
#include <cdp_txrx_cmn.h> /* ol_pdev_handle, ol_vdev_handle, etc */
|
||||
#include <cdp_txrx_cfg.h>
|
||||
|
||||
#define OL_ATH_TX_DRAIN_WAIT_DELAY 50
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@
|
|||
/* header files for our own APIs */
|
||||
#include <ol_txrx_api.h>
|
||||
#include <ol_txrx_dbg.h>
|
||||
#include <cdp_txrx_ocb.h>
|
||||
/* header files for our internal definitions */
|
||||
#include <ol_txrx_internal.h> /* TXRX_ASSERT, etc. */
|
||||
#include <wdi_event.h> /* WDI events */
|
||||
|
|
@ -1586,6 +1587,279 @@ static A_STATUS ol_tx_filter_pass_thru(struct ol_txrx_msdu_info_t *tx_msdu_info)
|
|||
return A_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_peer_get_peer_mac_addr() - return mac_addr from peer handle.
|
||||
* @peer: handle to peer
|
||||
*
|
||||
* returns mac addrs for module which do not know peer type
|
||||
*
|
||||
* Return: the mac_addr from peer
|
||||
*/
|
||||
uint8_t *
|
||||
ol_txrx_peer_get_peer_mac_addr(ol_txrx_peer_handle peer)
|
||||
{
|
||||
if (!peer)
|
||||
return NULL;
|
||||
|
||||
return peer->mac_addr.raw;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_get_pn_info() - Returns pn info from peer
|
||||
* @peer: handle to peer
|
||||
* @last_pn_valid: return last_rmf_pn_valid value from peer.
|
||||
* @last_pn: return last_rmf_pn value from peer.
|
||||
* @rmf_pn_replays: return rmf_pn_replays value from peer.
|
||||
*
|
||||
* Return: NONE
|
||||
*/
|
||||
void
|
||||
ol_txrx_get_pn_info(ol_txrx_peer_handle peer, uint8_t **last_pn_valid,
|
||||
uint64_t **last_pn, uint32_t **rmf_pn_replays)
|
||||
{
|
||||
*last_pn_valid = &peer->last_rmf_pn_valid;
|
||||
*last_pn = &peer->last_rmf_pn;
|
||||
*rmf_pn_replays = &peer->rmf_pn_replays;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_get_opmode() - Return operation mode of vdev
|
||||
* @vdev: vdev handle
|
||||
*
|
||||
* Return: operation mode.
|
||||
*/
|
||||
int ol_txrx_get_opmode(ol_txrx_vdev_handle vdev)
|
||||
{
|
||||
return vdev->opmode;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_get_peer_state() - Return peer state of peer
|
||||
* @peer: peer handle
|
||||
*
|
||||
* Return: return peer state
|
||||
*/
|
||||
int ol_txrx_get_peer_state(ol_txrx_peer_handle peer)
|
||||
{
|
||||
return peer->state;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_get_vdev_for_peer() - Return vdev from peer handle
|
||||
* @peer: peer handle
|
||||
*
|
||||
* Return: vdev handle from peer
|
||||
*/
|
||||
ol_txrx_vdev_handle
|
||||
ol_txrx_get_vdev_for_peer(ol_txrx_peer_handle peer)
|
||||
{
|
||||
return peer->vdev;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_get_vdev_mac_addr() - Return mac addr of vdev
|
||||
* @vdev: vdev handle
|
||||
*
|
||||
* Return: vdev mac address
|
||||
*/
|
||||
uint8_t *
|
||||
ol_txrx_get_vdev_mac_addr(ol_txrx_vdev_handle vdev)
|
||||
{
|
||||
if (!vdev)
|
||||
return NULL;
|
||||
|
||||
return vdev->mac_addr.raw;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_get_vdev_struct_mac_addr() - Return handle to struct cdf_mac_addr of
|
||||
* vdev
|
||||
* @vdev: vdev handle
|
||||
*
|
||||
* Return: Handle to struct cdf_mac_addr
|
||||
*/
|
||||
struct cdf_mac_addr *
|
||||
ol_txrx_get_vdev_struct_mac_addr(ol_txrx_vdev_handle vdev)
|
||||
{
|
||||
return (struct cdf_mac_addr *)&(vdev->mac_addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_get_pdev_from_vdev() - Return handle to pdev of vdev
|
||||
* @vdev: vdev handle
|
||||
*
|
||||
* Return: Handle to pdev
|
||||
*/
|
||||
ol_txrx_pdev_handle ol_txrx_get_pdev_from_vdev(ol_txrx_vdev_handle vdev)
|
||||
{
|
||||
return vdev->pdev;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_get_ctrl_pdev_from_vdev() - Return control pdev of vdev
|
||||
* @vdev: vdev handle
|
||||
*
|
||||
* Return: Handle to control pdev
|
||||
*/
|
||||
ol_pdev_handle
|
||||
ol_txrx_get_ctrl_pdev_from_vdev(ol_txrx_vdev_handle vdev)
|
||||
{
|
||||
return vdev->pdev->ctrl_pdev;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_is_rx_fwd_disabled() - returns the rx_fwd_disabled status on vdev
|
||||
* @vdev: vdev handle
|
||||
*
|
||||
* Return: Rx Fwd disabled status
|
||||
*/
|
||||
uint8_t
|
||||
ol_txrx_is_rx_fwd_disabled(ol_txrx_vdev_handle vdev)
|
||||
{
|
||||
struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)
|
||||
vdev->pdev->ctrl_pdev;
|
||||
return cfg->rx_fwd_disabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_update_ibss_add_peer_num_of_vdev() - update and return peer num
|
||||
* @vdev: vdev handle
|
||||
* @peer_num_delta: peer nums to be adjusted
|
||||
*
|
||||
* Return: -1 for failure or total peer nums after adjustment.
|
||||
*/
|
||||
int16_t
|
||||
ol_txrx_update_ibss_add_peer_num_of_vdev(ol_txrx_vdev_handle vdev,
|
||||
int16_t peer_num_delta)
|
||||
{
|
||||
int16_t new_peer_num;
|
||||
|
||||
new_peer_num = vdev->ibss_peer_num + peer_num_delta;
|
||||
if (new_peer_num > MAX_IBSS_PEERS || new_peer_num < 0)
|
||||
return OL_TXRX_INVALID_NUM_PEERS;
|
||||
|
||||
vdev->ibss_peer_num = new_peer_num;
|
||||
|
||||
return new_peer_num;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_set_ibss_vdev_heart_beat_timer() - Update ibss vdev heart
|
||||
* beat timer
|
||||
* @vdev: vdev handle
|
||||
* @timer_value_sec: new heart beat timer value
|
||||
*
|
||||
* Return: Old timer value set in vdev.
|
||||
*/
|
||||
uint16_t ol_txrx_set_ibss_vdev_heart_beat_timer(ol_txrx_vdev_handle vdev,
|
||||
uint16_t timer_value_sec)
|
||||
{
|
||||
uint16_t old_timer_value = vdev->ibss_peer_heart_beat_timer;
|
||||
|
||||
vdev->ibss_peer_heart_beat_timer = timer_value_sec;
|
||||
|
||||
return old_timer_value;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_remove_peers_for_vdev() - remove all vdev peers with lock held
|
||||
* @vdev: vdev handle
|
||||
* @callback: callback function to remove the peer.
|
||||
* @callback_context: handle for callback function
|
||||
* @remove_last_peer: Does it required to last peer.
|
||||
*
|
||||
* Return: NONE
|
||||
*/
|
||||
void
|
||||
ol_txrx_remove_peers_for_vdev(ol_txrx_vdev_handle vdev,
|
||||
ol_txrx_vdev_peer_remove_cb callback,
|
||||
void *callback_context, bool remove_last_peer)
|
||||
{
|
||||
ol_txrx_peer_handle peer, temp;
|
||||
/* remove all remote peers for vdev */
|
||||
cdf_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
|
||||
temp = NULL;
|
||||
TAILQ_FOREACH_REVERSE(peer, &vdev->peer_list, peer_list_t,
|
||||
peer_list_elem) {
|
||||
if (temp) {
|
||||
cdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
if (cdf_atomic_read(&temp->delete_in_progress) == 0) {
|
||||
callback(callback_context, temp->mac_addr.raw,
|
||||
vdev->vdev_id, temp, false);
|
||||
}
|
||||
cdf_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
}
|
||||
/* self peer is deleted last */
|
||||
if (peer == TAILQ_FIRST(&vdev->peer_list)) {
|
||||
TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
|
||||
"%s: self peer removed by caller ",
|
||||
__func__);
|
||||
break;
|
||||
} else
|
||||
temp = peer;
|
||||
}
|
||||
|
||||
if (remove_last_peer) {
|
||||
/* remove IBSS bss peer last */
|
||||
peer = TAILQ_FIRST(&vdev->peer_list);
|
||||
callback(callback_context, (uint8_t *) &vdev->mac_addr,
|
||||
vdev->vdev_id, peer, false);
|
||||
}
|
||||
|
||||
cdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_remove_peers_for_vdev_no_lock() - remove vdev peers with no lock.
|
||||
* @vdev: vdev handle
|
||||
* @callback: callback function to remove the peer.
|
||||
* @callback_context: handle for callback function
|
||||
*
|
||||
* Return: NONE
|
||||
*/
|
||||
void
|
||||
ol_txrx_remove_peers_for_vdev_no_lock(ol_txrx_vdev_handle vdev,
|
||||
ol_txrx_vdev_peer_remove_cb callback,
|
||||
void *callback_context)
|
||||
{
|
||||
ol_txrx_peer_handle peer = NULL;
|
||||
|
||||
TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
|
||||
TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
|
||||
"%s: peer found for vdev id %d. deleting the peer",
|
||||
__func__, vdev->vdev_id);
|
||||
callback(callback_context, (uint8_t *)&vdev->mac_addr,
|
||||
vdev->vdev_id, peer, false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_set_ocb_chan_info() - set OCB channel info to vdev.
|
||||
* @vdev: vdev handle
|
||||
* @ocb_set_chan: OCB channel information to be set in vdev.
|
||||
*
|
||||
* Return: NONE
|
||||
*/
|
||||
void ol_txrx_set_ocb_chan_info(ol_txrx_vdev_handle vdev,
|
||||
struct ol_txrx_ocb_set_chan ocb_set_chan)
|
||||
{
|
||||
vdev->ocb_channel_info = ocb_set_chan.ocb_channel_info;
|
||||
vdev->ocb_channel_count = ocb_set_chan.ocb_channel_count;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_get_ocb_chan_info() - return handle to vdev ocb_channel_info
|
||||
* @vdev: vdev handle
|
||||
*
|
||||
* Return: handle to struct ol_txrx_ocb_chan_info
|
||||
*/
|
||||
struct ol_txrx_ocb_chan_info *
|
||||
ol_txrx_get_ocb_chan_info(ol_txrx_vdev_handle vdev)
|
||||
{
|
||||
return vdev->ocb_channel_info;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
ol_txrx_peer_state_update(struct ol_txrx_pdev_t *pdev, uint8_t *peer_mac,
|
||||
enum ol_txrx_peer_state state)
|
||||
|
|
|
|||
|
|
@ -60,6 +60,8 @@
|
|||
*/
|
||||
#define MAX_NUM_PEER_ID_PER_PEER 8
|
||||
|
||||
#define OL_TXRX_INVALID_NUM_PEERS (-1)
|
||||
|
||||
#define OL_TXRX_MAC_ADDR_LEN 6
|
||||
|
||||
/* OL_TXRX_NUM_EXT_TIDS -
|
||||
|
|
|
|||
|
|
@ -1189,9 +1189,11 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter,
|
|||
enum ol_txrx_peer_state sta_state,
|
||||
bool roam_synch_in_progress)
|
||||
{
|
||||
struct ol_txrx_peer_t *peer;
|
||||
QDF_STATUS err;
|
||||
struct ol_txrx_pdev_t *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
uint8_t *peer_mac_addr;
|
||||
struct ol_txrx_pdev_t *pdev = cds_get_context(CDF_MODULE_ID_TXRX);
|
||||
ol_txrx_vdev_handle vdev;
|
||||
ol_txrx_peer_handle peer;
|
||||
|
||||
if (!pdev) {
|
||||
hdd_err("Failed to get txrx context");
|
||||
|
|
@ -1207,8 +1209,13 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter,
|
|||
if (!peer)
|
||||
return QDF_STATUS_E_FAULT;
|
||||
|
||||
err = ol_txrx_peer_state_update(pdev,
|
||||
(u_int8_t *) peer->mac_addr.raw, sta_state);
|
||||
peer_mac_addr = ol_txrx_peer_get_peer_mac_addr(peer);
|
||||
if (peer_mac_addr == NULL) {
|
||||
hddLog(LOGE, "peer mac addr is NULL");
|
||||
return QDF_STATUS_E_FAULT;
|
||||
}
|
||||
|
||||
err = ol_txrx_peer_state_update(pdev, peer_mac_addr, sta_state);
|
||||
if (err != QDF_STATUS_SUCCESS) {
|
||||
hddLog(LOGE, "peer state update failed");
|
||||
return QDF_STATUS_E_FAULT;
|
||||
|
|
@ -1224,7 +1231,7 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter,
|
|||
INIT_COMPLETION(pAdapter->sta_authorized_event);
|
||||
#endif
|
||||
|
||||
err = sme_set_peer_authorized(peer->mac_addr.raw,
|
||||
err = sme_set_peer_authorized(peer_mac_addr,
|
||||
hdd_set_peer_authorized_event,
|
||||
pAdapter->sessionId);
|
||||
if (err != QDF_STATUS_SUCCESS) {
|
||||
|
|
@ -1245,8 +1252,9 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter,
|
|||
hddLog(LOG1, "%s: timeout waiting for sta_authorized_event",
|
||||
__func__);
|
||||
}
|
||||
ol_txrx_vdev_unpause(peer->vdev,
|
||||
OL_TXQ_PAUSE_REASON_PEER_UNAUTHORIZED);
|
||||
vdev = ol_txrx_get_vdev_for_peer(peer);
|
||||
ol_txrx_vdev_unpause(vdev,
|
||||
OL_TXQ_PAUSE_REASON_PEER_UNAUTHORIZED);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,6 +68,8 @@
|
|||
#include "cdp_txrx_flow_ctrl_legacy.h"
|
||||
#include "cdp_txrx_cmn.h"
|
||||
#include "cdp_txrx_misc.h"
|
||||
#include <cdp_txrx_peer_ops.h>
|
||||
#include <cdp_txrx_cfg.h>
|
||||
|
||||
typedef struct {
|
||||
int32_t rate;
|
||||
|
|
@ -964,7 +966,7 @@ int wma_peer_state_change_event_handler(void *handle,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (vdev->opmode == wlan_op_mode_sta
|
||||
if (ol_txrx_get_opmode(vdev) == wlan_op_mode_sta
|
||||
&& event->state == WMI_PEER_STATE_AUTHORIZED) {
|
||||
/*
|
||||
* set event so that hdd
|
||||
|
|
@ -976,7 +978,7 @@ int wma_peer_state_change_event_handler(void *handle,
|
|||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
wma_handle->peer_authorized_cb(vdev->vdev_id);
|
||||
wma_handle->peer_authorized_cb(event->vdev_id);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -2227,6 +2229,7 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen,
|
|||
uint8_t proto_type = 0;
|
||||
#endif /* QCA_PKT_PROTO_TRACE */
|
||||
struct wmi_mgmt_params mgmt_param = {0};
|
||||
ol_pdev_handle ctrl_pdev;
|
||||
|
||||
if (NULL == wma_handle) {
|
||||
WMA_LOGE("wma_handle is NULL");
|
||||
|
|
@ -2457,8 +2460,12 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
is_high_latency =
|
||||
ol_cfg_is_high_latency(txrx_vdev->pdev->ctrl_pdev);
|
||||
ctrl_pdev = ol_txrx_get_ctrl_pdev_from_vdev(txrx_vdev);
|
||||
if (ctrl_pdev == NULL) {
|
||||
WMA_LOGE("ol_pdev_handle is NULL\n");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
is_high_latency = ol_cfg_is_high_latency(ctrl_pdev);
|
||||
|
||||
downld_comp_required = tx_frm_download_comp_cb && is_high_latency;
|
||||
|
||||
|
|
|
|||
|
|
@ -69,6 +69,9 @@
|
|||
#include "wma_ocb.h"
|
||||
#include "cdp_txrx_cfg.h"
|
||||
#include "cdp_txrx_flow_ctrl_legacy.h"
|
||||
#include <cdp_txrx_peer_ops.h>
|
||||
#include <cdp_txrx_cfg.h>
|
||||
#include <cdp_txrx_cmn.h>
|
||||
|
||||
/**
|
||||
* wma_find_vdev_by_addr() - find vdev_id from mac address
|
||||
|
|
@ -1018,6 +1021,7 @@ void wma_remove_peer(tp_wma_handle wma, uint8_t *bssid,
|
|||
uint32_t peer_tid_bitmap = PEER_ALL_TID_BITMASK;
|
||||
uint8_t *peer_addr = bssid;
|
||||
struct peer_flush_params param = {0};
|
||||
uint8_t *peer_mac_addr;
|
||||
|
||||
if (!wma->interfaces[vdev_id].peer_count) {
|
||||
WMA_LOGE("%s: Can't remove peer with peer_addr %pM vdevid %d peer_count %d",
|
||||
|
|
@ -1028,6 +1032,14 @@ void wma_remove_peer(tp_wma_handle wma, uint8_t *bssid,
|
|||
if (peer)
|
||||
ol_txrx_peer_detach(peer);
|
||||
|
||||
peer_mac_addr = ol_txrx_peer_get_peer_mac_addr(peer);
|
||||
if (peer_mac_addr == NULL) {
|
||||
WMA_LOGE("%s: peer mac addr is NULL, Can't remove peer with peer_addr %pM vdevid %d peer_count %d",
|
||||
__func__, bssid, vdev_id,
|
||||
wma->interfaces[vdev_id].peer_count);
|
||||
return;
|
||||
}
|
||||
|
||||
wma->interfaces[vdev_id].peer_count--;
|
||||
WMA_LOGE("%s: Removed peer with peer_addr %pM vdevid %d peer_count %d",
|
||||
__func__, bssid, vdev_id, wma->interfaces[vdev_id].peer_count);
|
||||
|
|
@ -1040,10 +1052,10 @@ void wma_remove_peer(tp_wma_handle wma, uint8_t *bssid,
|
|||
wmi_unified_peer_flush_tids_send(wma->wmi_handle, bssid,
|
||||
¶m);
|
||||
|
||||
if ((peer) && (wma_is_vdev_in_ibss_mode(wma, vdev_id))) {
|
||||
if (wma_is_vdev_in_ibss_mode(wma, vdev_id)) {
|
||||
WMA_LOGD("%s: bssid %pM peer->mac_addr %pM", __func__,
|
||||
bssid, peer->mac_addr.raw);
|
||||
peer_addr = peer->mac_addr.raw;
|
||||
bssid, peer_mac_addr);
|
||||
peer_addr = peer_mac_addr;
|
||||
}
|
||||
|
||||
wmi_unified_peer_delete_send(wma->wmi_handle, peer_addr, vdev_id);
|
||||
|
|
@ -1070,6 +1082,7 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev,
|
|||
{
|
||||
ol_txrx_peer_handle peer;
|
||||
struct peer_create_params param = {0};
|
||||
uint8_t *mac_addr_raw;
|
||||
|
||||
if (++wma->interfaces[vdev_id].peer_count >
|
||||
wma->wlan_resource_config.num_peers) {
|
||||
|
|
@ -1101,10 +1114,15 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev,
|
|||
WMA_LOGE("%s: Created peer with peer_addr %pM vdev_id %d, peer_count - %d",
|
||||
__func__, peer_addr, vdev_id, wma->interfaces[vdev_id].peer_count);
|
||||
|
||||
mac_addr_raw = ol_txrx_get_vdev_mac_addr(vdev);
|
||||
if (mac_addr_raw == NULL) {
|
||||
WMA_LOGE("%s: peer mac addr is NULL", __func__);
|
||||
return QDF_STATUS_E_FAULT;
|
||||
}
|
||||
|
||||
/* for each remote ibss peer, clear its keys */
|
||||
if (wma_is_vdev_in_ibss_mode(wma, vdev_id) &&
|
||||
qdf_mem_cmp(peer_addr, vdev->mac_addr.raw,
|
||||
IEEE80211_ADDR_LEN)) {
|
||||
qdf_mem_cmp(peer_addr, mac_addr_raw, IEEE80211_ADDR_LEN)) {
|
||||
|
||||
tSetStaKeyParams key_info;
|
||||
WMA_LOGD("%s: remote ibss peer %pM key clearing\n", __func__,
|
||||
|
|
@ -1141,7 +1159,6 @@ err:
|
|||
static void wma_delete_all_ibss_peers(tp_wma_handle wma, A_UINT32 vdev_id)
|
||||
{
|
||||
ol_txrx_vdev_handle vdev;
|
||||
ol_txrx_peer_handle peer, temp;
|
||||
|
||||
if (!wma || vdev_id > wma->max_bssid)
|
||||
return;
|
||||
|
|
@ -1151,31 +1168,9 @@ static void wma_delete_all_ibss_peers(tp_wma_handle wma, A_UINT32 vdev_id)
|
|||
return;
|
||||
|
||||
/* remove all remote peers of IBSS */
|
||||
qdf_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
|
||||
temp = NULL;
|
||||
TAILQ_FOREACH_REVERSE(peer, &vdev->peer_list, peer_list_t, peer_list_elem) {
|
||||
if (temp) {
|
||||
qdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
if (qdf_atomic_read(&temp->delete_in_progress) == 0) {
|
||||
wma_remove_peer(wma, temp->mac_addr.raw,
|
||||
vdev_id, temp, false);
|
||||
}
|
||||
qdf_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
}
|
||||
/* self peer is deleted last */
|
||||
if (peer == TAILQ_FIRST(&vdev->peer_list)) {
|
||||
WMA_LOGE("%s: self peer removed by caller ", __func__);
|
||||
break;
|
||||
} else
|
||||
temp = peer;
|
||||
}
|
||||
qdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
|
||||
/* remove IBSS bss peer last */
|
||||
peer = TAILQ_FIRST(&vdev->peer_list);
|
||||
wma_remove_peer(wma, wma->interfaces[vdev_id].bssid, vdev_id, peer,
|
||||
false);
|
||||
ol_txrx_remove_peers_for_vdev(vdev,
|
||||
(ol_txrx_vdev_peer_remove_cb)wma_remove_peer, wma,
|
||||
true);
|
||||
}
|
||||
#else
|
||||
/**
|
||||
|
|
@ -1210,7 +1205,6 @@ static void wma_delete_all_ibss_peers(tp_wma_handle wma, A_UINT32 vdev_id)
|
|||
static void wma_delete_all_ap_remote_peers(tp_wma_handle wma, A_UINT32 vdev_id)
|
||||
{
|
||||
ol_txrx_vdev_handle vdev;
|
||||
ol_txrx_peer_handle peer, temp;
|
||||
|
||||
if (!wma || vdev_id > wma->max_bssid)
|
||||
return;
|
||||
|
|
@ -1221,28 +1215,8 @@ static void wma_delete_all_ap_remote_peers(tp_wma_handle wma, A_UINT32 vdev_id)
|
|||
|
||||
WMA_LOGE("%s: vdev_id - %d", __func__, vdev_id);
|
||||
/* remove all remote peers of SAP */
|
||||
qdf_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
|
||||
temp = NULL;
|
||||
TAILQ_FOREACH_REVERSE(peer, &vdev->peer_list, peer_list_t,
|
||||
peer_list_elem) {
|
||||
if (temp) {
|
||||
qdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
if (qdf_atomic_read(&temp->delete_in_progress) == 0) {
|
||||
wma_remove_peer(wma, temp->mac_addr.raw,
|
||||
vdev_id, temp, false);
|
||||
}
|
||||
qdf_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
}
|
||||
/* self peer is deleted by caller */
|
||||
if (peer == TAILQ_FIRST(&vdev->peer_list)) {
|
||||
WMA_LOGE("%s: self peer removed by caller ", __func__);
|
||||
break;
|
||||
} else
|
||||
temp = peer;
|
||||
}
|
||||
|
||||
qdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
|
||||
ol_txrx_remove_peers_for_vdev(vdev,
|
||||
(ol_txrx_vdev_peer_remove_cb)wma_remove_peer, wma, false);
|
||||
}
|
||||
|
||||
#ifdef QCA_IBSS_SUPPORT
|
||||
|
|
@ -1258,9 +1232,12 @@ static void wma_recreate_ibss_vdev_and_bss_peer(tp_wma_handle wma,
|
|||
uint8_t vdev_id)
|
||||
{
|
||||
ol_txrx_vdev_handle vdev;
|
||||
ol_txrx_pdev_handle pdev;
|
||||
struct add_sta_self_params add_sta_self_param;
|
||||
struct del_sta_self_params del_sta_param;
|
||||
QDF_STATUS status;
|
||||
struct cdf_mac_addr *mac_addr;
|
||||
uint8_t *mac_addr_raw;
|
||||
|
||||
if (!wma) {
|
||||
WMA_LOGE("%s: Null wma handle", __func__);
|
||||
|
|
@ -1273,9 +1250,16 @@ static void wma_recreate_ibss_vdev_and_bss_peer(tp_wma_handle wma,
|
|||
return;
|
||||
}
|
||||
|
||||
mac_addr = ol_txrx_get_vdev_struct_mac_addr(vdev);
|
||||
if (mac_addr == NULL) {
|
||||
WMA_LOGE("%s: mac_addr is NULL for vdev with id %d", __func__,
|
||||
vdev_id);
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_copy_macaddr(
|
||||
(struct qdf_mac_addr *) &(add_sta_self_param.self_mac_addr),
|
||||
(struct qdf_mac_addr *) &(vdev->mac_addr));
|
||||
(struct cdf_mac_addr *) &(add_sta_self_param.self_mac_addr),
|
||||
mac_addr);
|
||||
add_sta_self_param.session_id = vdev_id;
|
||||
add_sta_self_param.type = WMI_VDEV_TYPE_IBSS;
|
||||
add_sta_self_param.sub_type = 0;
|
||||
|
|
@ -1284,7 +1268,7 @@ static void wma_recreate_ibss_vdev_and_bss_peer(tp_wma_handle wma,
|
|||
/* delete old ibss vdev */
|
||||
del_sta_param.session_id = vdev_id;
|
||||
qdf_mem_copy((void *)del_sta_param.self_mac_addr,
|
||||
(void *)&(vdev->mac_addr), QDF_MAC_ADDR_SIZE);
|
||||
(void *)mac_addr, CDF_MAC_ADDR_SIZE);
|
||||
wma_vdev_detach(wma, &del_sta_param, 0);
|
||||
|
||||
/* create new vdev for ibss */
|
||||
|
|
@ -1294,19 +1278,22 @@ static void wma_recreate_ibss_vdev_and_bss_peer(tp_wma_handle wma,
|
|||
return;
|
||||
}
|
||||
|
||||
mac_addr_raw = ol_txrx_get_vdev_mac_addr(vdev);
|
||||
/* Register with TxRx Module for Data Ack Complete Cb */
|
||||
ol_txrx_data_tx_cb_set(vdev, wma_data_tx_ack_comp_hdlr, wma);
|
||||
WMA_LOGA("new IBSS vdev created with mac %pM",
|
||||
add_sta_self_param.self_mac_addr);
|
||||
|
||||
pdev = ol_txrx_get_pdev_from_vdev(vdev);
|
||||
|
||||
/* create ibss bss peer */
|
||||
status = wma_create_peer(wma, vdev->pdev, vdev, vdev->mac_addr.raw,
|
||||
status = wma_create_peer(wma, pdev, vdev, mac_addr_raw,
|
||||
WMI_PEER_TYPE_DEFAULT, vdev_id, false);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
WMA_LOGE("%s: Failed to create IBSS bss peer", __func__);
|
||||
else
|
||||
WMA_LOGA("IBSS BSS peer created with mac %pM",
|
||||
vdev->mac_addr.raw);
|
||||
mac_addr_raw);
|
||||
}
|
||||
#else
|
||||
/**
|
||||
|
|
@ -2901,6 +2888,7 @@ static void wma_add_bss_ibss_mode(tp_wma_handle wma, tpAddBssParams add_bss)
|
|||
struct del_sta_self_params del_sta_param;
|
||||
tSetBssKeyParams key_info;
|
||||
struct sir_hw_mode_params hw_mode = {0};
|
||||
struct cdf_mac_addr *mac_addr;
|
||||
|
||||
vdev = wma_find_vdev_by_addr(wma, add_bss->selfMacAddr, &vdev_id);
|
||||
if (!vdev) {
|
||||
|
|
@ -2925,17 +2913,19 @@ static void wma_add_bss_ibss_mode(tp_wma_handle wma, tpAddBssParams add_bss)
|
|||
__func__, vdev_id);
|
||||
|
||||
/* remove peers on the existing non-ibss vdev */
|
||||
TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
|
||||
WMA_LOGE("%s: peer found for vdev id %d. deleting the peer",
|
||||
__func__, vdev_id);
|
||||
wma_remove_peer(wma, (uint8_t *) &vdev->mac_addr,
|
||||
vdev_id, peer, false);
|
||||
ol_txrx_remove_peers_for_vdev_no_lock(vdev,
|
||||
(ol_txrx_vdev_peer_remove_cb)wma_remove_peer, wma);
|
||||
mac_addr = ol_txrx_get_vdev_struct_mac_addr(vdev);
|
||||
if (mac_addr == NULL) {
|
||||
WMA_LOGE("%s: mac_addr is NULL for vdev with id %d",
|
||||
__func__, vdev_id);
|
||||
goto send_fail_resp;
|
||||
}
|
||||
|
||||
/* remove the non-ibss vdev */
|
||||
qdf_copy_macaddr(
|
||||
(struct qdf_mac_addr *) &(del_sta_param.self_mac_addr),
|
||||
(struct qdf_mac_addr *) &(vdev->mac_addr));
|
||||
(struct cdf_mac_addr *) &(del_sta_param.self_mac_addr),
|
||||
mac_addr);
|
||||
del_sta_param.session_id = vdev_id;
|
||||
del_sta_param.status = 0;
|
||||
|
||||
|
|
@ -3473,7 +3463,7 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta)
|
|||
goto send_rsp;
|
||||
}
|
||||
|
||||
iface = &wma->interfaces[vdev->vdev_id];
|
||||
iface = &wma->interfaces[add_sta->smesessionId];
|
||||
peer = ol_txrx_find_peer_by_addr_and_vdev(pdev,
|
||||
vdev,
|
||||
add_sta->staMac, &peer_id);
|
||||
|
|
@ -3706,7 +3696,7 @@ static void wma_add_tdls_sta(tp_wma_handle wma, tpAddStaParams add_sta)
|
|||
|
||||
qdf_mem_zero(peerStateParams, sizeof(*peerStateParams));
|
||||
peerStateParams->peerState = WMI_TDLS_PEER_STATE_PEERING;
|
||||
peerStateParams->vdevId = vdev->vdev_id;
|
||||
peerStateParams->vdevId = add_sta->smesessionId;
|
||||
qdf_mem_copy(&peerStateParams->peerMacAddr,
|
||||
&add_sta->staMac, sizeof(tSirMacAddr));
|
||||
wma_update_tdls_peer_state(wma, peerStateParams);
|
||||
|
|
@ -3826,7 +3816,9 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params)
|
|||
status = QDF_STATUS_E_FAILURE;
|
||||
goto out;
|
||||
}
|
||||
if (peer != NULL && peer->state == OL_TXRX_PEER_STATE_DISC) {
|
||||
|
||||
if (peer != NULL &&
|
||||
(ol_txrx_get_peer_state(peer) == OL_TXRX_PEER_STATE_DISC)) {
|
||||
/*
|
||||
* This is the case for reassociation.
|
||||
* peer state update and peer_assoc is required since it
|
||||
|
|
@ -4014,8 +4006,9 @@ static void wma_delete_sta_req_ap_mode(tp_wma_handle wma,
|
|||
tpDeleteStaParams del_sta)
|
||||
{
|
||||
ol_txrx_pdev_handle pdev;
|
||||
struct ol_txrx_peer_t *peer;
|
||||
ol_txrx_peer_handle peer;
|
||||
struct wma_target_req *msg;
|
||||
uint8_t *peer_mac_addr;
|
||||
|
||||
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
|
||||
|
|
@ -4032,8 +4025,9 @@ static void wma_delete_sta_req_ap_mode(tp_wma_handle wma,
|
|||
del_sta->status = QDF_STATUS_E_FAILURE;
|
||||
goto send_del_rsp;
|
||||
}
|
||||
peer_mac_addr = ol_txrx_peer_get_peer_mac_addr(peer);
|
||||
|
||||
wma_remove_peer(wma, peer->mac_addr.raw, del_sta->smesessionId, peer,
|
||||
wma_remove_peer(wma, peer_mac_addr, del_sta->smesessionId, peer,
|
||||
false);
|
||||
del_sta->status = QDF_STATUS_SUCCESS;
|
||||
|
||||
|
|
@ -4080,34 +4074,8 @@ send_del_rsp:
|
|||
*/
|
||||
static void wma_del_tdls_sta(tp_wma_handle wma, tpDeleteStaParams del_sta)
|
||||
{
|
||||
ol_txrx_pdev_handle pdev;
|
||||
ol_txrx_vdev_handle vdev;
|
||||
struct ol_txrx_peer_t *peer;
|
||||
tTdlsPeerStateParams *peerStateParams;
|
||||
|
||||
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
|
||||
if (NULL == pdev) {
|
||||
WMA_LOGE("%s: Failed to find pdev", __func__);
|
||||
del_sta->status = QDF_STATUS_E_FAILURE;
|
||||
goto send_del_rsp;
|
||||
}
|
||||
|
||||
vdev = wma_find_vdev_by_id(wma, del_sta->smesessionId);
|
||||
if (!vdev) {
|
||||
WMA_LOGE("%s: Failed to find vdev", __func__);
|
||||
del_sta->status = QDF_STATUS_E_FAILURE;
|
||||
goto send_del_rsp;
|
||||
}
|
||||
|
||||
peer = ol_txrx_peer_find_by_local_id(pdev, del_sta->staIdx);
|
||||
if (!peer) {
|
||||
WMA_LOGE("%s: Failed to get peer handle using peer id %d",
|
||||
__func__, del_sta->staIdx);
|
||||
del_sta->status = QDF_STATUS_E_FAILURE;
|
||||
goto send_del_rsp;
|
||||
}
|
||||
|
||||
peerStateParams = qdf_mem_malloc(sizeof(tTdlsPeerStateParams));
|
||||
if (!peerStateParams) {
|
||||
WMA_LOGE("%s: Failed to allocate memory for peerStateParams for: %pM",
|
||||
|
|
@ -4118,7 +4086,7 @@ static void wma_del_tdls_sta(tp_wma_handle wma, tpDeleteStaParams del_sta)
|
|||
|
||||
qdf_mem_zero(peerStateParams, sizeof(*peerStateParams));
|
||||
peerStateParams->peerState = WMA_TDLS_PEER_STATE_TEARDOWN;
|
||||
peerStateParams->vdevId = vdev->vdev_id;
|
||||
peerStateParams->vdevId = del_sta->smesessionId;
|
||||
qdf_mem_copy(&peerStateParams->peerMacAddr,
|
||||
&del_sta->staMac, sizeof(tSirMacAddr));
|
||||
|
||||
|
|
@ -4322,9 +4290,9 @@ void wma_delete_bss(tp_wma_handle wma, tpDeleteBssParams params)
|
|||
wma->interfaces[params->smesessionId].psnr_req = NULL;
|
||||
}
|
||||
|
||||
if (wlan_op_mode_ibss == txrx_vdev->opmode) {
|
||||
if (wlan_op_mode_ibss == ol_txrx_get_opmode(txrx_vdev))
|
||||
wma->ibss_started = 0;
|
||||
}
|
||||
|
||||
if (wma_is_roam_synch_in_progress(wma, params->smesessionId)) {
|
||||
roam_synch_in_progress = true;
|
||||
WMA_LOGD("LFR3:%s: Setting vdev_up to FALSE for session %d",
|
||||
|
|
|
|||
|
|
@ -5468,7 +5468,8 @@ int wma_update_tdls_peer_state(WMA_HANDLE handle,
|
|||
uint32_t i;
|
||||
ol_txrx_pdev_handle pdev;
|
||||
uint8_t peer_id;
|
||||
struct ol_txrx_peer_t *peer;
|
||||
ol_txrx_peer_handle peer;
|
||||
uint8_t *peer_mac_addr;
|
||||
int ret = 0;
|
||||
uint32_t *ch_mhz;
|
||||
|
||||
|
|
@ -5521,12 +5522,13 @@ int wma_update_tdls_peer_state(WMA_HANDLE handle,
|
|||
ret = -EIO;
|
||||
goto end_tdls_peer_state;
|
||||
}
|
||||
peer_mac_addr = ol_txrx_peer_get_peer_mac_addr(peer);
|
||||
|
||||
WMA_LOGD("%s: calling wma_remove_peer for peer " MAC_ADDRESS_STR
|
||||
" vdevId: %d", __func__,
|
||||
MAC_ADDR_ARRAY(peer->mac_addr.raw),
|
||||
MAC_ADDR_ARRAY(peer_mac_addr),
|
||||
peerStateParams->vdevId);
|
||||
wma_remove_peer(wma_handle, peer->mac_addr.raw,
|
||||
wma_remove_peer(wma_handle, peer_mac_addr,
|
||||
peerStateParams->vdevId, peer, false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -67,6 +67,11 @@
|
|||
#include "wma_internal.h"
|
||||
#include "cds_concurrency.h"
|
||||
#include "cdp_txrx_flow_ctrl_legacy.h"
|
||||
#include <cdp_txrx_peer_ops.h>
|
||||
#include <cdp_txrx_pmf.h>
|
||||
#include <cdp_txrx_cfg.h>
|
||||
#include <cdp_txrx_cmn.h>
|
||||
#include <cdp_txrx_misc.h>
|
||||
|
||||
/**
|
||||
* wma_send_bcn_buf_ll() - prepare and send beacon buffer to fw for LL
|
||||
|
|
@ -1455,7 +1460,9 @@ void wma_set_bsskey(tp_wma_handle wma_handle, tpSetBssKeyParams key_info)
|
|||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
uint32_t i;
|
||||
uint32_t def_key_idx = 0;
|
||||
uint32_t wlan_opmode;
|
||||
ol_txrx_vdev_handle txrx_vdev;
|
||||
uint8_t *mac_addr;
|
||||
|
||||
WMA_LOGD("BSS key setup");
|
||||
txrx_vdev = wma_find_vdev_by_id(wma_handle, key_info->smesessionId);
|
||||
|
|
@ -1464,13 +1471,14 @@ void wma_set_bsskey(tp_wma_handle wma_handle, tpSetBssKeyParams key_info)
|
|||
key_info->status = QDF_STATUS_E_FAILURE;
|
||||
goto out;
|
||||
}
|
||||
wlan_opmode = ol_txrx_get_opmode(txrx_vdev);
|
||||
|
||||
/*
|
||||
* For IBSS, WMI expects the BSS key to be set per peer key
|
||||
* So cache the BSS key in the wma_handle and re-use it when the
|
||||
* STA key is been setup for a peer
|
||||
*/
|
||||
if (wlan_op_mode_ibss == txrx_vdev->opmode) {
|
||||
if (wlan_op_mode_ibss == wlan_opmode) {
|
||||
key_info->status = QDF_STATUS_SUCCESS;
|
||||
if (wma_handle->ibss_started > 0)
|
||||
goto out;
|
||||
|
|
@ -1484,16 +1492,22 @@ void wma_set_bsskey(tp_wma_handle wma_handle, tpSetBssKeyParams key_info)
|
|||
key_params.key_type = key_info->encType;
|
||||
key_params.singl_tid_rc = key_info->singleTidRc;
|
||||
key_params.unicast = false;
|
||||
if (txrx_vdev->opmode == wlan_op_mode_sta) {
|
||||
if (wlan_opmode == wlan_op_mode_sta) {
|
||||
qdf_mem_copy(key_params.peer_mac,
|
||||
wma_handle->interfaces[key_info->smesessionId].bssid,
|
||||
IEEE80211_ADDR_LEN);
|
||||
} else {
|
||||
mac_addr = ol_txrx_get_vdev_mac_addr(txrx_vdev);
|
||||
if (mac_addr == NULL) {
|
||||
WMA_LOGE("%s: mac_addr is NULL for vdev with id %d",
|
||||
__func__, key_info->smesessionId);
|
||||
goto out;
|
||||
}
|
||||
/* vdev mac address will be passed for all other modes */
|
||||
qdf_mem_copy(key_params.peer_mac, txrx_vdev->mac_addr.raw,
|
||||
qdf_mem_copy(key_params.peer_mac, mac_addr,
|
||||
IEEE80211_ADDR_LEN);
|
||||
WMA_LOGA("BSS Key setup with vdev_mac %pM\n",
|
||||
txrx_vdev->mac_addr.raw);
|
||||
mac_addr);
|
||||
}
|
||||
|
||||
if (key_info->numKeys == 0 &&
|
||||
|
|
@ -1530,7 +1544,7 @@ void wma_set_bsskey(tp_wma_handle wma_handle, tpSetBssKeyParams key_info)
|
|||
key_info->key[i].keyLength);
|
||||
|
||||
status = wma_setup_install_key_cmd(wma_handle, &key_params,
|
||||
txrx_vdev->opmode);
|
||||
wlan_opmode);
|
||||
if (status == QDF_STATUS_E_NOMEM) {
|
||||
WMA_LOGE("%s:Failed to setup install key buf",
|
||||
__func__);
|
||||
|
|
@ -1608,18 +1622,17 @@ void wma_adjust_ibss_heart_beat_timer(tp_wma_handle wma,
|
|||
return;
|
||||
}
|
||||
|
||||
new_peer_num = vdev->ibss_peer_num + peer_num_delta;
|
||||
if (new_peer_num > MAX_IBSS_PEERS || new_peer_num < 0) {
|
||||
/* adjust peer numbers */
|
||||
new_peer_num = ol_txrx_update_ibss_add_peer_num_of_vdev(vdev,
|
||||
peer_num_delta);
|
||||
if (OL_TXRX_INVALID_NUM_PEERS == new_peer_num) {
|
||||
WMA_LOGE("new peer num %d out of valid boundary", new_peer_num);
|
||||
return;
|
||||
}
|
||||
|
||||
/* adjust peer numbers */
|
||||
vdev->ibss_peer_num = new_peer_num;
|
||||
|
||||
/* reset timer value if all peers departed */
|
||||
if (new_peer_num == 0) {
|
||||
vdev->ibss_peer_heart_beat_timer = 0;
|
||||
ol_txrx_set_ibss_vdev_heart_beat_timer(vdev, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1630,15 +1643,13 @@ void wma_adjust_ibss_heart_beat_timer(tp_wma_handle wma,
|
|||
new_timer_value_sec, new_peer_num);
|
||||
return;
|
||||
}
|
||||
if (new_timer_value_sec == vdev->ibss_peer_heart_beat_timer) {
|
||||
if (new_timer_value_sec ==
|
||||
ol_txrx_set_ibss_vdev_heart_beat_timer(vdev, new_timer_value_sec)) {
|
||||
WMA_LOGD("timer value %d stays same, no need to notify target",
|
||||
new_timer_value_sec);
|
||||
return;
|
||||
}
|
||||
|
||||
/* send new timer value to target */
|
||||
vdev->ibss_peer_heart_beat_timer = new_timer_value_sec;
|
||||
|
||||
new_timer_value_ms = ((uint32_t) new_timer_value_sec) * 1000;
|
||||
|
||||
status = wma_vdev_set_param(wma->wmi_handle, vdev_id,
|
||||
|
|
@ -1671,6 +1682,7 @@ static void wma_set_ibsskey_helper(tp_wma_handle wma_handle,
|
|||
uint32_t i;
|
||||
uint32_t def_key_idx = 0;
|
||||
ol_txrx_vdev_handle txrx_vdev;
|
||||
int opmode;
|
||||
|
||||
WMA_LOGD("BSS key setup for peer");
|
||||
txrx_vdev = wma_find_vdev_by_id(wma_handle, key_info->smesessionId);
|
||||
|
|
@ -1680,12 +1692,14 @@ static void wma_set_ibsskey_helper(tp_wma_handle wma_handle,
|
|||
return;
|
||||
}
|
||||
|
||||
qdf_mem_set(&key_params, sizeof(key_params), 0);
|
||||
opmode = ol_txrx_get_opmode(txrx_vdev);
|
||||
qdf_mem_set(&key_params, sizeof(key_params), 0);
|
||||
key_params.vdev_id = key_info->smesessionId;
|
||||
key_params.key_type = key_info->encType;
|
||||
key_params.singl_tid_rc = key_info->singleTidRc;
|
||||
key_params.unicast = false;
|
||||
ASSERT(wlan_op_mode_ibss == txrx_vdev->opmode);
|
||||
ASSERT(wlan_op_mode_ibss == opmode);
|
||||
|
||||
qdf_mem_copy(key_params.peer_mac, peer_macaddr.bytes,
|
||||
IEEE80211_ADDR_LEN);
|
||||
|
|
@ -1719,7 +1733,7 @@ static void wma_set_ibsskey_helper(tp_wma_handle wma_handle,
|
|||
key_info->key[i].keyLength);
|
||||
|
||||
status = wma_setup_install_key_cmd(wma_handle, &key_params,
|
||||
txrx_vdev->opmode);
|
||||
opmode);
|
||||
if (status == QDF_STATUS_E_NOMEM) {
|
||||
WMA_LOGE("%s:Failed to setup install key buf",
|
||||
__func__);
|
||||
|
|
@ -1747,10 +1761,11 @@ void wma_set_stakey(tp_wma_handle wma_handle, tpSetStaKeyParams key_info)
|
|||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
ol_txrx_pdev_handle txrx_pdev;
|
||||
ol_txrx_vdev_handle txrx_vdev;
|
||||
struct ol_txrx_peer_t *peer;
|
||||
ol_txrx_peer_handle peer;
|
||||
uint8_t num_keys = 0, peer_id;
|
||||
struct wma_set_key_params key_params;
|
||||
uint32_t def_key_idx = 0;
|
||||
int opmode;
|
||||
|
||||
WMA_LOGD("STA key setup");
|
||||
|
||||
|
|
@ -1777,11 +1792,12 @@ void wma_set_stakey(tp_wma_handle wma_handle, tpSetStaKeyParams key_info)
|
|||
key_info->status = QDF_STATUS_E_FAILURE;
|
||||
goto out;
|
||||
}
|
||||
opmode = ol_txrx_get_opmode(txrx_vdev);
|
||||
|
||||
if (key_info->defWEPIdx == WMA_INVALID_KEY_IDX &&
|
||||
(key_info->encType == eSIR_ED_WEP40 ||
|
||||
key_info->encType == eSIR_ED_WEP104) &&
|
||||
txrx_vdev->opmode != wlan_op_mode_ap) {
|
||||
opmode != wlan_op_mode_ap) {
|
||||
wma_read_cfg_wepkey(wma_handle, key_info->key,
|
||||
&def_key_idx, &num_keys);
|
||||
key_info->defWEPIdx = def_key_idx;
|
||||
|
|
@ -1828,7 +1844,7 @@ void wma_set_stakey(tp_wma_handle wma_handle, tpSetStaKeyParams key_info)
|
|||
|
||||
key_params.key_len = key_info->key[i].keyLength;
|
||||
status = wma_setup_install_key_cmd(wma_handle, &key_params,
|
||||
txrx_vdev->opmode);
|
||||
opmode);
|
||||
if (status == QDF_STATUS_E_NOMEM) {
|
||||
WMA_LOGE("%s:Failed to setup install key buf",
|
||||
__func__);
|
||||
|
|
@ -1850,7 +1866,7 @@ void wma_set_stakey(tp_wma_handle wma_handle, tpSetStaKeyParams key_info)
|
|||
/* In IBSS mode, set the BSS KEY for this peer
|
||||
* BSS key is supposed to be cache into wma_handle
|
||||
*/
|
||||
if (wlan_op_mode_ibss == txrx_vdev->opmode) {
|
||||
if (wlan_op_mode_ibss == opmode) {
|
||||
wma_set_ibsskey_helper(wma_handle, &wma_handle->ibsskey_info,
|
||||
key_info->peer_macaddr);
|
||||
}
|
||||
|
|
@ -2691,9 +2707,7 @@ wma_is_ccmp_pn_replay_attack(void *cds_ctx, struct ieee80211_frame *wh,
|
|||
}
|
||||
|
||||
new_pn = wma_extract_ccmp_pn(ccmp_ptr);
|
||||
last_pn_valid = &peer->last_rmf_pn_valid;
|
||||
last_pn = &peer->last_rmf_pn;
|
||||
rmf_pn_replays = &peer->rmf_pn_replays;
|
||||
ol_txrx_get_pn_info(peer, &last_pn_valid, &last_pn, &rmf_pn_replays);
|
||||
|
||||
if (*last_pn_valid) {
|
||||
if (new_pn > *last_pn) {
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
#include "wma_ocb.h"
|
||||
#include "wmi_unified_api.h"
|
||||
#include "cds_utils.h"
|
||||
#include <cdp_txrx_ocb.h>
|
||||
|
||||
/**
|
||||
* wma_ocb_resp() - send the OCB set config response via callback
|
||||
|
|
@ -48,36 +49,40 @@ int wma_ocb_set_config_resp(tp_wma_handle wma_handle, uint8_t status)
|
|||
struct sir_ocb_config *req = wma_handle->ocb_config_req;
|
||||
ol_txrx_vdev_handle vdev = (req ?
|
||||
wma_handle->interfaces[req->session_id].handle : NULL);
|
||||
struct ol_txrx_ocb_set_chan ocb_set_chan;
|
||||
|
||||
/*
|
||||
* If the command was successful, save the channel information in the
|
||||
* vdev.
|
||||
*/
|
||||
if (status == QDF_STATUS_SUCCESS && vdev && req) {
|
||||
if (vdev->ocb_channel_info)
|
||||
qdf_mem_free(vdev->ocb_channel_info);
|
||||
vdev->ocb_channel_count =
|
||||
ocb_set_chan.ocb_channel_info = ol_txrx_get_ocb_chan_info(vdev);
|
||||
if (ocb_set_chan.ocb_channel_info)
|
||||
qdf_mem_free(ocb_set_chan.ocb_channel_info);
|
||||
ocb_set_chan.ocb_channel_count =
|
||||
req->channel_count;
|
||||
if (req->channel_count) {
|
||||
int i;
|
||||
int buf_size = sizeof(*vdev->ocb_channel_info) *
|
||||
int buf_size = sizeof(*ocb_set_chan.ocb_channel_info) *
|
||||
req->channel_count;
|
||||
vdev->ocb_channel_info =
|
||||
ocb_set_chan.ocb_channel_info =
|
||||
qdf_mem_malloc(buf_size);
|
||||
if (!vdev->ocb_channel_info)
|
||||
if (!ocb_set_chan.ocb_channel_info)
|
||||
return -ENOMEM;
|
||||
qdf_mem_zero(vdev->ocb_channel_info, buf_size);
|
||||
qdf_mem_zero(ocb_set_chan.ocb_channel_info, buf_size);
|
||||
for (i = 0; i < req->channel_count; i++) {
|
||||
vdev->ocb_channel_info[i].chan_freq =
|
||||
ocb_set_chan.ocb_channel_info[i].chan_freq =
|
||||
req->channels[i].chan_freq;
|
||||
if (req->channels[i].flags &
|
||||
OCB_CHANNEL_FLAG_DISABLE_RX_STATS_HDR)
|
||||
vdev->ocb_channel_info[i].
|
||||
ocb_set_chan.ocb_channel_info[i].
|
||||
disable_rx_stats_hdr = 1;
|
||||
}
|
||||
} else {
|
||||
vdev->ocb_channel_info = 0;
|
||||
ocb_set_chan.ocb_channel_info = 0;
|
||||
ocb_set_chan.ocb_channel_count = 0;
|
||||
}
|
||||
ol_txrx_set_ocb_chan_info(vdev, ocb_set_chan);
|
||||
}
|
||||
|
||||
/* Free the configuration that was saved in wma_ocb_set_config. */
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@
|
|||
#include "wni_cfg.h"
|
||||
#include "cfg_api.h"
|
||||
#include "wlan_tgt_def_config.h"
|
||||
#include <cdp_txrx_peer_ops.h>
|
||||
#include <cdp_txrx_cfg.h>
|
||||
|
||||
#include "qdf_nbuf.h"
|
||||
#include "qdf_types.h"
|
||||
|
|
@ -4911,10 +4913,10 @@ QDF_STATUS wma_ipa_offload_enable_disable(tp_wma_handle wma,
|
|||
struct sir_ipa_offload_enable_disable *ipa_offload)
|
||||
{
|
||||
ol_txrx_vdev_handle vdev;
|
||||
struct txrx_pdev_cfg_t *cfg;
|
||||
int32_t intra_bss_fwd = 0;
|
||||
struct ipa_offload_control_params params = {0};
|
||||
QDF_STATUS status;
|
||||
uint8_t rx_fwd_disabled;
|
||||
|
||||
if (!wma || !wma->wmi_handle) {
|
||||
WMA_LOGE("%s: WMA is closed, can not issue cmd",
|
||||
|
|
@ -4955,11 +4957,11 @@ QDF_STATUS wma_ipa_offload_enable_disable(tp_wma_handle wma,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
/* Disable Intra-BSS FWD offload when gDisableIntraBssFwd=1 in INI */
|
||||
cfg = (struct txrx_pdev_cfg_t *)vdev->pdev->ctrl_pdev;
|
||||
if (!ipa_offload->enable || cfg->rx_fwd_disabled) {
|
||||
rx_fwd_disabled = ol_txrx_is_rx_fwd_disabled(vdev);
|
||||
if (!ipa_offload->enable || rx_fwd_disabled) {
|
||||
WMA_LOGE("%s: ipa_offload->enable=%d, rx_fwd_disabled=%d",
|
||||
__func__,
|
||||
ipa_offload->enable, cfg->rx_fwd_disabled);
|
||||
ipa_offload->enable, rx_fwd_disabled);
|
||||
intra_bss_fwd = 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue