1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) 2017-2026 Morse Micro 4 */ 5 6 #ifndef _MM81X_MAC_H_ 7 #define _MM81X_MAC_H_ 8 9 #include "core.h" 10 #include "command.h" 11 12 struct mm81x_queue_params { 13 u8 uapsd; 14 u8 aci; 15 u8 aifs; 16 u16 cw_min; 17 u16 cw_max; 18 u32 txop; 19 }; 20 21 static inline u32 mm81x_vif_generate_cssid(struct ieee80211_vif *vif) 22 { 23 return mm81x_generate_cssid(vif->cfg.ssid, vif->cfg.ssid_len); 24 } 25 26 /* 27 * Build a little-endian word from the last four octets of a MAC address; 28 * the first two octets are dropped. 29 */ 30 static inline __le32 mac2le32(const unsigned char *addr) 31 { 32 return cpu_to_le32(((u32)(addr[2]) << 24) | ((u32)(addr[3]) << 16) | 33 ((u32)(addr[4]) << 8) | ((u32)(addr[5]))); 34 } 35 36 static inline struct ieee80211_vif * 37 mm81x_rcu_dereference_vif_id(struct mm81x *mors, u8 vif_id, bool rcu) 38 { 39 if (WARN_ON(vif_id >= ARRAY_SIZE(mors->vifs))) 40 return NULL; 41 42 if (rcu) 43 return rcu_dereference(mors->vifs[vif_id]); 44 45 return rcu_dereference_protected(mors->vifs[vif_id], 46 lockdep_is_held(&mors->hw->wiphy->mtx)); 47 } 48 49 int mm81x_tx_h_get_attempts(struct mm81x *mors, 50 struct mm81x_skb_tx_status *tx_sts); 51 struct mm81x *mm81x_mac_alloc(size_t priv_size, struct device *dev); 52 int mm81x_mac_register(struct mm81x *mors); 53 void mm81x_mac_free(struct mm81x *mors); 54 void mm81x_mac_unregister(struct mm81x *mors); 55 int mm81x_mac_event_recv(struct mm81x *mors, struct sk_buff *skb); 56 void mm81x_mac_rx_skb(struct mm81x *mors, struct sk_buff *skb, 57 struct mm81x_skb_rx_status *hdr_rx_status); 58 void mm81x_mac_beacon_irq_handle(struct mm81x *mors, u32 status); 59 60 u8 *mm81x_hw_scan_h_insert_tlvs(struct mm81x_hw_scan_params *params, u8 *buf); 61 size_t mm81x_hw_scan_h_get_cmd_size(struct mm81x_hw_scan_params *params); 62 void mm81x_tx_h_check_aggr(struct ieee80211_sta *pubsta, struct sk_buff *skb); 63 #endif /* !_MM81X_MAC_H_ */ 64