qca-wifi: umac-dp decoupling changes in ctrl_ops for datapath
Modify datapath APIs to make sure they do not need to receive dp handles from umac interface. Change-Id: I0979795a6356a29394daa2719dfbd36cdde3d0e2
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -84,7 +84,6 @@ struct wlan_peer_rate_stats_ctx {
|
|||||||
struct wlan_peer_rx_rate_stats rx;
|
struct wlan_peer_rx_rate_stats rx;
|
||||||
uint8_t mac_addr[WLAN_MAC_ADDR_LEN];
|
uint8_t mac_addr[WLAN_MAC_ADDR_LEN];
|
||||||
uint64_t peer_cookie;
|
uint64_t peer_cookie;
|
||||||
struct cdp_pdev *pdev;
|
|
||||||
uint8_t pdev_id;
|
uint8_t pdev_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -597,9 +597,8 @@ dp_rx_mon_enh_capture_process(struct dp_pdev *pdev, uint32_t tlv_status,
|
|||||||
* Return: 0 for success. nonzero for failure.
|
* Return: 0 for success. nonzero for failure.
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, uint32_t val)
|
dp_config_enh_rx_capture(struct dp_pdev *pdev, uint32_t val)
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
|
||||||
uint8_t rx_cap_mode = (val & CDP_RX_ENH_CAPTURE_MODE_MASK);
|
uint8_t rx_cap_mode = (val & CDP_RX_ENH_CAPTURE_MODE_MASK);
|
||||||
uint32_t rx_enh_capture_peer;
|
uint32_t rx_enh_capture_peer;
|
||||||
bool is_mpdu_hdr = false;
|
bool is_mpdu_hdr = false;
|
||||||
@@ -625,7 +624,7 @@ dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, uint32_t val)
|
|||||||
pdev->rx_enh_monitor_vdev = pdev->monitor_vdev;
|
pdev->rx_enh_monitor_vdev = pdev->monitor_vdev;
|
||||||
}
|
}
|
||||||
|
|
||||||
dp_reset_monitor_mode(pdev_handle);
|
dp_reset_monitor_mode((struct cdp_soc_t *)pdev->soc, pdev->pdev_id);
|
||||||
|
|
||||||
if (pdev->rx_enh_capture_mode != CDP_RX_ENH_CAPTURE_DISABLED &&
|
if (pdev->rx_enh_capture_mode != CDP_RX_ENH_CAPTURE_DISABLED &&
|
||||||
rx_cap_mode == CDP_RX_ENH_CAPTURE_DISABLED) {
|
rx_cap_mode == CDP_RX_ENH_CAPTURE_DISABLED) {
|
||||||
@@ -647,10 +646,8 @@ dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, uint32_t val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
dp_peer_set_rx_capture_enabled(struct cdp_peer *peer_handle, bool value)
|
dp_peer_set_rx_capture_enabled(struct dp_peer *peer, bool value)
|
||||||
{
|
{
|
||||||
struct dp_peer *peer = (struct dp_peer *)peer_handle;
|
|
||||||
|
|
||||||
peer->rx_cap_enabled = value;
|
peer->rx_cap_enabled = value;
|
||||||
}
|
}
|
||||||
#endif /* WLAN_RX_PKT_CAPTURE_ENH */
|
#endif /* WLAN_RX_PKT_CAPTURE_ENH */
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -66,13 +66,13 @@ dp_rx_mon_enh_capture_process(struct dp_pdev *pdev, uint32_t tlv_status,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* dp_config_enh_rx_capture()- API to enable/disable enhanced rx capture
|
* dp_config_enh_rx_capture()- API to enable/disable enhanced rx capture
|
||||||
* @pdev_handle: DP_PDEV handle
|
* @pdev: DP_PDEV handle
|
||||||
* @val: user provided value
|
* @val: user provided value
|
||||||
*
|
*
|
||||||
* Return: 0 for success. nonzero for failure.
|
* Return: 0 for success. nonzero for failure.
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, uint8_t val);
|
dp_config_enh_rx_capture(struct dp_pdev *pdev, uint8_t val);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_peer_set_rx_capture_enabled: Set rx_cap_enabled bit in peer
|
* dp_peer_set_rx_capture_enabled: Set rx_cap_enabled bit in peer
|
||||||
@@ -82,6 +82,6 @@ dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, uint8_t val);
|
|||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
dp_peer_set_rx_capture_enabled(struct cdp_peer *peer_handle, bool value);
|
dp_peer_set_rx_capture_enabled(struct dp_peer *peer, bool value);
|
||||||
#endif /* WLAN_RX_PKT_CAPTURE_ENH */
|
#endif /* WLAN_RX_PKT_CAPTURE_ENH */
|
||||||
#endif /* _DP_RX_MON_FEATURE_H_ */
|
#endif /* _DP_RX_MON_FEATURE_H_ */
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -321,15 +321,14 @@ void dp_rx_mon_update_protocol_flow_tag(struct dp_soc *soc,
|
|||||||
/**
|
/**
|
||||||
* dp_summarize_tag_stats - sums up the given protocol type's counters
|
* dp_summarize_tag_stats - sums up the given protocol type's counters
|
||||||
* across all the rings and dumps the same
|
* across all the rings and dumps the same
|
||||||
* @pdev_handle: cdp_pdev handle
|
* @pdev: dp_pdev handle
|
||||||
* @protocol_type: protocol type for which stats should be displayed
|
* @protocol_type: protocol type for which stats should be displayed
|
||||||
*
|
*
|
||||||
* Return: none
|
* Return: none
|
||||||
*/
|
*/
|
||||||
uint64_t dp_summarize_tag_stats(struct cdp_pdev *pdev_handle,
|
uint64_t dp_summarize_tag_stats(struct dp_pdev *pdev,
|
||||||
uint16_t protocol_type)
|
uint16_t protocol_type)
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
|
||||||
uint8_t ring_idx;
|
uint8_t ring_idx;
|
||||||
uint64_t total_tag_cnt = 0;
|
uint64_t total_tag_cnt = 0;
|
||||||
|
|
||||||
@@ -348,16 +347,23 @@ uint64_t dp_summarize_tag_stats(struct cdp_pdev *pdev_handle,
|
|||||||
/**
|
/**
|
||||||
* dp_dump_pdev_rx_protocol_tag_stats - dump the number of packets tagged for
|
* dp_dump_pdev_rx_protocol_tag_stats - dump the number of packets tagged for
|
||||||
* given protocol type (RX_PROTOCOL_TAG_ALL indicates for all protocol)
|
* given protocol type (RX_PROTOCOL_TAG_ALL indicates for all protocol)
|
||||||
* @pdev_handle: cdp_pdev handle
|
* @soc: cdp_soc handle
|
||||||
|
* @pdev_id: id of cdp_pdev handle
|
||||||
* @protocol_type: protocol type for which stats should be displayed
|
* @protocol_type: protocol type for which stats should be displayed
|
||||||
*
|
*
|
||||||
* Return: none
|
* Return: none
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
dp_dump_pdev_rx_protocol_tag_stats(struct cdp_pdev *pdev_handle,
|
dp_dump_pdev_rx_protocol_tag_stats(struct cdp_soc_t *soc, uint8_t pdev_id,
|
||||||
uint16_t protocol_type)
|
uint16_t protocol_type)
|
||||||
{
|
{
|
||||||
uint16_t proto_idx;
|
uint16_t proto_idx;
|
||||||
|
struct dp_pdev *pdev =
|
||||||
|
dp_get_pdev_from_soc_pdev_id_wifi3((struct dp_soc *)soc,
|
||||||
|
pdev_id);
|
||||||
|
|
||||||
|
if (!pdev)
|
||||||
|
return;
|
||||||
|
|
||||||
if (protocol_type != RX_PROTOCOL_TAG_ALL &&
|
if (protocol_type != RX_PROTOCOL_TAG_ALL &&
|
||||||
protocol_type >= RX_PROTOCOL_TAG_MAX) {
|
protocol_type >= RX_PROTOCOL_TAG_MAX) {
|
||||||
@@ -367,57 +373,76 @@ dp_dump_pdev_rx_protocol_tag_stats(struct cdp_pdev *pdev_handle,
|
|||||||
|
|
||||||
/* protocol_type in [0 ... RX_PROTOCOL_TAG_MAX] */
|
/* protocol_type in [0 ... RX_PROTOCOL_TAG_MAX] */
|
||||||
if (protocol_type != RX_PROTOCOL_TAG_ALL) {
|
if (protocol_type != RX_PROTOCOL_TAG_ALL) {
|
||||||
dp_summarize_tag_stats(pdev_handle, protocol_type);
|
dp_summarize_tag_stats(pdev, protocol_type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* protocol_type == RX_PROTOCOL_TAG_ALL */
|
/* protocol_type == RX_PROTOCOL_TAG_ALL */
|
||||||
for (proto_idx = 0; proto_idx < RX_PROTOCOL_TAG_MAX; proto_idx++)
|
for (proto_idx = 0; proto_idx < RX_PROTOCOL_TAG_MAX; proto_idx++)
|
||||||
dp_summarize_tag_stats(pdev_handle, proto_idx);
|
dp_summarize_tag_stats(pdev, proto_idx);
|
||||||
}
|
}
|
||||||
#endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
|
#endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
|
||||||
|
|
||||||
#ifdef WLAN_SUPPORT_RX_TAG_STATISTICS
|
#ifdef WLAN_SUPPORT_RX_TAG_STATISTICS
|
||||||
/**
|
static void
|
||||||
* dp_reset_pdev_rx_protocol_tag_stats - resets the stats counters for
|
__dp_reset_pdev_rx_protocol_tag_stats(struct dp_pdev *pdev,
|
||||||
* given protocol type
|
|
||||||
* @pdev_handle: cdp_pdev handle
|
|
||||||
* @protocol_type: protocol type for which stats should be reset
|
|
||||||
*
|
|
||||||
* Return: none
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
dp_reset_pdev_rx_protocol_tag_stats(struct cdp_pdev *pdev_handle,
|
|
||||||
uint16_t protocol_type)
|
uint16_t protocol_type)
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
|
||||||
uint8_t ring_idx;
|
uint8_t ring_idx;
|
||||||
|
|
||||||
for (ring_idx = 0; ring_idx < MAX_REO_DEST_RINGS; ring_idx++)
|
for (ring_idx = 0; ring_idx < MAX_REO_DEST_RINGS; ring_idx++)
|
||||||
pdev->reo_proto_tag_stats[ring_idx][protocol_type].tag_ctr = 0;
|
pdev->reo_proto_tag_stats[ring_idx][protocol_type].tag_ctr = 0;
|
||||||
pdev->rx_err_proto_tag_stats[protocol_type].tag_ctr = 0;
|
pdev->rx_err_proto_tag_stats[protocol_type].tag_ctr = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_reset_pdev_rx_protocol_tag_stats - resets the stats counters for
|
||||||
|
* given protocol type
|
||||||
|
* @soc: soc handle
|
||||||
|
* @pdev_id: id of cdp_pdev handle
|
||||||
|
* @protocol_type: protocol type for which stats should be reset
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
dp_reset_pdev_rx_protocol_tag_stats(struct cdp_soc_t *soc, uint8_t pdev_id,
|
||||||
|
uint16_t protocol_type)
|
||||||
|
{
|
||||||
|
struct dp_pdev *pdev =
|
||||||
|
dp_get_pdev_from_soc_pdev_id_wifi3((struct dp_soc *)soc,
|
||||||
|
pdev_id);
|
||||||
|
if (!pdev)
|
||||||
|
return;
|
||||||
|
|
||||||
|
__dp_reset_pdev_rx_protocol_tag_stats(pdev, protocol_type);
|
||||||
|
}
|
||||||
#endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
|
#endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_update_pdev_rx_protocol_tag - Add/remove a protocol tag that should be
|
* dp_update_pdev_rx_protocol_tag - Add/remove a protocol tag that should be
|
||||||
* applied to the desired protocol type packets
|
* applied to the desired protocol type packets
|
||||||
* @txrx_pdev_handle: cdp_pdev handle
|
* @soc: soc handle
|
||||||
|
* @pdev_id: id of cdp_pdev handle
|
||||||
* @enable_rx_protocol_tag - bitmask that indicates what protocol types
|
* @enable_rx_protocol_tag - bitmask that indicates what protocol types
|
||||||
* are enabled for tagging. zero indicates disable feature, non-zero indicates
|
* are enabled for tagging. zero indicates disable feature, non-zero indicates
|
||||||
* enable feature
|
* enable feature
|
||||||
* @protocol_type: new protocol type for which the tag is being added
|
* @protocol_type: new protocol type for which the tag is being added
|
||||||
* @tag: user configured tag for the new protocol
|
* @tag: user configured tag for the new protocol
|
||||||
*
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: Success
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_update_pdev_rx_protocol_tag(struct cdp_pdev *pdev_handle,
|
dp_update_pdev_rx_protocol_tag(struct cdp_soc_t *soc, uint8_t pdev_id,
|
||||||
uint32_t enable_rx_protocol_tag,
|
uint32_t enable_rx_protocol_tag,
|
||||||
uint16_t protocol_type,
|
uint16_t protocol_type,
|
||||||
uint16_t tag)
|
uint16_t tag)
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
struct dp_pdev *pdev =
|
||||||
|
dp_get_pdev_from_soc_pdev_id_wifi3((struct dp_soc *)soc,
|
||||||
|
pdev_id);
|
||||||
|
if (!pdev)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dynamically enable/disable tagging based on enable_rx_protocol_tag
|
* dynamically enable/disable tagging based on enable_rx_protocol_tag
|
||||||
* flag.
|
* flag.
|
||||||
@@ -434,7 +459,7 @@ dp_update_pdev_rx_protocol_tag(struct cdp_pdev *pdev_handle,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Reset stats counter across all rings for given protocol */
|
/** Reset stats counter across all rings for given protocol */
|
||||||
dp_reset_pdev_rx_protocol_tag_stats(pdev_handle, protocol_type);
|
__dp_reset_pdev_rx_protocol_tag_stats(pdev, protocol_type);
|
||||||
|
|
||||||
pdev->rx_proto_tag_map[protocol_type].tag = tag;
|
pdev->rx_proto_tag_map[protocol_type].tag = tag;
|
||||||
|
|
||||||
@@ -445,17 +470,25 @@ dp_update_pdev_rx_protocol_tag(struct cdp_pdev *pdev_handle,
|
|||||||
#ifdef WLAN_SUPPORT_RX_FLOW_TAG
|
#ifdef WLAN_SUPPORT_RX_FLOW_TAG
|
||||||
/**
|
/**
|
||||||
* dp_set_rx_flow_tag - add/delete a flow
|
* dp_set_rx_flow_tag - add/delete a flow
|
||||||
* @pdev_handle: cdp_pdev handle
|
* @soc: soc handle
|
||||||
|
* @pdev_id: id of cdp_pdev handle
|
||||||
* @flow_info: flow tuple that is to be added to/deleted from flow search table
|
* @flow_info: flow tuple that is to be added to/deleted from flow search table
|
||||||
*
|
*
|
||||||
* Return: 0 for success, nonzero for failure
|
* Return: Success
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_set_rx_flow_tag(struct cdp_pdev *pdev_handle,
|
dp_set_rx_flow_tag(struct cdp_soc_t *soc, uint8_t pdev_id,
|
||||||
struct cdp_rx_flow_info *flow_info)
|
struct cdp_rx_flow_info *flow_info)
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
struct dp_pdev *pdev =
|
||||||
struct wlan_cfg_dp_soc_ctxt *cfg = pdev->soc->wlan_cfg_ctx;
|
dp_get_pdev_from_soc_pdev_id_wifi3((struct dp_soc *)soc,
|
||||||
|
pdev_id);
|
||||||
|
struct wlan_cfg_dp_soc_ctxt *cfg;
|
||||||
|
|
||||||
|
if (qdf_unlikely(!pdev))
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
cfg = pdev->soc->wlan_cfg_ctx;
|
||||||
|
|
||||||
if (qdf_unlikely(!wlan_cfg_is_rx_flow_tag_enabled(cfg))) {
|
if (qdf_unlikely(!wlan_cfg_is_rx_flow_tag_enabled(cfg))) {
|
||||||
dp_err("RX Flow tag feature disabled");
|
dp_err("RX Flow tag feature disabled");
|
||||||
@@ -473,20 +506,27 @@ dp_set_rx_flow_tag(struct cdp_pdev *pdev_handle,
|
|||||||
/**
|
/**
|
||||||
* dp_dump_rx_flow_tag_stats - dump the number of packets tagged for
|
* dp_dump_rx_flow_tag_stats - dump the number of packets tagged for
|
||||||
* given flow 5-tuple
|
* given flow 5-tuple
|
||||||
* @pdev_handle: cdp_pdev handle
|
* @cdp_soc: soc handle
|
||||||
|
* @pdev_id: id of cdp_pdev handle
|
||||||
* @flow_info: flow 5-tuple for which stats should be displayed
|
* @flow_info: flow 5-tuple for which stats should be displayed
|
||||||
*
|
*
|
||||||
* Return: 0 for success, nonzero for failure
|
* Return: Success
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_dump_rx_flow_tag_stats(struct cdp_pdev *pdev_handle,
|
dp_dump_rx_flow_tag_stats(struct cdp_soc_t *soc, uint8_t pdev_id,
|
||||||
struct cdp_rx_flow_info *flow_info)
|
struct cdp_rx_flow_info *flow_info)
|
||||||
{
|
{
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
struct cdp_flow_stats stats;
|
struct cdp_flow_stats stats;
|
||||||
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
struct wlan_cfg_dp_soc_ctxt *cfg;
|
||||||
struct wlan_cfg_dp_soc_ctxt *cfg = pdev->soc->wlan_cfg_ctx;
|
struct dp_pdev *pdev =
|
||||||
|
dp_get_pdev_from_soc_pdev_id_wifi3((struct dp_soc *)soc,
|
||||||
|
pdev_id);
|
||||||
|
|
||||||
|
if (!pdev)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
cfg = pdev->soc->wlan_cfg_ctx;
|
||||||
if (qdf_unlikely(!wlan_cfg_is_rx_flow_tag_enabled(cfg))) {
|
if (qdf_unlikely(!wlan_cfg_is_rx_flow_tag_enabled(cfg))) {
|
||||||
dp_err("RX Flow tag feature disabled");
|
dp_err("RX Flow tag feature disabled");
|
||||||
return QDF_STATUS_E_NOSUPPORT;
|
return QDF_STATUS_E_NOSUPPORT;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -26,17 +26,18 @@
|
|||||||
/**
|
/**
|
||||||
* dp_update_pdev_rx_protocol_tag - Add/remove a protocol tag that should be
|
* dp_update_pdev_rx_protocol_tag - Add/remove a protocol tag that should be
|
||||||
* applied to the desired protocol type packets
|
* applied to the desired protocol type packets
|
||||||
* @txrx_pdev_handle: cdp_pdev handle
|
* @soc: soc handle
|
||||||
|
* @pdev_id: id of cdp_pdev handle
|
||||||
* @enable_rx_protocol_tag - bitmask that indicates what protocol types
|
* @enable_rx_protocol_tag - bitmask that indicates what protocol types
|
||||||
* are enabled for tagging. zero indicates disable feature, non-zero indicates
|
* are enabled for tagging. zero indicates disable feature, non-zero indicates
|
||||||
* enable feature
|
* enable feature
|
||||||
* @protocol_type: new protocol type for which the tag is being added
|
* @protocol_type: new protocol type for which the tag is being added
|
||||||
* @tag: user configured tag for the new protocol
|
* @tag: user configured tag for the new protocol
|
||||||
*
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: Success
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_update_pdev_rx_protocol_tag(struct cdp_pdev *pdev_handle,
|
dp_update_pdev_rx_protocol_tag(struct cdp_soc_t *soc, uint8_t pdev_id,
|
||||||
uint32_t enable_rx_protocol_tag,
|
uint32_t enable_rx_protocol_tag,
|
||||||
uint16_t protocol_type,
|
uint16_t protocol_type,
|
||||||
uint16_t tag);
|
uint16_t tag);
|
||||||
@@ -69,7 +70,7 @@ dp_rx_update_protocol_tag(struct dp_soc *soc, struct dp_vdev *vdev,
|
|||||||
* Return: none
|
* Return: none
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
dp_dump_pdev_rx_protocol_tag_stats(struct cdp_pdev *pdev_handle,
|
dp_dump_pdev_rx_protocol_tag_stats(struct cdp_soc_t *soc, uint8_t pdev_id,
|
||||||
uint16_t protocol_type);
|
uint16_t protocol_type);
|
||||||
#endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
|
#endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
|
||||||
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
|
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
|
||||||
@@ -92,25 +93,27 @@ dp_rx_update_flow_tag(struct dp_soc *soc, struct dp_vdev *vdev,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_set_rx_flow_tag - add/delete a flow
|
* dp_set_rx_flow_tag - add/delete a flow
|
||||||
* @pdev_handle: cdp_pdev handle
|
* @soc: soc handle
|
||||||
|
* @pdev_id: id of cdp_pdev handle
|
||||||
* @flow_info: flow tuple that is to be added to/deleted from flow search table
|
* @flow_info: flow tuple that is to be added to/deleted from flow search table
|
||||||
*
|
*
|
||||||
* Return: 0 for success, nonzero for failure
|
* Return: Success
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_set_rx_flow_tag(struct cdp_pdev *pdev_handle,
|
dp_set_rx_flow_tag(struct cdp_soc_t *cdp_soc, uint8_t pdev_id,
|
||||||
struct cdp_rx_flow_info *flow_info);
|
struct cdp_rx_flow_info *flow_info);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_dump_rx_flow_tag_stats - dump the number of packets tagged for
|
* dp_dump_rx_flow_tag_stats - dump the number of packets tagged for
|
||||||
* given flow 5-tuple
|
* given flow 5-tuple
|
||||||
* @pdev_handle: cdp_pdev handle
|
* @cdp_soc: soc handle
|
||||||
|
* @pdev_id: id of cdp_pdev handle
|
||||||
* @flow_info: flow 5-tuple for which stats should be displayed
|
* @flow_info: flow 5-tuple for which stats should be displayed
|
||||||
*
|
*
|
||||||
* Return: 0 for success, nonzero for failure
|
* Return: Success
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_dump_rx_flow_tag_stats(struct cdp_pdev *pdev_handle,
|
dp_dump_rx_flow_tag_stats(struct cdp_soc_t *cdp_soc, uint8_t pdev_id,
|
||||||
struct cdp_rx_flow_info *flow_info);
|
struct cdp_rx_flow_info *flow_info);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -709,9 +709,8 @@ static void dp_iterate_free_peer_msdu_q(void *pdev_hdl)
|
|||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_config_enh_tx_capture(struct cdp_pdev *pdev_handle, uint8_t val)
|
dp_config_enh_tx_capture(struct dp_pdev *pdev, uint8_t val)
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
qdf_spin_lock(&pdev->tx_capture.config_lock);
|
qdf_spin_lock(&pdev->tx_capture.config_lock);
|
||||||
@@ -3200,16 +3199,14 @@ QDF_STATUS dp_send_ack_frame_to_stack(struct dp_soc *soc,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_peer_set_tx_capture_enabled: Set tx_cap_enabled bit in peer
|
* dp_peer_set_tx_capture_enabled: Set tx_cap_enabled bit in peer
|
||||||
* @peer_handle: Peer handle
|
* @peer: Peer handle
|
||||||
* @value: Enable/disable setting for tx_cap_enabled
|
* @value: Enable/disable setting for tx_cap_enabled
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
dp_peer_set_tx_capture_enabled(struct cdp_peer *peer_handle, bool value)
|
dp_peer_set_tx_capture_enabled(struct dp_peer *peer, bool value)
|
||||||
{
|
{
|
||||||
struct dp_peer *peer = (struct dp_peer *)peer_handle;
|
|
||||||
|
|
||||||
peer->tx_cap_enabled = value;
|
peer->tx_cap_enabled = value;
|
||||||
if (!value)
|
if (!value)
|
||||||
dp_peer_tx_cap_tid_queue_flush(peer);
|
dp_peer_tx_cap_tid_queue_flush(peer);
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -179,7 +179,7 @@ QDF_STATUS dp_tx_add_to_comp_queue(struct dp_soc *soc,
|
|||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_config_enh_tx_capture(struct cdp_pdev *pdev_handle, uint8_t val);
|
dp_config_enh_tx_capture(struct dp_pdev *pdev_handle, uint8_t val);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dp_deliver_mgmt_frm: Process
|
* dp_deliver_mgmt_frm: Process
|
||||||
@@ -258,12 +258,12 @@ QDF_STATUS dp_send_ack_frame_to_stack(struct dp_soc *soc,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_peer_set_tx_capture_enabled: Set tx_cap_enabled bit in peer
|
* dp_peer_set_tx_capture_enabled: Set tx_cap_enabled bit in peer
|
||||||
* @peer_handle: Peer handle
|
* @peer: Peer handle
|
||||||
* @value: Enable/disable setting for tx_cap_enabled
|
* @value: Enable/disable setting for tx_cap_enabled
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
dp_peer_set_tx_capture_enabled(struct cdp_peer *peer_handle, bool value);
|
dp_peer_set_tx_capture_enabled(struct dp_peer *peer, bool value);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include "hal_hw_headers.h"
|
#include "hal_hw_headers.h"
|
||||||
#include "dp_types.h"
|
#include "dp_types.h"
|
||||||
|
#include "dp_peer.h"
|
||||||
#include "qdf_nbuf.h"
|
#include "qdf_nbuf.h"
|
||||||
#include "qdf_atomic.h"
|
#include "qdf_atomic.h"
|
||||||
#include "qdf_types.h"
|
#include "qdf_types.h"
|
||||||
@@ -96,14 +97,19 @@ dp_tx_me_init(struct dp_pdev *pdev)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_tx_me_alloc_descriptor():Allocate ME descriptor
|
* dp_tx_me_alloc_descriptor():Allocate ME descriptor
|
||||||
* @pdev_handle: DP PDEV handle
|
* @soc: DP SOC handle
|
||||||
|
* @pdev_id: id of DP PDEV handle
|
||||||
*
|
*
|
||||||
* Return:void
|
* Return:void
|
||||||
*/
|
*/
|
||||||
void
|
void dp_tx_me_alloc_descriptor(struct cdp_soc_t *soc, uint8_t pdev_id)
|
||||||
dp_tx_me_alloc_descriptor(struct cdp_pdev *pdev_handle)
|
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
struct dp_pdev *pdev =
|
||||||
|
dp_get_pdev_from_soc_pdev_id_wifi3((struct dp_soc *)soc,
|
||||||
|
pdev_id);
|
||||||
|
|
||||||
|
if (!pdev)
|
||||||
|
return;
|
||||||
|
|
||||||
if (qdf_atomic_read(&pdev->mc_num_vap_attached) == 0) {
|
if (qdf_atomic_read(&pdev->mc_num_vap_attached) == 0) {
|
||||||
dp_tx_me_init(pdev);
|
dp_tx_me_init(pdev);
|
||||||
@@ -162,14 +168,20 @@ dp_tx_me_exit(struct dp_pdev *pdev)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_tx_me_free_descriptor():free ME descriptor
|
* dp_tx_me_free_descriptor():free ME descriptor
|
||||||
* @pdev_handle:DP_PDEV handle
|
* @soc: DP SOC handle
|
||||||
|
* @pdev_id: id of DP PDEV handle
|
||||||
*
|
*
|
||||||
* Return:void
|
* Return:void
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
dp_tx_me_free_descriptor(struct cdp_pdev *pdev_handle)
|
dp_tx_me_free_descriptor(struct cdp_soc_t *soc, uint8_t pdev_id)
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
struct dp_pdev *pdev =
|
||||||
|
dp_get_pdev_from_soc_pdev_id_wifi3((struct dp_soc *)soc,
|
||||||
|
pdev_id);
|
||||||
|
|
||||||
|
if (!pdev)
|
||||||
|
return;
|
||||||
|
|
||||||
if (atomic_read(&pdev->mc_num_vap_attached)) {
|
if (atomic_read(&pdev->mc_num_vap_attached)) {
|
||||||
if (qdf_atomic_dec_and_test(&pdev->mc_num_vap_attached)) {
|
if (qdf_atomic_dec_and_test(&pdev->mc_num_vap_attached)) {
|
||||||
@@ -241,12 +253,11 @@ static void dp_tx_me_mem_free(struct dp_pdev *pdev,
|
|||||||
* return: no of converted packets
|
* return: no of converted packets
|
||||||
*/
|
*/
|
||||||
uint16_t
|
uint16_t
|
||||||
dp_tx_me_send_convert_ucast(ol_txrx_soc_handle soc, uint8_t vdev_id,
|
dp_tx_me_send_convert_ucast(struct cdp_soc_t *soc, uint8_t vdev_id,
|
||||||
qdf_nbuf_t nbuf,
|
qdf_nbuf_t nbuf,
|
||||||
uint8_t newmac[][QDF_MAC_ADDR_SIZE],
|
uint8_t newmac[][QDF_MAC_ADDR_SIZE],
|
||||||
uint8_t new_mac_cnt)
|
uint8_t new_mac_cnt)
|
||||||
{
|
{
|
||||||
struct dp_vdev *vdev;
|
|
||||||
struct dp_pdev *pdev;
|
struct dp_pdev *pdev;
|
||||||
qdf_ether_header_t *eh;
|
qdf_ether_header_t *eh;
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
@@ -269,6 +280,21 @@ dp_tx_me_send_convert_ucast(ol_txrx_soc_handle soc, uint8_t vdev_id,
|
|||||||
qdf_dma_addr_t paddr_mcbuf = 0;
|
qdf_dma_addr_t paddr_mcbuf = 0;
|
||||||
uint8_t empty_entry_mac[QDF_MAC_ADDR_SIZE] = {0};
|
uint8_t empty_entry_mac[QDF_MAC_ADDR_SIZE] = {0};
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
|
struct dp_vdev *vdev =
|
||||||
|
dp_get_vdev_from_soc_vdev_id_wifi3((struct dp_soc *)soc,
|
||||||
|
vdev_id);
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
qdf_nbuf_free(nbuf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
pdev = vdev->pdev;
|
||||||
|
|
||||||
|
if (!pdev) {
|
||||||
|
qdf_nbuf_free(nbuf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
vdev = dp_get_vdev_from_soc_vdev_id_wifi3((struct dp_soc *)soc,
|
vdev = dp_get_vdev_from_soc_vdev_id_wifi3((struct dp_soc *)soc,
|
||||||
vdev_id);
|
vdev_id);
|
||||||
|
@@ -17,13 +17,13 @@
|
|||||||
*/
|
*/
|
||||||
#ifndef _DP_TXRX_ME_H_
|
#ifndef _DP_TXRX_ME_H_
|
||||||
#define _DP_TXRX_ME_H_
|
#define _DP_TXRX_ME_H_
|
||||||
uint16_t dp_tx_me_send_convert_ucast(ol_txrx_soc_handle soc, uint8_t vdev_id,
|
uint16_t
|
||||||
|
dp_tx_me_send_convert_ucast(struct cdp_soc_t *soc, uint8_t vdev_id,
|
||||||
qdf_nbuf_t nbuf,
|
qdf_nbuf_t nbuf,
|
||||||
uint8_t newmac[][QDF_MAC_ADDR_SIZE],
|
uint8_t newmac[][QDF_MAC_ADDR_SIZE],
|
||||||
uint8_t new_mac_cnt);
|
uint8_t new_mac_cnt);
|
||||||
void dp_tx_me_alloc_descriptor(struct cdp_pdev *pdev);
|
void dp_tx_me_alloc_descriptor(struct cdp_soc_t *soc, uint8_t pdev_id);
|
||||||
|
void dp_tx_me_free_descriptor(struct cdp_soc_t *soc, uint8_t pdev_id);
|
||||||
void dp_tx_me_free_descriptor(struct cdp_pdev *pdev);
|
|
||||||
void dp_tx_me_exit(struct dp_pdev *pdev);
|
void dp_tx_me_exit(struct dp_pdev *pdev);
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_tx_prepare_send_me(struct dp_vdev *vdev, qdf_nbuf_t nbuf);
|
dp_tx_prepare_send_me(struct dp_vdev *vdev, qdf_nbuf_t nbuf);
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -662,28 +662,20 @@ void dp_peer_multipass_list_remove(struct dp_peer *peer)
|
|||||||
/**
|
/**
|
||||||
* dp_peer_multipass_list_add: add to new multipass list
|
* dp_peer_multipass_list_add: add to new multipass list
|
||||||
* @dp_soc: soc handle
|
* @dp_soc: soc handle
|
||||||
* @dp_vdev: vdev handle
|
* @peer: peer handle
|
||||||
* @peer_mac: mac address
|
|
||||||
*
|
*
|
||||||
* return: void
|
* return: void
|
||||||
*/
|
*/
|
||||||
static void dp_peer_multipass_list_add(struct dp_soc *soc, struct dp_vdev *vdev,
|
static void dp_peer_multipass_list_add(struct dp_soc *soc, struct dp_peer *peer)
|
||||||
uint8_t *peer_mac)
|
|
||||||
{
|
{
|
||||||
struct dp_peer *peer = dp_peer_find_hash_find(soc, peer_mac, 0,
|
|
||||||
vdev->vdev_id);
|
|
||||||
|
|
||||||
if (!peer) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ref_cnt is incremented inside dp_peer_find_hash_find().
|
* Ref_cnt is incremented inside dp_peer_find_hash_find().
|
||||||
* Decrement it when element is deleted from the list.
|
* Decrement it when element is deleted from the list.
|
||||||
*/
|
*/
|
||||||
qdf_spin_lock_bh(&vdev->mpass_peer_mutex);
|
qdf_spin_lock_bh(&peer->vdev->mpass_peer_mutex);
|
||||||
TAILQ_INSERT_HEAD(&vdev->mpass_peer_list, peer, mpass_peer_list_elem);
|
TAILQ_INSERT_HEAD(&peer->vdev->mpass_peer_list, peer,
|
||||||
qdf_spin_unlock_bh(&vdev->mpass_peer_mutex);
|
mpass_peer_list_elem);
|
||||||
|
qdf_spin_unlock_bh(&peer->vdev->mpass_peer_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -695,14 +687,16 @@ static void dp_peer_multipass_list_add(struct dp_soc *soc, struct dp_vdev *vdev,
|
|||||||
* return: void
|
* return: void
|
||||||
*/
|
*/
|
||||||
void dp_peer_set_vlan_id(struct cdp_soc_t *cdp_soc,
|
void dp_peer_set_vlan_id(struct cdp_soc_t *cdp_soc,
|
||||||
struct cdp_vdev *vdev_handle, uint8_t *peer_mac,
|
uint8_t vdev_id, uint8_t *peer_mac,
|
||||||
uint16_t vlan_id)
|
uint16_t vlan_id)
|
||||||
{
|
{
|
||||||
struct dp_soc *soc = (struct dp_soc *)cdp_soc;
|
struct dp_soc *soc = (struct dp_soc *)cdp_soc;
|
||||||
struct dp_vdev *vdev = (struct dp_vdev *)vdev_handle;
|
|
||||||
struct dp_peer *peer = NULL;
|
struct dp_peer *peer = NULL;
|
||||||
|
struct dp_vdev *vdev =
|
||||||
|
dp_get_vdev_from_soc_vdev_id_wifi3((struct dp_soc *)soc,
|
||||||
|
vdev_id);
|
||||||
|
|
||||||
if (!vdev->multipass_en)
|
if (!vdev || !vdev->multipass_en)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
peer = dp_peer_find_hash_find(soc, peer_mac, 0, vdev->vdev_id);
|
peer = dp_peer_find_hash_find(soc, peer_mac, 0, vdev->vdev_id);
|
||||||
@@ -714,11 +708,12 @@ void dp_peer_set_vlan_id(struct cdp_soc_t *cdp_soc,
|
|||||||
|
|
||||||
peer->vlan_id = vlan_id;
|
peer->vlan_id = vlan_id;
|
||||||
|
|
||||||
|
dp_peer_multipass_list_add(soc, peer);
|
||||||
|
|
||||||
/* Ref_cnt is incremented inside dp_peer_find_hash_find().
|
/* Ref_cnt is incremented inside dp_peer_find_hash_find().
|
||||||
* Decrement it here.
|
* Decrement it here.
|
||||||
*/
|
*/
|
||||||
dp_peer_unref_delete(peer);
|
dp_peer_unref_delete(peer);
|
||||||
dp_peer_multipass_list_add(soc, vdev, peer_mac);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user