ieee80211_hw_check
if (len > mic_crc_len && !ieee80211_hw_check(mld->hw, RX_INCLUDES_FCS))
WARN_ON_ONCE(!ieee80211_hw_check(hw, MFP_CAPABLE));
if (!ieee80211_hw_check(mvm->hw, HANDLES_QUIET_CSA))
if (len > mic_crc_len && !ieee80211_hw_check(mvm->hw, RX_INCLUDES_FCS))
if (!ieee80211_hw_check(mvm->hw, AP_LINK_PS))
if (!ieee80211_hw_check(mvm->hw, HAS_RATE_CONTROL)) {
if (!ieee80211_hw_check(hw, AMPDU_AGGREGATION))
if (ieee80211_hw_check(phy->hw, SUPPORTS_VHT_EXT_NSS_BW))
if (!ieee80211_hw_check(hw, SUPPORTS_PS))
if (ieee80211_hw_check(phy->hw, SUPPORTS_MULTI_BSSID)) {
if (ieee80211_hw_check(hw, SUPPORTS_AMSDU_IN_AMPDU) &&
if (ieee80211_hw_check(rtwdev->hw, SUPPORTS_VHT_EXT_NSS_BW))
if (ieee80211_hw_check(hw, SUPPORTS_RC_TABLE))
if (ieee80211_hw_check(hw, SUPPORTS_RC_TABLE)) {
if (ieee80211_hw_check(hw, SUPPORTS_RC_TABLE))
bool amsdu = ieee80211_hw_check(&local->hw, SUPPORTS_AMSDU_IN_AMPDU);
if (ieee80211_hw_check(&local->hw, SUPPORTS_REORDERING_BUFFER)) {
ieee80211_hw_check(&local->hw, STRICT)) {
!ieee80211_hw_check(&local->hw, AMPDU_AGGREGATION) ||
ieee80211_hw_check(&local->hw, TX_AMPDU_SETUP_IN_HW))
if (!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) {
if (!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF) &&
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR) &&
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR))
if (ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF) ||
ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) {
if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
ieee80211_hw_check(&local->hw, TDLS_WIDER_BW) &&
if (!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF) ||
if (!ieee80211_hw_check(&sdata->local->hw, SIGNAL_DBM))
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) {
if (!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF))
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) {
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR))
if (sdata && ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) {
if (!ieee80211_hw_check(&local->hw, SUPPORTS_PS))
if (ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS))
if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL)) {
if (!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR))
WARN_ON_ONCE(!ieee80211_hw_check(&local->hw,
tdls_wider_bw = ieee80211_hw_check(&sdata->local->hw, TDLS_WIDER_BW) &&
!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF))
!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF))
!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF) &&
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR) &&
if (ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD) &&
if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_FRAG) &&
if (ieee80211_hw_check(&local->hw, SUPPORTS_RX_DECAP_OFFLOAD) &&
!ieee80211_hw_check(&local->hw, SUPPORTS_CONC_MON_RX_DECAP))
if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD) ||
if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD))
if (ieee80211_hw_check(&local->hw, QUEUE_CONTROL))
if (ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR))
if (ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) {
if (ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR))
if (ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF))
ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) {
if (ieee80211_hw_check(&local->hw, P2P_DEV_ADDR_FOR_INTF)) {
if (ieee80211_hw_check(&local->hw, HANDLES_QUIET_CSA))
!ieee80211_hw_check(&sdata->local->hw, QUEUE_CONTROL)) {
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) {
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR))
!ieee80211_hw_check(&key->local->hw, SUPPORTS_PER_STA_GTK))
if (ieee80211_hw_check(&key->local->hw, SW_CRYPTO_CONTROL))
if (force || !ieee80211_hw_check(&local->hw, AMPDU_KEYBORDER_SUPPORT))
!ieee80211_hw_check(&local->hw, AMPDU_KEYBORDER_SUPPORT)) {
if (ieee80211_hw_check(&local->hw, AMPDU_AGGREGATION)) {
bool have_mfp = ieee80211_hw_check(&local->hw, MFP_CAPABLE);
if (ieee80211_hw_check(&local->hw, SW_CRYPTO_CONTROL) && fips_enabled) {
if (WARN_ON(ieee80211_hw_check(&local->hw, SW_CRYPTO_CONTROL) &&
if (ieee80211_hw_check(hw, QUEUE_CONTROL) &&
if (WARN_ON(ieee80211_hw_check(hw, SUPPORTS_TX_FRAG) &&
if (WARN_ON(!ieee80211_hw_check(hw, HAS_RATE_CONTROL)))
if (WARN_ON(!ieee80211_hw_check(hw, AMPDU_AGGREGATION)))
if (WARN_ON(ieee80211_hw_check(hw, HOST_BROADCAST_PS_BUFFERING)))
if (WARN_ON(ieee80211_hw_check(hw, SUPPORTS_PS) &&
(!ieee80211_hw_check(hw, SUPPORTS_DYNAMIC_PS) ||
ieee80211_hw_check(hw, PS_NULLFUNC_STACK))))
if (WARN_ON(!ieee80211_hw_check(hw, MFP_CAPABLE)))
if (WARN_ON(ieee80211_hw_check(hw, NEED_DTIM_BEFORE_ASSOC)))
if (WARN_ON(ieee80211_hw_check(hw, TIMING_BEACON_ONLY)))
if (WARN_ON(!ieee80211_hw_check(hw, AP_LINK_PS)))
!ieee80211_hw_check(&local->hw, SW_CRYPTO_CONTROL)) {
if (ieee80211_hw_check(&local->hw, SIGNAL_DBM)) {
} else if (ieee80211_hw_check(&local->hw, SIGNAL_UNSPEC)) {
if (ieee80211_hw_check(&local->hw, CHANCTX_STA_CSA))
if (ieee80211_hw_check(&local->hw, SUPPORTS_MULTI_BSSID)) {
if (ieee80211_hw_check(&local->hw,
local_cap = ieee80211_hw_check(hw, SUPPORTS_VHT_EXT_NSS_BW);
!ieee80211_hw_check(hw, NO_AUTO_VIF)) {
if (!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF))
if (ieee80211_hw_check(&sdata->local->hw, SUPPORT_FAST_XMIT))
if (ieee80211_hw_check(&sdata->local->hw, SIGNAL_DBM))
ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK),
if (ieee80211_hw_check(&sdata->local->hw, NEED_DTIM_BEFORE_ASSOC)) {
if (ieee80211_hw_check(&sdata->local->hw, CONNECTION_MONITOR))
if (ieee80211_hw_check(&sdata->local->hw, CONNECTION_MONITOR))
if (!ieee80211_hw_check(&local->hw, STRICT)) {
!ieee80211_hw_check(&local->hw, STRICT)) {
if (ieee80211_hw_check(&sdata->local->hw, STRICT))
ieee80211_hw_check(&local->hw, SPECTRUM_MGMT))
if (ieee80211_hw_check(&local->hw, SUPPORTS_ONLY_HE_MULTI_BSSID) &&
!ieee80211_hw_check(&local->hw, STRICT))
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS))
!ieee80211_hw_check(&local->hw,
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS))
if (!ieee80211_hw_check(&local->hw, CHANCTX_STA_CSA)) {
!ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS)) {
if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK))
if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK) &&
ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS))
if (!ieee80211_hw_check(&local->hw, SUPPORTS_PS) ||
ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS)) {
if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK) &&
if (!(ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS) &&
ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK)) ||
if (ieee80211_hw_check(&sdata->local->hw, CONNECTION_MONITOR))
if (ieee80211_hw_check(&sdata->local->hw, REPORTS_TX_ACK_STATUS)) {
if (!ieee80211_hw_check(&sdata->local->hw, STRICT))
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS))
if (!ieee80211_hw_check(&local->hw, STRICT) && !is_6ghz &&
if (ieee80211_hw_check(&local->hw, STRICT) &&
if (!ieee80211_hw_check(&sdata->local->hw, STRICT) && !ap_min_req_set)
if (!ieee80211_hw_check(&sdata->local->hw, STRICT) && !ap_min_req_set)
if (ieee80211_hw_check(&local->hw, TIMING_BEACON_ONLY) &&
if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK) &&
if (ieee80211_hw_check(&local->hw, TIMING_BEACON_ONLY) &&
ieee80211_hw_check(&sdata->local->hw, DISALLOW_PUNCTURING))
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS))
if (!ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS))
else if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
if (!ieee80211_hw_check(&sdata->local->hw, CONNECTION_MONITOR))
} else if (!ieee80211_hw_check(&sdata->local->hw,
if (ieee80211_hw_check(&local->hw, TIMING_BEACON_ONLY)) {
if (ieee80211_hw_check(&local->hw, STRICT) ||
if (ieee80211_hw_check(&local->hw, QUEUE_CONTROL))
!ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK))
if (ieee80211_hw_check(hw, AMPDU_AGGREGATION)) {
if (ieee80211_hw_check(hw, AMPDU_AGGREGATION) &&
if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL)) {
if (ieee80211_hw_check(&sdata->local->hw, HAS_RATE_CONTROL))
if (ieee80211_hw_check(&sdata->local->hw, SUPPORTS_RC_TABLE))
if (!ieee80211_hw_check(mp->hw, TX_STATUS_NO_AMPDU_LEN))
!ieee80211_hw_check(mp->hw, SUPPORTS_HT_CCK_RATES))
if (ieee80211_hw_check(&local->hw, SIGNAL_DBM))
if (!ieee80211_hw_check(&local->hw, AP_LINK_PS))
WARN_ON(!ieee80211_hw_check(&sta->local->hw, AP_LINK_PS));
if (ieee80211_hw_check(&sdata->local->hw, AP_LINK_PS))
if (!ieee80211_hw_check(&sta->local->hw, AP_LINK_PS) &&
if (!ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS) &&
if (ieee80211_hw_check(&rx->local->hw, DETECTS_COLOR_COLLISION))
if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM) &&
if (!(has_fcs && ieee80211_hw_check(&local->hw, RX_INCLUDES_FCS)))
if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM) &&
if (ieee80211_hw_check(&local->hw, QUEUE_CONTROL))
if (has_fcs && ieee80211_hw_check(&local->hw, RX_INCLUDES_FCS))
fastrx.uses_rss = ieee80211_hw_check(&local->hw, USES_RSS);
if (ieee80211_hw_check(&local->hw, AMPDU_AGGREGATION) &&
!ieee80211_hw_check(&local->hw, SUPPORTS_REORDERING_BUFFER))
if (ieee80211_hw_check(&local->hw, SIGNAL_DBM) &&
if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK))
if (ieee80211_hw_check(&local->hw, SUPPORTS_PS) &&
!ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS))
if (!ieee80211_hw_check(&local->hw, AP_LINK_PS))
if (ieee80211_hw_check(&local->hw, RX_INCLUDES_FCS)) {
if (ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR) &&
if (ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR))
else if (ieee80211_hw_check(&local->hw, SIGNAL_DBM))
else if (ieee80211_hw_check(&local->hw, SIGNAL_UNSPEC))
if (ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS)) {
!ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS) &&
if (ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS)) {
if (ieee80211_hw_check(&local->hw, AP_LINK_PS) && !local->ops->set_tim)
if (!ieee80211_hw_check(&local->hw, AP_LINK_PS))
ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
if (ieee80211_hw_check(&sta->local->hw, SIGNAL_DBM) ||
ieee80211_hw_check(&sta->local->hw, SIGNAL_UNSPEC)) {
if (ieee80211_hw_check(&sta->local->hw, SIGNAL_DBM) ||
ieee80211_hw_check(&sta->local->hw, SIGNAL_UNSPEC)) {
if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
if (ieee80211_hw_check(hw, USES_RSS)) {
if (ieee80211_hw_check(&sdata->local->hw, NEEDS_UNIQUE_STA_ADDR) &&
if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL) &&
ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS) &&
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
WARN_ON(!ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS));
if (ieee80211_hw_check(&sta->local->hw, REPORTS_LOW_ACK))
ieee80211_hw_check(&sdata->local->hw, REPORTS_TX_ACK_STATUS)) {
bool wider_band = ieee80211_hw_check(&local->hw, TDLS_WIDER_BW) &&
bool buffer_sta = ieee80211_hw_check(&local->hw,
ieee80211_hw_check(&local->hw, AMPDU_AGGREGATION) &&
!ieee80211_hw_check(&local->hw, TX_AMPDU_SETUP_IN_HW)) {
if (!ieee80211_hw_check(&sdata->local->hw,
} else if (!ieee80211_hw_check(&sdata->local->hw,
ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) {
if (sdata && ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) {
} else if (ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) {
if (!ieee80211_hw_check(&tx->local->hw, HAS_RATE_CONTROL))
if (!ieee80211_hw_check(&tx->local->hw, HAS_RATE_CONTROL))
!ieee80211_hw_check(&local->hw, QUEUE_CONTROL))
if (!ieee80211_hw_check(&local->hw, SUPPORTS_PS))
(!ieee80211_hw_check(&local->hw, SUPPORTS_CLONED_SKBS) ||
if (ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS))
if (!ieee80211_hw_check(&local->hw, SUPPORT_FAST_XMIT))
if (ieee80211_hw_check(&local->hw, SUPPORTS_PS) &&
!ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS) &&
!ieee80211_hw_check(&local->hw, SUPPORTS_TX_FRAG))
if (!ieee80211_hw_check(&local->hw, TX_AMSDU))
if (!ieee80211_hw_check(&tx->local->hw, HAS_RATE_CONTROL) &&
if (!ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL)) {
!ieee80211_hw_check(&local->hw, TX_FRAG_LIST)) {
ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) {
ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) {
} else if (ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) {
if (ieee80211_hw_check(&tx->local->hw, QUEUE_CONTROL))
if (!ieee80211_hw_check(&tx->local->hw, HOST_BROADCAST_PS_BUFFERING))
ieee80211_hw_check(&local->hw, SUPPORT_FAST_XMIT) &&
!ieee80211_hw_check(&sdata->local->hw, MLO_MCAST_MULTI_LINK_TX)) ||
if (ieee80211_hw_check(hw, BEACON_TX_STATUS) ||
if (ieee80211_hw_check(&local->hw, AMPDU_AGGREGATION)) {
if (ieee80211_hw_check(&local->hw, AMPDU_AGGREGATION))
if (ieee80211_hw_check(&tx->local->hw, SUPPORTS_TX_FRAG))
if (sdata && ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) {
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR))
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR))
if (ieee80211_hw_check(hw, AMPDU_AGGREGATION)) {
if (!ieee80211_hw_check(hw, SUPPORTS_VHT_EXT_NSS_BW))
if (sdata && ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) {
if (!queues || !ieee80211_hw_check(&local->hw, QUEUE_CONTROL))
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR))
if (sdata && ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF) &&
!ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR))
if (monitor && ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF) &&
if (ieee80211_hw_check(&sdata->local->hw, SUPPORTS_VHT_EXT_NSS_BW))
ieee80211_hw_check(&tx->local->hw, SUPPORTS_TX_FRAG)) &&