summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
diff options
context:
space:
mode:
authorSharon Dvir <sharon.dvir@intel.com>2015-10-15 18:18:09 +0300
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2015-12-13 08:56:17 +0200
commit39bdb17ebb5bd7a5c8a231d7cac4a4d5ccc58149 (patch)
tree4f7ca523849df1a34bed74e95bf45698eb2175af /drivers/net/wireless/intel/iwlwifi/iwl-trans.h
parent92fe83430b899b786c837e5b716a328220d47ae5 (diff)
iwlwifi: update host command messages to new format
Host commands now have a group id, express this in printed messages. Signed-off-by: Sharon Dvir <sharon.dvir@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/iwl-trans.h')
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-trans.h34
1 files changed, 30 insertions, 4 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
index b825d940cc58..f00c9ad9d3c2 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
@@ -68,6 +68,7 @@
#include <linux/ieee80211.h>
#include <linux/mm.h> /* for page_address */
#include <linux/lockdep.h>
+#include <linux/kernel.h>
#include "iwl-debug.h"
#include "iwl-config.h"
@@ -442,6 +443,22 @@ iwl_trans_get_rb_size_order(enum iwl_amsdu_size rb_size)
}
}
+struct iwl_hcmd_names {
+ u8 cmd_id;
+ const char *const cmd_name;
+};
+
+#define HCMD_NAME(x) \
+ { .cmd_id = x, .cmd_name = #x }
+
+struct iwl_hcmd_arr {
+ const struct iwl_hcmd_names *arr;
+ int size;
+};
+
+#define HCMD_ARR(x) \
+ { .arr = x, .size = ARRAY_SIZE(x) }
+
/**
* struct iwl_trans_config - transport configuration
*
@@ -461,8 +478,9 @@ iwl_trans_get_rb_size_order(enum iwl_amsdu_size rb_size)
* in DWORD (as opposed to bytes)
* @scd_set_active: should the transport configure the SCD for HCMD queue
* @wide_cmd_header: firmware supports wide host command header
- * @command_names: array of command names, must be 256 entries
- * (one for each command); for debugging only
+ * @command_groups: array of command groups, each member is an array of the
+ * commands in the group; for debugging only
+ * @command_groups_size: number of command groups, to avoid illegal access
* @sdio_adma_addr: the default address to set for the ADMA in SDIO mode until
* we get the ALIVE from the uCode
*/
@@ -479,8 +497,9 @@ struct iwl_trans_config {
bool bc_table_dword;
bool scd_set_active;
bool wide_cmd_header;
- const char *const *command_names;
-
+ const struct iwl_hcmd_arr *command_groups;
+ int command_groups_size;
+
u32 sdio_adma_addr;
};
@@ -720,6 +739,9 @@ struct iwl_trans {
bool pm_support;
bool ltr_enabled;
+ const struct iwl_hcmd_arr *command_groups;
+ int command_groups_size;
+
u8 num_rx_queues;
/* The following fields are internal only */
@@ -757,12 +779,16 @@ struct iwl_trans {
char trans_specific[0] __aligned(sizeof(void *));
};
+const char *iwl_get_cmd_string(struct iwl_trans *trans, u32 id);
+int iwl_cmd_groups_verify_sorted(const struct iwl_trans_config *trans);
+
static inline void iwl_trans_configure(struct iwl_trans *trans,
const struct iwl_trans_config *trans_cfg)
{
trans->op_mode = trans_cfg->op_mode;
trans->ops->configure(trans, trans_cfg);
+ WARN_ON(iwl_cmd_groups_verify_sorted(trans_cfg));
}
static inline int _iwl_trans_start_hw(struct iwl_trans *trans, bool low_power)