/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* * Copyright (C) 2012-2014, 2018-2024 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 … #define IWL_RX_INFO_ENERGY_ANT_ABC_IDX … #define IWL_RX_INFO_ENERGY_ANT_A_MSK … #define IWL_RX_INFO_ENERGY_ANT_B_MSK … #define IWL_RX_INFO_ENERGY_ANT_A_POS … #define IWL_RX_INFO_ENERGY_ANT_B_POS … #define IWL_RX_INFO_ENERGY_ANT_C_POS … enum iwl_mac_context_info { … }; /** * 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 { … } __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 { … }; /** * 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 { … } __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 { … }; /** * 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 { … }; /* 9000 series API */ enum iwl_rx_mpdu_mac_flags1 { … }; enum iwl_rx_mpdu_mac_flags2 { … }; enum iwl_rx_mpdu_amsdu_info { … }; #define RX_MPDU_BAND_POS … #define RX_MPDU_BAND_MASK … #define BAND_IN_RX_STATUS(_val) … enum iwl_rx_l3_proto_values { … }; #define IWL_RX_L3_PROTO_POS … enum iwl_rx_l3l4_flags { … }; enum iwl_rx_mpdu_status { … }; #define IWL_RX_REORDER_DATA_INVALID_BAID … enum iwl_rx_mpdu_reorder_data { … }; enum iwl_rx_mpdu_phy_info { … }; enum iwl_rx_mpdu_mac_info { … }; /* TSF overload low dword */ enum iwl_rx_phy_he_data0 { … }; /* TSF overload low dword */ enum iwl_rx_phy_eht_data0 { … }; enum iwl_rx_phy_info_type { … }; /* TSF overload high dword */ enum iwl_rx_phy_common_data1 { … }; /* TSF overload high dword For HE rates*/ enum iwl_rx_phy_he_data1 { … }; /* TSF overload high dword For EHT-MU/TB rates*/ enum iwl_rx_phy_eht_data1 { … }; /* goes into Metadata DW 7 (Qu) or 8 (So or higher) */ enum iwl_rx_phy_he_data2 { … }; /* goes into Metadata DW 8 (Qu) or 7 (So or higher) */ enum iwl_rx_phy_he_data3 { … }; /* goes into Metadata DW 4 high 16 bits */ enum iwl_rx_phy_he_he_data4 { … }; /* goes into Metadata DW 8 (Qu has no EHT) */ enum iwl_rx_phy_eht_data2 { … }; /* goes into Metadata DW 7 (Qu has no EHT) */ enum iwl_rx_phy_eht_data3 { … }; /* goes into Metadata DW 4 */ enum iwl_rx_phy_eht_data4 { … }; /* goes into Metadata DW 16 */ enum iwl_rx_phy_data5 { … }; /** * struct iwl_rx_mpdu_desc_v1 - RX MPDU descriptor */ struct iwl_rx_mpdu_desc_v1 { … } __packed; /* RX_MPDU_RES_START_API_S_VER_4 */ /** * struct iwl_rx_mpdu_desc_v3 - RX MPDU descriptor */ struct iwl_rx_mpdu_desc_v3 { … } __packed; /* RX_MPDU_RES_START_API_S_VER_3, RX_MPDU_RES_START_API_S_VER_5 */ /** * struct iwl_rx_mpdu_desc - RX MPDU descriptor */ struct iwl_rx_mpdu_desc { … } __packed; /* RX_MPDU_RES_START_API_S_VER_3, RX_MPDU_RES_START_API_S_VER_4, RX_MPDU_RES_START_API_S_VER_5 */ #define IWL_RX_DESC_SIZE_V1 … #define RX_NO_DATA_CHAIN_A_POS … #define RX_NO_DATA_CHAIN_A_MSK … #define RX_NO_DATA_CHAIN_B_POS … #define RX_NO_DATA_CHAIN_B_MSK … #define RX_NO_DATA_CHANNEL_POS … #define RX_NO_DATA_CHANNEL_MSK … #define RX_NO_DATA_INFO_TYPE_POS … #define RX_NO_DATA_INFO_TYPE_MSK … #define RX_NO_DATA_INFO_TYPE_NONE … #define RX_NO_DATA_INFO_TYPE_RX_ERR … #define RX_NO_DATA_INFO_TYPE_NDP … #define RX_NO_DATA_INFO_TYPE_MU_UNMATCHED … #define RX_NO_DATA_INFO_TYPE_TB_UNMATCHED … #define RX_NO_DATA_INFO_ERR_POS … #define RX_NO_DATA_INFO_ERR_MSK … #define RX_NO_DATA_INFO_ERR_NONE … #define RX_NO_DATA_INFO_ERR_BAD_PLCP … #define RX_NO_DATA_INFO_ERR_UNSUPPORTED_RATE … #define RX_NO_DATA_INFO_ERR_NO_DELIM … #define RX_NO_DATA_INFO_ERR_BAD_MAC_HDR … #define RX_NO_DATA_INFO_LOW_ENERGY … #define RX_NO_DATA_FRAME_TIME_POS … #define RX_NO_DATA_FRAME_TIME_MSK … #define RX_NO_DATA_RX_VEC0_HE_NSTS_MSK … #define RX_NO_DATA_RX_VEC0_VHT_NSTS_MSK … #define RX_NO_DATA_RX_VEC2_EHT_NSTS_MSK … /* content of OFDM_RX_VECTOR_USIG_A1_OUT */ enum iwl_rx_usig_a1 { … }; /* content of OFDM_RX_VECTOR_USIG_A2_EHT_OUT */ enum iwl_rx_usig_a2_eht { … }; /** * struct iwl_rx_no_data - RX no data descriptor * @info: 7:0 frame type, 15:8 RX error type * @rssi: 7:0 energy chain-A, * 15:8 chain-B, measured at FINA time (FINA_ENERGY), 16:23 channel * @on_air_rise_time: GP2 during on air rise * @fr_time: frame time * @rate: rate/mcs of frame * @phy_info: &enum iwl_rx_phy_he_data0 or &enum iwl_rx_phy_eht_data0 * based on &enum iwl_rx_phy_info_type * @rx_vec: DW-12:9 raw RX vectors from DSP according to modulation type. * for VHT: OFDM_RX_VECTOR_SIGA1_OUT, OFDM_RX_VECTOR_SIGA2_OUT * for HE: OFDM_RX_VECTOR_HE_SIGA1_OUT, OFDM_RX_VECTOR_HE_SIGA2_OUT */ struct iwl_rx_no_data { … } __packed; /* RX_NO_DATA_NTFY_API_S_VER_1, RX_NO_DATA_NTFY_API_S_VER_2 */ /** * struct iwl_rx_no_data_ver_3 - RX no data descriptor * @info: 7:0 frame type, 15:8 RX error type * @rssi: 7:0 energy chain-A, * 15:8 chain-B, measured at FINA time (FINA_ENERGY), 16:23 channel * @on_air_rise_time: GP2 during on air rise * @fr_time: frame time * @rate: rate/mcs of frame * @phy_info: &enum iwl_rx_phy_eht_data0 and &enum iwl_rx_phy_info_type * @rx_vec: DW-12:9 raw RX vectors from DSP according to modulation type. * for VHT: OFDM_RX_VECTOR_SIGA1_OUT, OFDM_RX_VECTOR_SIGA2_OUT * for HE: OFDM_RX_VECTOR_HE_SIGA1_OUT, OFDM_RX_VECTOR_HE_SIGA2_OUT * for EHT: OFDM_RX_VECTOR_USIG_A1_OUT, OFDM_RX_VECTOR_USIG_A2_EHT_OUT, * OFDM_RX_VECTOR_EHT_OUT, OFDM_RX_VECTOR_EHT_USER_FIELD_OUT */ struct iwl_rx_no_data_ver_3 { … } __packed; /* RX_NO_DATA_NTFY_API_S_VER_1, RX_NO_DATA_NTFY_API_S_VER_2 RX_NO_DATA_NTFY_API_S_VER_3 */ struct iwl_frame_release { … }; /** * enum iwl_bar_frame_release_sta_tid - STA/TID information for BAR release * @IWL_BAR_FRAME_RELEASE_TID_MASK: TID mask * @IWL_BAR_FRAME_RELEASE_STA_MASK: STA mask */ enum iwl_bar_frame_release_sta_tid { … }; /** * enum iwl_bar_frame_release_ba_info - BA information for BAR release * @IWL_BAR_FRAME_RELEASE_NSSN_MASK: NSSN mask * @IWL_BAR_FRAME_RELEASE_SN_MASK: SN mask (ignored by driver) * @IWL_BAR_FRAME_RELEASE_BAID_MASK: BAID mask */ enum iwl_bar_frame_release_ba_info { … }; /** * struct iwl_bar_frame_release - frame release from BAR info * @sta_tid: STA & TID information, see &enum iwl_bar_frame_release_sta_tid. * @ba_info: BA information, see &enum iwl_bar_frame_release_ba_info. */ struct iwl_bar_frame_release { … } __packed; /* RX_BAR_TO_FRAME_RELEASE_API_S_VER_1 */ enum iwl_rss_hash_func_en { … }; #define IWL_RSS_HASH_KEY_CNT … #define IWL_RSS_INDIRECTION_TABLE_SIZE … #define IWL_RSS_ENABLE … /** * struct iwl_rss_config_cmd - RSS (Receive Side Scaling) configuration * * @flags: 1 - enable, 0 - disable * @hash_mask: Type of RSS to use. Values are from %iwl_rss_hash_func_en * @reserved: reserved * @secret_key: 320 bit input of random key configuration from driver * @indirection_table: indirection table */ struct iwl_rss_config_cmd { … } __packed; /* RSS_CONFIG_CMD_API_S_VER_1 */ #define IWL_MULTI_QUEUE_SYNC_SENDER_POS … #define IWL_MULTI_QUEUE_SYNC_SENDER_MSK … /** * struct iwl_rxq_sync_cmd - RXQ notification trigger * * @flags: flags of the notification. bit 0:3 are the sender queue * @rxq_mask: rx queues to send the notification on * @count: number of bytes in payload, should be DWORD aligned * @payload: data to send to rx queues */ struct iwl_rxq_sync_cmd { … } __packed; /* MULTI_QUEUE_DRV_SYNC_HDR_CMD_API_S_VER_1 */ /** * struct iwl_rxq_sync_notification - Notification triggered by RXQ * sync command * * @count: number of bytes in payload * @payload: data to send to rx queues */ struct iwl_rxq_sync_notification { … } __packed; /* MULTI_QUEUE_DRV_SYNC_HDR_CMD_API_S_VER_1 */ /** * enum iwl_mvm_pm_event - type of station PM event * @IWL_MVM_PM_EVENT_AWAKE: station woke up * @IWL_MVM_PM_EVENT_ASLEEP: station went to sleep * @IWL_MVM_PM_EVENT_UAPSD: station sent uAPSD trigger * @IWL_MVM_PM_EVENT_PS_POLL: station sent PS-Poll */ enum iwl_mvm_pm_event { … }; /* PEER_PM_NTFY_API_E_VER_1 */ /** * struct iwl_mvm_pm_state_notification - station PM state notification * @sta_id: station ID of the station changing state * @type: the new powersave state, see &enum iwl_mvm_pm_event */ struct iwl_mvm_pm_state_notification { … } __packed; /* PEER_PM_NTFY_API_S_VER_1 */ #define BA_WINDOW_STREAMS_MAX … #define BA_WINDOW_STATUS_TID_MSK … #define BA_WINDOW_STATUS_STA_ID_POS … #define BA_WINDOW_STATUS_STA_ID_MSK … #define BA_WINDOW_STATUS_VALID_MSK … /** * struct iwl_ba_window_status_notif - reordering window's status notification * @bitmap: bitmap of received frames [start_seq_num + 0]..[start_seq_num + 63] * @ra_tid: bit 3:0 - TID, bit 8:4 - STA_ID, bit 9 - valid * @start_seq_num: the start sequence number of the bitmap * @mpdu_rx_count: the number of received MPDUs since entering D0i3 */ struct iwl_ba_window_status_notif { … } __packed; /* BA_WINDOW_STATUS_NTFY_API_S_VER_1 */ /** * struct iwl_rfh_queue_data - RX queue configuration * @q_num: Q num * @enable: enable queue * @reserved: alignment * @urbd_stts_wrptr: DMA address of urbd_stts_wrptr * @fr_bd_cb: DMA address of freeRB table * @ur_bd_cb: DMA address of used RB table * @fr_bd_wid: Initial index of the free table */ struct iwl_rfh_queue_data { … } __packed; /* RFH_QUEUE_CONFIG_S_VER_1 */ /** * struct iwl_rfh_queue_config - RX queue configuration * @num_queues: number of queues configured * @reserved: alignment * @data: DMA addresses per-queue */ struct iwl_rfh_queue_config { … } __packed; /* RFH_QUEUE_CONFIG_API_S_VER_1 */ #endif /* __iwl_fw_api_rx_h__ */