diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2012-09-13 10:41:01 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2012-09-13 10:41:01 -0400 |
commit | 78890b5989d96ddce989cde929c45ceeded0fcaf (patch) | |
tree | 4e2da81fc7c97f11aee174b1eedac110c9a68b3a /drivers/net/wireless/iwlwifi | |
parent | 1959ec5f82acbdf91425b41600f119ebecb5f6a8 (diff) | |
parent | 55d512e245bc7699a8800e23df1a24195dd08217 (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.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/rs.c | 13 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/internal.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/rx.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/trans.c | 30 |
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 | */ |
708 | static bool rs_use_green(struct ieee80211_sta *sta) | 708 | static 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 | ******************************************************/ |
353 | int iwl_dump_fh(struct iwl_trans *trans, char **buf, bool display); | 353 | int iwl_dump_fh(struct iwl_trans *trans, char **buf); |
354 | void iwl_dump_csr(struct iwl_trans *trans); | 354 | void 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 | ||
1649 | int iwl_dump_fh(struct iwl_trans *trans, char **buf, bool display) | 1649 | int 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); |