v/iwlwifi/mld/notif.c | 725 ++++++ sys/contrib/dev/iwlwifi/mld/notif.h | 35 + sys/contrib/dev/iwlwifi/mld/phy.c | 198 ++ sys/contrib/dev/iwlwifi/mld/phy.h | 60 + sys/contrib/dev/iwlwifi/mld/power.c | 391 +++ sys/contrib/dev/iwlwifi/mld/power.h | 33 + sys/contrib/dev/iwlwifi/mld/ptp.c | 321 +++ sys/contrib/dev/iwlwifi/mld/ptp.h | 45 + sys/contrib/dev/iwlwifi/mld/regulatory.c | 369 +++ sys/contrib/dev/iwlwifi/mld/regulatory.h | 23 + sys/contrib/dev/iwlwifi/mld/roc.c | 265 ++ sys/contrib/dev/iwlwifi/mld/roc.h | 20 + sys/contrib/dev/iwlwifi/mld/rx.c | 2137 ++++++++++++++++ sys/contrib/dev/iwlwifi/mld/rx.h | 72 + sys/contrib/dev/iwlwifi/mld/scan.c | 2181 ++++++++++++++++ sys/contrib/dev/iwlwifi/mld/scan.h | 173 ++ sys/contrib/dev/iwlwifi/mld/session-protect.c | 222 ++ sys/contrib/dev/iwlwifi/mld/session-protect.h | 102 + sys/contrib/dev/iwlwifi/mld/sta.c | 1321 ++++++++++ sys/contrib/dev/iwlwifi/mld/sta.h | 273 ++ sys/contrib/dev/iwlwifi/mld/stats.c | 518 ++++ sys/contrib/dev/iwlwifi/mld/stats.h | 22 + sys/contrib/dev/iwlwifi/mld/tests/Makefile | 5 + sys/contrib/dev/iwlwifi/mld/tests/agg.c | 663 +++++ sys/contrib/dev/iwlwifi/mld/tests/hcmd.c | 62 + sys/contrib/dev/iwlwifi/mld/tests/link-selection.c | 339 +++ sys/contrib/dev/iwlwifi/mld/tests/link.c | 110 + sys/contrib/dev/iwlwifi/mld/tests/module.c | 11 + sys/contrib/dev/iwlwifi/mld/tests/rx.c | 353 +++ sys/contrib/dev/iwlwifi/mld/tests/utils.c | 503 ++++ sys/contrib/dev/iwlwifi/mld/tests/utils.h | 140 + sys/contrib/dev/iwlwifi/mld/thermal.c | 467 ++++ sys/contrib/dev/iwlwifi/mld/thermal.h | 36 + sys/contrib/dev/iwlwifi/mld/time_sync.c | 240 ++ sys/contrib/dev/iwlwifi/mld/time_sync.h | 26 + sys/contrib/dev/iwlwifi/mld/tlc.c | 702 +++++ sys/contrib/dev/iwlwifi/mld/tlc.h | 23 + sys/contrib/dev/iwlwifi/mld/tx.c | 1394 ++++++++++ sys/contrib/dev/iwlwifi/mld/tx.h | 77 + sys/contrib/dev/iwlwifi/mvm/binding.c | 7 +- sys/contrib/dev/iwlwifi/mvm/coex.c | 88 +- sys/contrib/dev/iwlwifi/mvm/constants.h | 8 +- sys/contrib/dev/iwlwifi/mvm/d3.c | 761 +++--- sys/contrib/dev/iwlwifi/mvm/debugfs-vif.c | 66 +- sys/contrib/dev/iwlwifi/mvm/debugfs.c | 130 +- sys/contrib/dev/iwlwifi/mvm/ftm-initiator.c | 130 +- sys/contrib/dev/iwlwifi/mvm/ftm-responder.c | 90 +- sys/contrib/dev/iwlwifi/mvm/fw.c | 308 +-- sys/contrib/dev/iwlwifi/mvm/led.c | 4 +- sys/contrib/dev/iwlwifi/mvm/link.c | 106 +- sys/contrib/dev/iwlwifi/mvm/mac-ctxt.c | 259 +- sys/contrib/dev/iwlwifi/mvm/mac80211.c | 483 ++-- sys/contrib/dev/iwlwifi/mvm/mld-key.c | 14 +- sys/contrib/dev/iwlwifi/mvm/mld-mac.c | 55 +- sys/contrib/dev/iwlwifi/mvm/mld-mac80211.c | 233 +- sys/contrib/dev/iwlwifi/mvm/mld-sta.c | 81 +- sys/contrib/dev/iwlwifi/mvm/mvm.h | 225 +- sys/contrib/dev/iwlwifi/mvm/nvm.c | 52 +- sys/contrib/dev/iwlwifi/mvm/offloading.c | 2 +- sys/contrib/dev/iwlwifi/mvm/ops.c | 394 +-- sys/contrib/dev/iwlwifi/mvm/phy-ctxt.c | 8 +- sys/contrib/dev/iwlwifi/mvm/power.c | 10 +- sys/contrib/dev/iwlwifi/mvm/ptp.c | 14 +- sys/contrib/dev/iwlwifi/mvm/quota.c | 43 +- sys/contrib/dev/iwlwifi/mvm/rs-fw.c | 36 +- sys/contrib/dev/iwlwifi/mvm/rx.c | 77 +- sys/contrib/dev/iwlwifi/mvm/rxmq.c | 236 +- sys/contrib/dev/iwlwifi/mvm/scan.c | 192 +- sys/contrib/dev/iwlwifi/mvm/sta.c | 244 +- sys/contrib/dev/iwlwifi/mvm/sta.h | 29 +- sys/contrib/dev/iwlwifi/mvm/tdls.c | 20 +- sys/contrib/dev/iwlwifi/mvm/tests/hcmd.c | 38 + sys/contrib/dev/iwlwifi/mvm/time-event.c | 61 +- sys/contrib/dev/iwlwifi/mvm/time-event.h | 8 +- sys/contrib/dev/iwlwifi/mvm/tt.c | 97 +- sys/contrib/dev/iwlwifi/mvm/tx.c | 406 ++- sys/contrib/dev/iwlwifi/mvm/utils.c | 258 +- .../pcie/{ctxt-info-gen3.c => ctxt-info-v2.c} | 213 +- sys/contrib/dev/iwlwifi/pcie/ctxt-info.c | 29 +- sys/contrib/dev/iwlwifi/pcie/drv.c | 2503 ++++++++---------- .../dev/iwlwifi/pcie/{ => gen1_2}/internal.h | 188 +- sys/contrib/dev/iwlwifi/pcie/{ => gen1_2}/rx.c | 223 +- .../dev/iwlwifi/pcie/{ => gen1_2}/trans-gen2.c | 209 +- sys/contrib/dev/iwlwifi/pcie/{ => gen1_2}/trans.c | 1216 ++++++--- .../dev/iwlwifi/pcie/{ => gen1_2}/tx-gen2.c | 88 +- sys/contrib/dev/iwlwifi/pcie/{ => gen1_2}/tx.c | 291 ++- .../iwl-context-info-v2.h} | 109 +- .../dev/iwlwifi/{ => pcie}/iwl-context-info.h | 44 +- sys/contrib/dev/iwlwifi/pcie/utils.c | 128 + sys/contrib/dev/iwlwifi/pcie/utils.h | 40 + sys/contrib/dev/iwlwifi/tests/Makefile | 2 +- sys/contrib/dev/iwlwifi/tests/devinfo.c | 229 +- sys/modules/iwlwifi/Makefile | 68 +- 207 files changed, 39858 insertions(+), 8269 deletions(-) diff --cc sys/contrib/dev/iwlwifi/cfg/dr.c index 000000000000,807f4e29d55a..807f4e29d55a mode 000000,100644..100644 --- a/sys/contrib/dev/iwlwifi/cfg/dr.c +++ b/sys/contrib/dev/iwlwifi/cfg/dr.c diff --cc sys/contrib/dev/iwlwifi/cfg/rf-fm.c index 000000000000,456a666c8dfd..456a666c8dfd mode 000000,100644..100644 --- a/sys/contrib/dev/iwlwifi/cfg/rf-fm.c +++ b/sys/contrib/dev/iwlwifi/cfg/rf-fm.c diff --cc sys/contrib/dev/iwlwifi/cfg/rf-gf.c index 000000000000,7ff5170faaa9..7ff5170faaa9 mode 000000,100644..100644 --- a/sys/contrib/dev/iwlwifi/cfg/rf-gf.c +++ b/sys/contrib/dev/iwlwifi/cfg/rf-gf.c diff --cc sys/contrib/dev/iwlwifi/cfg/rf-hr.c index 000000000000,9f408d276ce9..9f408d276ce9 mode 000000,100644..100644 --- a/sys/contrib/dev/iwlwifi/cfg/rf-hr.c +++ b/sys/contrib/dev/iwlwifi/cfg/rf-hr.c diff --cc sys/contrib/dev/iwlwifi/cfg/rf-jf.c index 000000000000,0a074e0a3bc6..0a074e0a3bc6 mode 000000,100644..100644 --- a/sys/contrib/dev/iwlwifi/cfg/rf-jf.c +++ b/sys/contrib/dev/iwlwifi/cfg/rf-jf.c diff --cc sys/contrib/dev/iwlwifi/cfg/rf-pe.c index 000000000000,483f21659eff..483f21659eff mode 000000,100644..100644 --- a/sys/contrib/dev/iwlwifi/cfg/rf-pe.c +++ b/sys/contrib/dev/iwlwifi/cfg/rf-pe.c diff --cc sys/contrib/dev/iwlwifi/cfg/rf-wh.c index 000000000000,97735175cb0e..97735175cb0e mode 000000,100644..100644 --- a/sys/contrib/dev/iwlwifi/cfg/rf-wh.c +++ b/sys/contrib/dev/iwlwifi/cfg/rf-wh.c diff --cc sys/contrib/dev/iwlwifi/fw/api/dhc.h index 000000000000,b6d79c678cd8..ddba2fc9254c mode 000000,100644..100644 --- a/sys/contrib/dev/iwlwifi/fw/api/dhc.h +++ b/sys/contrib/dev/iwlwifi/fw/api/dhc.h @@@ -1,0 -1,226 +1,230 @@@ + /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ + /* + * Copyright (C) 2025 Intel Corporation + */ + #ifndef __iwl_fw_api_dhc_h__ + #define __iwl_fw_api_dhc_h__ + + #define DHC_TABLE_MASK_POS (28) + + /** + * enum iwl_dhc_table_id - DHC table operations index + */ + enum iwl_dhc_table_id { + /** + * @DHC_TABLE_INTEGRATION: select the integration table + */ + DHC_TABLE_INTEGRATION = 2 << DHC_TABLE_MASK_POS, + /** + * @DHC_TABLE_TOOLS: select the tools table + */ + DHC_TABLE_TOOLS = 0, + }; + + /** + * enum iwl_dhc_umac_tools_table - tools operations + * @DHC_TOOLS_UMAC_GET_TAS_STATUS: Get TAS status. + * See @struct iwl_dhc_tas_status_resp + */ + enum iwl_dhc_umac_tools_table { + DHC_TOOLS_UMAC_GET_TAS_STATUS = 0, + }; + + /** + * enum iwl_dhc_umac_integration_table - integration operations + */ + enum iwl_dhc_umac_integration_table { + /** + * @DHC_INT_UMAC_TWT_OPERATION: trigger a TWT operation + */ + DHC_INT_UMAC_TWT_OPERATION = 4, + /** + * @DHC_INTEGRATION_TLC_DEBUG_CONFIG: TLC debug + */ + DHC_INTEGRATION_TLC_DEBUG_CONFIG = 1, + /** + * @DHC_INTEGRATION_MAX: Maximum UMAC integration table entries + */ + DHC_INTEGRATION_MAX + }; + + #define DHC_TARGET_UMAC BIT(27) + + /** + * struct iwl_dhc_cmd - debug host command + * @length: length in DWs of the data structure that is concatenated to the end + * of this struct + * @index_and_mask: bit 31 is 1 for data set operation else it's 0 + * bits 28-30 is the index of the table of the operation - + * &enum iwl_dhc_table_id * + * bit 27 is 0 if the cmd targeted to LMAC and 1 if targeted to UMAC, + * (LMAC is 0 for backward compatibility) + * bit 26 is 0 if the cmd targeted to LMAC0 and 1 if targeted to LMAC1, + * relevant only if bit 27 set to 0 + * bits 0-25 is a specific entry index in the table specified in bits 28-30 + * + * @data: the concatenated data. + */ + struct iwl_dhc_cmd { + __le32 length; + __le32 index_and_mask; ++#if defined(__linux__) + __le32 data[]; ++#elif defined(__FreeBSD__) ++ __le32 data[0]; ++#endif + } __packed; /* DHC_CMD_API_S */ + + /** + * struct iwl_dhc_payload_hdr - DHC payload header + * @version: a version of a payload + * @reserved: reserved for alignment + */ + struct iwl_dhc_payload_hdr { + u8 version; + u8 reserved[3]; + } __packed; /* DHC_PAYLOAD_HDR_API_S_VER_1 */ + + /** + * struct iwl_dhc_tas_status_per_radio - TAS status per radio + * @band: &PHY_BAND_5 for high band, PHY_BAND_24 for low band and + * &PHY_BAND_6 for ultra high band. + * @static_status: TAS statically enabled or disabled + * @static_disable_reason: TAS static disable reason, uses + * &enum iwl_tas_statically_disabled_reason + * @near_disconnection: is TAS currently near disconnection per radio + * @dynamic_status_ant_a: Antenna A current TAS status. + * uses &enum iwl_tas_dyna_status + * @dynamic_status_ant_b: Antenna B current TAS status. + * uses &enum iwl_tas_dyna_status + * @max_reg_pwr_limit_ant_a: Antenna A regulatory power limits in dBm + * @max_reg_pwr_limit_ant_b: Antenna B regulatory power limits in dBm + * @sar_limit_ant_a: Antenna A SAR limit per radio in dBm + * @sar_limit_ant_b: Antenna B SAR limit per radio in dBm + * @reserved: reserved for alignment + */ + struct iwl_dhc_tas_status_per_radio { + u8 band; + u8 static_status; + u8 static_disable_reason; + u8 near_disconnection; + u8 dynamic_status_ant_a; + u8 dynamic_status_ant_b; + __le16 max_reg_pwr_limit_ant_a; + __le16 max_reg_pwr_limit_ant_b; + __le16 sar_limit_ant_a; + __le16 sar_limit_ant_b; + u8 reserved[2]; + } __packed; /* DHC_TAS_STATUS_PER_RADIO_S_VER_1 */ + + /** + * struct iwl_dhc_tas_status_resp - Response to DHC_TOOLS_UMAC_GET_TAS_STATUS + * @header: DHC payload header, uses &struct iwl_dhc_payload_hdr + * @tas_config_info: see @struct bios_value_u32 + * @mcc_block_list: block listed country codes + * @tas_status_radio: TAS status, uses &struct iwl_dhc_tas_status_per_radio + * @curr_mcc: current mcc + * @valid_radio_mask: represent entry in tas_status_per_radio is valid. + * @reserved: reserved for alignment + */ + struct iwl_dhc_tas_status_resp { + struct iwl_dhc_payload_hdr header; + struct bios_value_u32 tas_config_info; + __le16 mcc_block_list[IWL_WTAS_BLACK_LIST_MAX]; + struct iwl_dhc_tas_status_per_radio tas_status_radio[2]; + __le16 curr_mcc; + u8 valid_radio_mask; + u8 reserved; + } __packed; /* DHC_TAS_STATUS_RSP_API_S_VER_1 */ + + /** + * struct iwl_dhc_cmd_resp_v1 - debug host command response + * @status: status of the command + * @data: the response data + */ + struct iwl_dhc_cmd_resp_v1 { + __le32 status; + __le32 data[]; + } __packed; /* DHC_RESP_API_S_VER_1 */ + + /** + * struct iwl_dhc_cmd_resp - debug host command response + * @status: status of the command + * @descriptor: command descriptor (index_and_mask) returned + * @data: the response data + */ + struct iwl_dhc_cmd_resp { + __le32 status; + __le32 descriptor; + __le32 data[]; + } __packed; /* DHC_RESP_API_S_VER_2 and DHC_RESP_API_S_VER_3 */ + + /** + * enum iwl_dhc_twt_operation_type - describes the TWT operation type + * + * @DHC_TWT_REQUEST: Send a Request TWT command + * @DHC_TWT_SUGGEST: Send a Suggest TWT command + * @DHC_TWT_DEMAND: Send a Demand TWT command + * @DHC_TWT_GROUPING: Send a Grouping TWT command + * @DHC_TWT_ACCEPT: Send a Accept TWT command + * @DHC_TWT_ALTERNATE: Send a Alternate TWT command + * @DHC_TWT_DICTATE: Send a Dictate TWT command + * @DHC_TWT_REJECT: Send a Reject TWT command + * @DHC_TWT_TEARDOWN: Send a TearDown TWT command + */ + enum iwl_dhc_twt_operation_type { + DHC_TWT_REQUEST, + DHC_TWT_SUGGEST, + DHC_TWT_DEMAND, + DHC_TWT_GROUPING, + DHC_TWT_ACCEPT, + DHC_TWT_ALTERNATE, + DHC_TWT_DICTATE, + DHC_TWT_REJECT, + DHC_TWT_TEARDOWN, + }; /* DHC_TWT_OPERATION_TYPE_E */ + + /** + * struct iwl_dhc_twt_operation - trigger a TWT operation + * + * @mac_id: the mac Id on which to trigger TWT operation + * @twt_operation: see &enum iwl_dhc_twt_operation_type + * @target_wake_time: when should we be on channel + * @interval_exp: the exponent for the interval + * @interval_mantissa: the mantissa for the interval + * @min_wake_duration: the minimum duration for the wake period + * @trigger: is the TWT triggered or not + * @flow_type: is the TWT announced or not + * @flow_id: the TWT flow identifier from 0 to 7 + * @protection: is the TWT protected + * @ndo_paging_indicator: is ndo_paging_indicator set + * @responder_pm_mode: is responder_pm_mode set + * @negotiation_type: if the responder wants to doze outside the TWT SP + * @twt_request: 1 for TWT request, 0 otherwise + * @implicit: is TWT implicit + * @twt_group_assignment: the TWT group assignment + * @twt_channel: the TWT channel + * @reserved: reserved + */ + struct iwl_dhc_twt_operation { + __le32 mac_id; + __le32 twt_operation; + __le64 target_wake_time; + __le32 interval_exp; + __le32 interval_mantissa; + __le32 min_wake_duration; + u8 trigger; + u8 flow_type; + u8 flow_id; + u8 protection; + u8 ndo_paging_indicator; + u8 responder_pm_mode; + u8 negotiation_type; + u8 twt_request; + u8 implicit; + u8 twt_group_assignment; + u8 twt_channel; + u8 reserved; + }; /* DHC_TWT_OPERATION_API_S */ + + #endif /* __iwl_fw_api_dhc_h__ */ diff --cc sys/contrib/dev/iwlwifi/fw/api/phy.h index c73d4d597857,000000000000..4c5221debbcb mode 100644,000000..100644 --- a/sys/contrib/dev/iwlwifi/fw/api/phy.h +++ b/sys/contrib/dev/iwlwifi/fw/api/phy.h @@@ -1,235 -1,0 +1,240 @@@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ +/* - * Copyright (C) 2012-2014, 2019-2022, 2024 Intel Corporation ++ * Copyright (C) 2012-2014, 2019-2022, 2024-2025 Intel Corporation + * Copyright (C) 2013-2015 Intel Mobile Communications GmbH + * Copyright (C) 2016-2017 Intel Deutschland GmbH + */ +#ifndef __iwl_fw_api_phy_h__ +#define __iwl_fw_api_phy_h__ ++#include ++#include ++#if defined(__FreeBSD__) ++#include ++#endif + +/** + * enum iwl_phy_ops_subcmd_ids - PHY group commands + */ +enum iwl_phy_ops_subcmd_ids { + /** + * @CMD_DTS_MEASUREMENT_TRIGGER_WIDE: + * Uses either &struct iwl_dts_measurement_cmd or + * &struct iwl_ext_dts_measurement_cmd + */ + CMD_DTS_MEASUREMENT_TRIGGER_WIDE = 0x0, + + /** - * @CTDP_CONFIG_CMD: &struct iwl_mvm_ctdp_cmd ++ * @CTDP_CONFIG_CMD: &struct iwl_ctdp_cmd + */ + CTDP_CONFIG_CMD = 0x03, + + /** + * @TEMP_REPORTING_THRESHOLDS_CMD: &struct temp_report_ths_cmd + */ + TEMP_REPORTING_THRESHOLDS_CMD = 0x04, + + /** + * @PER_CHAIN_LIMIT_OFFSET_CMD: &struct iwl_geo_tx_power_profiles_cmd_v1, + * &struct iwl_geo_tx_power_profiles_cmd_v2, + * &struct iwl_geo_tx_power_profiles_cmd_v3, + * &struct iwl_geo_tx_power_profiles_cmd_v4 or + * &struct iwl_geo_tx_power_profiles_cmd_v5 + */ + PER_CHAIN_LIMIT_OFFSET_CMD = 0x05, + + /** + * @PER_PLATFORM_ANT_GAIN_CMD: &union iwl_ppag_table_cmd + */ + PER_PLATFORM_ANT_GAIN_CMD = 0x07, + + /** + * @AP_TX_POWER_CONSTRAINTS_CMD: &struct iwl_txpower_constraints_cmd + */ + AP_TX_POWER_CONSTRAINTS_CMD = 0x0C, + + /** + * @CT_KILL_NOTIFICATION: &struct ct_kill_notif + */ + CT_KILL_NOTIFICATION = 0xFE, + + /** + * @DTS_MEASUREMENT_NOTIF_WIDE: + * &struct iwl_dts_measurement_notif_v1 or - * &struct iwl_dts_measurement_notif_v2 ++ * &struct iwl_dts_measurement_notif + */ + DTS_MEASUREMENT_NOTIF_WIDE = 0xFF, +}; + +/* DTS measurements */ + +enum iwl_dts_measurement_flags { + DTS_TRIGGER_CMD_FLAGS_TEMP = BIT(0), + DTS_TRIGGER_CMD_FLAGS_VOLT = BIT(1), +}; + +/** + * struct iwl_dts_measurement_cmd - request DTS temp and/or voltage measurements + * + * @flags: indicates which measurements we want as specified in + * &enum iwl_dts_measurement_flags + */ +struct iwl_dts_measurement_cmd { + __le32 flags; +} __packed; /* TEMPERATURE_MEASUREMENT_TRIGGER_CMD_S */ + +/** +* enum iwl_dts_control_measurement_mode - DTS measurement type +* @DTS_AUTOMATIC: Automatic mode (full SW control). Provide temperature read +* back (latest value. Not waiting for new value). Use automatic +* SW DTS configuration. +* @DTS_REQUEST_READ: Request DTS read. Configure DTS with manual settings, +* trigger DTS reading and provide read back temperature read +* when available. +* @DTS_OVER_WRITE: over-write the DTS temperatures in the SW until next read +* @DTS_DIRECT_WITHOUT_MEASURE: DTS returns its latest temperature result, +* without measurement trigger. +*/ +enum iwl_dts_control_measurement_mode { + DTS_AUTOMATIC = 0, + DTS_REQUEST_READ = 1, + DTS_OVER_WRITE = 2, + DTS_DIRECT_WITHOUT_MEASURE = 3, +}; + +/** +* enum iwl_dts_used - DTS to use or used for measurement in the DTS request +* @DTS_USE_TOP: Top +* @DTS_USE_CHAIN_A: chain A +* @DTS_USE_CHAIN_B: chain B +* @DTS_USE_CHAIN_C: chain C +* @XTAL_TEMPERATURE: read temperature from xtal +*/ +enum iwl_dts_used { + DTS_USE_TOP = 0, + DTS_USE_CHAIN_A = 1, + DTS_USE_CHAIN_B = 2, + DTS_USE_CHAIN_C = 3, + XTAL_TEMPERATURE = 4, +}; + +/** +* enum iwl_dts_bit_mode - bit-mode to use in DTS request read mode +* @DTS_BIT6_MODE: bit 6 mode +* @DTS_BIT8_MODE: bit 8 mode +*/ +enum iwl_dts_bit_mode { + DTS_BIT6_MODE = 0, + DTS_BIT8_MODE = 1, +}; + +/** + * struct iwl_ext_dts_measurement_cmd - request extended DTS temp measurements + * @control_mode: see &enum iwl_dts_control_measurement_mode + * @temperature: used when over write DTS mode is selected + * @sensor: set temperature sensor to use. See &enum iwl_dts_used + * @avg_factor: average factor to DTS in request DTS read mode + * @bit_mode: value defines the DTS bit mode to use. See &enum iwl_dts_bit_mode + * @step_duration: step duration for the DTS + */ +struct iwl_ext_dts_measurement_cmd { + __le32 control_mode; + __le32 temperature; + __le32 sensor; + __le32 avg_factor; + __le32 bit_mode; + __le32 step_duration; +} __packed; /* XVT_FW_DTS_CONTROL_MEASUREMENT_REQUEST_API_S */ + +/** + * struct iwl_dts_measurement_notif_v1 - measurements notification + * + * @temp: the measured temperature + * @voltage: the measured voltage + */ +struct iwl_dts_measurement_notif_v1 { + __le32 temp; + __le32 voltage; +} __packed; /* TEMPERATURE_MEASUREMENT_TRIGGER_NTFY_S_VER_1*/ + +/** - * struct iwl_dts_measurement_notif_v2 - measurements notification ++ * struct iwl_dts_measurement_notif - measurements notification + * + * @temp: the measured temperature + * @voltage: the measured voltage + * @threshold_idx: the trip index that was crossed + */ - struct iwl_dts_measurement_notif_v2 { ++struct iwl_dts_measurement_notif { + __le32 temp; + __le32 voltage; + __le32 threshold_idx; +} __packed; /* TEMPERATURE_MEASUREMENT_TRIGGER_NTFY_S_VER_2 */ + +/** + * struct iwl_dts_measurement_resp - measurements response + * + * @temp: the measured temperature + */ +struct iwl_dts_measurement_resp { + __le32 temp; +} __packed; /* CMD_DTS_MEASUREMENT_RSP_API_S_VER_1 */ + +/** + * struct ct_kill_notif - CT-kill entry notification + * This structure represent both versions of this notification. + * + * @temperature: the current temperature in celsius + * @dts: only in v2: DTS that trigger the CT Kill bitmap: + * bit 0: ToP master + * bit 1: PA chain A master + * bit 2: PA chain B master + * bit 3: ToP slave + * bit 4: PA chain A slave + * bit 5: PA chain B slave) + * bits 6,7: reserved (set to 0) + * @scheme: only for v2: scheme that trigger the CT Kill (0-SW, 1-HW) + */ +struct ct_kill_notif { + __le16 temperature; + u8 dts; + u8 scheme; +} __packed; /* CT_KILL_NOTIFICATION_API_S_VER_1, CT_KILL_NOTIFICATION_API_S_VER_2 */ + +/** - * enum iwl_mvm_ctdp_cmd_operation - CTDP command operations ++* enum iwl_ctdp_cmd_operation - CTDP command operations +* @CTDP_CMD_OPERATION_START: update the current budget +* @CTDP_CMD_OPERATION_STOP: stop ctdp +* @CTDP_CMD_OPERATION_REPORT: get the average budget +*/ - enum iwl_mvm_ctdp_cmd_operation { ++enum iwl_ctdp_cmd_operation { + CTDP_CMD_OPERATION_START = 0x1, + CTDP_CMD_OPERATION_STOP = 0x2, + CTDP_CMD_OPERATION_REPORT = 0x4, +};/* CTDP_CMD_OPERATION_TYPE_E */ + +/** - * struct iwl_mvm_ctdp_cmd - track and manage the FW power consumption budget ++ * struct iwl_ctdp_cmd - track and manage the FW power consumption budget + * - * @operation: see &enum iwl_mvm_ctdp_cmd_operation ++ * @operation: see &enum iwl_ctdp_cmd_operation + * @budget: the budget in milliwatt + * @window_size: defined in API but not used + */ - struct iwl_mvm_ctdp_cmd { ++struct iwl_ctdp_cmd { + __le32 operation; + __le32 budget; + __le32 window_size; +} __packed; + +#define IWL_MAX_DTS_TRIPS 8 + +/** + * struct temp_report_ths_cmd - set temperature thresholds + * + * @num_temps: number of temperature thresholds passed + * @thresholds: array with the thresholds to be configured + */ +struct temp_report_ths_cmd { + __le32 num_temps; + __le16 thresholds[IWL_MAX_DTS_TRIPS]; +} __packed; /* GRP_PHY_TEMP_REPORTING_THRESHOLDS_CMD */ + +#endif /* __iwl_fw_api_phy_h__ */ diff --cc sys/contrib/dev/iwlwifi/fw/api/rx.h index ec89e9576d2e,000000000000..2024b11c80d0 mode 100644,000000..100644 --- a/sys/contrib/dev/iwlwifi/fw/api/rx.h +++ b/sys/contrib/dev/iwlwifi/fw/api/rx.h @@@ -1,1033 -1,0 +1,1059 @@@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ +/* - * Copyright (C) 2012-2014, 2018-2024 Intel Corporation ++ * Copyright (C) 2012-2014, 2018-2025 Intel Corporation + * Copyright (C) 2013-2015 Intel Mobile Communications GmbH + * Copyright (C) 2015-2017 Intel Deutschland GmbH + */ +#ifndef __iwl_fw_api_rx_h__ +#define __iwl_fw_api_rx_h__ + +/* API for pre-9000 hardware */ + +#define IWL_RX_INFO_PHY_CNT 8 +#define IWL_RX_INFO_ENERGY_ANT_ABC_IDX 1 +#define IWL_RX_INFO_ENERGY_ANT_A_MSK 0x000000ff +#define IWL_RX_INFO_ENERGY_ANT_B_MSK 0x0000ff00 +#define IWL_RX_INFO_ENERGY_ANT_A_POS 0 +#define IWL_RX_INFO_ENERGY_ANT_B_POS 8 +#define IWL_RX_INFO_ENERGY_ANT_C_POS 16 + +enum iwl_mac_context_info { + MAC_CONTEXT_INFO_NONE, + MAC_CONTEXT_INFO_GSCAN, +}; + +/** + * struct iwl_rx_phy_info - phy info + * (REPLY_RX_PHY_CMD = 0xc0) + * @non_cfg_phy_cnt: non configurable DSP phy data byte count + * @cfg_phy_cnt: configurable DSP phy data byte count + * @stat_id: configurable DSP phy data set ID + * @reserved1: reserved + * @system_timestamp: GP2 at on air rise + * @timestamp: TSF at on air rise + * @beacon_time_stamp: beacon at on-air rise + * @phy_flags: general phy flags: band, modulation, ... + * @channel: channel number + * @non_cfg_phy: for various implementations of non_cfg_phy + * @rate_n_flags: RATE_MCS_* + * @byte_count: frame's byte-count + * @frame_time: frame's time on the air, based on byte count and frame rate + * calculation + * @mac_active_msk: what MACs were active when the frame was received + * @mac_context_info: additional info on the context in which the frame was + * received as defined in &enum iwl_mac_context_info + * + * Before each Rx, the device sends this data. It contains PHY information + * about the reception of the packet. + */ +struct iwl_rx_phy_info { + u8 non_cfg_phy_cnt; + u8 cfg_phy_cnt; + u8 stat_id; + u8 reserved1; + __le32 system_timestamp; + __le64 timestamp; + __le32 beacon_time_stamp; + __le16 phy_flags; + __le16 channel; + __le32 non_cfg_phy[IWL_RX_INFO_PHY_CNT]; + __le32 rate_n_flags; + __le32 byte_count; + u8 mac_active_msk; + u8 mac_context_info; + __le16 frame_time; +} __packed; + +/* + * TCP offload Rx assist info + * + * bits 0:3 - reserved + * bits 4:7 - MIC CRC length + * bits 8:12 - MAC header length + * bit 13 - Padding indication + * bit 14 - A-AMSDU indication + * bit 15 - Offload enabled + */ +enum iwl_csum_rx_assist_info { + CSUM_RXA_RESERVED_MASK = 0x000f, + CSUM_RXA_MICSIZE_MASK = 0x00f0, + CSUM_RXA_HEADERLEN_MASK = 0x1f00, + CSUM_RXA_PADD = BIT(13), + CSUM_RXA_AMSDU = BIT(14), + CSUM_RXA_ENA = BIT(15) +}; + +/** + * struct iwl_rx_mpdu_res_start - phy info + * @byte_count: byte count of the frame + * @assist: see &enum iwl_csum_rx_assist_info + */ +struct iwl_rx_mpdu_res_start { + __le16 byte_count; + __le16 assist; +} __packed; /* _RX_MPDU_RES_START_API_S_VER_2 */ + +/** + * enum iwl_rx_phy_flags - to parse %iwl_rx_phy_info phy_flags + * @RX_RES_PHY_FLAGS_BAND_24: true if the packet was received on 2.4 band + * @RX_RES_PHY_FLAGS_MOD_CCK: modulation is CCK + * @RX_RES_PHY_FLAGS_SHORT_PREAMBLE: true if packet's preamble was short + * @RX_RES_PHY_FLAGS_NARROW_BAND: narrow band (<20 MHz) receive + * @RX_RES_PHY_FLAGS_ANTENNA: antenna on which the packet was received + * @RX_RES_PHY_FLAGS_ANTENNA_POS: antenna bit position + * @RX_RES_PHY_FLAGS_AGG: set if the packet was part of an A-MPDU + * @RX_RES_PHY_FLAGS_OFDM_HT: The frame was an HT frame + * @RX_RES_PHY_FLAGS_OFDM_GF: The frame used GF preamble + * @RX_RES_PHY_FLAGS_OFDM_VHT: The frame was a VHT frame + */ +enum iwl_rx_phy_flags { + RX_RES_PHY_FLAGS_BAND_24 = BIT(0), + RX_RES_PHY_FLAGS_MOD_CCK = BIT(1), + RX_RES_PHY_FLAGS_SHORT_PREAMBLE = BIT(2), + RX_RES_PHY_FLAGS_NARROW_BAND = BIT(3), + RX_RES_PHY_FLAGS_ANTENNA = (0x7 << 4), + RX_RES_PHY_FLAGS_ANTENNA_POS = 4, + RX_RES_PHY_FLAGS_AGG = BIT(7), + RX_RES_PHY_FLAGS_OFDM_HT = BIT(8), + RX_RES_PHY_FLAGS_OFDM_GF = BIT(9), + RX_RES_PHY_FLAGS_OFDM_VHT = BIT(10), +}; + +/** + * enum iwl_mvm_rx_status - written by fw for each Rx packet + * @RX_MPDU_RES_STATUS_CRC_OK: CRC is fine + * @RX_MPDU_RES_STATUS_OVERRUN_OK: there was no RXE overflow + * @RX_MPDU_RES_STATUS_SRC_STA_FOUND: station was found + * @RX_MPDU_RES_STATUS_KEY_VALID: key was valid + * @RX_MPDU_RES_STATUS_ICV_OK: ICV is fine, if not, the packet is destroyed + * @RX_MPDU_RES_STATUS_MIC_OK: used for CCM alg only. TKIP MIC is checked + * in the driver. + * @RX_MPDU_RES_STATUS_TTAK_OK: TTAK is fine + * @RX_MPDU_RES_STATUS_MNG_FRAME_REPLAY_ERR: valid for alg = CCM_CMAC or + * alg = CCM only. Checks replay attack for 11w frames. + * @RX_MPDU_RES_STATUS_SEC_NO_ENC: this frame is not encrypted + * @RX_MPDU_RES_STATUS_SEC_WEP_ENC: this frame is encrypted using WEP + * @RX_MPDU_RES_STATUS_SEC_CCM_ENC: this frame is encrypted using CCM + * @RX_MPDU_RES_STATUS_SEC_TKIP_ENC: this frame is encrypted using TKIP + * @RX_MPDU_RES_STATUS_SEC_EXT_ENC: this frame is encrypted using extension + * algorithm + * @RX_MPDU_RES_STATUS_SEC_CMAC_GMAC_ENC: this frame is protected using + * CMAC or GMAC + * @RX_MPDU_RES_STATUS_SEC_ENC_ERR: this frame couldn't be decrypted + * @RX_MPDU_RES_STATUS_SEC_ENC_MSK: bitmask of the encryption algorithm + * @RX_MPDU_RES_STATUS_DEC_DONE: this frame has been successfully decrypted + * @RX_MPDU_RES_STATUS_CSUM_DONE: checksum was done by the hw + * @RX_MPDU_RES_STATUS_CSUM_OK: checksum found no errors + * @RX_MPDU_RES_STATUS_STA_ID_MSK: station ID mask + * @RX_MDPU_RES_STATUS_STA_ID_SHIFT: station ID bit shift + */ +enum iwl_mvm_rx_status { + RX_MPDU_RES_STATUS_CRC_OK = BIT(0), + RX_MPDU_RES_STATUS_OVERRUN_OK = BIT(1), + RX_MPDU_RES_STATUS_SRC_STA_FOUND = BIT(2), + RX_MPDU_RES_STATUS_KEY_VALID = BIT(3), + RX_MPDU_RES_STATUS_ICV_OK = BIT(5), + RX_MPDU_RES_STATUS_MIC_OK = BIT(6), + RX_MPDU_RES_STATUS_TTAK_OK = BIT(7), + RX_MPDU_RES_STATUS_MNG_FRAME_REPLAY_ERR = BIT(7), + RX_MPDU_RES_STATUS_SEC_NO_ENC = (0 << 8), + RX_MPDU_RES_STATUS_SEC_WEP_ENC = (1 << 8), + RX_MPDU_RES_STATUS_SEC_CCM_ENC = (2 << 8), + RX_MPDU_RES_STATUS_SEC_TKIP_ENC = (3 << 8), + RX_MPDU_RES_STATUS_SEC_EXT_ENC = (4 << 8), + RX_MPDU_RES_STATUS_SEC_CMAC_GMAC_ENC = (6 << 8), + RX_MPDU_RES_STATUS_SEC_ENC_ERR = (7 << 8), + RX_MPDU_RES_STATUS_SEC_ENC_MSK = (7 << 8), + RX_MPDU_RES_STATUS_DEC_DONE = BIT(11), + RX_MPDU_RES_STATUS_CSUM_DONE = BIT(16), + RX_MPDU_RES_STATUS_CSUM_OK = BIT(17), + RX_MDPU_RES_STATUS_STA_ID_SHIFT = 24, + RX_MPDU_RES_STATUS_STA_ID_MSK = 0x1f << RX_MDPU_RES_STATUS_STA_ID_SHIFT, +}; + +/* 9000 series API */ +enum iwl_rx_mpdu_mac_flags1 { + IWL_RX_MDPU_MFLG1_ADDRTYPE_MASK = 0x03, + IWL_RX_MPDU_MFLG1_MIC_CRC_LEN_MASK = 0xf0, + /* shift should be 4, but the length is measured in 2-byte + * words, so shifting only by 3 gives a byte result + */ + IWL_RX_MPDU_MFLG1_MIC_CRC_LEN_SHIFT = 3, +}; + +enum iwl_rx_mpdu_mac_flags2 { + /* in 2-byte words */ + IWL_RX_MPDU_MFLG2_HDR_LEN_MASK = 0x1f, + IWL_RX_MPDU_MFLG2_PAD = 0x20, + IWL_RX_MPDU_MFLG2_AMSDU = 0x40, +}; + +enum iwl_rx_mpdu_amsdu_info { + IWL_RX_MPDU_AMSDU_SUBFRAME_IDX_MASK = 0x7f, + IWL_RX_MPDU_AMSDU_LAST_SUBFRAME = 0x80, +}; + - #define RX_MPDU_BAND_POS 6 - #define RX_MPDU_BAND_MASK 0xC0 - #define BAND_IN_RX_STATUS(_val) \ - (((_val) & RX_MPDU_BAND_MASK) >> RX_MPDU_BAND_POS) ++enum iwl_rx_mpdu_mac_phy_band { ++ /* whether or not this is MAC or LINK depends on the API */ ++ IWL_RX_MPDU_MAC_PHY_BAND_MAC_MASK = 0x0f, ++ IWL_RX_MPDU_MAC_PHY_BAND_LINK_MASK = 0x0f, ++ IWL_RX_MPDU_MAC_PHY_BAND_PHY_MASK = 0x30, ++ IWL_RX_MPDU_MAC_PHY_BAND_BAND_MASK = 0xc0, ++}; + +enum iwl_rx_l3_proto_values { + IWL_RX_L3_TYPE_NONE, *** 27153 LINES SKIPPED ***