Merge c6727cbd55
on remote branch
Change-Id: I39aab1046f06748a70979cca24cef8b8f764515c
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -2555,25 +2555,25 @@ struct cdp_pdev_obss_pd_stats_tlv {
|
||||
|
||||
struct cdp_htt_tx_pdev_stats_urrn_tlv_v {
|
||||
struct cdp_htt_tlv_hdr tlv_hdr;
|
||||
uint32_t urrn_stats[1]; /* HTT_TX_PDEV_MAX_URRN_STATS */
|
||||
QDF_FLEX_ARRAY(uint32_t, urrn_stats); /* HTT_TX_PDEV_MAX_URRN_STATS */
|
||||
};
|
||||
|
||||
/* NOTE: Variable length TLV, use length spec to infer array size */
|
||||
struct cdp_htt_tx_pdev_stats_flush_tlv_v {
|
||||
struct cdp_htt_tlv_hdr tlv_hdr;
|
||||
uint32_t flush_errs[1]; /* HTT_TX_PDEV_MAX_FLUSH_REASON_STATS */
|
||||
QDF_FLEX_ARRAY(uint32_t, flush_errs); /* HTT_TX_PDEV_MAX_FLUSH_REASON_STATS */
|
||||
};
|
||||
|
||||
/* NOTE: Variable length TLV, use length spec to infer array size */
|
||||
struct cdp_htt_tx_pdev_stats_sifs_tlv_v {
|
||||
struct cdp_htt_tlv_hdr tlv_hdr;
|
||||
uint32_t sifs_status[1]; /* HTT_TX_PDEV_MAX_SIFS_BURST_STATS */
|
||||
QDF_FLEX_ARRAY(uint32_t, sifs_status); /* HTT_TX_PDEV_MAX_SIFS_BURST_STATS */
|
||||
};
|
||||
|
||||
/* NOTE: Variable length TLV, use length spec to infer array size */
|
||||
struct cdp_htt_tx_pdev_stats_phy_err_tlv_v {
|
||||
struct cdp_htt_tlv_hdr tlv_hdr;
|
||||
uint32_t phy_errs[1]; /* HTT_TX_PDEV_MAX_PHY_ERR_STATS */
|
||||
QDF_FLEX_ARRAY(uint32_t, phy_errs); /* HTT_TX_PDEV_MAX_PHY_ERR_STATS */
|
||||
};
|
||||
|
||||
/* == RX PDEV/SOC STATS == */
|
||||
@@ -2595,19 +2595,19 @@ struct cdp_htt_rx_soc_fw_stats_tlv {
|
||||
struct cdp_htt_rx_soc_fw_refill_ring_num_refill_tlv_v {
|
||||
struct cdp_htt_tlv_hdr tlv_hdr;
|
||||
/* Num total buf refilled from refill ring */
|
||||
uint32_t refill_ring_num_refill[1]; /* HTT_RX_STATS_REFILL_MAX_RING */
|
||||
QDF_FLEX_ARRAY(uint32_t, refill_ring_num_refill); /* HTT_RX_STATS_REFILL_MAX_RING */
|
||||
};
|
||||
|
||||
struct cdp_htt_rx_pdev_fw_ring_mpdu_err_tlv_v {
|
||||
struct cdp_htt_tlv_hdr tlv_hdr;
|
||||
/* Num error MPDU for each RxDMA error type */
|
||||
uint32_t fw_ring_mpdu_err[1]; /* HTT_RX_STATS_RXDMA_MAX_ERR */
|
||||
QDF_FLEX_ARRAY(uint32_t, fw_ring_mpdu_err); /* HTT_RX_STATS_RXDMA_MAX_ERR */
|
||||
};
|
||||
|
||||
struct cdp_htt_rx_pdev_fw_mpdu_drop_tlv_v {
|
||||
struct cdp_htt_tlv_hdr tlv_hdr;
|
||||
/* Num MPDU dropped */
|
||||
uint32_t fw_mpdu_drop[1]; /* HTT_RX_STATS_FW_DROP_REASON_MAX */
|
||||
QDF_FLEX_ARRAY(uint32_t, fw_mpdu_drop); /* HTT_RX_STATS_FW_DROP_REASON_MAX */
|
||||
};
|
||||
|
||||
#define HTT_STATS_PHY_ERR_MAX 43
|
||||
@@ -2675,7 +2675,7 @@ struct cdp_htt_rx_pdev_fw_stats_phy_err_tlv {
|
||||
struct cdp_htt_rx_soc_fw_refill_ring_empty_tlv_v {
|
||||
struct cdp_htt_tlv_hdr tlv_hdr;
|
||||
/* Num ring empty encountered */
|
||||
uint32_t refill_ring_empty_cnt[1]; /* HTT_RX_STATS_REFILL_MAX_RING */
|
||||
QDF_FLEX_ARRAY(uint32_t, refill_ring_empty_cnt); /* HTT_RX_STATS_REFILL_MAX_RING */
|
||||
};
|
||||
|
||||
struct cdp_htt_tx_pdev_stats {
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -1238,7 +1238,8 @@ next_desc:
|
||||
num_avail_for_reap,
|
||||
hal_ring_hdl,
|
||||
&last_prefetch_hw_desc,
|
||||
&last_prefetch_sw_desc);
|
||||
&last_prefetch_sw_desc,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -4082,15 +4082,16 @@ static inline void *dp_srng_dst_get_next(struct dp_soc *dp_soc,
|
||||
* @hal_ring_hdl: opaque pointer to the HAL Rx Destination ring
|
||||
* @num_entries: Entry count
|
||||
*
|
||||
* Return: None
|
||||
* Return: HAL ring descriptor
|
||||
*/
|
||||
static inline void dp_srng_dst_inv_cached_descs(struct dp_soc *dp_soc,
|
||||
hal_ring_handle_t hal_ring_hdl,
|
||||
uint32_t num_entries)
|
||||
static inline void *dp_srng_dst_inv_cached_descs(struct dp_soc *dp_soc,
|
||||
hal_ring_handle_t hal_ring_hdl,
|
||||
uint32_t num_entries)
|
||||
{
|
||||
hal_soc_handle_t hal_soc = dp_soc->hal_soc;
|
||||
|
||||
hal_srng_dst_inv_cached_descs(hal_soc, hal_ring_hdl, num_entries);
|
||||
return hal_srng_dst_inv_cached_descs(hal_soc, hal_ring_hdl,
|
||||
num_entries);
|
||||
}
|
||||
#else
|
||||
static inline void *dp_srng_dst_get_next(struct dp_soc *dp_soc,
|
||||
@@ -4101,10 +4102,11 @@ static inline void *dp_srng_dst_get_next(struct dp_soc *dp_soc,
|
||||
return hal_srng_dst_get_next(hal_soc, hal_ring_hdl);
|
||||
}
|
||||
|
||||
static inline void dp_srng_dst_inv_cached_descs(struct dp_soc *dp_soc,
|
||||
hal_ring_handle_t hal_ring_hdl,
|
||||
uint32_t num_entries)
|
||||
static inline void *dp_srng_dst_inv_cached_descs(struct dp_soc *dp_soc,
|
||||
hal_ring_handle_t hal_ring_hdl,
|
||||
uint32_t num_entries)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif /* QCA_CACHED_RING_DESC */
|
||||
|
||||
@@ -4814,7 +4816,7 @@ struct dp_frag_history_opaque_atomic {
|
||||
qdf_atomic_t index;
|
||||
uint16_t num_entries_per_slot;
|
||||
uint16_t allocated;
|
||||
void *entry[0];
|
||||
void *entry[];
|
||||
};
|
||||
|
||||
static inline QDF_STATUS
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -8560,7 +8560,7 @@ void dp_print_tso_stats(struct dp_soc *soc,
|
||||
pdev = soc->pdev_list[loop_pdev];
|
||||
DP_PRINT_STATS("TSO Statistics\n");
|
||||
DP_PRINT_STATS(
|
||||
"From stack: %d | Successful completions: %d | TSO Packets: %d | TSO Completions: %d",
|
||||
"From stack: %llu | Successful completions: %llu | TSO Packets: %llu | TSO Completions: %d",
|
||||
pdev->stats.tx_i.rcvd.num,
|
||||
pdev->stats.tx.tx_success.num,
|
||||
pdev->stats.tso_stats.num_tso_pkts.num,
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -6538,7 +6538,7 @@ void dp_tx_dump_tx_desc(struct dp_tx_desc_s *tx_desc)
|
||||
dp_tx_comp_warn("tx_desc->flags: 0x%x", tx_desc->flags);
|
||||
dp_tx_comp_warn("tx_desc->id: %u", tx_desc->id);
|
||||
dp_tx_comp_warn("tx_desc->dma_addr: 0x%x",
|
||||
tx_desc->dma_addr);
|
||||
(unsigned int)tx_desc->dma_addr);
|
||||
dp_tx_comp_warn("tx_desc->vdev_id: %u",
|
||||
tx_desc->vdev_id);
|
||||
dp_tx_comp_warn("tx_desc->tx_status: %u",
|
||||
@@ -6704,6 +6704,7 @@ uint32_t dp_tx_comp_handler(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
{
|
||||
void *tx_comp_hal_desc;
|
||||
void *last_prefetched_hw_desc = NULL;
|
||||
void *last_hw_desc = NULL;
|
||||
struct dp_tx_desc_s *last_prefetched_sw_desc = NULL;
|
||||
hal_soc_handle_t hal_soc;
|
||||
uint8_t buffer_src;
|
||||
@@ -6753,7 +6754,8 @@ more_data:
|
||||
if (num_avail_for_reap >= quota)
|
||||
num_avail_for_reap = quota;
|
||||
|
||||
dp_srng_dst_inv_cached_descs(soc, hal_ring_hdl, num_avail_for_reap);
|
||||
last_hw_desc = dp_srng_dst_inv_cached_descs(soc, hal_ring_hdl,
|
||||
num_avail_for_reap);
|
||||
last_prefetched_hw_desc = dp_srng_dst_prefetch_32_byte_desc(hal_soc,
|
||||
hal_ring_hdl,
|
||||
num_avail_for_reap);
|
||||
@@ -6954,7 +6956,8 @@ next_desc:
|
||||
num_avail_for_reap,
|
||||
hal_ring_hdl,
|
||||
&last_prefetched_hw_desc,
|
||||
&last_prefetched_sw_desc);
|
||||
&last_prefetched_sw_desc,
|
||||
last_hw_desc);
|
||||
|
||||
if (dp_tx_comp_loop_pkt_limit_hit(soc, count, max_reap_limit))
|
||||
break;
|
||||
|
@@ -781,6 +781,7 @@ static inline QDF_STATUS dp_tx_pdev_init(struct dp_pdev *pdev)
|
||||
* @hal_ring_hdl: ring pointer
|
||||
* @last_prefetched_hw_desc: pointer to the last prefetched HW descriptor
|
||||
* @last_prefetched_sw_desc: pointer to last prefetch SW desc
|
||||
* @last_hw_desc: pointer to last HW desc
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
@@ -792,13 +793,18 @@ void dp_tx_prefetch_hw_sw_nbuf_desc(struct dp_soc *soc,
|
||||
hal_ring_handle_t hal_ring_hdl,
|
||||
void **last_prefetched_hw_desc,
|
||||
struct dp_tx_desc_s
|
||||
**last_prefetched_sw_desc)
|
||||
**last_prefetched_sw_desc,
|
||||
void *last_hw_desc)
|
||||
{
|
||||
if (*last_prefetched_sw_desc) {
|
||||
qdf_prefetch((uint8_t *)(*last_prefetched_sw_desc)->nbuf);
|
||||
qdf_prefetch((uint8_t *)(*last_prefetched_sw_desc)->nbuf + 64);
|
||||
}
|
||||
|
||||
if (qdf_unlikely(last_hw_desc &&
|
||||
(*last_prefetched_hw_desc == last_hw_desc)))
|
||||
return;
|
||||
|
||||
if (num_avail_for_reap && *last_prefetched_hw_desc) {
|
||||
soc->arch_ops.tx_comp_get_params_from_hal_desc(soc,
|
||||
*last_prefetched_hw_desc,
|
||||
@@ -825,7 +831,8 @@ void dp_tx_prefetch_hw_sw_nbuf_desc(struct dp_soc *soc,
|
||||
hal_ring_handle_t hal_ring_hdl,
|
||||
void **last_prefetched_hw_desc,
|
||||
struct dp_tx_desc_s
|
||||
**last_prefetched_sw_desc)
|
||||
**last_prefetched_sw_desc,
|
||||
void *last_hw_desc)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
@@ -261,8 +261,6 @@ QDF_STATUS dp_reset_monitor_mode_unlock(struct cdp_soc_t *soc_hdl,
|
||||
#endif
|
||||
}
|
||||
|
||||
mon_pdev->mvdev = NULL;
|
||||
|
||||
/*
|
||||
* Lite monitor mode, smart monitor mode and monitor
|
||||
* mode uses this APIs to filter reset and mode disable
|
||||
@@ -293,6 +291,7 @@ QDF_STATUS dp_reset_monitor_mode_unlock(struct cdp_soc_t *soc_hdl,
|
||||
soc);
|
||||
}
|
||||
|
||||
mon_pdev->mvdev = NULL;
|
||||
mon_pdev->monitor_configured = false;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -1810,11 +1810,12 @@ uint32_t hal_srng_dst_num_valid(void *hal_soc,
|
||||
*
|
||||
* Invalidates a set of cached descriptors starting from TP to cached_HP
|
||||
*
|
||||
* Return: None
|
||||
* Return: HAL ring descriptor
|
||||
*/
|
||||
static inline void hal_srng_dst_inv_cached_descs(void *hal_soc,
|
||||
hal_ring_handle_t hal_ring_hdl,
|
||||
uint32_t entry_count)
|
||||
static inline void *
|
||||
hal_srng_dst_inv_cached_descs(void *hal_soc,
|
||||
hal_ring_handle_t hal_ring_hdl,
|
||||
uint32_t entry_count)
|
||||
{
|
||||
struct hal_srng *srng = (struct hal_srng *)hal_ring_hdl;
|
||||
uint32_t *first_desc;
|
||||
@@ -1826,10 +1827,10 @@ static inline void hal_srng_dst_inv_cached_descs(void *hal_soc,
|
||||
* API call should be a no op
|
||||
*/
|
||||
if (!(srng->flags & HAL_SRNG_CACHED_DESC))
|
||||
return;
|
||||
return NULL;
|
||||
|
||||
if (!entry_count)
|
||||
return;
|
||||
return NULL;
|
||||
|
||||
first_desc = &srng->ring_base_vaddr[srng->u.dst_ring.tp];
|
||||
|
||||
@@ -1853,6 +1854,8 @@ static inline void hal_srng_dst_inv_cached_descs(void *hal_soc,
|
||||
(void *)last_desc);
|
||||
}
|
||||
qdf_dsb();
|
||||
|
||||
return last_desc;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -575,7 +575,7 @@ void hif_ipci_irq_set_affinity_hint(struct hif_exec_context *hif_ext_group,
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i = 0; i < hif_ext_group->numirq; i++) {
|
||||
for (i = 0; i < hif_ext_group->numirq && i < HIF_MAX_GRP_IRQ; i++) {
|
||||
if (mask_set) {
|
||||
ret = hif_affinity_mgr_set_qrg_irq_affinity((struct hif_softc *)hif_ext_group->hif,
|
||||
hif_ext_group->os_irq[i],
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -326,7 +327,7 @@ struct _HIF_SCATTER_REQ {
|
||||
enum HIF_SCATTER_METHOD scatter_method;
|
||||
void *hif_private[4]; /* HIF private area */
|
||||
u_int8_t *scatter_bounce_buffer; /* bounce buffers */
|
||||
struct _HIF_SCATTER_ITEM scatter_list[1]; /* start of scatter list */
|
||||
QDF_FLEX_ARRAY(struct _HIF_SCATTER_ITEM, scatter_list); /* start of scatter list */
|
||||
};
|
||||
|
||||
typedef struct _HIF_SCATTER_REQ * (*HIF_ALLOCATE_SCATTER_REQUEST)(
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -46,7 +46,7 @@ void debug_dump_bytes(uint8_t *buffer, uint16_t length, char *pDescription)
|
||||
if (count == 16) {
|
||||
count = 0;
|
||||
offset = 0;
|
||||
A_SNPRINTF(byteOffsetStr, sizeof(byteOffset), "%4.4X",
|
||||
A_SNPRINTF(byteOffsetStr, sizeof(byteOffsetStr), "%4.4X",
|
||||
byteOffset);
|
||||
A_PRINTF("[%s]: %s\n", byteOffsetStr, stream);
|
||||
qdf_mem_zero(stream, 60);
|
||||
@@ -55,7 +55,7 @@ void debug_dump_bytes(uint8_t *buffer, uint16_t length, char *pDescription)
|
||||
}
|
||||
|
||||
if (offset != 0) {
|
||||
A_SNPRINTF(byteOffsetStr, sizeof(byteOffset), "%4.4X",
|
||||
A_SNPRINTF(byteOffsetStr, sizeof(byteOffsetStr), "%4.4X",
|
||||
byteOffset);
|
||||
A_PRINTF("[%s]: %s\n", byteOffsetStr, stream);
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -1206,7 +1206,9 @@ static void get_htc_send_packets_credit_based(HTC_TARGET *target,
|
||||
HTC_PACKET_QUEUE_DEPTH(pQueue)));
|
||||
|
||||
pPacket = htc_get_pkt_at_head(tx_queue);
|
||||
if (!pPacket)
|
||||
if (!pPacket ||
|
||||
(pPacket->Endpoint >= ENDPOINT_MAX) ||
|
||||
(pPacket->Endpoint <= ENDPOINT_UNUSED))
|
||||
break;
|
||||
log_packet_info(target, pPacket);
|
||||
break;
|
||||
@@ -1370,7 +1372,9 @@ static void get_htc_send_packets(HTC_TARGET *target,
|
||||
/* bus suspended, runtime resume issued */
|
||||
QDF_ASSERT(HTC_PACKET_QUEUE_DEPTH(pQueue) == 0);
|
||||
pPacket = htc_get_pkt_at_head(tx_queue);
|
||||
if (!pPacket)
|
||||
if (!pPacket ||
|
||||
(pPacket->Endpoint >= ENDPOINT_MAX) ||
|
||||
(pPacket->Endpoint <= ENDPOINT_UNUSED))
|
||||
break;
|
||||
log_packet_info(target, pPacket);
|
||||
break;
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -209,7 +209,7 @@ struct wlan_ipa_tx_hdr {
|
||||
* @reserved: Reserved not used
|
||||
*/
|
||||
struct frag_header {
|
||||
uint8_t reserved[0];
|
||||
__QDF_DECLARE_FLEX_ARRAY(uint8_t, reserved);
|
||||
};
|
||||
#elif defined(QCA_WIFI_3_0)
|
||||
/**
|
||||
@@ -241,7 +241,7 @@ struct frag_header {
|
||||
* @reserved: Reserved not used
|
||||
*/
|
||||
struct ipa_header {
|
||||
uint8_t reserved[0];
|
||||
__QDF_DECLARE_FLEX_ARRAY(uint8_t, reserved);
|
||||
};
|
||||
#else
|
||||
/**
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2015, 2020-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. 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 above
|
||||
@@ -140,6 +140,10 @@ enum osif_cb_type {
|
||||
OSIF_NOT_HANDLED,
|
||||
};
|
||||
|
||||
#ifdef CONN_MGR_ADV_FEATURE
|
||||
typedef void (*osif_cm_connect_active_notify_cb)(uint8_t vdev_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* typedef osif_cm_connect_comp_cb - Connect complete callback
|
||||
* @vdev: vdev pointer
|
||||
@@ -364,6 +368,7 @@ typedef QDF_STATUS
|
||||
|
||||
/**
|
||||
* struct osif_cm_ops - connection manager legacy callbacks
|
||||
* @connect_active_notify_cb: callback for connect active to legacy modules
|
||||
* @connect_complete_cb: callback for connect complete to legacy
|
||||
* modules
|
||||
* @disconnect_complete_cb: callback for disconnect complete to
|
||||
@@ -386,6 +391,9 @@ typedef QDF_STATUS
|
||||
* @perfd_set_cpufreq_cb: callback to update CPU min freq
|
||||
*/
|
||||
struct osif_cm_ops {
|
||||
#ifdef CONN_MGR_ADV_FEATURE
|
||||
osif_cm_connect_active_notify_cb connect_active_notify_cb;
|
||||
#endif
|
||||
osif_cm_connect_comp_cb connect_complete_cb;
|
||||
osif_cm_disconnect_comp_cb disconnect_complete_cb;
|
||||
#ifdef CONN_MGR_ADV_FEATURE
|
||||
@@ -415,6 +423,16 @@ struct osif_cm_ops {
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONN_MGR_ADV_FEATURE
|
||||
/**
|
||||
* osif_cm_connect_active_notify() - Function to notify connect active
|
||||
* @vdev_id: VDEV ID on which connect req is active
|
||||
*
|
||||
* This API notifies connect active to legacy module
|
||||
*/
|
||||
void osif_cm_connect_active_notify(uint8_t vdev_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* osif_cm_connect_comp_ind() - Function to indicate connect
|
||||
* complete to legacy module
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2015, 2020-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. 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 above
|
||||
@@ -662,6 +662,9 @@ static void osif_cm_perfd_reset_cpufreq_ctrl_cb(void)
|
||||
#endif
|
||||
|
||||
static struct mlme_cm_ops cm_ops = {
|
||||
#ifdef CONN_MGR_ADV_FEATURE
|
||||
.mlme_cm_connect_active_notify_cb = osif_cm_connect_active_notify,
|
||||
#endif
|
||||
.mlme_cm_connect_complete_cb = osif_cm_connect_complete_cb,
|
||||
.mlme_cm_failed_candidate_cb = osif_cm_failed_candidate_cb,
|
||||
.mlme_cm_update_id_and_src_cb = osif_cm_update_id_and_src_cb,
|
||||
@@ -748,6 +751,14 @@ QDF_STATUS osif_cm_osif_priv_deinit(struct wlan_objmgr_vdev *vdev)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#ifdef CONN_MGR_ADV_FEATURE
|
||||
void osif_cm_connect_active_notify(uint8_t vdev_id)
|
||||
{
|
||||
if (osif_cm_legacy_ops && osif_cm_legacy_ops->connect_active_notify_cb)
|
||||
osif_cm_legacy_ops->connect_active_notify_cb(vdev_id);
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS osif_cm_connect_comp_ind(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_connect_resp *rsp,
|
||||
enum osif_cb_type type)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -65,7 +65,7 @@ struct qdf_ptr_hash_bucket {
|
||||
struct qdf_ptr_hash {
|
||||
int8_t bits;
|
||||
int16_t count;
|
||||
struct qdf_ptr_hash_bucket buckets[0];
|
||||
struct qdf_ptr_hash_bucket buckets[];
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -37,14 +37,17 @@
|
||||
/* Preprocessor definitions and constants */
|
||||
#define QDF_MAX_SGLIST 4
|
||||
|
||||
#define __QDF_DECLARE_FLEX_ARRAY(type, name) \
|
||||
struct { \
|
||||
struct {} dummy_struct; \
|
||||
type name[]; \
|
||||
}
|
||||
|
||||
/* Define a QDF macro for declaring flexible arrays */
|
||||
#define QDF_FLEX_ARRAY(type, name) \
|
||||
union { \
|
||||
type name ## _first_element; \
|
||||
struct { \
|
||||
struct {} dummy_struct; \
|
||||
type name[]; \
|
||||
}; \
|
||||
__QDF_DECLARE_FLEX_ARRAY(type, name); \
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2017-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -562,7 +562,7 @@ struct samp_detector_info {
|
||||
uint8_t is_sec80;
|
||||
uint8_t blanking_status;
|
||||
/* Padding bits to make struct size multiple of 4 bytes */
|
||||
uint8_t padding_detector_info[0];
|
||||
uint8_t padding_detector_info[];
|
||||
} __packed;
|
||||
|
||||
/* Compile time assert to check struct size is divisible by 4 Bytes */
|
||||
@@ -641,7 +641,7 @@ struct spectral_samp_msg {
|
||||
uint8_t dcs_enabled;
|
||||
uint8_t int_type;
|
||||
uint8_t num_freq_spans;
|
||||
uint8_t bin_pwr[0]; /*This should be the last item in the structure*/
|
||||
uint8_t bin_pwr[]; /*This should be the last item in the structure*/
|
||||
} __packed;
|
||||
|
||||
#else
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011,2017-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -285,7 +285,7 @@ typedef uint32_t SPECTRAL_SEGID_INFO;
|
||||
* @buf: fft report
|
||||
*/
|
||||
struct spectral_phyerr_fft_gen2 {
|
||||
uint8_t buf[0];
|
||||
__QDF_DECLARE_FLEX_ARRAY(uint8_t, buf);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -463,7 +463,7 @@ struct spectral_phyerr_fft_report_gen3 {
|
||||
uint32_t hdr_b;
|
||||
uint32_t hdr_c;
|
||||
uint32_t resv;
|
||||
uint8_t buf[0];
|
||||
uint8_t buf[];
|
||||
} __ATTRIB_PACK;
|
||||
|
||||
/**
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -60,6 +60,16 @@
|
||||
#define mgmttxrx_nofl_debug(params...) \
|
||||
QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_MGMT_TXRX, params)
|
||||
|
||||
/**
|
||||
* mgmt_txrx_frame_hex_dump() - Print the type and dump the rx tx frame
|
||||
* @frame_data: The base address of the mgmt frame data to be logged.
|
||||
* @frame_len: The size of the frame to be logged.
|
||||
* @is_tx: is tx frame
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void mgmt_txrx_frame_hex_dump(void *frame_data, int frame_len, bool is_tx);
|
||||
|
||||
/**
|
||||
* enum mgmt_subtype - enum of mgmt. subtypes
|
||||
* @MGMT_SUBTYPE_ASSOC_REQ: association request frame
|
||||
@@ -317,12 +327,14 @@ enum sa_query_action {
|
||||
|
||||
/**
|
||||
* enum protected_dual_actioncode - protected dual action frames
|
||||
* @PDPA_ACTION_VENDOR_SPECIFIC: PDPA action vendor specific frame
|
||||
* @PDPA_GAS_INIT_REQ: pdpa gas init request frame
|
||||
* @PDPA_GAS_INIT_RSP: pdpa gas init response frame
|
||||
* @PDPA_GAS_COMEBACK_REQ: pdpa gas comeback request frame
|
||||
* @PDPA_GAS_COMEBACK_RSP: pdpa gas comeback response frame
|
||||
*/
|
||||
enum protected_dual_actioncode {
|
||||
PDPA_ACTION_VENDOR_SPECIFIC = 9,
|
||||
PDPA_GAS_INIT_REQ = 10,
|
||||
PDPA_GAS_INIT_RSP = 11,
|
||||
PDPA_GAS_COMEBACK_REQ = 12,
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -387,6 +387,9 @@ mgmt_get_pdpa_action_subtype(uint8_t action_code)
|
||||
enum mgmt_frame_type frm_type;
|
||||
|
||||
switch (action_code) {
|
||||
case PDPA_ACTION_VENDOR_SPECIFIC:
|
||||
frm_type = MGMT_ACTION_VENDOR_SPECIFIC;
|
||||
break;
|
||||
case PDPA_GAS_INIT_REQ:
|
||||
frm_type = MGMT_ACTION_PDPA_GAS_INIT_REQ;
|
||||
break;
|
||||
@@ -1011,6 +1014,182 @@ mgmt_txrx_get_frm_type(uint8_t mgmt_subtype, uint8_t *mpdu_data_ptr)
|
||||
return frm_type;
|
||||
}
|
||||
|
||||
static uint8_t *mgmt_txrx_get_frm_type_string(enum mgmt_frame_type frm_type)
|
||||
{
|
||||
switch (frm_type) {
|
||||
CASE_RETURN_STRING(MGMT_ASSOC_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ASSOC_RESP);
|
||||
CASE_RETURN_STRING(MGMT_REASSOC_REQ);
|
||||
CASE_RETURN_STRING(MGMT_REASSOC_RESP);
|
||||
CASE_RETURN_STRING(MGMT_PROBE_REQ);
|
||||
CASE_RETURN_STRING(MGMT_PROBE_RESP);
|
||||
CASE_RETURN_STRING(MGMT_BEACON);
|
||||
CASE_RETURN_STRING(MGMT_ATIM);
|
||||
CASE_RETURN_STRING(MGMT_DISASSOC);
|
||||
CASE_RETURN_STRING(MGMT_AUTH);
|
||||
CASE_RETURN_STRING(MGMT_DEAUTH);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MEAS_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MEAS_REPORT);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TPC_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TPC_REPORT);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_CHAN_SWITCH);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_QOS_ADD_TS_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_QOS_ADD_TS_RSP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_QOS_DEL_TS_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_QOS_SCHEDULE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_QOS_MAP_CONFIGURE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_DLS_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_DLS_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_DLS_TEARDOWN);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_BA_ADDBA_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_BA_ADDBA_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_BA_DELBA);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_2040_BSS_COEXISTENCE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_CATEGORY_VENDOR_SPECIFIC);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_CATEGORY_VENDOR_SPECIFIC_PROTECTED);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_EXT_CHANNEL_SWITCH_ID);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_VENDOR_SPECIFIC);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_DISCRESP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_RRM_RADIO_MEASURE_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_RRM_RADIO_MEASURE_RPT);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_RRM_LINK_MEASUREMENT_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_RRM_LINK_MEASUREMENT_RPT);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_RRM_NEIGHBOR_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_RRM_NEIGHBOR_RPT);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FT_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FT_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FT_CONFIRM);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FT_ACK);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_HT_NOTIFY_CHANWIDTH);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_HT_SMPS);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_HT_PSMP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_HT_PCO_PHASE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_HT_CSI);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_HT_NONCOMPRESSED_BF);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_HT_COMPRESSED_BF);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_HT_ASEL_IDX_FEEDBACK);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_SA_QUERY_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_SA_QUERY_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_PDPA_GAS_INIT_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_PDPA_GAS_INIT_RSP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_PDPA_GAS_COMEBACK_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_PDPA_GAS_COMEBACK_RSP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_BSS_TM_QUERY);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_BSS_TM_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_BSS_TM_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_NOTIF_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_NOTIF_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_FMS_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_FMS_RESP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_TFS_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_TFS_RESP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_TFS_NOTIFY);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_SLEEP_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_SLEEP_RESP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_TIM_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WNM_TIM_RESP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_SETUP_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_SETUP_RSP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_SETUP_CNF);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_TEARDOWN);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_PEER_TRAFFIC_IND);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_CH_SWITCH_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_CH_SWITCH_RSP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_PEER_PSM_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_PEER_PSM_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_PEER_TRAFFIC_RSP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TDLS_DIS_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MESH_LINK_METRIC_REPORT);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MESH_HWMP_PATH_SELECTION);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MESH_GATE_ANNOUNCEMENT);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MESH_CONGESTION_CONTROL_NOTIFICATION);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MESH_MCCA_SETUP_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MESH_MCCA_SETUP_REPLY);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MESH_MCCA_ADVERTISEMENT_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MESH_MCCA_ADVERTISEMENT);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MESH_MCCA_TEARDOWN);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MESH_TBTT_ADJUSTMENT_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MESH_TBTT_ADJUSTMENT_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_SP_MESH_PEERING_OPEN);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_SP_MESH_PEERING_CONFIRM);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_SP_MESH_PEERING_CLOSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_SP_MGK_INFORM);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_SP_MGK_ACK);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WMM_QOS_SETUP_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WMM_QOS_SETUP_RESP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_WMM_QOS_TEARDOWN);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_VHT_COMPRESSED_BF);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_VHT_GID_NOTIF);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_VHT_OPMODE_NOTIF);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_GAS_INITIAL_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_GAS_INITIAL_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_GAS_COMEBACK_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_GAS_COMEBACK_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FST_SETUP_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FST_SETUP_RSP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FST_TEAR_DOWN);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FST_ACK_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FST_ACK_RSP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FST_ON_CHANNEL_TUNNEL);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_SCS_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_SCS_RSP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_GROUP_MEMBERSHIP_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_GROUP_MEMBERSHIP_RSP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MCSC_REQ);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_MCSC_RSP);
|
||||
CASE_RETURN_STRING(MGMT_FRAME_TYPE_ALL);
|
||||
CASE_RETURN_STRING(MGMT_CTRL_FRAME);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TWT_SETUP);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TWT_TEARDOWN);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_TWT_INFORMATION);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_EHT_T2LM_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_EHT_T2LM_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_EHT_T2LM_TEARDOWN);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_EHT_EPCS_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_EHT_EPCS_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_EHT_EPCS_TEARDOWN);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FTM_REQUEST);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FTM_RESPONSE);
|
||||
CASE_RETURN_STRING(MGMT_ACTION_FILS_DISCOVERY);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return (uint8_t *)"MGMT_UNKNOWN";
|
||||
}
|
||||
|
||||
void mgmt_txrx_frame_hex_dump(void *frame_data, int frame_len, bool is_tx)
|
||||
{
|
||||
struct ieee80211_frame *wh;
|
||||
uint8_t mgmt_type, mgmt_subtype;
|
||||
enum mgmt_frame_type frm_type;
|
||||
uint8_t *mpdu_data_ptr = NULL;
|
||||
|
||||
if (frame_len < sizeof(struct ieee80211_frame)) {
|
||||
mgmt_txrx_debug("frame len %d less than hdr size", frame_len);
|
||||
return;
|
||||
}
|
||||
wh = (struct ieee80211_frame *)frame_data;
|
||||
mgmt_type = (wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
|
||||
mgmt_subtype = (wh)->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
|
||||
|
||||
if (mgmt_type != IEEE80211_FC0_TYPE_MGT) {
|
||||
mgmt_txrx_debug("frame type %d not mgmt type", mgmt_type);
|
||||
return;
|
||||
}
|
||||
/* mpdu_data_ptr is pointer to action header */
|
||||
mpdu_data_ptr = (uint8_t *)frame_data + sizeof(struct ieee80211_frame);
|
||||
|
||||
frm_type = mgmt_txrx_get_frm_type(mgmt_subtype, mpdu_data_ptr);
|
||||
mgmttxrx_nofl_debug("%s MGMT: %s(%d) seq %d len %d:",
|
||||
is_tx ? "TX" : "RX",
|
||||
mgmt_txrx_get_frm_type_string(frm_type), frm_type,
|
||||
le16toh(*(uint16_t *)wh->i_seq) >>
|
||||
WLAN_SEQ_SEQ_SHIFT, frame_len);
|
||||
qdf_trace_hex_dump(QDF_MODULE_ID_MGMT_TXRX, QDF_TRACE_LEVEL_DEBUG,
|
||||
frame_data, frame_len);
|
||||
}
|
||||
|
||||
#ifdef WLAN_IOT_SIM_SUPPORT
|
||||
static QDF_STATUS simulation_frame_update(struct wlan_objmgr_psoc *psoc,
|
||||
qdf_nbuf_t buf,
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. 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 above
|
||||
@@ -180,7 +180,7 @@ struct wlan_afc_host_resp {
|
||||
uint32_t time_to_live;
|
||||
uint32_t length;
|
||||
uint32_t resp_format;
|
||||
uint8_t afc_resp[0];
|
||||
uint8_t afc_resp[];
|
||||
} qdf_packed;
|
||||
|
||||
/**
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2010, Atheros Communications Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
@@ -358,7 +358,7 @@ struct synthetic_pulse {
|
||||
struct synthetic_seq {
|
||||
uint8_t num_pulses;
|
||||
uint32_t total_len_seq;
|
||||
struct synthetic_pulse *pulse[0];
|
||||
struct synthetic_pulse *pulse[];
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -370,7 +370,7 @@ struct synthetic_seq {
|
||||
|
||||
struct seq_store {
|
||||
uint8_t num_sequence;
|
||||
struct synthetic_seq *seq_arr[0];
|
||||
struct synthetic_seq *seq_arr[];
|
||||
};
|
||||
#endif /* WLAN_DFS_PARTIAL_OFFLOAD && WLAN_DFS_SYNTHETIC_RADAR */
|
||||
|
||||
|
@@ -2458,9 +2458,11 @@ QDF_STATUS cm_connect_active(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id)
|
||||
* free vdev keys before setting crypto params for 1x/ owe roaming,
|
||||
* link vdev keys would be cleaned in osif
|
||||
*/
|
||||
if (!wlan_vdev_mlme_is_mlo_link_vdev(cm_ctx->vdev) &&
|
||||
!wlan_cm_check_mlo_roam_auth_status(cm_ctx->vdev))
|
||||
wlan_crypto_free_vdev_key(cm_ctx->vdev);
|
||||
if (!wlan_vdev_mlme_is_mlo_link_vdev(cm_ctx->vdev)) {
|
||||
mlme_cm_osif_connect_active_notify(wlan_vdev_get_id(cm_ctx->vdev));
|
||||
if (!wlan_cm_check_mlo_roam_auth_status(cm_ctx->vdev))
|
||||
wlan_crypto_free_vdev_key(cm_ctx->vdev);
|
||||
}
|
||||
cm_fill_vdev_crypto_params(cm_ctx, req);
|
||||
cm_store_wep_key(cm_ctx, &req->crypto, *cm_id);
|
||||
|
||||
@@ -3273,6 +3275,44 @@ post_err:
|
||||
return qdf_status;
|
||||
}
|
||||
|
||||
#if defined(CONN_MGR_ADV_FEATURE) && defined(WLAN_FEATURE_11BE_MLO)
|
||||
QDF_STATUS cm_bss_peer_create_resp_mlo_attach(struct wlan_objmgr_vdev *vdev,
|
||||
struct qdf_mac_addr *peer_mac)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_objmgr_peer *link_peer;
|
||||
struct mlo_partner_info partner_info;
|
||||
|
||||
if (!wlan_vdev_mlme_is_mlo_vdev(vdev))
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
psoc = wlan_vdev_get_psoc(vdev);
|
||||
if (!psoc)
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
|
||||
link_peer = wlan_objmgr_get_peer_by_mac(psoc, (uint8_t *)peer_mac,
|
||||
WLAN_MLME_CM_ID);
|
||||
if (!link_peer)
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
|
||||
partner_info.num_partner_links = 1;
|
||||
qdf_mem_copy(partner_info.partner_link_info[0].link_addr.bytes,
|
||||
vdev->vdev_mlme.macaddr, QDF_MAC_ADDR_SIZE);
|
||||
partner_info.partner_link_info[0].link_id = wlan_vdev_get_link_id(vdev);
|
||||
|
||||
status = wlan_mlo_peer_create(vdev, link_peer, &partner_info, NULL, 0);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
mlme_err("Failed to attach MLO peer " QDF_MAC_ADDR_FMT,
|
||||
QDF_MAC_ADDR_REF(peer_mac->bytes));
|
||||
}
|
||||
|
||||
wlan_objmgr_peer_release_ref(link_peer, WLAN_MLME_CM_ID);
|
||||
|
||||
return status;
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev,
|
||||
QDF_STATUS status,
|
||||
struct qdf_mac_addr *peer_mac)
|
||||
@@ -3298,6 +3338,12 @@ QDF_STATUS cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev,
|
||||
}
|
||||
|
||||
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||
qdf_status = cm_bss_peer_create_resp_mlo_attach(vdev, peer_mac);
|
||||
if (QDF_IS_STATUS_ERROR(qdf_status)) {
|
||||
mlme_cm_bss_peer_delete_req(vdev);
|
||||
goto next_candidate;
|
||||
}
|
||||
|
||||
qdf_status =
|
||||
cm_sm_deliver_event(vdev,
|
||||
WLAN_CM_SM_EV_BSS_CREATE_PEER_SUCCESS,
|
||||
@@ -3309,6 +3355,7 @@ QDF_STATUS cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev,
|
||||
goto post_err;
|
||||
}
|
||||
|
||||
next_candidate:
|
||||
/* In case of failure try with next candidate */
|
||||
resp = qdf_mem_malloc(sizeof(*resp));
|
||||
if (!resp) {
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. 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 above
|
||||
@@ -898,26 +898,33 @@ QDF_STATUS cm_roam_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev,
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
cm_req = cm_get_req_by_cm_id(cm_ctx, cm_id);
|
||||
if (!cm_req)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||
qdf_status = cm_bss_peer_create_resp_mlo_attach(vdev, peer_mac);
|
||||
if (QDF_IS_STATUS_ERROR(qdf_status)) {
|
||||
mlme_cm_bss_peer_delete_req(vdev);
|
||||
goto send_err;
|
||||
}
|
||||
|
||||
return cm_send_reassoc_start_fail(
|
||||
cm_ctx, cm_id,
|
||||
CM_PEER_CREATE_FAILED, false);
|
||||
qdf_status =
|
||||
cm_sm_deliver_event(vdev,
|
||||
WLAN_CM_SM_EV_BSS_CREATE_PEER_SUCCESS,
|
||||
sizeof(wlan_cm_id), &cm_id);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(qdf_status)) {
|
||||
mlme_cm_bss_peer_delete_req(vdev);
|
||||
cm_reassoc_handle_event_post_fail(cm_ctx, cm_id);
|
||||
}
|
||||
|
||||
return qdf_status;
|
||||
}
|
||||
|
||||
qdf_status = cm_sm_deliver_event(
|
||||
vdev, WLAN_CM_SM_EV_BSS_CREATE_PEER_SUCCESS,
|
||||
sizeof(wlan_cm_id), &cm_id);
|
||||
if (QDF_IS_STATUS_SUCCESS(qdf_status))
|
||||
return qdf_status;
|
||||
send_err:
|
||||
cm_req = cm_get_req_by_cm_id(cm_ctx, cm_id);
|
||||
if (!cm_req)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
mlme_cm_bss_peer_delete_req(vdev);
|
||||
cm_reassoc_handle_event_post_fail(cm_ctx, cm_id);
|
||||
|
||||
return qdf_status;
|
||||
return cm_send_reassoc_start_fail(cm_ctx, cm_id,
|
||||
CM_PEER_CREATE_FAILED, false);
|
||||
}
|
||||
|
||||
QDF_STATUS cm_roam_disconnect_rsp(struct wlan_objmgr_vdev *vdev,
|
||||
|
@@ -219,6 +219,28 @@ QDF_STATUS cm_try_next_candidate(struct cnx_mgr *cm_ctx,
|
||||
QDF_STATUS
|
||||
cm_resume_connect_after_peer_create(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id);
|
||||
|
||||
#if defined(CONN_MGR_ADV_FEATURE) && defined(WLAN_FEATURE_11BE_MLO)
|
||||
/**
|
||||
* cm_bss_peer_create_resp_mlo_attach() - Create MLO peer and attach objmgr peer
|
||||
* @vdev: VDEV object manager pointer
|
||||
* @peer_mac: MAC addr pointer for BSS peer created
|
||||
*
|
||||
* Creates MLO peer for the peer with @peer_mac and adds the objmgr peer to
|
||||
* the created MLO peer context and holds reference for the MLO peer.
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_bss_peer_create_resp_mlo_attach(struct wlan_objmgr_vdev *vdev,
|
||||
struct qdf_mac_addr *peer_mac);
|
||||
#else
|
||||
static inline QDF_STATUS
|
||||
cm_bss_peer_create_resp_mlo_attach(struct wlan_objmgr_vdev *vdev,
|
||||
struct qdf_mac_addr *peer_mac)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* cm_bss_peer_create_rsp() - handle bss peer create response
|
||||
* @vdev: vdev
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. 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 above
|
||||
@@ -32,6 +32,7 @@
|
||||
|
||||
/**
|
||||
* struct mlme_cm_ops: connection manager osif callbacks
|
||||
* @mlme_cm_connect_active_notify_cb: Connect active notify callback
|
||||
* @mlme_cm_connect_complete_cb: Connect done callback
|
||||
* @vdev: vdev pointer
|
||||
* @rsp: connect response
|
||||
@@ -105,6 +106,7 @@
|
||||
* @mlme_cm_perfd_reset_cpufreq_ctrl_cb: callback to reset CPU min freq
|
||||
*/
|
||||
struct mlme_cm_ops {
|
||||
void (*mlme_cm_connect_active_notify_cb)(uint8_t vdev_id);
|
||||
QDF_STATUS (*mlme_cm_connect_complete_cb)(
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_connect_resp *rsp);
|
||||
@@ -734,6 +736,21 @@ QDF_STATUS mlme_cm_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
|
||||
QDF_STATUS mlme_cm_connect_req(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_vdev_connect_req *req);
|
||||
|
||||
#ifdef CONN_MGR_ADV_FEATURE
|
||||
/**
|
||||
* mlme_cm_osif_connect_active_notify() - CNX manager ext connect active
|
||||
* notification.
|
||||
* @vdev_id: VDEV ID
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void mlme_cm_osif_connect_active_notify(uint8_t vdev_id);
|
||||
#else
|
||||
static inline void mlme_cm_osif_connect_active_notify(uint8_t vdev_id)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* mlme_cm_connect_complete_ind() - Connection manager ext connect complete
|
||||
* indication
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. 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 above
|
||||
@@ -409,6 +409,14 @@ QDF_STATUS mlme_cm_reassoc_req(struct wlan_objmgr_vdev *vdev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONN_MGR_ADV_FEATURE
|
||||
void mlme_cm_osif_connect_active_notify(uint8_t vdev_id)
|
||||
{
|
||||
if (glbl_cm_ops && glbl_cm_ops->mlme_cm_connect_active_notify_cb)
|
||||
glbl_cm_ops->mlme_cm_connect_active_notify_cb(vdev_id);
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS mlme_cm_connect_complete_ind(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_connect_resp *rsp)
|
||||
{
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. 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
|
||||
@@ -1598,7 +1598,8 @@ dbglog_debugfs_raw_data(wmi_unified_t wmi_handle, const uint8_t *buf,
|
||||
/* drop oldest entries */
|
||||
while (skb_queue_len(&fwlog->fwlog_queue) > ATH6KL_FWLOG_MAX_ENTRIES) {
|
||||
skb = __skb_dequeue(&fwlog->fwlog_queue);
|
||||
kfree_skb(skb);
|
||||
if (skb)
|
||||
kfree_skb(skb);
|
||||
}
|
||||
|
||||
spin_unlock(&fwlog->fwlog_queue.lock);
|
||||
|
@@ -9149,7 +9149,7 @@ struct wmi_roam_scan_stats_params {
|
||||
*/
|
||||
struct wmi_roam_scan_stats_res {
|
||||
uint32_t num_roam_scans;
|
||||
struct wmi_roam_scan_stats_params roam_scan[0];
|
||||
struct wmi_roam_scan_stats_params roam_scan[];
|
||||
};
|
||||
|
||||
#define MAX_ROAM_CANDIDATE_AP 9
|
||||
|
@@ -158,7 +158,7 @@ struct wmi_ext_dbg_msg {
|
||||
uint32_t len;
|
||||
uint64_t ts;
|
||||
enum WMI_MSG_TYPE type;
|
||||
uint8_t buf[0];
|
||||
uint8_t buf[];
|
||||
};
|
||||
#endif /*WMI_EXT_DBG */
|
||||
|
||||
|
Reference in New Issue
Block a user