Commit 5b88792c authored by Sara Sharon's avatar Sara Sharon Committed by Luca Coelho

iwlwifi: move to wide ID for all commands

Due to firmware design considerations, move to wide ID for
all commands.
Signed-off-by: default avatarSara Sharon <sara.sharon@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 607876f1
...@@ -99,8 +99,12 @@ void iwl_notification_wait_notify(struct iwl_notif_wait_data *notif_wait, ...@@ -99,8 +99,12 @@ void iwl_notification_wait_notify(struct iwl_notif_wait_data *notif_wait,
continue; continue;
for (i = 0; i < w->n_cmds; i++) { for (i = 0; i < w->n_cmds; i++) {
if (w->cmds[i] == u16 rec_id = WIDE_ID(pkt->hdr.group_id,
WIDE_ID(pkt->hdr.group_id, pkt->hdr.cmd)) { pkt->hdr.cmd);
if (w->cmds[i] == rec_id ||
(!iwl_cmd_groupid(w->cmds[i]) &&
DEF_ID(w->cmds[i]) == rec_id)) {
found = true; found = true;
break; break;
} }
......
...@@ -140,6 +140,9 @@ int iwl_trans_send_cmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd) ...@@ -140,6 +140,9 @@ int iwl_trans_send_cmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd)
if (!(cmd->flags & CMD_ASYNC)) if (!(cmd->flags & CMD_ASYNC))
lock_map_acquire_read(&trans->sync_cmd_lockdep_map); lock_map_acquire_read(&trans->sync_cmd_lockdep_map);
if (trans->wide_cmd_header && !iwl_cmd_groupid(cmd->id))
cmd->id = DEF_ID(cmd->id);
ret = trans->ops->send_cmd(trans, cmd); ret = trans->ops->send_cmd(trans, cmd);
if (!(cmd->flags & CMD_ASYNC)) if (!(cmd->flags & CMD_ASYNC))
......
...@@ -153,6 +153,7 @@ static inline u32 iwl_cmd_id(u8 opcode, u8 groupid, u8 version) ...@@ -153,6 +153,7 @@ static inline u32 iwl_cmd_id(u8 opcode, u8 groupid, u8 version)
/* make u16 wide id out of u8 group and opcode */ /* make u16 wide id out of u8 group and opcode */
#define WIDE_ID(grp, opcode) ((grp << 8) | opcode) #define WIDE_ID(grp, opcode) ((grp << 8) | opcode)
#define DEF_ID(opcode) ((1 << 8) | (opcode))
/* due to the conversion, this group is special; new groups /* due to the conversion, this group is special; new groups
* should be defined in the appropriate fw-api header files * should be defined in the appropriate fw-api header files
...@@ -484,7 +485,6 @@ struct iwl_hcmd_arr { ...@@ -484,7 +485,6 @@ struct iwl_hcmd_arr {
* @bc_table_dword: set to true if the BC table expects the byte count to be * @bc_table_dword: set to true if the BC table expects the byte count to be
* in DWORD (as opposed to bytes) * in DWORD (as opposed to bytes)
* @scd_set_active: should the transport configure the SCD for HCMD queue * @scd_set_active: should the transport configure the SCD for HCMD queue
* @wide_cmd_header: firmware supports wide host command header
* @sw_csum_tx: transport should compute the TCP checksum * @sw_csum_tx: transport should compute the TCP checksum
* @command_groups: array of command groups, each member is an array of the * @command_groups: array of command groups, each member is an array of the
* commands in the group; for debugging only * commands in the group; for debugging only
...@@ -506,7 +506,6 @@ struct iwl_trans_config { ...@@ -506,7 +506,6 @@ struct iwl_trans_config {
enum iwl_amsdu_size rx_buf_size; enum iwl_amsdu_size rx_buf_size;
bool bc_table_dword; bool bc_table_dword;
bool scd_set_active; bool scd_set_active;
bool wide_cmd_header;
bool sw_csum_tx; bool sw_csum_tx;
const struct iwl_hcmd_arr *command_groups; const struct iwl_hcmd_arr *command_groups;
int command_groups_size; int command_groups_size;
...@@ -770,6 +769,7 @@ enum iwl_plat_pm_mode { ...@@ -770,6 +769,7 @@ enum iwl_plat_pm_mode {
* @hw_id_str: a string with info about HW ID. Set during transport allocation. * @hw_id_str: a string with info about HW ID. Set during transport allocation.
* @pm_support: set to true in start_hw if link pm is supported * @pm_support: set to true in start_hw if link pm is supported
* @ltr_enabled: set to true if the LTR is enabled * @ltr_enabled: set to true if the LTR is enabled
* @wide_cmd_header: true when ucode supports wide command header format
* @num_rx_queues: number of RX queues allocated by the transport; * @num_rx_queues: number of RX queues allocated by the transport;
* the transport must set this before calling iwl_drv_start() * the transport must set this before calling iwl_drv_start()
* @dev_cmd_pool: pool for Tx cmd allocation - for internal use only. * @dev_cmd_pool: pool for Tx cmd allocation - for internal use only.
...@@ -821,6 +821,7 @@ struct iwl_trans { ...@@ -821,6 +821,7 @@ struct iwl_trans {
const struct iwl_hcmd_arr *command_groups; const struct iwl_hcmd_arr *command_groups;
int command_groups_size; int command_groups_size;
bool wide_cmd_header;
u8 num_rx_queues; u8 num_rx_queues;
......
...@@ -652,7 +652,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, ...@@ -652,7 +652,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
/* the hardware splits the A-MSDU */ /* the hardware splits the A-MSDU */
if (mvm->cfg->mq_rx_supported) if (mvm->cfg->mq_rx_supported)
trans_cfg.rx_buf_size = IWL_AMSDU_4K; trans_cfg.rx_buf_size = IWL_AMSDU_4K;
trans_cfg.wide_cmd_header = fw_has_api(&mvm->fw->ucode_capa, trans->wide_cmd_header = fw_has_api(&mvm->fw->ucode_capa,
IWL_UCODE_TLV_API_WIDE_CMD_HDR); IWL_UCODE_TLV_API_WIDE_CMD_HDR);
if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_DW_BC_TABLE) if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_DW_BC_TABLE)
......
...@@ -332,7 +332,6 @@ enum iwl_shared_irq_flags { ...@@ -332,7 +332,6 @@ enum iwl_shared_irq_flags {
* @rx_buf_size: Rx buffer size * @rx_buf_size: Rx buffer size
* @bc_table_dword: true if the BC table expects DWORD (as opposed to bytes) * @bc_table_dword: true if the BC table expects DWORD (as opposed to bytes)
* @scd_set_active: should the transport configure the SCD for HCMD queue * @scd_set_active: should the transport configure the SCD for HCMD queue
* @wide_cmd_header: true when ucode supports wide command header format
* @sw_csum_tx: if true, then the transport will compute the csum of the TXed * @sw_csum_tx: if true, then the transport will compute the csum of the TXed
* frame. * frame.
* @rx_page_order: page order for receive buffer size * @rx_page_order: page order for receive buffer size
...@@ -405,7 +404,6 @@ struct iwl_trans_pcie { ...@@ -405,7 +404,6 @@ struct iwl_trans_pcie {
enum iwl_amsdu_size rx_buf_size; enum iwl_amsdu_size rx_buf_size;
bool bc_table_dword; bool bc_table_dword;
bool scd_set_active; bool scd_set_active;
bool wide_cmd_header;
bool sw_csum_tx; bool sw_csum_tx;
u32 rx_page_order; u32 rx_page_order;
......
...@@ -1755,7 +1755,6 @@ static void iwl_trans_pcie_configure(struct iwl_trans *trans, ...@@ -1755,7 +1755,6 @@ static void iwl_trans_pcie_configure(struct iwl_trans *trans,
trans_pcie->rx_page_order = trans_pcie->rx_page_order =
iwl_trans_get_rb_size_order(trans_pcie->rx_buf_size); iwl_trans_get_rb_size_order(trans_pcie->rx_buf_size);
trans_pcie->wide_cmd_header = trans_cfg->wide_cmd_header;
trans_pcie->bc_table_dword = trans_cfg->bc_table_dword; trans_pcie->bc_table_dword = trans_cfg->bc_table_dword;
trans_pcie->scd_set_active = trans_cfg->scd_set_active; trans_pcie->scd_set_active = trans_cfg->scd_set_active;
trans_pcie->sw_csum_tx = trans_cfg->sw_csum_tx; trans_pcie->sw_csum_tx = trans_cfg->sw_csum_tx;
......
...@@ -1493,7 +1493,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans, ...@@ -1493,7 +1493,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
const u8 *cmddata[IWL_MAX_CMD_TBS_PER_TFD]; const u8 *cmddata[IWL_MAX_CMD_TBS_PER_TFD];
u16 cmdlen[IWL_MAX_CMD_TBS_PER_TFD]; u16 cmdlen[IWL_MAX_CMD_TBS_PER_TFD];
if (WARN(!trans_pcie->wide_cmd_header && if (WARN(!trans->wide_cmd_header &&
group_id > IWL_ALWAYS_LONG_GROUP, group_id > IWL_ALWAYS_LONG_GROUP,
"unsupported wide command %#x\n", cmd->id)) "unsupported wide command %#x\n", cmd->id))
return -EINVAL; return -EINVAL;
......
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