Merge c6727cbd55 on remote branch

Change-Id: I39aab1046f06748a70979cca24cef8b8f764515c
This commit is contained in:
Linux Build Service Account
2024-07-21 14:07:50 -07:00
31 changed files with 440 additions and 95 deletions

View File

@@ -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 {

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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,

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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;
}
/**

View File

@@ -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],

View File

@@ -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)(

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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
/**

View File

@@ -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

View File

@@ -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)

View File

@@ -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[];
};
/**

View File

@@ -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); \
}
/*

View File

@@ -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

View File

@@ -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;
/**

View File

@@ -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,

View File

@@ -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,

View File

@@ -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;
/**

View File

@@ -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 */

View File

@@ -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) {

View File

@@ -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,

View File

@@ -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

View File

@@ -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

View File

@@ -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)
{

View File

@@ -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);

View File

@@ -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

View File

@@ -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 */