Loading drivers/net/wireless/iwlwifi/dvm/main.c +3 −6 Original line number Diff line number Diff line Loading @@ -1191,8 +1191,6 @@ static void iwl_option_config(struct iwl_priv *priv) static int iwl_eeprom_init_hw_params(struct iwl_priv *priv) { u16 radio_cfg; priv->eeprom_data->sku = priv->eeprom_data->sku; if (priv->eeprom_data->sku & EEPROM_SKU_CAP_11N_ENABLE && Loading @@ -1208,8 +1206,6 @@ static int iwl_eeprom_init_hw_params(struct iwl_priv *priv) IWL_INFO(priv, "Device SKU: 0x%X\n", priv->eeprom_data->sku); radio_cfg = priv->eeprom_data->radio_cfg; priv->hw_params.tx_chains_num = num_of_ant(priv->eeprom_data->valid_tx_ant); if (priv->cfg->rx_with_siso_diversity) Loading Loading @@ -1334,6 +1330,9 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, /* Configure transport layer */ iwl_trans_configure(priv->trans, &trans_cfg); trans->rx_mpdu_cmd = REPLY_RX_MPDU_CMD; trans->rx_mpdu_cmd_hdr_size = sizeof(struct iwl_rx_mpdu_res_start); /* At this point both hw and priv are allocated. */ SET_IEEE80211_DEV(priv->hw, priv->trans->dev); Loading Loading @@ -2152,8 +2151,6 @@ static int __init iwl_init(void) { int ret; pr_info(DRV_DESCRIPTION ", " DRV_VERSION "\n"); pr_info(DRV_COPYRIGHT "\n"); ret = iwlagn_rate_control_register(); if (ret) { Loading drivers/net/wireless/iwlwifi/iwl-devtrace.h +87 −8 Original line number Diff line number Diff line Loading @@ -25,6 +25,39 @@ *****************************************************************************/ #if !defined(__IWLWIFI_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ) #include <linux/skbuff.h> #include <linux/ieee80211.h> #include <net/cfg80211.h> #include "iwl-trans.h" #if !defined(__IWLWIFI_DEVICE_TRACE) static inline bool iwl_trace_data(struct sk_buff *skb) { struct ieee80211_hdr *hdr = (void *)skb->data; if (ieee80211_is_data(hdr->frame_control)) return skb->protocol != cpu_to_be16(ETH_P_PAE); return false; } static inline size_t iwl_rx_trace_len(const struct iwl_trans *trans, void *rxbuf, size_t len) { struct iwl_cmd_header *cmd = (void *)((u8 *)rxbuf + sizeof(__le32)); struct ieee80211_hdr *hdr; if (cmd->cmd != trans->rx_mpdu_cmd) return len; hdr = (void *)((u8 *)cmd + sizeof(struct iwl_cmd_header) + trans->rx_mpdu_cmd_hdr_size); if (!ieee80211_is_data(hdr->frame_control)) return len; /* maybe try to identify EAPOL frames? */ return sizeof(__le32) + sizeof(*cmd) + trans->rx_mpdu_cmd_hdr_size + ieee80211_hdrlen(hdr->frame_control); } #endif #define __IWLWIFI_DEVICE_TRACE #include <linux/tracepoint.h> Loading Loading @@ -234,6 +267,48 @@ TRACE_EVENT(iwlwifi_dbg, TP_printk("%s", (char *)__get_dynamic_array(msg)) ); #undef TRACE_SYSTEM #define TRACE_SYSTEM iwlwifi_data TRACE_EVENT(iwlwifi_dev_tx_data, TP_PROTO(const struct device *dev, struct sk_buff *skb, void *data, size_t data_len), TP_ARGS(dev, skb, data, data_len), TP_STRUCT__entry( DEV_ENTRY __dynamic_array(u8, data, iwl_trace_data(skb) ? data_len : 0) ), TP_fast_assign( DEV_ASSIGN; if (iwl_trace_data(skb)) memcpy(__get_dynamic_array(data), data, data_len); ), TP_printk("[%s] TX frame data", __get_str(dev)) ); TRACE_EVENT(iwlwifi_dev_rx_data, TP_PROTO(const struct device *dev, const struct iwl_trans *trans, void *rxbuf, size_t len), TP_ARGS(dev, trans, rxbuf, len), TP_STRUCT__entry( DEV_ENTRY __dynamic_array(u8, data, len - iwl_rx_trace_len(trans, rxbuf, len)) ), TP_fast_assign( size_t offs = iwl_rx_trace_len(trans, rxbuf, len); DEV_ASSIGN; if (offs < len) memcpy(__get_dynamic_array(data), ((u8 *)rxbuf) + offs, len - offs); ), TP_printk("[%s] TX frame data", __get_str(dev)) ); #undef TRACE_SYSTEM #define TRACE_SYSTEM iwlwifi Loading Loading @@ -270,25 +345,28 @@ TRACE_EVENT(iwlwifi_dev_hcmd, ); TRACE_EVENT(iwlwifi_dev_rx, TP_PROTO(const struct device *dev, void *rxbuf, size_t len), TP_ARGS(dev, rxbuf, len), TP_PROTO(const struct device *dev, const struct iwl_trans *trans, void *rxbuf, size_t len), TP_ARGS(dev, trans, rxbuf, len), TP_STRUCT__entry( DEV_ENTRY __dynamic_array(u8, rxbuf, len) __dynamic_array(u8, rxbuf, iwl_rx_trace_len(trans, rxbuf, len)) ), TP_fast_assign( DEV_ASSIGN; memcpy(__get_dynamic_array(rxbuf), rxbuf, len); memcpy(__get_dynamic_array(rxbuf), rxbuf, iwl_rx_trace_len(trans, rxbuf, len)); ), TP_printk("[%s] RX cmd %#.2x", __get_str(dev), ((u8 *)__get_dynamic_array(rxbuf))[4]) ); TRACE_EVENT(iwlwifi_dev_tx, TP_PROTO(const struct device *dev, void *tfd, size_t tfdlen, TP_PROTO(const struct device *dev, struct sk_buff *skb, void *tfd, size_t tfdlen, void *buf0, size_t buf0_len, void *buf1, size_t buf1_len), TP_ARGS(dev, tfd, tfdlen, buf0, buf0_len, buf1, buf1_len), TP_ARGS(dev, skb, tfd, tfdlen, buf0, buf0_len, buf1, buf1_len), TP_STRUCT__entry( DEV_ENTRY Loading @@ -301,13 +379,14 @@ TRACE_EVENT(iwlwifi_dev_tx, * for the possible padding). */ __dynamic_array(u8, buf0, buf0_len) __dynamic_array(u8, buf1, buf1_len) __dynamic_array(u8, buf1, iwl_trace_data(skb) ? 0 : buf1_len) ), TP_fast_assign( DEV_ASSIGN; __entry->framelen = buf0_len + buf1_len; memcpy(__get_dynamic_array(tfd), tfd, tfdlen); memcpy(__get_dynamic_array(buf0), buf0, buf0_len); if (!iwl_trace_data(skb)) memcpy(__get_dynamic_array(buf1), buf1, buf1_len); ), TP_printk("[%s] TX %.2x (%zu bytes)", Loading drivers/net/wireless/iwlwifi/iwl-io.c +2 −2 Original line number Diff line number Diff line Loading @@ -327,11 +327,11 @@ u32 iwl_read_targ_mem(struct iwl_trans *trans, u32 addr) EXPORT_SYMBOL_GPL(iwl_read_targ_mem); int _iwl_write_targ_mem_dwords(struct iwl_trans *trans, u32 addr, void *buf, int dwords) const void *buf, int dwords) { unsigned long flags; int offs, result = 0; u32 *vals = buf; const u32 *vals = buf; spin_lock_irqsave(&trans->reg_lock, flags); if (likely(iwl_grab_nic_access(trans))) { Loading drivers/net/wireless/iwlwifi/iwl-io.h +1 −1 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ void _iwl_read_targ_mem_dwords(struct iwl_trans *trans, u32 addr, } while (0) int _iwl_write_targ_mem_dwords(struct iwl_trans *trans, u32 addr, void *buf, int dwords); const void *buf, int dwords); u32 iwl_read_targ_mem(struct iwl_trans *trans, u32 addr); int iwl_write_targ_mem(struct iwl_trans *trans, u32 addr, u32 val); Loading drivers/net/wireless/iwlwifi/iwl-prph.h +3 −0 Original line number Diff line number Diff line Loading @@ -213,6 +213,9 @@ #define SCD_CONTEXT_QUEUE_OFFSET(x)\ (SCD_CONTEXT_MEM_LOWER_BOUND + ((x) * 8)) #define SCD_TX_STTS_QUEUE_OFFSET(x)\ (SCD_TX_STTS_MEM_LOWER_BOUND + ((x) * 16)) #define SCD_TRANS_TBL_OFFSET_QUEUE(x) \ ((SCD_TRANS_TBL_MEM_LOWER_BOUND + ((x) * 2)) & 0xfffc) Loading Loading
drivers/net/wireless/iwlwifi/dvm/main.c +3 −6 Original line number Diff line number Diff line Loading @@ -1191,8 +1191,6 @@ static void iwl_option_config(struct iwl_priv *priv) static int iwl_eeprom_init_hw_params(struct iwl_priv *priv) { u16 radio_cfg; priv->eeprom_data->sku = priv->eeprom_data->sku; if (priv->eeprom_data->sku & EEPROM_SKU_CAP_11N_ENABLE && Loading @@ -1208,8 +1206,6 @@ static int iwl_eeprom_init_hw_params(struct iwl_priv *priv) IWL_INFO(priv, "Device SKU: 0x%X\n", priv->eeprom_data->sku); radio_cfg = priv->eeprom_data->radio_cfg; priv->hw_params.tx_chains_num = num_of_ant(priv->eeprom_data->valid_tx_ant); if (priv->cfg->rx_with_siso_diversity) Loading Loading @@ -1334,6 +1330,9 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, /* Configure transport layer */ iwl_trans_configure(priv->trans, &trans_cfg); trans->rx_mpdu_cmd = REPLY_RX_MPDU_CMD; trans->rx_mpdu_cmd_hdr_size = sizeof(struct iwl_rx_mpdu_res_start); /* At this point both hw and priv are allocated. */ SET_IEEE80211_DEV(priv->hw, priv->trans->dev); Loading Loading @@ -2152,8 +2151,6 @@ static int __init iwl_init(void) { int ret; pr_info(DRV_DESCRIPTION ", " DRV_VERSION "\n"); pr_info(DRV_COPYRIGHT "\n"); ret = iwlagn_rate_control_register(); if (ret) { Loading
drivers/net/wireless/iwlwifi/iwl-devtrace.h +87 −8 Original line number Diff line number Diff line Loading @@ -25,6 +25,39 @@ *****************************************************************************/ #if !defined(__IWLWIFI_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ) #include <linux/skbuff.h> #include <linux/ieee80211.h> #include <net/cfg80211.h> #include "iwl-trans.h" #if !defined(__IWLWIFI_DEVICE_TRACE) static inline bool iwl_trace_data(struct sk_buff *skb) { struct ieee80211_hdr *hdr = (void *)skb->data; if (ieee80211_is_data(hdr->frame_control)) return skb->protocol != cpu_to_be16(ETH_P_PAE); return false; } static inline size_t iwl_rx_trace_len(const struct iwl_trans *trans, void *rxbuf, size_t len) { struct iwl_cmd_header *cmd = (void *)((u8 *)rxbuf + sizeof(__le32)); struct ieee80211_hdr *hdr; if (cmd->cmd != trans->rx_mpdu_cmd) return len; hdr = (void *)((u8 *)cmd + sizeof(struct iwl_cmd_header) + trans->rx_mpdu_cmd_hdr_size); if (!ieee80211_is_data(hdr->frame_control)) return len; /* maybe try to identify EAPOL frames? */ return sizeof(__le32) + sizeof(*cmd) + trans->rx_mpdu_cmd_hdr_size + ieee80211_hdrlen(hdr->frame_control); } #endif #define __IWLWIFI_DEVICE_TRACE #include <linux/tracepoint.h> Loading Loading @@ -234,6 +267,48 @@ TRACE_EVENT(iwlwifi_dbg, TP_printk("%s", (char *)__get_dynamic_array(msg)) ); #undef TRACE_SYSTEM #define TRACE_SYSTEM iwlwifi_data TRACE_EVENT(iwlwifi_dev_tx_data, TP_PROTO(const struct device *dev, struct sk_buff *skb, void *data, size_t data_len), TP_ARGS(dev, skb, data, data_len), TP_STRUCT__entry( DEV_ENTRY __dynamic_array(u8, data, iwl_trace_data(skb) ? data_len : 0) ), TP_fast_assign( DEV_ASSIGN; if (iwl_trace_data(skb)) memcpy(__get_dynamic_array(data), data, data_len); ), TP_printk("[%s] TX frame data", __get_str(dev)) ); TRACE_EVENT(iwlwifi_dev_rx_data, TP_PROTO(const struct device *dev, const struct iwl_trans *trans, void *rxbuf, size_t len), TP_ARGS(dev, trans, rxbuf, len), TP_STRUCT__entry( DEV_ENTRY __dynamic_array(u8, data, len - iwl_rx_trace_len(trans, rxbuf, len)) ), TP_fast_assign( size_t offs = iwl_rx_trace_len(trans, rxbuf, len); DEV_ASSIGN; if (offs < len) memcpy(__get_dynamic_array(data), ((u8 *)rxbuf) + offs, len - offs); ), TP_printk("[%s] TX frame data", __get_str(dev)) ); #undef TRACE_SYSTEM #define TRACE_SYSTEM iwlwifi Loading Loading @@ -270,25 +345,28 @@ TRACE_EVENT(iwlwifi_dev_hcmd, ); TRACE_EVENT(iwlwifi_dev_rx, TP_PROTO(const struct device *dev, void *rxbuf, size_t len), TP_ARGS(dev, rxbuf, len), TP_PROTO(const struct device *dev, const struct iwl_trans *trans, void *rxbuf, size_t len), TP_ARGS(dev, trans, rxbuf, len), TP_STRUCT__entry( DEV_ENTRY __dynamic_array(u8, rxbuf, len) __dynamic_array(u8, rxbuf, iwl_rx_trace_len(trans, rxbuf, len)) ), TP_fast_assign( DEV_ASSIGN; memcpy(__get_dynamic_array(rxbuf), rxbuf, len); memcpy(__get_dynamic_array(rxbuf), rxbuf, iwl_rx_trace_len(trans, rxbuf, len)); ), TP_printk("[%s] RX cmd %#.2x", __get_str(dev), ((u8 *)__get_dynamic_array(rxbuf))[4]) ); TRACE_EVENT(iwlwifi_dev_tx, TP_PROTO(const struct device *dev, void *tfd, size_t tfdlen, TP_PROTO(const struct device *dev, struct sk_buff *skb, void *tfd, size_t tfdlen, void *buf0, size_t buf0_len, void *buf1, size_t buf1_len), TP_ARGS(dev, tfd, tfdlen, buf0, buf0_len, buf1, buf1_len), TP_ARGS(dev, skb, tfd, tfdlen, buf0, buf0_len, buf1, buf1_len), TP_STRUCT__entry( DEV_ENTRY Loading @@ -301,13 +379,14 @@ TRACE_EVENT(iwlwifi_dev_tx, * for the possible padding). */ __dynamic_array(u8, buf0, buf0_len) __dynamic_array(u8, buf1, buf1_len) __dynamic_array(u8, buf1, iwl_trace_data(skb) ? 0 : buf1_len) ), TP_fast_assign( DEV_ASSIGN; __entry->framelen = buf0_len + buf1_len; memcpy(__get_dynamic_array(tfd), tfd, tfdlen); memcpy(__get_dynamic_array(buf0), buf0, buf0_len); if (!iwl_trace_data(skb)) memcpy(__get_dynamic_array(buf1), buf1, buf1_len); ), TP_printk("[%s] TX %.2x (%zu bytes)", Loading
drivers/net/wireless/iwlwifi/iwl-io.c +2 −2 Original line number Diff line number Diff line Loading @@ -327,11 +327,11 @@ u32 iwl_read_targ_mem(struct iwl_trans *trans, u32 addr) EXPORT_SYMBOL_GPL(iwl_read_targ_mem); int _iwl_write_targ_mem_dwords(struct iwl_trans *trans, u32 addr, void *buf, int dwords) const void *buf, int dwords) { unsigned long flags; int offs, result = 0; u32 *vals = buf; const u32 *vals = buf; spin_lock_irqsave(&trans->reg_lock, flags); if (likely(iwl_grab_nic_access(trans))) { Loading
drivers/net/wireless/iwlwifi/iwl-io.h +1 −1 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ void _iwl_read_targ_mem_dwords(struct iwl_trans *trans, u32 addr, } while (0) int _iwl_write_targ_mem_dwords(struct iwl_trans *trans, u32 addr, void *buf, int dwords); const void *buf, int dwords); u32 iwl_read_targ_mem(struct iwl_trans *trans, u32 addr); int iwl_write_targ_mem(struct iwl_trans *trans, u32 addr, u32 val); Loading
drivers/net/wireless/iwlwifi/iwl-prph.h +3 −0 Original line number Diff line number Diff line Loading @@ -213,6 +213,9 @@ #define SCD_CONTEXT_QUEUE_OFFSET(x)\ (SCD_CONTEXT_MEM_LOWER_BOUND + ((x) * 8)) #define SCD_TX_STTS_QUEUE_OFFSET(x)\ (SCD_TX_STTS_MEM_LOWER_BOUND + ((x) * 16)) #define SCD_TRANS_TBL_OFFSET_QUEUE(x) \ ((SCD_TRANS_TBL_MEM_LOWER_BOUND + ((x) * 2)) & 0xfffc) Loading