Commit 5a258aae authored by Max Stepanov's avatar Max Stepanov Committed by Johannes Berg

iwlwifi: mvm: split ADD_STA and ADD_STA_KEY in firmware API

Add support for new station management firmware API. The old
ADD_MODIFY_STA command has been replaced with two: a modified
ADD_MODIFY_STA and a new ADD_MODIFY_STA_KEY command.
Signed-off-by: default avatarMax Stepanov <Max.Stepanov@intel.com>
Reviewed-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent b34b912f
...@@ -80,6 +80,7 @@ ...@@ -80,6 +80,7 @@
* @IWL_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS: D3 image supports up to six * @IWL_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS: D3 image supports up to six
* (rather than two) IPv6 addresses * (rather than two) IPv6 addresses
* @IWL_UCODE_TLV_FLAGS_BF_UPDATED: new beacon filtering API * @IWL_UCODE_TLV_FLAGS_BF_UPDATED: new beacon filtering API
* @IWL_UCODE_TLV_FLAGS_STA_KEY_CMD: new ADD_STA and ADD_STA_KEY command API
*/ */
enum iwl_ucode_tlv_flag { enum iwl_ucode_tlv_flag {
IWL_UCODE_TLV_FLAGS_PAN = BIT(0), IWL_UCODE_TLV_FLAGS_PAN = BIT(0),
...@@ -92,6 +93,7 @@ enum iwl_ucode_tlv_flag { ...@@ -92,6 +93,7 @@ enum iwl_ucode_tlv_flag {
IWL_UCODE_TLV_FLAGS_TIME_EVENT_API_V2 = BIT(9), IWL_UCODE_TLV_FLAGS_TIME_EVENT_API_V2 = BIT(9),
IWL_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS = BIT(10), IWL_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS = BIT(10),
IWL_UCODE_TLV_FLAGS_BF_UPDATED = BIT(11), IWL_UCODE_TLV_FLAGS_BF_UPDATED = BIT(11),
IWL_UCODE_TLV_FLAGS_STA_KEY_CMD = BIT(19),
}; };
/* The default calibrate table size if not specified by firmware file */ /* The default calibrate table size if not specified by firmware file */
......
...@@ -247,7 +247,7 @@ struct iwl_mvm_keyinfo { ...@@ -247,7 +247,7 @@ struct iwl_mvm_keyinfo {
} __packed; } __packed;
/** /**
* struct iwl_mvm_add_sta_cmd - Add / modify a station in the fw's station table * struct iwl_mvm_add_sta_cmd_v5 - Add/modify a station in the fw's sta table.
* ( REPLY_ADD_STA = 0x18 ) * ( REPLY_ADD_STA = 0x18 )
* @add_modify: 1: modify existing, 0: add new station * @add_modify: 1: modify existing, 0: add new station
* @unicast_tx_key_id: unicast tx key id. Relevant only when unicast key sent * @unicast_tx_key_id: unicast tx key id. Relevant only when unicast key sent
...@@ -286,7 +286,7 @@ struct iwl_mvm_keyinfo { ...@@ -286,7 +286,7 @@ struct iwl_mvm_keyinfo {
* ADD_STA sets up the table entry for one station, either creating a new * ADD_STA sets up the table entry for one station, either creating a new
* entry, or modifying a pre-existing one. * entry, or modifying a pre-existing one.
*/ */
struct iwl_mvm_add_sta_cmd { struct iwl_mvm_add_sta_cmd_v5 {
u8 add_modify; u8 add_modify;
u8 unicast_tx_key_id; u8 unicast_tx_key_id;
u8 multicast_tx_key_id; u8 multicast_tx_key_id;
...@@ -312,6 +312,57 @@ struct iwl_mvm_add_sta_cmd { ...@@ -312,6 +312,57 @@ struct iwl_mvm_add_sta_cmd {
__le32 tfd_queue_msk; __le32 tfd_queue_msk;
} __packed; /* ADD_STA_CMD_API_S_VER_5 */ } __packed; /* ADD_STA_CMD_API_S_VER_5 */
/**
* struct iwl_mvm_add_sta_cmd_v6 - Add / modify a station
* VER_6 of this command is quite similar to VER_5 except
* exclusion of all fields related to the security key installation.
*/
struct iwl_mvm_add_sta_cmd_v6 {
u8 add_modify;
u8 reserved1;
__le16 tid_disable_tx;
__le32 mac_id_n_color;
u8 addr[ETH_ALEN]; /* _STA_ID_MODIFY_INFO_API_S_VER_1 */
__le16 reserved2;
u8 sta_id;
u8 modify_mask;
__le16 reserved3;
__le32 station_flags;
__le32 station_flags_msk;
u8 add_immediate_ba_tid;
u8 remove_immediate_ba_tid;
__le16 add_immediate_ba_ssn;
__le16 sleep_tx_count;
__le16 sleep_state_flags;
__le16 assoc_id;
__le16 beamform_flags;
__le32 tfd_queue_msk;
} __packed; /* ADD_STA_CMD_API_S_VER_6 */
/**
* struct iwl_mvm_add_sta_key_cmd - add/modify sta key
* ( REPLY_ADD_STA_KEY = 0x17 )
* @sta_id: index of station in uCode's station table
* @key_offset: key offset in key storage
* @key_flags: type %iwl_sta_key_flag
* @key: key material data
* @key2: key material data
* @rx_secur_seq_cnt: RX security sequence counter for the key
* @tkip_rx_tsc_byte2: TSC[2] for key mix ph1 detection
* @tkip_rx_ttak: 10-byte unicast TKIP TTAK for Rx
*/
struct iwl_mvm_add_sta_key_cmd {
u8 sta_id;
u8 key_offset;
__le16 key_flags;
u8 key[16];
u8 key2[16];
u8 rx_secur_seq_cnt[16];
u8 tkip_rx_tsc_byte2;
u8 reserved;
__le16 tkip_rx_ttak[5];
} __packed; /* ADD_MODIFY_STA_KEY_API_S_VER_1 */
/** /**
* enum iwl_mvm_add_sta_rsp_status - status in the response to ADD_STA command * enum iwl_mvm_add_sta_rsp_status - status in the response to ADD_STA command
* @ADD_STA_SUCCESS: operation was executed successfully * @ADD_STA_SUCCESS: operation was executed successfully
......
...@@ -97,6 +97,7 @@ enum { ...@@ -97,6 +97,7 @@ enum {
DBG_CFG = 0x9, DBG_CFG = 0x9,
/* station table */ /* station table */
ADD_STA_KEY = 0x17,
ADD_STA = 0x18, ADD_STA = 0x18,
REMOVE_STA = 0x19, REMOVE_STA = 0x19,
......
...@@ -261,6 +261,7 @@ static const char *iwl_mvm_cmd_strings[REPLY_MAX] = { ...@@ -261,6 +261,7 @@ static const char *iwl_mvm_cmd_strings[REPLY_MAX] = {
CMD(CALIB_RES_NOTIF_PHY_DB), CMD(CALIB_RES_NOTIF_PHY_DB),
CMD(SET_CALIB_DEFAULT_CMD), CMD(SET_CALIB_DEFAULT_CMD),
CMD(CALIBRATION_COMPLETE_NOTIFICATION), CMD(CALIBRATION_COMPLETE_NOTIFICATION),
CMD(ADD_STA_KEY),
CMD(ADD_STA), CMD(ADD_STA),
CMD(REMOVE_STA), CMD(REMOVE_STA),
CMD(LQ_CMD), CMD(LQ_CMD),
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment