ath12k is a new mac80211 driver for Qualcomm Wi-Fi 7 devices, first supporting QCN9274 and WCN7850 PCI devices. QCN9274 supports both AP and station; WCN7850 supports only station mode. Monitor mode is not (yet) supported. Only PCI bus devices are supported. ath12k is forked from an earlier version of ath11k. It was simpler to have a "clean start" for the new generation and not try to share the code with ath11k. This makes maintenance easier and avoids major changes in ath11k, which would have significantly increased the risk of regressions in existing setups. ath12k uses le32 and cpu_to_le32() macros to handle endian conversions, instead of using the firmware byte swap feature utilized by ath11k. There is only one kernel module, named ath12k.ko. Currently ath12k only supports HE mode (IEEE 802.11ax) or older, but work is ongoing to add EHT mode (IEEE 802.11be) support. The size of the driver is ~41 kLOC and 45 files. To make the review easier, this initial version of ath12k does not support Device Tree, debugfs or any other extra features. Those will be added later, after ath12k is accepted to upstream. The driver is build tested by Intel's kernel test robot with both GCC and Clang. Sparse reports no warnings. The driver is mostly free of checkpatch warnings, albeit few of the warnings are omitted on purpose, list of them here: https://github.com/qca/qca-swiss-army-knife/blob/master/tools/scripts/ath12k/ath12k-check#L52 The driver has had multiple authors who are listed in alphabetical order below. Co-developed-by: Balamurugan Selvarajan <quic_bselvara@quicinc.com> Signed-off-by: Balamurugan Selvarajan <quic_bselvara@quicinc.com> Co-developed-by: Baochen Qiang <quic_bqiang@quicinc.com> Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com> Co-developed-by: Bhagavathi Perumal S <quic_bperumal@quicinc.com> Signed-off-by: Bhagavathi Perumal S <quic_bperumal@quicinc.com> Co-developed-by: Carl Huang <quic_cjhuang@quicinc.com> Signed-off-by: Carl Huang <quic_cjhuang@quicinc.com> Co-developed-by: Jeff Johnson <quic_jjohnson@quicinc.com> Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com> Co-developed-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com> Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com> Co-developed-by: P Praneesh <quic_ppranees@quicinc.com> Signed-off-by: P Praneesh <quic_ppranees@quicinc.com> Co-developed-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com> Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com> Co-developed-by: Ramya Gnanasekar <quic_rgnanase@quicinc.com> Signed-off-by: Ramya Gnanasekar <quic_rgnanase@quicinc.com> Co-developed-by: Sriram R <quic_srirrama@quicinc.com> Signed-off-by: Sriram R <quic_srirrama@quicinc.com> Co-developed-by: Vasanthakumar Thiagarajan <quic_vthiagar@quicinc.com> Signed-off-by: Vasanthakumar Thiagarajan <quic_vthiagar@quicinc.com> Co-developed-by: Wen Gong <quic_wgong@quicinc.com> Signed-off-by: Wen Gong <quic_wgong@quicinc.com> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
67 lines
2 KiB
C
67 lines
2 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
|
/*
|
|
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef ATH12K_PEER_H
|
|
#define ATH12K_PEER_H
|
|
|
|
#include "dp_rx.h"
|
|
|
|
struct ppdu_user_delayba {
|
|
u16 sw_peer_id;
|
|
u32 info0;
|
|
u16 ru_end;
|
|
u16 ru_start;
|
|
u32 info1;
|
|
u32 rate_flags;
|
|
u32 resp_rate_flags;
|
|
};
|
|
|
|
struct ath12k_peer {
|
|
struct list_head list;
|
|
struct ieee80211_sta *sta;
|
|
int vdev_id;
|
|
u8 addr[ETH_ALEN];
|
|
int peer_id;
|
|
u16 ast_hash;
|
|
u8 pdev_idx;
|
|
u16 hw_peer_id;
|
|
|
|
/* protected by ab->data_lock */
|
|
struct ieee80211_key_conf *keys[WMI_MAX_KEY_INDEX + 1];
|
|
struct ath12k_dp_rx_tid rx_tid[IEEE80211_NUM_TIDS + 1];
|
|
|
|
/* Info used in MMIC verification of
|
|
* RX fragments
|
|
*/
|
|
struct crypto_shash *tfm_mmic;
|
|
u8 mcast_keyidx;
|
|
u8 ucast_keyidx;
|
|
u16 sec_type;
|
|
u16 sec_type_grp;
|
|
struct ppdu_user_delayba ppdu_stats_delayba;
|
|
bool delayba_flag;
|
|
bool is_authorized;
|
|
};
|
|
|
|
void ath12k_peer_unmap_event(struct ath12k_base *ab, u16 peer_id);
|
|
void ath12k_peer_map_event(struct ath12k_base *ab, u8 vdev_id, u16 peer_id,
|
|
u8 *mac_addr, u16 ast_hash, u16 hw_peer_id);
|
|
struct ath12k_peer *ath12k_peer_find(struct ath12k_base *ab, int vdev_id,
|
|
const u8 *addr);
|
|
struct ath12k_peer *ath12k_peer_find_by_addr(struct ath12k_base *ab,
|
|
const u8 *addr);
|
|
struct ath12k_peer *ath12k_peer_find_by_id(struct ath12k_base *ab, int peer_id);
|
|
void ath12k_peer_cleanup(struct ath12k *ar, u32 vdev_id);
|
|
int ath12k_peer_delete(struct ath12k *ar, u32 vdev_id, u8 *addr);
|
|
int ath12k_peer_create(struct ath12k *ar, struct ath12k_vif *arvif,
|
|
struct ieee80211_sta *sta,
|
|
struct ath12k_wmi_peer_create_arg *arg);
|
|
int ath12k_wait_for_peer_delete_done(struct ath12k *ar, u32 vdev_id,
|
|
const u8 *addr);
|
|
bool ath12k_peer_exist_by_vdev_id(struct ath12k_base *ab, int vdev_id);
|
|
struct ath12k_peer *ath12k_peer_find_by_ast(struct ath12k_base *ab, int ast_hash);
|
|
|
|
#endif /* _PEER_H_ */
|