root/drivers/net/wireless/intel/iwlwifi/fw/api/commands.h
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/*
 * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
 * Copyright (C) 2016-2017 Intel Deutschland GmbH
 * Copyright (C) 2018-2022, 2024-2025 Intel Corporation
 */
#ifndef __iwl_fw_api_commands_h__
#define __iwl_fw_api_commands_h__

/**
 * enum iwl_mvm_command_groups - command groups for the firmware
 * @LEGACY_GROUP: legacy group, uses command IDs from &enum iwl_legacy_cmds
 * @LONG_GROUP: legacy group with long header, also uses command IDs
 *      from &enum iwl_legacy_cmds
 * @SYSTEM_GROUP: system group, uses command IDs from
 *      &enum iwl_system_subcmd_ids
 * @MAC_CONF_GROUP: MAC configuration group, uses command IDs from
 *      &enum iwl_mac_conf_subcmd_ids
 * @PHY_OPS_GROUP: PHY operations group, uses command IDs from
 *      &enum iwl_phy_ops_subcmd_ids
 * @DATA_PATH_GROUP: data path group, uses command IDs from
 *      &enum iwl_data_path_subcmd_ids
 * @SCAN_GROUP: scan group, uses command IDs from
 *      &enum iwl_scan_subcmd_ids
 * @NAN_GROUP: NAN group, uses command IDs from &enum iwl_nan_subcmd_ids
 * @LOCATION_GROUP: location group, uses command IDs from
 *      &enum iwl_location_subcmd_ids
 * @BT_COEX_GROUP: bt coex group, uses command IDs from
 *      &enum iwl_bt_coex_subcmd_ids
 * @PROT_OFFLOAD_GROUP: protocol offload group, uses command IDs from
 *      &enum iwl_prot_offload_subcmd_ids
 * @REGULATORY_AND_NVM_GROUP: regulatory/NVM group, uses command IDs from
 *      &enum iwl_regulatory_and_nvm_subcmd_ids
 * @DEBUG_GROUP: Debug group, uses command IDs from &enum iwl_debug_cmds
 * @STATISTICS_GROUP: Statistics group, uses command IDs from
 *      &enum iwl_statistics_subcmd_ids
 */
enum iwl_mvm_command_groups {
        LEGACY_GROUP = 0x0,
        LONG_GROUP = 0x1,
        SYSTEM_GROUP = 0x2,
        MAC_CONF_GROUP = 0x3,
        PHY_OPS_GROUP = 0x4,
        DATA_PATH_GROUP = 0x5,
        SCAN_GROUP = 0x6,
        NAN_GROUP = 0x7,
        LOCATION_GROUP = 0x8,
        BT_COEX_GROUP = 0x9,
        PROT_OFFLOAD_GROUP = 0xb,
        REGULATORY_AND_NVM_GROUP = 0xc,
        DEBUG_GROUP = 0xf,
        STATISTICS_GROUP = 0x10,
};

/**
 * enum iwl_legacy_cmds - legacy group command IDs
 */
enum iwl_legacy_cmds {
        /**
         * @UCODE_ALIVE_NTFY:
         * Alive data from the firmware, as described in
         * &struct iwl_alive_ntf_v3 or &struct iwl_alive_ntf_v4 or
         * &struct iwl_alive_ntf_v5 or &struct iwl_alive_ntf_v7.
         */
        UCODE_ALIVE_NTFY = 0x1,

        /**
         * @REPLY_ERROR: Cause an error in the firmware, for testing purposes.
         */
        REPLY_ERROR = 0x2,

        /**
         * @ECHO_CMD: Send data to the device to have it returned immediately.
         */
        ECHO_CMD = 0x3,

        /**
         * @INIT_COMPLETE_NOTIF: Notification that initialization is complete.
         */
        INIT_COMPLETE_NOTIF = 0x4,

        /**
         * @PHY_CONTEXT_CMD:
         * Add/modify/remove a PHY context, using &struct iwl_phy_context_cmd
         *      or &struct iwl_phy_context_cmd_v1.
         */
        PHY_CONTEXT_CMD = 0x8,

        /**
         * @DBG_CFG: Debug configuration command.
         */
        DBG_CFG = 0x9,

        /**
         * @SCAN_ITERATION_COMPLETE_UMAC:
         * Firmware indicates a scan iteration completed, using
         * &struct iwl_umac_scan_iter_complete_notif.
         */
        SCAN_ITERATION_COMPLETE_UMAC = 0xb5,

        /**
         * @SCAN_CFG_CMD:
         * uses &struct iwl_scan_config_v1, &struct iwl_scan_config_v2
         * or &struct iwl_scan_config
         */
        SCAN_CFG_CMD = 0xc,

        /**
         * @SCAN_REQ_UMAC: uses &struct iwl_scan_req_umac
         */
        SCAN_REQ_UMAC = 0xd,

        /**
         * @SCAN_ABORT_UMAC: uses &struct iwl_umac_scan_abort
         */
        SCAN_ABORT_UMAC = 0xe,

        /**
         * @SCAN_COMPLETE_UMAC: uses &struct iwl_umac_scan_complete
         */
        SCAN_COMPLETE_UMAC = 0xf,

        /**
         * @BA_WINDOW_STATUS_NOTIFICATION_ID:
         * uses &struct iwl_ba_window_status_notif
         */
        BA_WINDOW_STATUS_NOTIFICATION_ID = 0x13,

        /**
         * @ADD_STA_KEY:
         * &struct iwl_mvm_add_sta_key_cmd_v1 or
         * &struct iwl_mvm_add_sta_key_cmd.
         */
        ADD_STA_KEY = 0x17,

        /**
         * @ADD_STA:
         * &struct iwl_mvm_add_sta_cmd or &struct iwl_mvm_add_sta_cmd_v7.
         */
        ADD_STA = 0x18,

        /**
         * @REMOVE_STA: &struct iwl_mvm_rm_sta_cmd
         */
        REMOVE_STA = 0x19,

        /**
         * @TX_CMD: uses &struct iwl_tx_cmd_v6 or &struct iwl_tx_cmd_v9 or
         *      &struct iwl_tx_cmd,
         *      response in &struct iwl_tx_resp or
         *      &struct iwl_tx_resp_v3
         */
        TX_CMD = 0x1c,

        /**
         * @TXPATH_FLUSH: &struct iwl_tx_path_flush_cmd
         *      response in &struct iwl_tx_path_flush_cmd_rsp
         */
        TXPATH_FLUSH = 0x1e,

        /**
         * @MGMT_MCAST_KEY:
         * &struct iwl_mvm_mgmt_mcast_key_cmd or
         * &struct iwl_mvm_mgmt_mcast_key_cmd_v1
         */
        MGMT_MCAST_KEY = 0x1f,

        /* scheduler config */
        /**
         * @SCD_QUEUE_CFG: &struct iwl_scd_txq_cfg_cmd for older hardware,
         *      &struct iwl_tx_queue_cfg_cmd with &struct iwl_tx_queue_cfg_rsp
         *      for newer (22000) hardware.
         */
        SCD_QUEUE_CFG = 0x1d,

        /**
         * @WEP_KEY: uses &struct iwl_mvm_wep_key_cmd
         */
        WEP_KEY = 0x20,

        /**
         * @SHARED_MEM_CFG:
         * retrieve shared memory configuration - response in
         * &struct iwl_shared_mem_cfg
         */
        SHARED_MEM_CFG = 0x25,

        /**
         * @TDLS_CHANNEL_SWITCH_CMD: uses &struct iwl_tdls_channel_switch_cmd
         */
        TDLS_CHANNEL_SWITCH_CMD = 0x27,

        /**
         * @TDLS_CHANNEL_SWITCH_NOTIFICATION:
         * uses &struct iwl_tdls_channel_switch_notif
         */
        TDLS_CHANNEL_SWITCH_NOTIFICATION = 0xaa,

        /**
         * @TDLS_CONFIG_CMD:
         * &struct iwl_tdls_config_cmd, response in &struct iwl_tdls_config_res
         */
        TDLS_CONFIG_CMD = 0xa7,

        /**
         * @MAC_CONTEXT_CMD: &struct iwl_mac_ctx_cmd
         */
        MAC_CONTEXT_CMD = 0x28,

        /**
         * @TIME_EVENT_CMD:
         * &struct iwl_time_event_cmd, response in &struct iwl_time_event_resp
         */
        TIME_EVENT_CMD = 0x29, /* both CMD and response */

        /**
         * @TIME_EVENT_NOTIFICATION: &struct iwl_time_event_notif
         */
        TIME_EVENT_NOTIFICATION = 0x2a,

        /**
         * @BINDING_CONTEXT_CMD:
         * &struct iwl_binding_cmd or &struct iwl_binding_cmd_v1
         */
        BINDING_CONTEXT_CMD = 0x2b,

        /**
         * @TIME_QUOTA_CMD: &struct iwl_time_quota_cmd
         */
        TIME_QUOTA_CMD = 0x2c,

        /**
         * @NON_QOS_TX_COUNTER_CMD:
         * command is &struct iwl_nonqos_seq_query_cmd
         */
        NON_QOS_TX_COUNTER_CMD = 0x2d,

        /**
         * @LEDS_CMD: command is &struct iwl_led_cmd
         */
        LEDS_CMD = 0x48,

        /**
         * @LQ_CMD: using &struct iwl_lq_cmd
         */
        LQ_CMD = 0x4e,

        /**
         * @FW_PAGING_BLOCK_CMD:
         * &struct iwl_fw_paging_cmd
         */
        FW_PAGING_BLOCK_CMD = 0x4f,

        /**
         * @SCAN_OFFLOAD_REQUEST_CMD: uses &struct iwl_scan_req_lmac
         */
        SCAN_OFFLOAD_REQUEST_CMD = 0x51,

        /**
         * @SCAN_OFFLOAD_ABORT_CMD: abort the scan - no further contents
         */
        SCAN_OFFLOAD_ABORT_CMD = 0x52,

        /**
         * @HOT_SPOT_CMD: uses &struct iwl_hs20_roc_req
         */
        HOT_SPOT_CMD = 0x53,

        /**
         * @WNM_80211V_TIMING_MEASUREMENT_NOTIFICATION: Time Sync
         *      measurement notification for TM/FTM. Sent on receipt of
         *      respective WNM action frame for TM protocol or public action
         *      frame for FTM protocol from peer device along with additional
         *      meta data specified in &struct iwl_time_msmt_notify
         */
        WNM_80211V_TIMING_MEASUREMENT_NOTIFICATION = 0x67,

        /**
         * @WNM_80211V_TIMING_MEASUREMENT_CONFIRM_NOTIFICATION: Time Sync
         *      measurement confirmation notification for TM/FTM. Sent on
         *      receipt of Ack from peer for previously Tx'ed TM/FTM
         *      action frame along with additional meta data specified in
         *      &struct iwl_time_msmt_cfm_notify
         */
        WNM_80211V_TIMING_MEASUREMENT_CONFIRM_NOTIFICATION = 0x68,

        /**
         * @SCAN_OFFLOAD_COMPLETE:
         * notification, &struct iwl_periodic_scan_complete
         */
        SCAN_OFFLOAD_COMPLETE = 0x6D,

        /**
         * @SCAN_OFFLOAD_UPDATE_PROFILES_CMD:
         * update scan offload (scheduled scan) profiles/blocklist/etc.
         */
        SCAN_OFFLOAD_UPDATE_PROFILES_CMD = 0x6E,

        /**
         * @SCAN_START_NOTIFICATION_UMAC: uses &struct iwl_umac_scan_start
         */
        SCAN_START_NOTIFICATION_UMAC = 0xb2,

        /**
         * @MATCH_FOUND_NOTIFICATION: scan match found
         */
        MATCH_FOUND_NOTIFICATION = 0xd9,

        /**
         * @SCAN_ITERATION_COMPLETE:
         * uses &struct iwl_lmac_scan_complete_notif
         */
        SCAN_ITERATION_COMPLETE = 0xe7,

        /* Phy */
        /**
         * @PHY_CONFIGURATION_CMD: &struct iwl_phy_cfg_cmd_v1 or &struct iwl_phy_cfg_cmd_v3
         */
        PHY_CONFIGURATION_CMD = 0x6a,

        /**
         * @CALIB_RES_NOTIF_PHY_DB: &struct iwl_calib_res_notif_phy_db
         */
        CALIB_RES_NOTIF_PHY_DB = 0x6b,

        /**
         * @PHY_DB_CMD: &struct iwl_phy_db_cmd
         */
        PHY_DB_CMD = 0x6c,

        /**
         * @POWER_TABLE_CMD: &struct iwl_device_power_cmd
         */
        POWER_TABLE_CMD = 0x77,

        /**
         * @PSM_UAPSD_AP_MISBEHAVING_NOTIFICATION:
         * &struct iwl_uapsd_misbehaving_ap_notif
         */
        PSM_UAPSD_AP_MISBEHAVING_NOTIFICATION = 0x78,

        /**
         * @LTR_CONFIG: &struct iwl_ltr_config_cmd
         */
        LTR_CONFIG = 0xee,

        /**
         * @REPLY_THERMAL_MNG_BACKOFF:
         * Thermal throttling command
         */
        REPLY_THERMAL_MNG_BACKOFF = 0x7e,

        /**
         * @NVM_ACCESS_CMD: using &struct iwl_nvm_access_cmd
         */
        NVM_ACCESS_CMD = 0x88,

        /**
         * @BEACON_NOTIFICATION: &struct iwl_extended_beacon_notif
         */
        BEACON_NOTIFICATION = 0x90,

        /**
         * @BEACON_TEMPLATE_CMD:
         *      Uses one of &struct iwl_mac_beacon_cmd_v6,
         *      &struct iwl_mac_beacon_cmd_v7 or &struct iwl_mac_beacon_cmd
         *      depending on the device version.
         */
        BEACON_TEMPLATE_CMD = 0x91,
        /**
         * @TX_ANT_CONFIGURATION_CMD: &struct iwl_tx_ant_cfg_cmd
         */
        TX_ANT_CONFIGURATION_CMD = 0x98,

        /**
         * @STATISTICS_CMD:
         * one of &struct iwl_statistics_cmd,
         * &struct iwl_notif_statistics_v11,
         * &struct iwl_notif_statistics_v10,
         * &struct iwl_notif_statistics,
         * &struct iwl_statistics_operational_ntfy_ver_14
         */
        STATISTICS_CMD = 0x9c,

        /**
         * @STATISTICS_NOTIFICATION:
         * one of &struct iwl_notif_statistics_v10,
         * &struct iwl_notif_statistics_v11,
         * &struct iwl_notif_statistic,
         * &struct iwl_statistics_operational_ntfy_ver_14
         * &struct iwl_statistics_operational_ntfy
         */
        STATISTICS_NOTIFICATION = 0x9d,

        /**
         * @EOSP_NOTIFICATION:
         * Notify that a service period ended,
         * &struct iwl_mvm_eosp_notification
         */
        EOSP_NOTIFICATION = 0x9e,

        /**
         * @REDUCE_TX_POWER_CMD:
         * &struct iwl_dev_tx_power_cmd
         */
        REDUCE_TX_POWER_CMD = 0x9f,

        /**
         * @MISSED_BEACONS_NOTIFICATION: &struct iwl_missed_beacons_notif_v4
         */
        MISSED_BEACONS_NOTIFICATION = 0xa2,

        /**
         * @MAC_PM_POWER_TABLE: using &struct iwl_mac_power_cmd
         */
        MAC_PM_POWER_TABLE = 0xa9,

        /**
         * @MFUART_LOAD_NOTIFICATION: &struct iwl_mfuart_load_notif
         */
        MFUART_LOAD_NOTIFICATION = 0xb1,

        /**
         * @RSS_CONFIG_CMD: &struct iwl_rss_config_cmd
         */
        RSS_CONFIG_CMD = 0xb3,

        /**
         * @REPLY_RX_PHY_CMD: &struct iwl_rx_phy_info
         */
        REPLY_RX_PHY_CMD = 0xc0,

        /**
         * @REPLY_RX_MPDU_CMD:
         * &struct iwl_rx_mpdu_res_start or &struct iwl_rx_mpdu_desc
         */
        REPLY_RX_MPDU_CMD = 0xc1,

        /**
         * @BAR_FRAME_RELEASE: Frame release from BAR notification, used for
         *      multi-TID BAR (previously, the BAR frame itself was reported
         *      instead). Uses &struct iwl_bar_frame_release.
         */
        BAR_FRAME_RELEASE = 0xc2,

        /**
         * @FRAME_RELEASE:
         * Frame release (reorder helper) notification, uses
         * &struct iwl_frame_release
         */
        FRAME_RELEASE = 0xc3,

        /**
         * @BA_NOTIF:
         * BlockAck notification, uses &struct iwl_compressed_ba_notif
         * or &struct iwl_mvm_ba_notif depending on the HW
         */
        BA_NOTIF = 0xc5,

        /* Location Aware Regulatory */
        /**
         * @MCC_UPDATE_CMD: using &struct iwl_mcc_update_cmd
         */
        MCC_UPDATE_CMD = 0xc8,

        /**
         * @MCC_CHUB_UPDATE_CMD: using &struct iwl_mcc_chub_notif
         */
        MCC_CHUB_UPDATE_CMD = 0xc9,

        /**
         * @MARKER_CMD: trace marker command, uses &struct iwl_mvm_marker
         * with &struct iwl_mvm_marker_rsp
         */
        MARKER_CMD = 0xcb,

        /**
         * @BT_PROFILE_NOTIFICATION: &struct iwl_bt_coex_prof_old_notif
         */
        BT_PROFILE_NOTIFICATION = 0xce,

        /**
         * @BT_CONFIG: &struct iwl_bt_coex_cmd
         */
        BT_CONFIG = 0x9b,

        /**
         * @BT_COEX_UPDATE_REDUCED_TXP:
         * &struct iwl_bt_coex_reduced_txp_update_cmd
         */
        BT_COEX_UPDATE_REDUCED_TXP = 0x5c,

        /**
         * @BT_COEX_CI: &struct iwl_bt_coex_ci_cmd
         */
        BT_COEX_CI = 0x5d,

        /**
         * @REPLY_SF_CFG_CMD: &struct iwl_sf_cfg_cmd
         */
        REPLY_SF_CFG_CMD = 0xd1,
        /**
         * @REPLY_BEACON_FILTERING_CMD: &struct iwl_beacon_filter_cmd
         */
        REPLY_BEACON_FILTERING_CMD = 0xd2,

        /**
         * @DTS_MEASUREMENT_NOTIFICATION:
         * &struct iwl_dts_measurement_notif_v1 or
         * &struct iwl_dts_measurement_notif
         */
        DTS_MEASUREMENT_NOTIFICATION = 0xdd,

        /**
         * @DEBUG_HOST_COMMAND: &struct iwl_dhc_cmd
         */
        DEBUG_HOST_COMMAND = 0xf1,

        /**
         * @LDBG_CONFIG_CMD: configure continuous trace recording
         */
        LDBG_CONFIG_CMD = 0xf6,

        /**
         * @DEBUG_LOG_MSG: Debugging log data from firmware
         */
        DEBUG_LOG_MSG = 0xf7,

        /**
         * @MCAST_FILTER_CMD: &struct iwl_mcast_filter_cmd
         */
        MCAST_FILTER_CMD = 0xd0,

        /**
         * @D3_CONFIG_CMD: &struct iwl_d3_manager_config
         */
        D3_CONFIG_CMD = 0xd3,

        /**
         * @PROT_OFFLOAD_CONFIG_CMD: Depending on firmware, uses one of
         * &struct iwl_proto_offload_cmd_v1, &struct iwl_proto_offload_cmd_v2,
         * &struct iwl_proto_offload_cmd_v3_small,
         * &struct iwl_proto_offload_cmd_v3_large
         */
        PROT_OFFLOAD_CONFIG_CMD = 0xd4,

        /**
         * @D0I3_END_CMD: End D0i3/D3 state, no command data
         */
        D0I3_END_CMD = 0xed,

        /**
         * @WOWLAN_PATTERNS: &struct iwl_wowlan_patterns_cmd
         */
        WOWLAN_PATTERNS = 0xe0,

        /**
         * @WOWLAN_CONFIGURATION: &struct iwl_wowlan_config_cmd
         */
        WOWLAN_CONFIGURATION = 0xe1,

        /**
         * @WOWLAN_TSC_RSC_PARAM: &struct iwl_wowlan_rsc_tsc_params_cmd_v4,
         *      &struct iwl_wowlan_rsc_tsc_params_cmd
         */
        WOWLAN_TSC_RSC_PARAM = 0xe2,

        /**
         * @WOWLAN_TKIP_PARAM: &struct iwl_wowlan_tkip_params_cmd
         */
        WOWLAN_TKIP_PARAM = 0xe3,

        /**
         * @WOWLAN_KEK_KCK_MATERIAL: &struct iwl_wowlan_kek_kck_material_cmd_v2,
         * &struct iwl_wowlan_kek_kck_material_cmd_v3 or
         * &struct iwl_wowlan_kek_kck_material_cmd_v4
         */
        WOWLAN_KEK_KCK_MATERIAL = 0xe4,

        /**
         * @WOWLAN_GET_STATUSES: response in &struct iwl_wowlan_status_v6 or
         *      &struct iwl_wowlan_status_v7
         */
        WOWLAN_GET_STATUSES = 0xe5,

        /**
         * @SCAN_OFFLOAD_PROFILES_QUERY_CMD: No command data, response is
         *      &struct iwl_scan_offload_profiles_query_v1
         */
        SCAN_OFFLOAD_PROFILES_QUERY_CMD = 0x56,
};

/**
 * enum iwl_system_subcmd_ids - system group command IDs
 */
enum iwl_system_subcmd_ids {
        /**
         * @SHARED_MEM_CFG_CMD:
         * response in &struct iwl_shared_mem_cfg or
         * &struct iwl_shared_mem_cfg_v2
         */
        SHARED_MEM_CFG_CMD = 0x0,

        /**
         * @SOC_CONFIGURATION_CMD: &struct iwl_soc_configuration_cmd
         */
        SOC_CONFIGURATION_CMD = 0x01,

        /**
         * @INIT_EXTENDED_CFG_CMD: &struct iwl_init_extended_cfg_cmd
         */
        INIT_EXTENDED_CFG_CMD = 0x03,

        /**
         * @FW_ERROR_RECOVERY_CMD: &struct iwl_fw_error_recovery_cmd
         */
        FW_ERROR_RECOVERY_CMD = 0x7,

        /**
         * @RFI_CONFIG_CMD: &struct iwl_rfi_config_cmd
         */
        RFI_CONFIG_CMD = 0xb,

        /**
         * @RFI_GET_FREQ_TABLE_CMD: &struct iwl_rfi_config_cmd
         */
        RFI_GET_FREQ_TABLE_CMD = 0xc,

        /**
         * @SYSTEM_FEATURES_CONTROL_CMD: &struct iwl_system_features_control_cmd
         */
        SYSTEM_FEATURES_CONTROL_CMD = 0xd,

        /**
         * @SYSTEM_STATISTICS_CMD: &struct iwl_system_statistics_cmd
         */
        SYSTEM_STATISTICS_CMD = 0xf,

        /**
         * @SYSTEM_STATISTICS_END_NOTIF: &struct iwl_system_statistics_end_notif
         */
        SYSTEM_STATISTICS_END_NOTIF = 0xfd,

        /**
         * @RFI_DEACTIVATE_NOTIF: &struct iwl_rfi_deactivate_notif
         */
        RFI_DEACTIVATE_NOTIF = 0xff,
};

/**
 * enum iwl_statistics_subcmd_ids - Statistics group command IDs
 */
enum iwl_statistics_subcmd_ids {
        /**
         * @STATISTICS_OPER_NOTIF: Notification about operational
         *      statistics &struct iwl_system_statistics_notif_oper
         */
        STATISTICS_OPER_NOTIF = 0x0,

        /**
         * @STATISTICS_OPER_PART1_NOTIF: Notification about operational part1
         *      statistics &struct iwl_system_statistics_part1_notif_oper
         */
        STATISTICS_OPER_PART1_NOTIF = 0x1,
};

#endif /* __iwl_fw_api_commands_h__ */