aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2012-09-13 10:41:01 -0400
committerBjorn Helgaas <bhelgaas@google.com>2012-09-13 10:41:01 -0400
commit78890b5989d96ddce989cde929c45ceeded0fcaf (patch)
tree4e2da81fc7c97f11aee174b1eedac110c9a68b3a /drivers/net/wireless/iwlwifi
parent1959ec5f82acbdf91425b41600f119ebecb5f6a8 (diff)
parent55d512e245bc7699a8800e23df1a24195dd08217 (diff)
Merge commit 'v3.6-rc5' into next
* commit 'v3.6-rc5': (1098 commits) Linux 3.6-rc5 HID: tpkbd: work even if the new Lenovo Keyboard driver is not configured Remove user-triggerable BUG from mpol_to_str xen/pciback: Fix proper FLR steps. uml: fix compile error in deliver_alarm() dj: memory scribble in logi_dj Fix order of arguments to compat_put_time[spec|val] xen: Use correct masking in xen_swiotlb_alloc_coherent. xen: fix logical error in tlb flushing xen/p2m: Fix one-off error in checking the P2M tree directory. powerpc: Don't use __put_user() in patch_instruction powerpc: Make sure IPI handlers see data written by IPI senders powerpc: Restore correct DSCR in context switch powerpc: Fix DSCR inheritance in copy_thread() powerpc: Keep thread.dscr and thread.dscr_inherit in sync powerpc: Update DSCR on all CPUs when writing sysfs dscr_default powerpc/powernv: Always go into nap mode when CPU is offline powerpc: Give hypervisor decrementer interrupts their own handler powerpc/vphn: Fix arch_update_cpu_topology() return value ARM: gemini: fix the gemini build ... Conflicts: drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c drivers/rapidio/devices/tsi721.c
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/debugfs.c3
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/rs.c13
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/internal.h2
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/rx.c2
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/trans.c30
5 files changed, 29 insertions, 21 deletions
diff --git a/drivers/net/wireless/iwlwifi/dvm/debugfs.c b/drivers/net/wireless/iwlwifi/dvm/debugfs.c
index 46782f1102ac..a47b306b522c 100644
--- a/drivers/net/wireless/iwlwifi/dvm/debugfs.c
+++ b/drivers/net/wireless/iwlwifi/dvm/debugfs.c
@@ -124,6 +124,9 @@ static ssize_t iwl_dbgfs_sram_read(struct file *file,
124 const struct fw_img *img; 124 const struct fw_img *img;
125 size_t bufsz; 125 size_t bufsz;
126 126
127 if (!iwl_is_ready_rf(priv))
128 return -EAGAIN;
129
127 /* default is to dump the entire data segment */ 130 /* default is to dump the entire data segment */
128 if (!priv->dbgfs_sram_offset && !priv->dbgfs_sram_len) { 131 if (!priv->dbgfs_sram_offset && !priv->dbgfs_sram_len) {
129 priv->dbgfs_sram_offset = 0x800000; 132 priv->dbgfs_sram_offset = 0x800000;
diff --git a/drivers/net/wireless/iwlwifi/dvm/rs.c b/drivers/net/wireless/iwlwifi/dvm/rs.c
index 6fddd2785e6e..a82f46c10f5e 100644
--- a/drivers/net/wireless/iwlwifi/dvm/rs.c
+++ b/drivers/net/wireless/iwlwifi/dvm/rs.c
@@ -707,11 +707,14 @@ static int rs_toggle_antenna(u32 valid_ant, u32 *rate_n_flags,
707 */ 707 */
708static bool rs_use_green(struct ieee80211_sta *sta) 708static bool rs_use_green(struct ieee80211_sta *sta)
709{ 709{
710 struct iwl_station_priv *sta_priv = (void *)sta->drv_priv; 710 /*
711 struct iwl_rxon_context *ctx = sta_priv->ctx; 711 * There's a bug somewhere in this code that causes the
712 712 * scaling to get stuck because GF+SGI can't be combined
713 return (sta->ht_cap.cap & IEEE80211_HT_CAP_GRN_FLD) && 713 * in SISO rates. Until we find that bug, disable GF, it
714 !(ctx->ht.non_gf_sta_present); 714 * has only limited benefit and we still interoperate with
715 * GF APs since we can always receive GF transmissions.
716 */
717 return false;
715} 718}
716 719
717/** 720/**
diff --git a/drivers/net/wireless/iwlwifi/pcie/internal.h b/drivers/net/wireless/iwlwifi/pcie/internal.h
index d9694c58208c..4ffc18dc3a57 100644
--- a/drivers/net/wireless/iwlwifi/pcie/internal.h
+++ b/drivers/net/wireless/iwlwifi/pcie/internal.h
@@ -350,7 +350,7 @@ int iwl_queue_space(const struct iwl_queue *q);
350/***************************************************** 350/*****************************************************
351* Error handling 351* Error handling
352******************************************************/ 352******************************************************/
353int iwl_dump_fh(struct iwl_trans *trans, char **buf, bool display); 353int iwl_dump_fh(struct iwl_trans *trans, char **buf);
354void iwl_dump_csr(struct iwl_trans *trans); 354void iwl_dump_csr(struct iwl_trans *trans);
355 355
356/***************************************************** 356/*****************************************************
diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c
index 39a6ca1f009c..d1a61ba6247a 100644
--- a/drivers/net/wireless/iwlwifi/pcie/rx.c
+++ b/drivers/net/wireless/iwlwifi/pcie/rx.c
@@ -555,7 +555,7 @@ static void iwl_irq_handle_error(struct iwl_trans *trans)
555 } 555 }
556 556
557 iwl_dump_csr(trans); 557 iwl_dump_csr(trans);
558 iwl_dump_fh(trans, NULL, false); 558 iwl_dump_fh(trans, NULL);
559 559
560 iwl_op_mode_nic_error(trans->op_mode); 560 iwl_op_mode_nic_error(trans->op_mode);
561} 561}
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
index 26bdbe3ff7cf..e316ca4632b1 100644
--- a/drivers/net/wireless/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
@@ -1646,13 +1646,9 @@ static const char *get_fh_string(int cmd)
1646#undef IWL_CMD 1646#undef IWL_CMD
1647} 1647}
1648 1648
1649int iwl_dump_fh(struct iwl_trans *trans, char **buf, bool display) 1649int iwl_dump_fh(struct iwl_trans *trans, char **buf)
1650{ 1650{
1651 int i; 1651 int i;
1652#ifdef CONFIG_IWLWIFI_DEBUG
1653 int pos = 0;
1654 size_t bufsz = 0;
1655#endif
1656 static const u32 fh_tbl[] = { 1652 static const u32 fh_tbl[] = {
1657 FH_RSCSR_CHNL0_STTS_WPTR_REG, 1653 FH_RSCSR_CHNL0_STTS_WPTR_REG,
1658 FH_RSCSR_CHNL0_RBDCB_BASE_REG, 1654 FH_RSCSR_CHNL0_RBDCB_BASE_REG,
@@ -1664,29 +1660,35 @@ int iwl_dump_fh(struct iwl_trans *trans, char **buf, bool display)
1664 FH_TSSR_TX_STATUS_REG, 1660 FH_TSSR_TX_STATUS_REG,
1665 FH_TSSR_TX_ERROR_REG 1661 FH_TSSR_TX_ERROR_REG
1666 }; 1662 };
1667#ifdef CONFIG_IWLWIFI_DEBUG 1663
1668 if (display) { 1664#ifdef CONFIG_IWLWIFI_DEBUGFS
1669 bufsz = ARRAY_SIZE(fh_tbl) * 48 + 40; 1665 if (buf) {
1666 int pos = 0;
1667 size_t bufsz = ARRAY_SIZE(fh_tbl) * 48 + 40;
1668
1670 *buf = kmalloc(bufsz, GFP_KERNEL); 1669 *buf = kmalloc(bufsz, GFP_KERNEL);
1671 if (!*buf) 1670 if (!*buf)
1672 return -ENOMEM; 1671 return -ENOMEM;
1672
1673 pos += scnprintf(*buf + pos, bufsz - pos, 1673 pos += scnprintf(*buf + pos, bufsz - pos,
1674 "FH register values:\n"); 1674 "FH register values:\n");
1675 for (i = 0; i < ARRAY_SIZE(fh_tbl); i++) { 1675
1676 for (i = 0; i < ARRAY_SIZE(fh_tbl); i++)
1676 pos += scnprintf(*buf + pos, bufsz - pos, 1677 pos += scnprintf(*buf + pos, bufsz - pos,
1677 " %34s: 0X%08x\n", 1678 " %34s: 0X%08x\n",
1678 get_fh_string(fh_tbl[i]), 1679 get_fh_string(fh_tbl[i]),
1679 iwl_read_direct32(trans, fh_tbl[i])); 1680 iwl_read_direct32(trans, fh_tbl[i]));
1680 } 1681
1681 return pos; 1682 return pos;
1682 } 1683 }
1683#endif 1684#endif
1685
1684 IWL_ERR(trans, "FH register values:\n"); 1686 IWL_ERR(trans, "FH register values:\n");
1685 for (i = 0; i < ARRAY_SIZE(fh_tbl); i++) { 1687 for (i = 0; i < ARRAY_SIZE(fh_tbl); i++)
1686 IWL_ERR(trans, " %34s: 0X%08x\n", 1688 IWL_ERR(trans, " %34s: 0X%08x\n",
1687 get_fh_string(fh_tbl[i]), 1689 get_fh_string(fh_tbl[i]),
1688 iwl_read_direct32(trans, fh_tbl[i])); 1690 iwl_read_direct32(trans, fh_tbl[i]));
1689 } 1691
1690 return 0; 1692 return 0;
1691} 1693}
1692 1694
@@ -1979,11 +1981,11 @@ static ssize_t iwl_dbgfs_fh_reg_read(struct file *file,
1979 size_t count, loff_t *ppos) 1981 size_t count, loff_t *ppos)
1980{ 1982{
1981 struct iwl_trans *trans = file->private_data; 1983 struct iwl_trans *trans = file->private_data;
1982 char *buf; 1984 char *buf = NULL;
1983 int pos = 0; 1985 int pos = 0;
1984 ssize_t ret = -EFAULT; 1986 ssize_t ret = -EFAULT;
1985 1987
1986 ret = pos = iwl_dump_fh(trans, &buf, true); 1988 ret = pos = iwl_dump_fh(trans, &buf);
1987 if (buf) { 1989 if (buf) {
1988 ret = simple_read_from_buffer(user_buf, 1990 ret = simple_read_from_buffer(user_buf,
1989 count, ppos, buf, pos); 1991 count, ppos, buf, pos);