qcacmn: cmn_ops changes in datapath for umac-dp decoupling

Change cmn_ops APIs to replace pdev, vdev and peer
dp handles with pdev_id, vdev_id and peer mac address
along with dp soc handle

Change-Id: I5716a87cad56b1dfe8dd56f193bbb6ff923a6af1
This commit is contained in:
Pavankumar Nandeshwar
2019-12-18 23:20:31 +05:30
committed by nshrivas
부모 a3baeee819
커밋 a234716d1d
14개의 변경된 파일1171개의 추가작업 그리고 792개의 파일을 삭제

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다. Load Diff

파일 보기

@@ -71,7 +71,8 @@ dp_soc_attach_wifi3(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
struct hif_opaque_softc *hif_handle,
HTC_HANDLE htc_handle, qdf_device_t qdf_osdev,
struct ol_if_ops *ol_ops, uint16_t device_id);
void *dp_soc_init_wifi3(void *soc, struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
void *dp_soc_init_wifi3(struct cdp_soc_t *soc,
struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
struct hif_opaque_softc *hif_handle,
HTC_HANDLE htc_handle, qdf_device_t qdf_osdev,
struct ol_if_ops *ol_ops, uint16_t device_id);
@@ -88,7 +89,8 @@ struct cdp_soc_t *dp_soc_attach_wifi3(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
}
static inline
void *dp_soc_init_wifi3(void *soc, struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
void *dp_soc_init_wifi3(struct cdp_soc_t *soc,
struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
struct hif_opaque_softc *hif_handle,
HTC_HANDLE htc_handle, qdf_device_t qdf_osdev,
struct ol_if_ops *ol_ops, uint16_t device_id)

파일 보기

@@ -676,10 +676,11 @@ typedef void
/**
* ol_txrx_tx_fp - top-level transmit function
* @data_vdev - handle to the virtual device object
* @soc - dp soc handle
* @vdev_id - handle to the virtual device object
* @msdu_list - list of network buffers
*/
typedef qdf_nbuf_t (*ol_txrx_tx_fp)(struct cdp_vdev *data_vdev,
typedef qdf_nbuf_t (*ol_txrx_tx_fp)(struct cdp_soc_t *soc, uint8_t vdev_id,
qdf_nbuf_t msdu_list);
/**
@@ -2026,17 +2027,18 @@ enum cdp_dp_cfg {
/**
* struct cdp_peer_cookie - cookie used when creating peer
* @ctx: context passed to be used by consumer
* @mac_addr: MAC address of peer
* @peer_id: peer id
* @pdev_id: pdev_id
* @mac_addr: MAC address of peer
* @cookie: cookie to be used by consumer
* @ctx: context passed to be used by consumer
*/
struct cdp_peer_cookie {
struct cdp_stats_cookie *ctx;
uint8_t mac_addr[QDF_MAC_ADDR_SIZE];
uint8_t peer_id;
uint8_t pdev_id;
uint8_t cookie;
struct cdp_stats_cookie *ctx;
};
/**

파일 보기

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011-2016,2018 The Linux Foundation. All rights reserved.
* Copyright (c) 2011-2016,2018-2019 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -73,9 +73,9 @@ void ol_ll_pdev_tx_unlock(void *);
#else
#define OSIF_VAP_TX_LOCK(_y, _x) cdp_vdev_tx_lock( \
_y, wlan_vdev_get_dp_handle((_x)->ctrl_vdev))
_y, wlan_vdev_get_id((_x)->ctrl_vdev))
#define OSIF_VAP_TX_UNLOCK(_y, _x) cdp_vdev_tx_unlock( \
_y, wlan_vdev_get_dp_handle((_x)->ctrl_vdev))
_y, wlan_vdev_get_id((_x)->ctrl_vdev))
#define OL_TX_FLOW_CTRL_LOCK(_x)
#define OL_TX_FLOW_CTRL_UNLOCK(_x)

파일 보기

@@ -67,15 +67,16 @@ struct cdp_cmn_ops {
QDF_STATUS (*txrx_soc_attach_target)(ol_txrx_soc_handle soc);
int (*txrx_pdev_attach_target)(struct cdp_pdev *pdev);
int (*txrx_pdev_attach_target)(ol_txrx_soc_handle soc, uint8_t pdev_id);
struct cdp_vdev *(*txrx_vdev_attach)
(struct cdp_pdev *pdev, uint8_t *vdev_mac_addr,
(struct cdp_soc_t *soc, uint8_t pdev_id, uint8_t *mac,
uint8_t vdev_id, enum wlan_op_mode op_mode,
enum wlan_op_subtype subtype);
void (*txrx_vdev_detach)
(struct cdp_vdev *vdev, ol_txrx_vdev_delete_cb callback,
QDF_STATUS
(*txrx_vdev_detach)(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
ol_txrx_vdev_delete_cb callback,
void *cb_context);
struct cdp_pdev *(*txrx_pdev_attach)
@@ -84,39 +85,49 @@ struct cdp_cmn_ops {
int (*txrx_pdev_post_attach)(struct cdp_pdev *pdev);
void (*txrx_pdev_pre_detach)(struct cdp_pdev *pdev, int force);
void
(*txrx_pdev_pre_detach)(struct cdp_pdev *pdev, int force);
void (*txrx_pdev_detach)(struct cdp_pdev *pdev, int force);
QDF_STATUS
(*txrx_pdev_detach)(struct cdp_soc_t *psoc, uint8_t pdev_id,
int force);
/**
* txrx_pdev_deinit() - Deinitialize pdev and dp ring memory
* @pdev: Dp pdev handle
* @soc: soc dp handle
* @pdev_id: id of Dp pdev handle
* @force: Force deinit or not
*
* Return: None
* Return: QDF_STATUS
*/
void (*txrx_pdev_deinit)(struct cdp_pdev *pdev, int force);
QDF_STATUS
(*txrx_pdev_deinit)(struct cdp_soc_t *soc, uint8_t pdev_id,
int force);
void *(*txrx_peer_create)
(struct cdp_vdev *vdev, uint8_t *peer_mac_addr);
void (*txrx_peer_setup)
(struct cdp_vdev *vdev_hdl, void *peer_hdl);
void (*txrx_cp_peer_del_response)
(ol_txrx_soc_handle soc, struct cdp_vdev *vdev_hdl,
(ol_txrx_soc_handle soc, uint8_t vdev_id,
uint8_t *peer_mac_addr);
void (*txrx_peer_teardown)
(struct cdp_vdev *vdev_hdl, void *peer_hdl);
QDF_STATUS
(*txrx_peer_setup)(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
uint8_t *peer_mac);
QDF_STATUS
(*txrx_cp_peer_del_response)
(ol_txrx_soc_handle soc, uint8_t vdev_id,
uint8_t *peer_mac_addr);
QDF_STATUS
(*txrx_peer_teardown)
(struct cdp_soc_t *soc, uint8_t vdev_id, uint8_t *peer_mac);
int (*txrx_peer_add_ast)
(ol_txrx_soc_handle soc, struct cdp_peer *peer_hdl,
(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac,
uint8_t *mac_addr, enum cdp_txrx_ast_entry_type type,
uint32_t flags);
int (*txrx_peer_update_ast)
(ol_txrx_soc_handle soc, struct cdp_peer *peer_hdl,
(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac,
uint8_t *mac_addr, uint32_t flags);
bool (*txrx_peer_get_ast_info_by_soc)
@@ -139,11 +150,12 @@ struct cdp_cmn_ops {
txrx_ast_free_cb callback,
void *cookie);
void (*txrx_peer_delete)(void *peer, uint32_t bitmap);
QDF_STATUS
(*txrx_peer_delete)(struct cdp_soc_t *soc, uint8_t vdev_id,
uint8_t *peer_mac, uint32_t bitmap);
void (*txrx_vdev_flush_peers)(struct cdp_vdev *vdev, bool unmap_only);
QDF_STATUS (*txrx_set_monitor_mode)(struct cdp_vdev *vdev,
QDF_STATUS (*txrx_set_monitor_mode)(struct cdp_soc_t *soc,
uint8_t vdev_id,
uint8_t smart_monitor);
void (*txrx_peer_delete_sync)(void *peer,
QDF_STATUS(*delete_cb)(
@@ -164,7 +176,9 @@ struct cdp_cmn_ops {
void (*txrx_pdev_set_chan_noise_floor)(struct cdp_pdev *pdev,
int16_t chan_noise_floor);
void (*txrx_set_nac)(struct cdp_peer *peer);
void
(*txrx_set_nac)(ol_txrx_soc_handle soc, uint8_t vdev_id,
uint8_t *peer_mac);
/**
* txrx_set_pdev_tx_capture() - callback to set pdev tx_capture
@@ -176,52 +190,68 @@ struct cdp_cmn_ops {
*/
QDF_STATUS (*txrx_set_pdev_tx_capture)(struct cdp_pdev *pdev, int val);
void (*txrx_get_peer_mac_from_peer_id)
(struct cdp_pdev *pdev_handle,
QDF_STATUS
(*txrx_get_peer_mac_from_peer_id)
(struct cdp_soc_t *cdp_soc,
uint32_t peer_id, uint8_t *peer_mac);
void (*txrx_vdev_tx_lock)(struct cdp_vdev *vdev);
void
(*txrx_vdev_tx_lock)(struct cdp_soc_t *soc, uint8_t vdev_id);
void (*txrx_vdev_tx_unlock)(struct cdp_vdev *vdev);
void
(*txrx_vdev_tx_unlock)(struct cdp_soc_t *soc, uint8_t vdev_id);
void (*txrx_ath_getstats)(void *pdev,
QDF_STATUS
(*txrx_ath_getstats)(struct cdp_soc_t *soc, uint8_t id,
struct cdp_dev_stats *stats, uint8_t type);
void (*txrx_set_gid_flag)(struct cdp_pdev *pdev, u_int8_t *mem_status,
QDF_STATUS
(*txrx_set_gid_flag)(struct cdp_soc_t *soc, uint8_t pdev_id,
u_int8_t *mem_status,
u_int8_t *user_position);
uint32_t (*txrx_fw_supported_enh_stats_version)(struct cdp_pdev *pdev);
uint32_t (*txrx_fw_supported_enh_stats_version)(struct cdp_soc_t *soc,
uint8_t pdev_id);
void (*txrx_if_mgmt_drain)(void *ni, int force);
QDF_STATUS
(*txrx_if_mgmt_drain)(struct cdp_soc_t *soc, uint8_t pdev_id,
int force);
void (*txrx_set_curchan)(struct cdp_pdev *pdev, uint32_t chan_mhz);
QDF_STATUS
(*txrx_set_curchan)(struct cdp_soc_t *soc, uint8_t pdev_id,
uint32_t chan_mhz);
void (*txrx_set_privacy_filters)
(struct cdp_vdev *vdev, void *filter, uint32_t num);
QDF_STATUS
(*txrx_set_privacy_filters)
(struct cdp_soc_t *soc, uint8_t vdev_id, void *filter,
uint32_t num);
uint32_t (*txrx_get_cfg)(void *soc, enum cdp_dp_cfg cfg);
uint32_t (*txrx_get_cfg)(struct cdp_soc_t *soc, enum cdp_dp_cfg cfg);
/********************************************************************
* Data Interface (B Interface)
********************************************************************/
void (*txrx_vdev_register)(struct cdp_vdev *vdev,
void *osif_vdev,
QDF_STATUS
(*txrx_vdev_register)(struct cdp_soc_t *soc, uint8_t vdev_id,
ol_osif_vdev_handle osif_vdev,
struct ol_txrx_ops *txrx_ops);
int (*txrx_mgmt_send)(struct cdp_vdev *vdev,
int (*txrx_mgmt_send)(struct cdp_soc_t *soc, uint8_t vdev_id,
qdf_nbuf_t tx_mgmt_frm, uint8_t type);
int (*txrx_mgmt_send_ext)(struct cdp_vdev *vdev,
qdf_nbuf_t tx_mgmt_frm, uint8_t type, uint8_t use_6mbps,
uint16_t chanfreq);
int (*txrx_mgmt_send_ext)(struct cdp_soc_t *soc, uint8_t vdev_id,
qdf_nbuf_t tx_mgmt_frm, uint8_t type,
uint8_t use_6mbps, uint16_t chanfreq);
/**
* ol_txrx_mgmt_tx_cb - tx management delivery notification
* callback function
*/
void (*txrx_mgmt_tx_cb_set)(struct cdp_pdev *pdev, uint8_t type,
QDF_STATUS
(*txrx_mgmt_tx_cb_set)(struct cdp_soc_t *soc, uint8_t pdev_id,
uint8_t type,
ol_txrx_mgmt_tx_cb download_cb,
ol_txrx_mgmt_tx_cb ota_ack_cb,
void *ctxt);
@@ -241,16 +271,20 @@ struct cdp_cmn_ops {
* Statistics and Debugging Interface (C Interface)
********************************************************************/
int (*txrx_aggr_cfg)(struct cdp_vdev *vdev, int max_subfrms_ampdu,
int (*txrx_aggr_cfg)(struct cdp_soc_t *soc, uint8_t vdev_id,
int max_subfrms_ampdu,
int max_subfrms_amsdu);
A_STATUS (*txrx_fw_stats_get)(struct cdp_vdev *vdev,
A_STATUS
(*txrx_fw_stats_get)(struct cdp_soc_t *soc, uint8_t vdev_id,
struct ol_txrx_stats_req *req,
bool per_vdev, bool response_expected);
int (*txrx_debug)(struct cdp_vdev *vdev, int debug_specs);
int (*txrx_debug)(struct cdp_soc_t *soc, uint8_t vdev_id,
int debug_specs);
void (*txrx_fw_stats_cfg)(struct cdp_vdev *vdev,
QDF_STATUS
(*txrx_fw_stats_cfg)(struct cdp_soc_t *soc, uint8_t vdev_id,
uint8_t cfg_stats_type, uint32_t cfg_val);
void (*txrx_print_level_set)(unsigned level);
@@ -300,29 +334,26 @@ struct cdp_cmn_ops {
struct cdp_vdev *
(*txrx_get_mon_vdev_from_pdev)(struct cdp_pdev *pdev);
struct cdp_vdev *
(*txrx_get_vdev_from_vdev_id)(struct cdp_pdev *pdev,
uint8_t vdev_id);
void (*txrx_soc_detach)(void *soc);
void (*txrx_soc_detach)(struct cdp_soc_t *soc);
/**
* txrx_soc_deinit() - Deinitialize dp soc and dp ring memory
* @soc: Opaque Dp handle
*
* Return: None
* Return None
*/
void (*txrx_soc_deinit)(void *soc);
void (*txrx_soc_deinit)(struct cdp_soc_t *soc);
/**
* txrx_soc_init() - Initialize dp soc and dp ring memory
* @soc: Opaque Dp handle
* @ctrl_psoc: Opaque Cp handle
* @htchdl: Opaque htc handle
* @hifhdl: Opaque hif handle
*
* Return: None
*/
void *(*txrx_soc_init)(void *soc,
void *(*txrx_soc_init)(struct cdp_soc_t *soc,
struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
struct hif_opaque_softc *hif_handle,
HTC_HANDLE htc_handle, qdf_device_t qdf_osdev,
@@ -335,7 +366,7 @@ struct cdp_cmn_ops {
*
* Return: QDF status
*/
QDF_STATUS (*txrx_tso_soc_attach)(void *soc);
QDF_STATUS (*txrx_tso_soc_attach)(struct cdp_soc_t *soc);
/**
* txrx_tso_soc_detach() - TSO detach handler triggered during
@@ -344,85 +375,103 @@ struct cdp_cmn_ops {
*
* Return: QDF status
*/
QDF_STATUS (*txrx_tso_soc_detach)(void *soc);
int (*addba_resp_tx_completion)(void *peer_handle, uint8_t tid,
QDF_STATUS (*txrx_tso_soc_detach)(struct cdp_soc_t *soc);
int (*addba_resp_tx_completion)(struct cdp_soc_t *cdp_soc,
uint8_t *peer_mac,
uint16_t vdev_id, uint8_t tid,
int status);
int (*addba_requestprocess)(void *peer_handle, uint8_t dialogtoken,
int (*addba_requestprocess)(struct cdp_soc_t *cdp_soc,
uint8_t *peer_mac,
uint16_t vdev_id,
uint8_t dialogtoken,
uint16_t tid, uint16_t batimeout,
uint16_t buffersize,
uint16_t startseqnum);
void (*addba_responsesetup)(void *peer_handle, uint8_t tid,
QDF_STATUS
(*addba_responsesetup)(struct cdp_soc_t *cdp_soc,
uint8_t *peer_mac,
uint16_t vdev_id, uint8_t tid,
uint8_t *dialogtoken, uint16_t *statuscode,
uint16_t *buffersize, uint16_t *batimeout);
int (*delba_process)(void *peer_handle,
int tid, uint16_t reasoncode);
int (*delba_process)(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
uint16_t vdev_id, int tid, uint16_t reasoncode);
/**
* delba_tx_completion() - Indicate delba tx status
* @peer_handle: Peer handle
* @cdp_soc: soc handle
* @peer_mac: Peer mac address
* @vdev_id: vdev id
* @tid: Tid number
* @status: Tx completion status
*
* Return: 0 on Success, 1 on failure
*/
int (*delba_tx_completion)(void *peer_handle,
int (*delba_tx_completion)(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
uint16_t vdev_id,
uint8_t tid, int status);
void (*set_addba_response)(void *peer_handle,
uint8_t tid, uint16_t statuscode);
QDF_STATUS
(*set_addba_response)(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
uint16_t vdev_id, uint8_t tid,
uint16_t statuscode);
uint8_t (*get_peer_mac_addr_frm_id)(struct cdp_soc_t *soc_handle,
uint16_t peer_id, uint8_t *mac_addr);
void (*set_vdev_dscp_tid_map)(struct cdp_vdev *vdev_handle,
uint8_t map_id);
int (*txrx_get_total_per)(struct cdp_pdev *pdev_handle);
QDF_STATUS
(*set_vdev_dscp_tid_map)(struct cdp_soc_t *soc_handle,
uint8_t vdev_id, uint8_t map_id);
int (*txrx_get_total_per)(struct cdp_soc_t *soc, uint8_t pdev_id);
void (*flush_cache_rx_queue)(void);
void (*set_pdev_dscp_tid_map)(struct cdp_pdev *pdev, uint8_t map_id,
QDF_STATUS (*set_pdev_dscp_tid_map)(struct cdp_soc_t *soc_handle,
uint8_t pdev_id,
uint8_t map_id,
uint8_t tos, uint8_t tid);
void (*hmmc_tid_override_en)(struct cdp_pdev *pdev, bool val);
void (*set_hmmc_tid_val)(struct cdp_pdev *pdev, uint8_t tid);
QDF_STATUS(*txrx_stats_request)(struct cdp_soc_t *soc_handle,
QDF_STATUS (*txrx_stats_request)(struct cdp_soc_t *soc_handle,
uint8_t vdev_id,
struct cdp_txrx_stats_req *req);
QDF_STATUS (*display_stats)(void *psoc, uint16_t value,
QDF_STATUS (*display_stats)(struct cdp_soc_t *psoc, uint16_t value,
enum qdf_stats_verbosity_level level);
void (*txrx_soc_set_nss_cfg)(ol_txrx_soc_handle soc, int config);
int(*txrx_soc_get_nss_cfg)(ol_txrx_soc_handle soc);
QDF_STATUS (*txrx_intr_attach)(void *soc);
void (*txrx_intr_detach)(void *soc);
void (*set_pn_check)(struct cdp_vdev *vdev,
struct cdp_peer *peer_handle, enum cdp_sec_type sec_type,
QDF_STATUS (*txrx_intr_attach)(struct cdp_soc_t *soc_handle);
void (*txrx_intr_detach)(struct cdp_soc_t *soc_handle);
QDF_STATUS (*set_pn_check)(struct cdp_soc_t *soc_handle,
uint8_t vdev_id, uint8_t *peermac,
enum cdp_sec_type sec_type,
uint32_t *rx_pn);
QDF_STATUS (*update_config_parameters)(struct cdp_soc *psoc,
struct cdp_config_params *params);
void *(*get_dp_txrx_handle)(struct cdp_pdev *pdev_hdl);
void (*set_dp_txrx_handle)(struct cdp_pdev *pdev_hdl,
void *dp_txrx_hdl);
void *(*get_dp_txrx_handle)(ol_txrx_soc_handle soc, uint8_t pdev_id);
void (*set_dp_txrx_handle)(ol_txrx_soc_handle soc, uint8_t pdev_id,
void *dp_hdl);
void *(*get_soc_dp_txrx_handle)(struct cdp_soc *soc_handle);
void (*set_soc_dp_txrx_handle)(struct cdp_soc *soc_handle,
void *dp_txrx_handle);
void (*map_pdev_to_lmac)(struct cdp_pdev *pdev_hdl,
QDF_STATUS (*map_pdev_to_lmac)(ol_txrx_soc_handle soc, uint8_t pdev_id,
uint32_t lmac_id);
void (*set_pdev_status_down)(struct cdp_pdev *pdev_hdl, bool is_pdev_down);
QDF_STATUS (*set_pdev_status_down)(struct cdp_soc_t *soc_handle,
uint8_t pdev_id, bool is_pdev_down);
void (*txrx_peer_reset_ast)
QDF_STATUS (*txrx_peer_reset_ast)
(ol_txrx_soc_handle soc, uint8_t *ast_macaddr,
uint8_t *peer_macaddr, void *vdev_hdl);
uint8_t *peer_macaddr, uint8_t vdev_id);
void (*txrx_peer_reset_ast_table)(ol_txrx_soc_handle soc,
void *vdev_hdl);
QDF_STATUS (*txrx_peer_reset_ast_table)(ol_txrx_soc_handle soc,
uint8_t vdev_id);
void (*txrx_peer_flush_ast_table)(ol_txrx_soc_handle soc);
void (*txrx_set_ba_aging_timeout)(struct cdp_soc_t *soc_handle,
@@ -448,28 +497,31 @@ struct cdp_cmn_ops {
ol_txrx_rx_fp *stack_fn,
ol_osif_vdev_handle *osif_vdev);
int (*txrx_classify_update)
(struct cdp_vdev *vdev, qdf_nbuf_t skb,
(struct cdp_soc_t *soc, uint8_t vdev_id, qdf_nbuf_t skb,
enum txrx_direction, struct ol_txrx_nbuf_classify *nbuf_class);
bool (*get_dp_capabilities)(struct cdp_soc_t *soc,
enum cdp_capabilities dp_caps);
void (*set_rate_stats_ctx)(struct cdp_soc_t *soc, void *ctx);
void* (*get_rate_stats_ctx)(struct cdp_soc_t *soc);
void (*txrx_peer_flush_rate_stats)(struct cdp_soc_t *soc,
struct cdp_pdev *pdev,
QDF_STATUS (*txrx_peer_flush_rate_stats)(struct cdp_soc_t *soc,
uint8_t pdev_id,
void *buf);
void (*txrx_flush_rate_stats_request)(struct cdp_soc_t *soc,
struct cdp_pdev *pdev);
QDF_STATUS (*set_pdev_pcp_tid_map)(struct cdp_pdev *pdev,
QDF_STATUS (*txrx_flush_rate_stats_request)(struct cdp_soc_t *soc,
uint8_t pdev_id);
QDF_STATUS (*set_pdev_pcp_tid_map)(struct cdp_soc_t *soc,
uint8_t pdev_id,
uint8_t pcp, uint8_t tid);
QDF_STATUS (*set_pdev_tidmap_prty)(struct cdp_pdev *pdev, uint8_t prty);
QDF_STATUS (*set_vdev_pcp_tid_map)(struct cdp_vdev *vdev,
QDF_STATUS (*set_vdev_pcp_tid_map)(struct cdp_soc_t *soc,
uint8_t vdev_id,
uint8_t pcp, uint8_t tid);
QDF_STATUS (*set_vdev_tidmap_prty)(struct cdp_vdev *vdev, uint8_t prty);
QDF_STATUS (*set_vdev_tidmap_tbl_id)(struct cdp_vdev *vdev,
uint8_t mapid);
#ifdef QCA_MULTIPASS_SUPPORT
QDF_STATUS (*set_vlan_groupkey)(struct cdp_vdev *vdev_handle,
QDF_STATUS (*set_vlan_groupkey)(struct cdp_soc_t *soc, uint8_t vdev_id,
uint16_t vlan_id, uint16_t group_key);
#endif
};

파일 보기

@@ -3957,7 +3957,9 @@ static void dp_htt_t2h_msg_handler(void *context, HTC_PACKET *pkt)
* using just 8 bits
*/
if (peer) {
status = dp_addba_requestprocess_wifi3(peer,
status = dp_addba_requestprocess_wifi3(
(struct cdp_soc_t *)soc->dp_soc,
peer->mac_addr.raw, peer->vdev->vdev_id,
0, tid, 0, win_sz + 1, 0xffff);
/*

파일 보기

@@ -944,29 +944,43 @@ void dp_local_peer_id_free(struct dp_pdev *pdev, struct dp_peer *peer)
{
}
#endif
int dp_addba_resp_tx_completion_wifi3(void *peer_handle, uint8_t tid,
int dp_addba_resp_tx_completion_wifi3(struct cdp_soc_t *cdp_soc,
uint8_t *peer_mac, uint16_t vdev_id,
uint8_t tid,
int status);
extern int dp_addba_requestprocess_wifi3(void *peer_handle,
uint8_t dialogtoken, uint16_t tid, uint16_t batimeout,
uint16_t buffersize, uint16_t startseqnum);
extern void dp_addba_responsesetup_wifi3(void *peer_handle, uint8_t tid,
uint8_t *dialogtoken, uint16_t *statuscode,
uint16_t *buffersize, uint16_t *batimeout);
extern void dp_set_addba_response(void *peer_handle, uint8_t tid,
int dp_addba_requestprocess_wifi3(struct cdp_soc_t *cdp_soc,
uint8_t *peer_mac, uint16_t vdev_id,
uint8_t dialogtoken, uint16_t tid,
uint16_t batimeout,
uint16_t buffersize,
uint16_t startseqnum);
QDF_STATUS dp_addba_responsesetup_wifi3(struct cdp_soc_t *cdp_soc,
uint8_t *peer_mac, uint16_t vdev_id,
uint8_t tid, uint8_t *dialogtoken,
uint16_t *statuscode,
uint16_t *buffersize,
uint16_t *batimeout);
QDF_STATUS dp_set_addba_response(struct cdp_soc_t *cdp_soc,
uint8_t *peer_mac,
uint16_t vdev_id, uint8_t tid,
uint16_t statuscode);
extern int dp_delba_process_wifi3(void *peer_handle,
int tid, uint16_t reasoncode);
int dp_delba_process_wifi3(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
uint16_t vdev_id, int tid,
uint16_t reasoncode);
/*
* dp_delba_tx_completion_wifi3() - Handle delba tx completion
*
* @peer_handle: Peer handle
* @cdp_soc: soc handle
* @vdev_id: id of the vdev handle
* @peer_mac: peer mac address
* @tid: Tid number
* @status: Tx completion status
* Indicate status of delba Tx to DP for stats update and retry
* delba if tx failed.
*
*/
int dp_delba_tx_completion_wifi3(void *peer_handle, uint8_t tid,
int dp_delba_tx_completion_wifi3(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
uint16_t vdev_id, uint8_t tid,
int status);
extern QDF_STATUS dp_rx_tid_setup_wifi3(struct dp_peer *peer, int tid,
uint32_t ba_window_size,
@@ -1003,8 +1017,9 @@ void dp_htt_stats_print_tag(struct dp_pdev *pdev,
void dp_htt_stats_copy_tag(struct dp_pdev *pdev, uint8_t tag_type, uint32_t *tag_buf);
void dp_peer_rxtid_stats(struct dp_peer *peer, void (*callback_fn),
void *cb_ctxt);
void dp_set_pn_check_wifi3(struct cdp_vdev *vdev_handle,
struct cdp_peer *peer_handle, enum cdp_sec_type sec_type,
QDF_STATUS
dp_set_pn_check_wifi3(struct cdp_soc_t *soc, uint8_t vdev_id,
uint8_t *peer_mac, enum cdp_sec_type sec_type,
uint32_t *rx_pn);
void *dp_get_pdev_for_mac_id(struct dp_soc *soc, uint32_t mac_id);

파일 보기

@@ -770,22 +770,22 @@ QDF_STATUS dp_ipa_get_stat(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
return QDF_STATUS_SUCCESS;
}
/**
* dp_tx_send_ipa_data_frame() - send IPA data frame
* @soc_hdl: datapath soc handle
* @vdev_id: id of the virtual device
* @skb: skb to transmit
*
* Return: skb/ NULL is for success
*/
qdf_nbuf_t dp_tx_send_ipa_data_frame(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
qdf_nbuf_t skb)
{
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
struct dp_vdev *vdev =
dp_get_vdev_from_soc_vdev_id_wifi3(soc, vdev_id);
qdf_nbuf_t ret;
if (!vdev) {
dp_err("%s invalid instance", __func__);
return skb;
}
/* Terminate the (single-element) list of tx frames */
qdf_nbuf_set_next(skb, NULL);
ret = dp_tx_send(dp_vdev_to_cdp_vdev(vdev), skb);
ret = dp_tx_send(soc_hdl, vdev_id, skb);
if (ret) {
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
"%s: Failed to tx", __func__);
@@ -1699,7 +1699,7 @@ static qdf_nbuf_t dp_ipa_intrabss_send(struct dp_pdev *pdev,
qdf_mem_zero(nbuf->cb, sizeof(nbuf->cb));
len = qdf_nbuf_len(nbuf);
if (dp_tx_send(dp_vdev_to_cdp_vdev(vdev), nbuf)) {
if (dp_tx_send((struct cdp_soc_t *)pdev->soc, vdev->vdev_id, nbuf)) {
DP_STATS_INC_PKT(vdev_peer, rx.intra_bss.fail, 1, len);
return nbuf;
}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다. Load Diff

파일 보기

@@ -2518,21 +2518,26 @@ static void dp_teardown_256_ba_sessions(struct dp_peer *peer)
/*
* dp_rx_addba_resp_tx_completion_wifi3() Update Rx Tid State
*
* @peer: Datapath peer handle
* @soc: Datapath soc handle
* @peer_mac: Datapath peer mac address
* @vdev_id: id of atapath vdev
* @tid: TID number
* @status: tx completion status
* Return: 0 on success, error code on failure
*/
int dp_addba_resp_tx_completion_wifi3(void *peer_handle,
int dp_addba_resp_tx_completion_wifi3(struct cdp_soc_t *cdp_soc,
uint8_t *peer_mac,
uint16_t vdev_id,
uint8_t tid, int status)
{
struct dp_peer *peer = (struct dp_peer *)peer_handle;
struct dp_peer *peer = dp_peer_find_hash_find((struct dp_soc *)cdp_soc,
peer_mac, 0, vdev_id);
struct dp_rx_tid *rx_tid = NULL;
if (!peer || peer->delete_in_progress) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s: Peer is NULL!\n", __func__);
return QDF_STATUS_E_FAILURE;
goto fail;
}
rx_tid = &peer->rx_tid[tid];
qdf_spin_lock_bh(&rx_tid->tid_lock);
@@ -2543,7 +2548,8 @@ int dp_addba_resp_tx_completion_wifi3(void *peer_handle,
rx_tid->ba_status = DP_RX_BA_INACTIVE;
qdf_spin_unlock_bh(&rx_tid->tid_lock);
dp_err("RxTid- %d addba rsp tx completion failed", tid);
return QDF_STATUS_SUCCESS;
goto success;
}
rx_tid->num_addba_rsp_success++;
@@ -2552,7 +2558,7 @@ int dp_addba_resp_tx_completion_wifi3(void *peer_handle,
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
"%s: Rx Tid- %d hw qdesc is not in IN_PROGRESS",
__func__, tid);
return QDF_STATUS_E_FAILURE;
goto fail;
}
if (!qdf_atomic_read(&peer->is_default_route_set)) {
@@ -2560,7 +2566,7 @@ int dp_addba_resp_tx_completion_wifi3(void *peer_handle,
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s: default route is not set for peer: %pM",
__func__, peer->mac_addr.raw);
return QDF_STATUS_E_FAILURE;
goto fail;
}
/* First Session */
@@ -2585,30 +2591,46 @@ int dp_addba_resp_tx_completion_wifi3(void *peer_handle,
dp_teardown_256_ba_sessions(peer);
peer->kill_256_sessions = 0;
}
success:
dp_peer_unref_delete(peer);
return QDF_STATUS_SUCCESS;
fail:
if (peer)
dp_peer_unref_delete(peer);
return QDF_STATUS_E_FAILURE;
}
/*
* dp_rx_addba_responsesetup_wifi3() Process ADDBA request from peer
*
* @peer: Datapath peer handle
* @soc: Datapath soc handle
* @peer_mac: Datapath peer mac address
* @vdev_id: id of atapath vdev
* @tid: TID number
* @dialogtoken: output dialogtoken
* @statuscode: output dialogtoken
* @buffersize: Output BA window size
* @batimeout: Output BA timeout
*/
void dp_addba_responsesetup_wifi3(void *peer_handle, uint8_t tid,
QDF_STATUS
dp_addba_responsesetup_wifi3(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
uint16_t vdev_id, uint8_t tid,
uint8_t *dialogtoken, uint16_t *statuscode,
uint16_t *buffersize, uint16_t *batimeout)
{
struct dp_peer *peer = (struct dp_peer *)peer_handle;
struct dp_rx_tid *rx_tid = NULL;
QDF_STATUS status = QDF_STATUS_SUCCESS;
struct dp_peer *peer = dp_peer_find_hash_find((struct dp_soc *)cdp_soc,
peer_mac, 0, vdev_id);
if (!peer || peer->delete_in_progress) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s: Peer is NULL!\n", __func__);
return;
status = QDF_STATUS_E_FAILURE;
goto fail;
}
rx_tid = &peer->rx_tid[tid];
qdf_spin_lock_bh(&rx_tid->tid_lock);
@@ -2619,6 +2641,12 @@ void dp_addba_responsesetup_wifi3(void *peer_handle, uint8_t tid,
*buffersize = rx_tid->ba_win_size;
*batimeout = 0;
qdf_spin_unlock_bh(&rx_tid->tid_lock);
fail:
if (peer)
dp_peer_unref_delete(peer);
return status;
}
/* dp_check_ba_buffersize() - Check buffer size in request
@@ -2666,7 +2694,9 @@ static void dp_check_ba_buffersize(struct dp_peer *peer,
/*
* dp_addba_requestprocess_wifi3() - Process ADDBA request from peer
*
* @peer: Datapath peer handle
* @soc: Datapath soc handle
* @peer_mac: Datapath peer mac address
* @vdev_id: id of atapath vdev
* @dialogtoken: dialogtoken from ADDBA frame
* @tid: TID number
* @batimeout: BA timeout
@@ -2675,19 +2705,24 @@ static void dp_check_ba_buffersize(struct dp_peer *peer,
*
* Return: 0 on success, error code on failure
*/
int dp_addba_requestprocess_wifi3(void *peer_handle,
int dp_addba_requestprocess_wifi3(struct cdp_soc_t *cdp_soc,
uint8_t *peer_mac,
uint16_t vdev_id,
uint8_t dialogtoken,
uint16_t tid, uint16_t batimeout,
uint16_t buffersize,
uint16_t startseqnum)
{
struct dp_peer *peer = (struct dp_peer *)peer_handle;
QDF_STATUS status = QDF_STATUS_SUCCESS;
struct dp_rx_tid *rx_tid = NULL;
struct dp_peer *peer = dp_peer_find_hash_find((struct dp_soc *)cdp_soc,
peer_mac, 0, vdev_id);
if (!peer || peer->delete_in_progress) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s: Peer is NULL!\n", __func__);
return QDF_STATUS_E_FAILURE;
status = QDF_STATUS_E_FAILURE;
goto fail;
}
rx_tid = &peer->rx_tid[tid];
qdf_spin_lock_bh(&rx_tid->tid_lock);
@@ -2698,13 +2733,14 @@ int dp_addba_requestprocess_wifi3(void *peer_handle,
rx_tid->ba_status = DP_RX_BA_INACTIVE;
peer->active_ba_session_cnt--;
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s: Addba recvd for Rx Tid-%d hw qdesc is already setup",
"%s: Rx Tid- %d hw qdesc is already setup",
__func__, tid);
}
if (rx_tid->ba_status == DP_RX_BA_IN_PROGRESS) {
qdf_spin_unlock_bh(&rx_tid->tid_lock);
return QDF_STATUS_E_FAILURE;
status = QDF_STATUS_E_FAILURE;
goto fail;
}
dp_check_ba_buffersize(peer, tid, buffersize);
@@ -2712,7 +2748,8 @@ int dp_addba_requestprocess_wifi3(void *peer_handle,
rx_tid->ba_win_size, startseqnum)) {
rx_tid->ba_status = DP_RX_BA_INACTIVE;
qdf_spin_unlock_bh(&rx_tid->tid_lock);
return QDF_STATUS_E_FAILURE;
status = QDF_STATUS_E_FAILURE;
goto fail;
}
rx_tid->ba_status = DP_RX_BA_IN_PROGRESS;
@@ -2726,46 +2763,80 @@ int dp_addba_requestprocess_wifi3(void *peer_handle,
qdf_spin_unlock_bh(&rx_tid->tid_lock);
return QDF_STATUS_SUCCESS;
fail:
if (peer)
dp_peer_unref_delete(peer);
return status;
}
/*
* dp_set_addba_response() Set a user defined ADDBA response status code
*
* @peer: Datapath peer handle
* @soc: Datapath soc handle
* @peer_mac: Datapath peer mac address
* @vdev_id: id of atapath vdev
* @tid: TID number
* @statuscode: response status code to be set
*/
void dp_set_addba_response(void *peer_handle, uint8_t tid,
uint16_t statuscode)
QDF_STATUS
dp_set_addba_response(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
uint16_t vdev_id, uint8_t tid, uint16_t statuscode)
{
struct dp_peer *peer = (struct dp_peer *)peer_handle;
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
struct dp_peer *peer = dp_peer_find_hash_find((struct dp_soc *)cdp_soc,
peer_mac, 0, vdev_id);
struct dp_rx_tid *rx_tid;
QDF_STATUS status = QDF_STATUS_SUCCESS;
if (!peer || peer->delete_in_progress) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s: Peer is NULL!\n", __func__);
status = QDF_STATUS_E_FAILURE;
goto fail;
}
rx_tid = &peer->rx_tid[tid];
qdf_spin_lock_bh(&rx_tid->tid_lock);
rx_tid->userstatuscode = statuscode;
qdf_spin_unlock_bh(&rx_tid->tid_lock);
fail:
if (peer)
dp_peer_unref_delete(peer);
return status;
}
/*
* dp_rx_delba_process_wifi3() Process DELBA from peer
* @peer: Datapath peer handle
* @soc: Datapath soc handle
* @peer_mac: Datapath peer mac address
* @vdev_id: id of atapath vdev
* @tid: TID number
* @reasoncode: Reason code received in DELBA frame
*
* Return: 0 on success, error code on failure
*/
int dp_delba_process_wifi3(void *peer_handle,
int tid, uint16_t reasoncode)
int dp_delba_process_wifi3(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
uint16_t vdev_id, int tid, uint16_t reasoncode)
{
struct dp_peer *peer = (struct dp_peer *)peer_handle;
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
QDF_STATUS status = QDF_STATUS_SUCCESS;
struct dp_rx_tid *rx_tid;
struct dp_peer *peer = dp_peer_find_hash_find((struct dp_soc *)cdp_soc,
peer_mac, 0, vdev_id);
if (!peer || peer->delete_in_progress) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s: Peer is NULL!\n", __func__);
status = QDF_STATUS_E_FAILURE;
goto fail;
}
rx_tid = &peer->rx_tid[tid];
qdf_spin_lock_bh(&rx_tid->tid_lock);
if (rx_tid->ba_status == DP_RX_BA_INACTIVE ||
rx_tid->ba_status == DP_RX_BA_IN_PROGRESS) {
qdf_spin_unlock_bh(&rx_tid->tid_lock);
return QDF_STATUS_E_FAILURE;
status = QDF_STATUS_E_FAILURE;
goto fail;
}
/* TODO: See if we can delete the existing REO queue descriptor and
* replace with a new one without queue extenstion descript to save
@@ -2778,28 +2849,38 @@ int dp_delba_process_wifi3(void *peer_handle,
rx_tid->ba_status = DP_RX_BA_INACTIVE;
peer->active_ba_session_cnt--;
qdf_spin_unlock_bh(&rx_tid->tid_lock);
return 0;
fail:
if (peer)
dp_peer_unref_delete(peer);
return status;
}
/*
* dp_rx_delba_tx_completion_wifi3() Send Delba Request
*
* @peer: Datapath peer handle
* @soc: Datapath soc handle
* @peer_mac: Datapath peer mac address
* @vdev_id: id of atapath vdev
* @tid: TID number
* @status: tx completion status
* Return: 0 on success, error code on failure
*/
int dp_delba_tx_completion_wifi3(void *peer_handle,
int dp_delba_tx_completion_wifi3(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
uint16_t vdev_id,
uint8_t tid, int status)
{
struct dp_peer *peer = (struct dp_peer *)peer_handle;
QDF_STATUS ret = QDF_STATUS_SUCCESS;
struct dp_rx_tid *rx_tid = NULL;
struct dp_peer *peer = dp_peer_find_hash_find((struct dp_soc *)cdp_soc,
peer_mac, 0, vdev_id);
if (!peer || peer->delete_in_progress) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s: Peer is NULL!", __func__);
return QDF_STATUS_E_FAILURE;
ret = QDF_STATUS_E_FAILURE;
goto end;
}
rx_tid = &peer->rx_tid[tid];
qdf_spin_lock_bh(&rx_tid->tid_lock);
@@ -2820,7 +2901,7 @@ int dp_delba_tx_completion_wifi3(void *peer_handle,
peer->mac_addr.raw, tid,
rx_tid->delba_rcode);
}
return QDF_STATUS_SUCCESS;
goto end;
} else {
rx_tid->delba_tx_success_cnt++;
rx_tid->delba_tx_retry = 0;
@@ -2837,12 +2918,18 @@ int dp_delba_tx_completion_wifi3(void *peer_handle,
}
qdf_spin_unlock_bh(&rx_tid->tid_lock);
return QDF_STATUS_SUCCESS;
end:
if (peer)
dp_peer_unref_delete(peer);
return ret;
}
/**
* dp_set_pn_check_wifi3() - enable PN check in REO for security
* @peer: Datapath peer handle
* @soc: Datapath soc handle
* @peer_mac: Datapath peer mac address
* @vdev_id: id of atapath vdev
* @vdev: Datapath vdev
* @pdev - data path device instance
* @sec_type - security type
@@ -2850,24 +2937,30 @@ int dp_delba_tx_completion_wifi3(void *peer_handle,
*
*/
void
dp_set_pn_check_wifi3(struct cdp_vdev *vdev_handle, struct cdp_peer *peer_handle, enum cdp_sec_type sec_type, uint32_t *rx_pn)
QDF_STATUS
dp_set_pn_check_wifi3(struct cdp_soc_t *soc, uint8_t vdev_id,
uint8_t *peer_mac, enum cdp_sec_type sec_type,
uint32_t *rx_pn)
{
struct dp_peer *peer = (struct dp_peer *)peer_handle;
struct dp_vdev *vdev = (struct dp_vdev *)vdev_handle;
struct dp_pdev *pdev;
struct dp_soc *soc;
int i;
uint8_t pn_size;
struct hal_reo_cmd_params params;
QDF_STATUS status = QDF_STATUS_SUCCESS;
struct dp_peer *peer = dp_peer_find_hash_find((struct dp_soc *)soc,
peer_mac, 0, vdev_id);
struct dp_vdev *vdev =
dp_get_vdev_from_soc_vdev_id_wifi3((struct dp_soc *)soc,
vdev_id);
/* preconditions */
qdf_assert(vdev);
if (!vdev || !peer || peer->delete_in_progress) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"%s: Peer is NULL!\n", __func__);
status = QDF_STATUS_E_FAILURE;
goto fail;
}
pdev = vdev->pdev;
soc = pdev->soc;
qdf_mem_zero(&params, sizeof(params));
params.std.need_status = 1;
@@ -2931,7 +3024,8 @@ dp_set_pn_check_wifi3(struct cdp_vdev *vdev_handle, struct cdp_peer *peer_handle
params.u.upd_queue_params.pn_127_96 = rx_pn[3];
}
rx_tid->pn_size = pn_size;
dp_reo_send_cmd(soc, CMD_UPDATE_RX_REO_QUEUE, &params,
dp_reo_send_cmd((struct dp_soc *)soc,
CMD_UPDATE_RX_REO_QUEUE, &params,
dp_rx_tid_update_cb, rx_tid);
} else {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO_HIGH,
@@ -2939,6 +3033,11 @@ dp_set_pn_check_wifi3(struct cdp_vdev *vdev_handle, struct cdp_peer *peer_handle
}
qdf_spin_unlock_bh(&rx_tid->tid_lock);
}
fail:
if (peer)
dp_peer_unref_delete(peer);
return status;
}

파일 보기

@@ -193,14 +193,15 @@ void dp_peer_set_vlan_id(struct cdp_soc_t *cdp_soc,
/**
* dp_set_vlan_groupkey: set vlan map for vdev
* @vdev_handle: pointer to vdev
* @vlan_id: vlan_id
* @cdp_soc: soc handle
* @vdev_id: vdev_id
* @vlan_id: vlan_id of peer
* @group_key: group key for vlan
*
* return: set success/failure
*/
static inline
QDF_STATUS dp_set_vlan_groupkey(struct cdp_vdev *vdev_handle,
QDF_STATUS dp_set_vlan_groupkey(struct cdp_soc_t *soc, uint8_t vdev_id,
uint16_t vlan_id, uint16_t group_key)
{
return QDF_STATUS_SUCCESS;
@@ -231,7 +232,7 @@ void dp_peer_multipass_list_remove(struct dp_peer *peer)
void dp_peer_set_vlan_id(struct cdp_soc_t *cdp_soc,
struct cdp_vdev *vdev_handle, uint8_t *peer_mac,
uint16_t vlan_id);
QDF_STATUS dp_set_vlan_groupkey(struct cdp_vdev *vdev_handle,
QDF_STATUS dp_set_vlan_groupkey(struct cdp_soc_t *soc, uint8_t vdev_id,
uint16_t vlan_id, uint16_t group_key);
void dp_peer_multipass_list_init(struct dp_vdev *vdev);
void dp_peer_multipass_list_remove(struct dp_peer *peer);

파일 보기

@@ -466,8 +466,8 @@ dp_rx_intrabss_fwd(struct dp_soc *soc,
}
}
if (!dp_tx_send(dp_vdev_to_cdp_vdev(ta_peer->vdev),
nbuf)) {
if (!dp_tx_send((struct cdp_soc_t *)soc,
ta_peer->vdev->vdev_id, nbuf)) {
DP_STATS_INC_PKT(ta_peer, rx.intra_bss.pkts, 1,
len);
return true;
@@ -501,7 +501,8 @@ dp_rx_intrabss_fwd(struct dp_soc *soc,
/* Set cb->ftype to intrabss FWD */
qdf_nbuf_set_tx_ftype(nbuf_copy, CB_FTYPE_INTRABSS_FWD);
if (dp_tx_send(dp_vdev_to_cdp_vdev(ta_peer->vdev), nbuf_copy)) {
if (dp_tx_send((struct cdp_soc_t *)soc,
ta_peer->vdev->vdev_id, nbuf_copy)) {
DP_STATS_INC_PKT(ta_peer, rx.intra_bss.fail, 1, len);
tid_stats->fail_cnt[INTRABSS_DROP]++;
qdf_nbuf_free(nbuf_copy);

파일 보기

@@ -2158,7 +2158,8 @@ fail:
/**
* dp_tx_send_mesh() - Transmit mesh frame on a given VAP
* @vap_dev: DP vdev handle
* @soc: DP soc handle
* @vdev_id: DP vdev handle
* @nbuf: skb
*
* Entry point for Core Tx layer (DP_TX) invoked from
@@ -2168,12 +2169,13 @@ fail:
* nbuf when it fails to send
*/
#ifdef MESH_MODE_SUPPORT
qdf_nbuf_t dp_tx_send_mesh(struct cdp_vdev *vap_dev, qdf_nbuf_t nbuf)
qdf_nbuf_t dp_tx_send_mesh(struct cdp_soc_t *soc, uint8_t vdev_id,
qdf_nbuf_t nbuf)
{
struct meta_hdr_s *mhdr;
qdf_nbuf_t nbuf_mesh = NULL;
qdf_nbuf_t nbuf_clone = NULL;
struct dp_vdev *vdev = (struct dp_vdev *) vap_dev;
struct dp_vdev *vdev;
uint8_t no_enc_frame = 0;
nbuf_mesh = qdf_nbuf_unshare(nbuf);
@@ -2182,6 +2184,15 @@ qdf_nbuf_t dp_tx_send_mesh(struct cdp_vdev *vap_dev, qdf_nbuf_t nbuf)
"qdf_nbuf_unshare failed");
return nbuf;
}
vdev = dp_get_vdev_from_soc_vdev_id_wifi3((struct dp_soc *)soc,
vdev_id);
if (!vdev) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
"vdev is NULL for vdev_id %d", vdev_id);
return nbuf;
}
nbuf = nbuf_mesh;
mhdr = (struct meta_hdr_s *)qdf_nbuf_data(nbuf);
@@ -2205,7 +2216,7 @@ qdf_nbuf_t dp_tx_send_mesh(struct cdp_vdev *vap_dev, qdf_nbuf_t nbuf)
}
if (nbuf_clone) {
if (!dp_tx_send(vap_dev, nbuf_clone)) {
if (!dp_tx_send(soc, vdev_id, nbuf_clone)) {
DP_STATS_INC(vdev, tx_i.mesh.exception_fw, 1);
} else {
qdf_nbuf_free(nbuf_clone);
@@ -2217,7 +2228,7 @@ qdf_nbuf_t dp_tx_send_mesh(struct cdp_vdev *vap_dev, qdf_nbuf_t nbuf)
else
qdf_nbuf_set_tx_ftype(nbuf, CB_FTYPE_INVALID);
nbuf = dp_tx_send(vap_dev, nbuf);
nbuf = dp_tx_send(soc, vdev_id, nbuf);
if ((!nbuf) && no_enc_frame) {
DP_STATS_INC(vdev, tx_i.mesh.exception_fw, 1);
}
@@ -2227,16 +2238,18 @@ qdf_nbuf_t dp_tx_send_mesh(struct cdp_vdev *vap_dev, qdf_nbuf_t nbuf)
#else
qdf_nbuf_t dp_tx_send_mesh(struct cdp_vdev *vap_dev, qdf_nbuf_t nbuf)
qdf_nbuf_t dp_tx_send_mesh(struct cdp_soc_t *soc, uint8_t vdev_id,
qdf_nbuf_t nbuf)
{
return dp_tx_send(vap_dev, nbuf);
return dp_tx_send(soc, vdev_id, nbuf);
}
#endif
/**
* dp_tx_send() - Transmit a frame on a given VAP
* @vap_dev: DP vdev handle
* @soc: DP soc handle
* @vdev_id: id of DP vdev handle
* @nbuf: skb
*
* Entry point for Core Tx layer (DP_TX) invoked from
@@ -2246,14 +2259,19 @@ qdf_nbuf_t dp_tx_send_mesh(struct cdp_vdev *vap_dev, qdf_nbuf_t nbuf)
* Return: NULL on success,
* nbuf when it fails to send
*/
qdf_nbuf_t dp_tx_send(struct cdp_vdev *vap_dev, qdf_nbuf_t nbuf)
qdf_nbuf_t dp_tx_send(struct cdp_soc_t *soc, uint8_t vdev_id, qdf_nbuf_t nbuf)
{
qdf_ether_header_t *eh = NULL;
struct dp_tx_msdu_info_s msdu_info;
struct dp_tx_seg_info_s seg_info;
struct dp_vdev *vdev = (struct dp_vdev *) vap_dev;
uint16_t peer_id = HTT_INVALID_PEER;
qdf_nbuf_t nbuf_mesh = NULL;
struct dp_vdev *vdev =
dp_get_vdev_from_soc_vdev_id_wifi3((struct dp_soc *)soc,
vdev_id);
if (qdf_unlikely(!vdev))
return nbuf;
qdf_mem_zero(&msdu_info, sizeof(msdu_info));
qdf_mem_zero(&seg_info, sizeof(seg_info));
@@ -3691,7 +3709,7 @@ qdf_nbuf_t dp_tx_non_std(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
if (tx_spec & OL_TX_SPEC_NO_FREE)
vdev->is_tdls_frame = true;
return dp_tx_send(dp_vdev_to_cdp_vdev(vdev), msdu_list);
return dp_tx_send(soc_hdl, vdev_id, msdu_list);
}
#endif
@@ -4099,7 +4117,7 @@ QDF_STATUS dp_tso_detach_wifi3(void *txrx_soc)
}
#endif
QDF_STATUS dp_tso_soc_detach(void *txrx_soc)
QDF_STATUS dp_tso_soc_detach(struct cdp_soc_t *txrx_soc)
{
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
uint8_t i;
@@ -4133,7 +4151,7 @@ QDF_STATUS dp_tso_soc_detach(void *txrx_soc)
* Return: QDF_STATUS_E_FAILURE on failure or
* QDF_STATUS_SUCCESS on success
*/
QDF_STATUS dp_tso_soc_attach(void *txrx_soc)
QDF_STATUS dp_tso_soc_attach(struct cdp_soc_t *txrx_soc)
{
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
uint8_t i;

파일 보기

@@ -169,7 +169,7 @@ QDF_STATUS dp_tx_soc_detach(struct dp_soc *soc);
* Return: QDF_STATUS_E_FAILURE on failure or
* QDF_STATUS_SUCCESS on success
*/
QDF_STATUS dp_tso_soc_attach(void *txrx_soc);
QDF_STATUS dp_tso_soc_attach(struct cdp_soc_t *txrx_soc);
/**
* dp_tso_detach() - TSO Detach handler
@@ -180,15 +180,16 @@ QDF_STATUS dp_tso_soc_attach(void *txrx_soc);
* Return: QDF_STATUS_E_FAILURE on failure or
* QDF_STATUS_SUCCESS on success
*/
QDF_STATUS dp_tso_soc_detach(void *txrx_soc);
QDF_STATUS dp_tso_soc_detach(struct cdp_soc_t *txrx_soc);
QDF_STATUS dp_tx_pdev_detach(struct dp_pdev *pdev);
QDF_STATUS dp_tx_pdev_attach(struct dp_pdev *pdev);
qdf_nbuf_t dp_tx_send(struct cdp_vdev *data_vdev, qdf_nbuf_t nbuf);
qdf_nbuf_t dp_tx_send(struct cdp_soc_t *soc, uint8_t vdev_id, qdf_nbuf_t nbuf);
qdf_nbuf_t dp_tx_send_exception(struct cdp_vdev *data_vdev, qdf_nbuf_t nbuf,
struct cdp_tx_exception_metadata *tx_exc);
qdf_nbuf_t dp_tx_send_mesh(struct cdp_vdev *data_vdev, qdf_nbuf_t nbuf);
qdf_nbuf_t dp_tx_send_mesh(struct cdp_soc_t *soc, uint8_t vdev_id,
qdf_nbuf_t nbuf);
qdf_nbuf_t
dp_tx_send_msdu_single(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
struct dp_tx_msdu_info_s *msdu_info, uint16_t peer_id,