/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* * Copyright (C) 2024 Intel Corporation */ #ifndef __iwl_utils_h__ #define __iwl_utils_h__ #include #ifdef CONFIG_INET /** * iwl_tx_tso_segment - Segments a TSO packet into subframes for A-MSDU. * @skb: buffer to segment. * @num_subframes: number of subframes to create. * @netdev_flags: netdev feature flags. * @mpdus_skbs: list to hold the segmented subframes. * * This function segments a large TCP packet into subframes. * subframes are added to the mpdus_skbs list * * Returns: 0 on success and negative value on failure. */ int iwl_tx_tso_segment(struct sk_buff *skb, unsigned int num_subframes, netdev_features_t netdev_flags, struct sk_buff_head *mpdus_skbs); #else static inline int iwl_tx_tso_segment(struct sk_buff *skb, unsigned int num_subframes, netdev_features_t netdev_flags, struct sk_buff_head *mpdus_skbs) { WARN_ON(1); return -1; } #endif /* CONFIG_INET */ static inline u32 iwl_find_ie_offset(u8 *beacon, u8 eid, u32 frame_size) { struct ieee80211_mgmt *mgmt = (void *)beacon; const u8 *ie; if (WARN_ON_ONCE(frame_size <= (mgmt->u.beacon.variable - beacon))) return 0; frame_size -= mgmt->u.beacon.variable - beacon; ie = cfg80211_find_ie(eid, mgmt->u.beacon.variable, frame_size); if (!ie) return 0; return ie - beacon; } #endif /* __iwl_utils_h__ */