Merge tag 'remoteproc-4.1-next' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git] / drivers / net / wireless / iwlwifi / iwl-fw.h
index ffd785c..cf75baf 100644 (file)
@@ -68,6 +68,7 @@
 #include <net/mac80211.h>
 
 #include "iwl-fw-file.h"
+#include "iwl-fw-error-dump.h"
 
 /**
  * enum iwl_ucode_type
@@ -157,6 +158,8 @@ struct iwl_fw_cscheme_list {
  * @dbg_dest_tlv: points to the destination TLV for debug
  * @dbg_conf_tlv: array of pointers to configuration TLVs for debug
  * @dbg_conf_tlv_len: lengths of the @dbg_conf_tlv entries
+ * @dbg_trigger_tlv: array of pointers to triggers TLVs
+ * @dbg_trigger_tlv_len: lengths of the @dbg_trigger_tlv entries
  * @dbg_dest_reg_num: num of reg_ops in %dbg_dest_tlv
  */
 struct iwl_fw {
@@ -186,9 +189,10 @@ struct iwl_fw {
        u32 sdio_adma_addr;
 
        struct iwl_fw_dbg_dest_tlv *dbg_dest_tlv;
-       struct iwl_fw_dbg_conf_tlv *dbg_conf_tlv[FW_DBG_MAX];
-       size_t dbg_conf_tlv_len[FW_DBG_MAX];
-
+       struct iwl_fw_dbg_conf_tlv *dbg_conf_tlv[FW_DBG_CONF_MAX];
+       size_t dbg_conf_tlv_len[FW_DBG_CONF_MAX];
+       struct iwl_fw_dbg_trigger_tlv *dbg_trigger_tlv[FW_DBG_TRIGGER_MAX];
+       size_t dbg_trigger_tlv_len[FW_DBG_TRIGGER_MAX];
        u8 dbg_dest_reg_num;
 };
 
@@ -206,46 +210,29 @@ static inline const char *get_fw_dbg_mode_string(int mode)
        }
 }
 
-static inline const struct iwl_fw_dbg_trigger *
-iwl_fw_dbg_conf_get_trigger(const struct iwl_fw *fw, u8 id)
+static inline bool
+iwl_fw_dbg_conf_usniffer(const struct iwl_fw *fw, u8 id)
 {
        const struct iwl_fw_dbg_conf_tlv *conf_tlv = fw->dbg_conf_tlv[id];
-       u8 *ptr;
-       int i;
 
        if (!conf_tlv)
-               return NULL;
-
-       ptr = (void *)&conf_tlv->hcmd;
-       for (i = 0; i < conf_tlv->num_of_hcmds; i++) {
-               ptr += sizeof(conf_tlv->hcmd);
-               ptr += le16_to_cpu(conf_tlv->hcmd.len);
-       }
-
-       return (const struct iwl_fw_dbg_trigger *)ptr;
-}
-
-static inline bool
-iwl_fw_dbg_conf_enabled(const struct iwl_fw *fw, u8 id)
-{
-       const struct iwl_fw_dbg_trigger *trigger =
-               iwl_fw_dbg_conf_get_trigger(fw, id);
-
-       if (!trigger)
                return false;
 
-       return trigger->enabled;
+       return conf_tlv->usniffer;
 }
 
-static inline bool
-iwl_fw_dbg_conf_usniffer(const struct iwl_fw *fw, u8 id)
-{
-       const struct iwl_fw_dbg_conf_tlv *conf_tlv = fw->dbg_conf_tlv[id];
+#define iwl_fw_dbg_trigger_enabled(fw, id) ({                  \
+       void *__dbg_trigger = (fw)->dbg_trigger_tlv[(id)];      \
+       unlikely(__dbg_trigger);                                \
+})
 
-       if (!conf_tlv)
-               return false;
+static inline struct iwl_fw_dbg_trigger_tlv*
+iwl_fw_dbg_get_trigger(const struct iwl_fw *fw, u8 id)
+{
+       if (WARN_ON(id >= ARRAY_SIZE(fw->dbg_trigger_tlv)))
+               return NULL;
 
-       return conf_tlv->usniffer;
+       return fw->dbg_trigger_tlv[id];
 }
 
 #endif  /* __iwl_fw_h__ */