/* 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 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
 * @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
 */
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,
	PROT_OFFLOAD_GROUP = 0xb,
	REGULATORY_AND_NVM_GROUP = 0xc,
	DEBUG_GROUP = 0xf,
};

/**
 * 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_v6.
	 */
	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 or &struct iwl_tx_cmd_gen2 or
	 *	&struct iwl_tx_cmd_gen3,
	 *	response in &struct iwl_mvm_tx_resp or
	 *	&struct iwl_mvm_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,

	/**
	 * @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
	 */
	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_mvm_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_profile_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_v2
	 */
	DTS_MEASUREMENT_NOTIFICATION = 0xdd,

	/**
	 * @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,
	 *	&struct iwl_wowlan_status_v7, &struct iwl_wowlan_status_v9 or
	 *	&struct iwl_wowlan_status_v12
	 */
	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,

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

#endif /* __iwl_fw_api_commands_h__ */