diff options
author | Johannes Berg <johannes.berg@intel.com> | 2014-01-08 07:16:33 -0500 |
---|---|---|
committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2014-01-13 15:17:20 -0500 |
commit | 65b30348dbf9b529901b5c2b62dca6cad9017a2a (patch) | |
tree | e5a8c4704d58a8ff74150e099e57a46f10860c09 /drivers/net | |
parent | e36b766d0c674c9dc73a2ace7aa37aea78afa233 (diff) |
iwlwifi: add inline helper for packet lengths
Add an inline helper function for getting an RX packet's
length or payload length and use it throughout the code
(most of which I did using an spatch.)
While at it, adjust some code, and remove a bogus comment
from the dvm calibration code.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Reviewed-by: Eran Harary <eran.harary@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/mac80211.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/rx.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/ucode.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans.h | 10 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/d3.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/time-event.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/utils.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/rx.c | 2 |
8 files changed, 25 insertions, 27 deletions
diff --git a/drivers/net/wireless/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/iwlwifi/dvm/mac80211.c index 8a3286a2bb31..e2ba4a725b34 100644 --- a/drivers/net/wireless/iwlwifi/dvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/dvm/mac80211.c | |||
@@ -407,9 +407,8 @@ static bool iwl_resume_status_fn(struct iwl_notif_wait_data *notif_wait, | |||
407 | { | 407 | { |
408 | struct iwl_resume_data *resume_data = data; | 408 | struct iwl_resume_data *resume_data = data; |
409 | struct iwl_priv *priv = resume_data->priv; | 409 | struct iwl_priv *priv = resume_data->priv; |
410 | u32 len = le32_to_cpu(pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK; | ||
411 | 410 | ||
412 | if (len - 4 != sizeof(*resume_data->cmd)) { | 411 | if (iwl_rx_packet_payload_len(pkt) != sizeof(*resume_data->cmd)) { |
413 | IWL_ERR(priv, "rx wrong size data\n"); | 412 | IWL_ERR(priv, "rx wrong size data\n"); |
414 | return true; | 413 | return true; |
415 | } | 414 | } |
diff --git a/drivers/net/wireless/iwlwifi/dvm/rx.c b/drivers/net/wireless/iwlwifi/dvm/rx.c index b68bb2f4d2c2..7a1bc1c547e1 100644 --- a/drivers/net/wireless/iwlwifi/dvm/rx.c +++ b/drivers/net/wireless/iwlwifi/dvm/rx.c | |||
@@ -205,8 +205,7 @@ static int iwlagn_rx_pm_debug_statistics_notif(struct iwl_priv *priv, | |||
205 | struct iwl_device_cmd *cmd) | 205 | struct iwl_device_cmd *cmd) |
206 | { | 206 | { |
207 | struct iwl_rx_packet *pkt = rxb_addr(rxb); | 207 | struct iwl_rx_packet *pkt = rxb_addr(rxb); |
208 | u32 __maybe_unused len = | 208 | u32 __maybe_unused len = iwl_rx_packet_len(pkt); |
209 | le32_to_cpu(pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK; | ||
210 | IWL_DEBUG_RADIO(priv, "Dumping %d bytes of unhandled " | 209 | IWL_DEBUG_RADIO(priv, "Dumping %d bytes of unhandled " |
211 | "notification for PM_DEBUG_STATISTIC_NOTIFIC:\n", len); | 210 | "notification for PM_DEBUG_STATISTIC_NOTIFIC:\n", len); |
212 | iwl_print_hex_dump(priv, IWL_DL_RADIO, pkt->data, len); | 211 | iwl_print_hex_dump(priv, IWL_DL_RADIO, pkt->data, len); |
@@ -457,7 +456,7 @@ static int iwlagn_rx_statistics(struct iwl_priv *priv, | |||
457 | const int reg_recalib_period = 60; | 456 | const int reg_recalib_period = 60; |
458 | int change; | 457 | int change; |
459 | struct iwl_rx_packet *pkt = rxb_addr(rxb); | 458 | struct iwl_rx_packet *pkt = rxb_addr(rxb); |
460 | u32 len = le32_to_cpu(pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK; | 459 | u32 len = iwl_rx_packet_payload_len(pkt); |
461 | __le32 *flag; | 460 | __le32 *flag; |
462 | struct statistics_general_common *common; | 461 | struct statistics_general_common *common; |
463 | struct statistics_rx_non_phy *rx_non_phy; | 462 | struct statistics_rx_non_phy *rx_non_phy; |
@@ -467,8 +466,6 @@ static int iwlagn_rx_statistics(struct iwl_priv *priv, | |||
467 | struct statistics_tx *tx; | 466 | struct statistics_tx *tx; |
468 | struct statistics_bt_activity *bt_activity; | 467 | struct statistics_bt_activity *bt_activity; |
469 | 468 | ||
470 | len -= sizeof(struct iwl_cmd_header); /* skip header */ | ||
471 | |||
472 | IWL_DEBUG_RX(priv, "Statistics notification received (%d bytes).\n", | 469 | IWL_DEBUG_RX(priv, "Statistics notification received (%d bytes).\n", |
473 | len); | 470 | len); |
474 | 471 | ||
diff --git a/drivers/net/wireless/iwlwifi/dvm/ucode.c b/drivers/net/wireless/iwlwifi/dvm/ucode.c index 4da6d90b0829..998063580705 100644 --- a/drivers/net/wireless/iwlwifi/dvm/ucode.c +++ b/drivers/net/wireless/iwlwifi/dvm/ucode.c | |||
@@ -389,7 +389,6 @@ static bool iwlagn_wait_calib(struct iwl_notif_wait_data *notif_wait, | |||
389 | { | 389 | { |
390 | struct iwl_priv *priv = data; | 390 | struct iwl_priv *priv = data; |
391 | struct iwl_calib_hdr *hdr; | 391 | struct iwl_calib_hdr *hdr; |
392 | int len; | ||
393 | 392 | ||
394 | if (pkt->hdr.cmd != CALIBRATION_RES_NOTIFICATION) { | 393 | if (pkt->hdr.cmd != CALIBRATION_RES_NOTIFICATION) { |
395 | WARN_ON(pkt->hdr.cmd != CALIBRATION_COMPLETE_NOTIFICATION); | 394 | WARN_ON(pkt->hdr.cmd != CALIBRATION_COMPLETE_NOTIFICATION); |
@@ -397,12 +396,8 @@ static bool iwlagn_wait_calib(struct iwl_notif_wait_data *notif_wait, | |||
397 | } | 396 | } |
398 | 397 | ||
399 | hdr = (struct iwl_calib_hdr *)pkt->data; | 398 | hdr = (struct iwl_calib_hdr *)pkt->data; |
400 | len = le32_to_cpu(pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK; | ||
401 | 399 | ||
402 | /* reduce the size by the length field itself */ | 400 | if (iwl_calib_set(priv, hdr, iwl_rx_packet_payload_len(pkt))) |
403 | len -= sizeof(__le32); | ||
404 | |||
405 | if (iwl_calib_set(priv, hdr, len)) | ||
406 | IWL_ERR(priv, "Failed to record calibration data %d\n", | 401 | IWL_ERR(priv, "Failed to record calibration data %d\n", |
407 | hdr->op_code); | 402 | hdr->op_code); |
408 | 403 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h index 8d1b5ed3502a..1f065cf4a4ba 100644 --- a/drivers/net/wireless/iwlwifi/iwl-trans.h +++ b/drivers/net/wireless/iwlwifi/iwl-trans.h | |||
@@ -176,6 +176,16 @@ struct iwl_rx_packet { | |||
176 | u8 data[]; | 176 | u8 data[]; |
177 | } __packed; | 177 | } __packed; |
178 | 178 | ||
179 | static inline u32 iwl_rx_packet_len(const struct iwl_rx_packet *pkt) | ||
180 | { | ||
181 | return le32_to_cpu(pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK; | ||
182 | } | ||
183 | |||
184 | static inline u32 iwl_rx_packet_payload_len(const struct iwl_rx_packet *pkt) | ||
185 | { | ||
186 | return iwl_rx_packet_len(pkt) - sizeof(pkt->hdr); | ||
187 | } | ||
188 | |||
179 | /** | 189 | /** |
180 | * enum CMD_MODE - how to send the host commands ? | 190 | * enum CMD_MODE - how to send the host commands ? |
181 | * | 191 | * |
diff --git a/drivers/net/wireless/iwlwifi/mvm/d3.c b/drivers/net/wireless/iwlwifi/mvm/d3.c index f04d2f4d80cd..f36a7ee0267f 100644 --- a/drivers/net/wireless/iwlwifi/mvm/d3.c +++ b/drivers/net/wireless/iwlwifi/mvm/d3.c | |||
@@ -886,8 +886,7 @@ static int iwl_mvm_get_last_nonqos_seq(struct iwl_mvm *mvm, | |||
886 | if (err) | 886 | if (err) |
887 | return err; | 887 | return err; |
888 | 888 | ||
889 | size = le32_to_cpu(cmd.resp_pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK; | 889 | size = iwl_rx_packet_payload_len(cmd.resp_pkt); |
890 | size -= sizeof(cmd.resp_pkt->hdr); | ||
891 | if (size < sizeof(__le16)) { | 890 | if (size < sizeof(__le16)) { |
892 | err = -EINVAL; | 891 | err = -EINVAL; |
893 | } else { | 892 | } else { |
@@ -1211,9 +1210,8 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw, | |||
1211 | if (ret) | 1210 | if (ret) |
1212 | goto out; | 1211 | goto out; |
1213 | #ifdef CONFIG_IWLWIFI_DEBUGFS | 1212 | #ifdef CONFIG_IWLWIFI_DEBUGFS |
1214 | len = le32_to_cpu(d3_cfg_cmd.resp_pkt->len_n_flags) & | 1213 | len = iwl_rx_packet_payload_len(d3_cfg_cmd.resp_pkt); |
1215 | FH_RSCSR_FRAME_SIZE_MSK; | 1214 | if (len >= sizeof(u32)) { |
1216 | if (len >= sizeof(u32) * 2) { | ||
1217 | mvm->d3_test_pme_ptr = | 1215 | mvm->d3_test_pme_ptr = |
1218 | le32_to_cpup((__le32 *)d3_cfg_cmd.resp_pkt->data); | 1216 | le32_to_cpup((__le32 *)d3_cfg_cmd.resp_pkt->data); |
1219 | } | 1217 | } |
@@ -1668,8 +1666,8 @@ static bool iwl_mvm_query_wakeup_reasons(struct iwl_mvm *mvm, | |||
1668 | else | 1666 | else |
1669 | status_size = sizeof(struct iwl_wowlan_status_v4); | 1667 | status_size = sizeof(struct iwl_wowlan_status_v4); |
1670 | 1668 | ||
1671 | len = le32_to_cpu(cmd.resp_pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK; | 1669 | len = iwl_rx_packet_payload_len(cmd.resp_pkt); |
1672 | if (len - sizeof(struct iwl_cmd_header) < status_size) { | 1670 | if (len < status_size) { |
1673 | IWL_ERR(mvm, "Invalid WoWLAN status response!\n"); | 1671 | IWL_ERR(mvm, "Invalid WoWLAN status response!\n"); |
1674 | goto out_free_resp; | 1672 | goto out_free_resp; |
1675 | } | 1673 | } |
@@ -1704,8 +1702,7 @@ static bool iwl_mvm_query_wakeup_reasons(struct iwl_mvm *mvm, | |||
1704 | status.wake_packet = status_v4->wake_packet; | 1702 | status.wake_packet = status_v4->wake_packet; |
1705 | } | 1703 | } |
1706 | 1704 | ||
1707 | if (len - sizeof(struct iwl_cmd_header) != | 1705 | if (len != status_size + ALIGN(status.wake_packet_bufsize, 4)) { |
1708 | status_size + ALIGN(status.wake_packet_bufsize, 4)) { | ||
1709 | IWL_ERR(mvm, "Invalid WoWLAN status response!\n"); | 1706 | IWL_ERR(mvm, "Invalid WoWLAN status response!\n"); |
1710 | goto out_free_resp; | 1707 | goto out_free_resp; |
1711 | } | 1708 | } |
diff --git a/drivers/net/wireless/iwlwifi/mvm/time-event.c b/drivers/net/wireless/iwlwifi/mvm/time-event.c index 50f3d7f560bc..b4c2abaa297b 100644 --- a/drivers/net/wireless/iwlwifi/mvm/time-event.c +++ b/drivers/net/wireless/iwlwifi/mvm/time-event.c | |||
@@ -249,12 +249,12 @@ static bool iwl_mvm_time_event_response(struct iwl_notif_wait_data *notif_wait, | |||
249 | container_of(notif_wait, struct iwl_mvm, notif_wait); | 249 | container_of(notif_wait, struct iwl_mvm, notif_wait); |
250 | struct iwl_mvm_time_event_data *te_data = data; | 250 | struct iwl_mvm_time_event_data *te_data = data; |
251 | struct iwl_time_event_resp *resp; | 251 | struct iwl_time_event_resp *resp; |
252 | int resp_len = le32_to_cpu(pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK; | 252 | int resp_len = iwl_rx_packet_payload_len(pkt); |
253 | 253 | ||
254 | if (WARN_ON(pkt->hdr.cmd != TIME_EVENT_CMD)) | 254 | if (WARN_ON(pkt->hdr.cmd != TIME_EVENT_CMD)) |
255 | return true; | 255 | return true; |
256 | 256 | ||
257 | if (WARN_ON_ONCE(resp_len != sizeof(pkt->hdr) + sizeof(*resp))) { | 257 | if (WARN_ON_ONCE(resp_len != sizeof(*resp))) { |
258 | IWL_ERR(mvm, "Invalid TIME_EVENT_CMD response\n"); | 258 | IWL_ERR(mvm, "Invalid TIME_EVENT_CMD response\n"); |
259 | return true; | 259 | return true; |
260 | } | 260 | } |
diff --git a/drivers/net/wireless/iwlwifi/mvm/utils.c b/drivers/net/wireless/iwlwifi/mvm/utils.c index 487d61b25359..a4a5e25623c3 100644 --- a/drivers/net/wireless/iwlwifi/mvm/utils.c +++ b/drivers/net/wireless/iwlwifi/mvm/utils.c | |||
@@ -168,8 +168,8 @@ int iwl_mvm_send_cmd_status(struct iwl_mvm *mvm, struct iwl_host_cmd *cmd, | |||
168 | goto out_free_resp; | 168 | goto out_free_resp; |
169 | } | 169 | } |
170 | 170 | ||
171 | resp_len = le32_to_cpu(pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK; | 171 | resp_len = iwl_rx_packet_payload_len(pkt); |
172 | if (WARN_ON_ONCE(resp_len != sizeof(pkt->hdr) + sizeof(*resp))) { | 172 | if (WARN_ON_ONCE(resp_len != sizeof(*resp))) { |
173 | ret = -EIO; | 173 | ret = -EIO; |
174 | goto out_free_resp; | 174 | goto out_free_resp; |
175 | } | 175 | } |
diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c index 1890ea29c264..08c23d497a02 100644 --- a/drivers/net/wireless/iwlwifi/pcie/rx.c +++ b/drivers/net/wireless/iwlwifi/pcie/rx.c | |||
@@ -615,7 +615,7 @@ static void iwl_pcie_rx_handle_rb(struct iwl_trans *trans, | |||
615 | rxcb._offset, get_cmd_string(trans_pcie, pkt->hdr.cmd), | 615 | rxcb._offset, get_cmd_string(trans_pcie, pkt->hdr.cmd), |
616 | pkt->hdr.cmd); | 616 | pkt->hdr.cmd); |
617 | 617 | ||
618 | len = le32_to_cpu(pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK; | 618 | len = iwl_rx_packet_len(pkt); |
619 | len += sizeof(u32); /* account for status word */ | 619 | len += sizeof(u32); /* account for status word */ |
620 | trace_iwlwifi_dev_rx(trans->dev, trans, pkt, len); | 620 | trace_iwlwifi_dev_rx(trans->dev, trans, pkt, len); |
621 | trace_iwlwifi_dev_rx_data(trans->dev, trans, pkt, len); | 621 | trace_iwlwifi_dev_rx_data(trans->dev, trans, pkt, len); |