[GIT] trivial

From: Jiri Kosina
Date: Wed Jan 12 2011 - 03:49:44 EST


Linus,

please pull from 'for-next' branch of

git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial.git for-next

to receive updates queued in trivial tree. Nothing earth-shaking, as usual
with this tree -- some comment typo updates, very simple fixes all over
the tree.

You are going to receive one conflict in
drivers/net/wireless/iwlwifi/iwl-core.c -- this is caused by conflict
between 81baf6ec ("iwlwifi: Legacy isr only used by legacy devices") from
the net tree and commit 62e45c14 ("wireless: comment typo fix diable ->
disable") from the trivial tree.

This is because the code got moved around to
iwl-legacy.c from iwl-core.c, but the typo is still there. The resolution
is therefore trivial (attached).

Thanks.

Alan Stern (1):
SCSI: improve two error messages

Andrea Gelmini (1):
drivers: scsi: fix typo in comment

David Sterba (1):
i7core_edac: fix typos in comments

Figo.zhang (1):
mm/rmap.c: fix comment

Jesper Juhl (6):
VIA Chrome camera: remove duplicate includes
ARM, mm: Don't include smp_plat.h twice in flush.c
infiniband: Only include mutex.h once in drivers/infiniband/hw/cxgb4/iw_cxgb4.h
Kill off a bunch of warning: âinlineâ is not at beginning of declaration
coda: kill redundant cast in coda_alloc_inode()
sound, ca0106: Fix assignment to 'channel'.

Jim Cromie (3):
init/Kconfig: fix typo
remove extraneous 'is' from Documentation/iostats.txt
remove doc for obsolete dynamic-printk kernel-parameter

Jiri Kosina (4):
Merge branch 'master' into for-next
Don't touch blackfin with printk typo fixes
Merge branch 'master' into for-next
Revert conflicting V4L changes

Jonathan NeuschÃfer (1):
spelling fix in drivers/misc/Kconfig

Justin P. Mattock (5):
media: comment typo fix diable -> disable.
wireless: comment typo fix diable -> disable.
m68k: fix comment typo diable -> disable.
drivers: fix comment typo diable -> disable.
ppc: fix comment typo singal -> signal

Lionel Debroux (3):
hibernation: constify platform_hibernation_ops
backlight: constify backlight_ops
suspend: constify platform_suspend_ops

Michael Witten (4):
Kconfig: typo: and -> an
Docs: typo: Complete -> Completely
Kconfig: typo: boad -> board
Docs/Kconfig: Update: osdl.org -> linuxfoundation.org

Minchan Kim (1):
writeback: fix global_dirty_limits comment runtime -> real-time

Namhyung Kim (3):
poll: fix a typo in comment
anon_inodes: fix wrong function name in comment
hrtimer: fix a typo in comment

Nicolas Kaiser (1):
telephony: fix return value

Robert P. J. Day (1):
Fix "forcably" comment typo

Ross Kirk (1):
audit: error message typo correction

Simon Horman (1):
kdump: update kexec-tools URL and Vivek's email

Stefan Weil (2):
Fix spelling mistakes in comments
Fix spelling milisec -> ms in snd_ps3 module parameter description

Tao Ma (1):
Documentation/trace/events.txt: Remove obsolete sched_signal_send.

Uwe Kleine-KÃnig (2):
tree-wide: fix comment/printk typos
fix comment typos concerning "consistent"

Wu Fengguang (1):
ext4: fix redirty_page_for_writepage() typo in comment

matt mooney (1):
powerpc: remove cast from void*

Documentation/DocBook/mtdnand.tmpl | 2 +-
Documentation/cgroups/cgroup_event_listener.c | 2 +-
Documentation/cgroups/memcg_test.txt | 2 +-
Documentation/iostats.txt | 2 +-
Documentation/kdump/kdump.txt | 15 +++++++++------
Documentation/kernel-parameters.txt | 5 -----
Documentation/ko_KR/HOWTO | 4 ++--
Documentation/kprobes.txt | 2 +-
Documentation/kvm/api.txt | 2 +-
Documentation/lguest/lguest.txt | 7 +++++--
Documentation/networking/bridge.txt | 4 ++--
Documentation/networking/caif/spi_porting.txt | 2 +-
Documentation/networking/dccp.txt | 4 ++--
Documentation/networking/generic_netlink.txt | 2 +-
Documentation/powerpc/booting-without-of.txt | 2 +-
Documentation/scheduler/00-INDEX | 2 +-
Documentation/scsi/ChangeLog.lpfc | 2 +-
Documentation/timers/timer_stats.txt | 2 +-
Documentation/trace/events.txt | 8 ++++----
Documentation/zh_CN/HOWTO | 4 ++--
Documentation/zh_CN/SubmittingDrivers | 2 +-
MAINTAINERS | 10 +++++-----
arch/arm/common/it8152.c | 2 +-
arch/arm/common/vic.c | 2 +-
arch/arm/mach-at91/board-ecbat91.c | 6 +++---
arch/arm/mach-at91/pm.c | 2 +-
arch/arm/mach-bcmring/csp/chipc/chipcHw.c | 2 +-
arch/arm/mach-bcmring/csp/dmac/dmacHw.c | 2 +-
arch/arm/mach-bcmring/csp/dmac/dmacHw_extra.c | 2 +-
arch/arm/mach-bcmring/csp/tmr/tmrHw.c | 2 +-
arch/arm/mach-bcmring/dma.c | 2 +-
arch/arm/mach-bcmring/include/csp/dmacHw.h | 2 +-
arch/arm/mach-bcmring/include/csp/tmrHw.h | 4 ++--
.../mach-bcmring/include/mach/csp/dmacHw_priv.h | 2 +-
.../arm/mach-bcmring/include/mach/csp/dmacHw_reg.h | 2 +-
arch/arm/mach-davinci/pm.c | 2 +-
arch/arm/mach-gemini/include/mach/hardware.h | 2 +-
arch/arm/mach-imx/pm-imx27.c | 2 +-
arch/arm/mach-lpc32xx/pm.c | 2 +-
arch/arm/mach-msm/include/mach/entry-macro-qgic.S | 2 +-
arch/arm/mach-msm/io.c | 2 +-
arch/arm/mach-omap1/pm.c | 2 +-
arch/arm/mach-omap2/cpuidle34xx.c | 2 +-
arch/arm/mach-omap2/pm24xx.c | 2 +-
arch/arm/mach-omap2/pm34xx.c | 2 +-
arch/arm/mach-omap2/pm44xx.c | 2 +-
arch/arm/mach-omap2/serial.c | 2 +-
arch/arm/mach-pnx4008/pm.c | 2 +-
arch/arm/mach-pxa/mxm8x10.c | 2 +-
arch/arm/mach-pxa/pm.c | 2 +-
arch/arm/mach-pxa/sharpsl_pm.c | 2 +-
arch/arm/mach-s3c64xx/dma.c | 2 +-
arch/arm/mach-sa1100/pm.c | 2 +-
arch/arm/mach-spear3xx/spear300.c | 4 ++--
arch/arm/mach-spear3xx/spear310.c | 2 +-
arch/arm/mach-spear3xx/spear320.c | 2 +-
arch/arm/mach-spear3xx/spear3xx.c | 6 +++---
arch/arm/mach-spear6xx/spear6xx.c | 4 ++--
arch/arm/mach-u300/Kconfig | 2 +-
arch/arm/mach-u300/include/mach/coh901318.h | 4 ++--
arch/arm/mm/flush.c | 1 -
arch/arm/plat-mxc/include/mach/irqs.h | 2 +-
arch/arm/plat-omap/include/plat/omap_hwmod.h | 2 +-
arch/arm/plat-samsung/pm.c | 2 +-
arch/avr32/mach-at32ap/pm.c | 2 +-
arch/blackfin/mach-bf537/include/mach/defBF534.h | 2 +-
arch/blackfin/mach-common/pm.c | 2 +-
arch/cris/arch-v32/lib/nand_init.S | 2 +-
arch/cris/include/asm/etraxgpio.h | 2 +-
arch/h8300/Kconfig.debug | 2 +-
arch/ia64/kvm/mmio.c | 2 +-
arch/m68k/ifpsp060/src/fpsp.S | 2 +-
arch/m68k/mac/psc.c | 2 +-
arch/mips/alchemy/common/power.c | 2 +-
arch/mips/alchemy/devboards/pm.c | 2 +-
arch/mips/include/asm/mach-powertv/ioremap.h | 2 +-
arch/mips/jz4740/board-qi_lb60.c | 4 ++--
arch/mips/jz4740/gpio.c | 2 +-
arch/mips/jz4740/pm.c | 2 +-
arch/mips/loongson/common/pm.c | 2 +-
arch/mips/mti-malta/malta-memory.c | 2 +-
arch/mips/pci/pcie-octeon.c | 2 +-
arch/mips/powertv/memory.c | 2 +-
arch/mips/txx9/generic/pci.c | 2 +-
arch/powerpc/include/asm/8xx_immap.h | 4 ++--
arch/powerpc/oprofile/op_model_cell.c | 2 +-
arch/powerpc/platforms/52xx/lite5200_pm.c | 2 +-
arch/powerpc/platforms/52xx/mpc52xx_pm.c | 2 +-
arch/powerpc/platforms/83xx/suspend-asm.S | 6 +++---
arch/powerpc/platforms/83xx/suspend.c | 2 +-
arch/powerpc/platforms/85xx/mpc85xx_mds.c | 2 +-
arch/powerpc/platforms/ps3/device-init.c | 4 ++--
arch/powerpc/platforms/ps3/interrupt.c | 2 +-
arch/powerpc/platforms/pseries/hvCall_inst.c | 2 +-
arch/powerpc/platforms/pseries/suspend.c | 2 +-
arch/powerpc/sysdev/fsl_pmc.c | 2 +-
arch/sh/boards/mach-hp6xx/pm.c | 2 +-
arch/sh/kernel/cpu/shmobile/pm.c | 2 +-
arch/sh/mm/cache-sh5.c | 2 +-
arch/sparc/kernel/traps_64.c | 2 +-
arch/x86/include/asm/pgalloc.h | 2 +-
arch/x86/include/asm/processor.h | 2 +-
arch/x86/kernel/amd_iommu.c | 4 ++--
arch/x86/kernel/early_printk_mrst.c | 2 +-
arch/x86/kernel/head_32.S | 2 +-
block/cfq-iosched.c | 2 +-
drivers/acpi/acpica/acobject.h | 2 +-
drivers/acpi/apei/einj.c | 2 +-
drivers/acpi/apei/erst.c | 2 +-
drivers/acpi/sleep.c | 8 ++++----
drivers/acpi/video.c | 2 +-
drivers/ata/libata-core.c | 4 ++--
drivers/ata/sata_vsc.c | 2 +-
drivers/atm/idt77252.h | 2 +-
drivers/atm/iphase.c | 4 ++--
drivers/base/bus.c | 2 +-
drivers/base/power/main.c | 2 +-
drivers/dma/intel_mid_dma.c | 6 +++---
drivers/edac/amd8131_edac.h | 2 +-
drivers/edac/cell_edac.c | 4 ++--
drivers/edac/edac_core.h | 2 +-
drivers/edac/i7core_edac.c | 6 +++---
drivers/edac/ppc4xx_edac.c | 6 +++---
drivers/gpu/drm/nouveau/nouveau_backlight.c | 4 ++--
drivers/gpu/drm/nouveau/nouveau_bios.c | 4 ++--
drivers/gpu/drm/radeon/atombios.h | 2 +-
drivers/i2c/busses/i2c-nomadik.c | 4 ++--
drivers/infiniband/hw/cxgb3/cxio_wr.h | 2 +-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 1 -
drivers/infiniband/hw/qib/qib_iba7322.c | 2 +-
drivers/input/serio/Kconfig | 2 +-
drivers/input/touchscreen/Kconfig | 2 +-
drivers/isdn/gigaset/bas-gigaset.c | 4 ++--
drivers/isdn/gigaset/ser-gigaset.c | 4 ++--
drivers/isdn/gigaset/usb-gigaset.c | 4 ++--
drivers/isdn/hardware/mISDN/ipac.h | 4 ++--
drivers/isdn/hardware/mISDN/isar.h | 2 +-
drivers/isdn/mISDN/dsp_cmx.c | 2 +-
drivers/macintosh/via-pmu-backlight.c | 4 ++--
drivers/macintosh/via-pmu.c | 2 +-
drivers/media/video/cx18/cx23418.h | 2 +-
drivers/media/video/cx25840/cx25840-ir.c | 2 +-
drivers/media/video/davinci/vpif.h | 2 +-
drivers/media/video/davinci/vpss.c | 2 +-
drivers/media/video/omap/omap_vout.c | 2 +-
drivers/media/video/saa7164/saa7164-core.c | 4 ++--
drivers/media/video/sn9c102/sn9c102_sensor.h | 2 +-
drivers/media/video/tvp7002.c | 2 +-
drivers/media/video/via-camera.c | 2 --
drivers/message/fusion/lsi/mpi_log_sas.h | 2 +-
drivers/message/fusion/mptbase.c | 2 +-
drivers/message/fusion/mptsas.c | 2 +-
drivers/message/i2o/i2o_block.c | 2 +-
drivers/misc/Kconfig | 2 +-
drivers/misc/arm-charlcd.c | 2 +-
drivers/mmc/card/block.c | 2 +-
drivers/mmc/host/Kconfig | 2 +-
drivers/mmc/host/au1xmmc.c | 2 +-
drivers/mmc/host/sdricoh_cs.c | 4 ++--
drivers/mtd/nand/nand_base.c | 2 +-
drivers/net/bnx2x/bnx2x_main.c | 2 +-
drivers/net/bnx2x/bnx2x_reg.h | 2 +-
drivers/net/bonding/bond_3ad.c | 6 +++---
drivers/net/chelsio/subr.c | 2 +-
drivers/net/cxgb3/mc5.c | 2 +-
drivers/net/cxgb3/t3_hw.c | 2 +-
drivers/net/e1000/e1000_hw.h | 2 +-
drivers/net/e1000/e1000_main.c | 2 +-
drivers/net/e1000e/82571.c | 2 +-
drivers/net/e1000e/ich8lan.c | 2 +-
drivers/net/e1000e/phy.c | 2 +-
drivers/net/eepro.c | 2 +-
drivers/net/irda/donauboe.h | 2 +-
drivers/net/ixgbe/ixgbe_82599.c | 4 ++--
drivers/net/ll_temac_main.c | 2 +-
drivers/net/sis900.c | 2 +-
drivers/net/tehuti.c | 6 +++---
drivers/net/tun.c | 2 +-
drivers/net/via-velocity.c | 2 +-
drivers/net/vxge/vxge-traffic.h | 2 +-
drivers/net/wan/dscc4.c | 2 +-
drivers/net/wimax/i2400m/driver.c | 2 +-
drivers/net/wimax/i2400m/i2400m.h | 4 ++--
drivers/net/wireless/ath/ath5k/reg.h | 6 +++---
drivers/net/wireless/b43/phy_g.c | 2 +-
drivers/net/wireless/b43legacy/phy.c | 2 +-
drivers/net/wireless/iwlwifi/iwl-agn-ict.c | 2 +-
drivers/net/wireless/iwlwifi/iwl-agn.c | 4 ++--
drivers/net/wireless/iwlwifi/iwl-core.c | 2 +-
drivers/net/wireless/iwlwifi/iwl-sta.c | 2 +-
drivers/net/wireless/prism54/islpci_dev.c | 6 +++---
drivers/net/wireless/prism54/islpci_eth.c | 2 +-
drivers/net/wireless/rt2x00/rt2x00mac.c | 2 +-
drivers/net/wireless/wl1251/acx.h | 4 ++--
drivers/net/wireless/wl1251/wl1251.h | 2 +-
drivers/net/wireless/wl12xx/wl1271.h | 4 ++--
drivers/net/wireless/wl12xx/wl1271_acx.h | 4 ++--
drivers/net/wireless/wl3501_cs.c | 2 +-
drivers/pcmcia/m32r_cfc.h | 2 +-
drivers/pcmcia/m32r_pcc.h | 2 +-
drivers/pcmcia/m8xx_pcmcia.c | 2 +-
drivers/platform/x86/acer-wmi.c | 2 +-
drivers/platform/x86/asus-laptop.c | 2 +-
drivers/platform/x86/asus_acpi.c | 2 +-
drivers/platform/x86/dell-laptop.c | 2 +-
drivers/platform/x86/eeepc-laptop.c | 2 +-
drivers/platform/x86/fujitsu-laptop.c | 2 +-
drivers/platform/x86/sony-laptop.c | 2 +-
drivers/platform/x86/thinkpad_acpi.c | 4 ++--
drivers/platform/x86/toshiba_acpi.c | 2 +-
drivers/power/s3c_adc_battery.c | 4 ++--
drivers/s390/net/lcs.c | 2 +-
drivers/s390/scsi/zfcp_cfdc.c | 2 +-
drivers/scsi/a100u2w.c | 2 +-
drivers/scsi/aacraid/commsup.c | 2 +-
drivers/scsi/aic7xxx_old/aic7xxx.seq | 2 +-
drivers/scsi/aic94xx/aic94xx_reg_def.h | 4 ++--
drivers/scsi/aic94xx/aic94xx_scb.c | 2 +-
drivers/scsi/aic94xx/aic94xx_seq.c | 6 +++---
drivers/scsi/bfa/bfa_fcpim.c | 2 +-
drivers/scsi/bfa/bfa_fcs_lport.c | 2 +-
drivers/scsi/dc395x.c | 8 ++++----
drivers/scsi/libfc/fc_fcp.c | 2 +-
drivers/scsi/lpfc/lpfc_attr.c | 2 +-
drivers/scsi/lpfc/lpfc_hbadisc.c | 2 +-
drivers/scsi/lpfc/lpfc_init.c | 2 +-
drivers/scsi/lpfc/lpfc_sli.c | 2 +-
drivers/scsi/megaraid.h | 2 +-
drivers/scsi/megaraid/megaraid_mm.c | 2 +-
drivers/scsi/pm8001/pm8001_init.c | 2 +-
drivers/scsi/scsi_netlink.c | 2 +-
drivers/scsi/scsi_sysfs.c | 6 ++++--
drivers/scsi/sym53c8xx_2/sym_glue.c | 2 +-
drivers/spi/atmel_spi.c | 4 ++--
drivers/spi/spidev.c | 2 +-
drivers/staging/msm/msm_fb_bl.c | 2 +-
drivers/staging/olpc_dcon/olpc_dcon.c | 2 +-
drivers/staging/samsung-laptop/samsung-laptop.c | 2 +-
drivers/telephony/ixj.c | 3 ++-
drivers/usb/gadget/imx_udc.c | 2 +-
drivers/usb/gadget/langwell_udc.c | 4 ++--
drivers/usb/host/fhci-hcd.c | 4 ++--
drivers/usb/host/fhci-tds.c | 4 ++--
drivers/usb/host/imx21-hcd.c | 2 +-
drivers/usb/host/oxu210hp-hcd.c | 2 +-
drivers/usb/misc/adutux.c | 2 +-
drivers/usb/misc/iowarrior.c | 2 +-
drivers/usb/misc/ldusb.c | 2 +-
drivers/usb/musb/musb_gadget.c | 4 ++--
drivers/usb/wusbcore/wa-rpipe.c | 2 +-
drivers/video/atmel_lcdfb.c | 2 +-
drivers/video/aty/aty128fb.c | 2 +-
drivers/video/aty/atyfb_base.c | 2 +-
drivers/video/aty/radeon_backlight.c | 2 +-
drivers/video/backlight/88pm860x_bl.c | 2 +-
drivers/video/backlight/max8925_bl.c | 2 +-
drivers/video/nvidia/nv_backlight.c | 2 +-
drivers/video/omap2/displays/panel-taal.c | 2 +-
drivers/video/riva/fbdev.c | 2 +-
drivers/video/sstfb.c | 2 +-
fs/anon_inodes.c | 6 +++---
fs/coda/inode.c | 2 +-
fs/ext4/ext4.h | 2 +-
fs/ext4/extents.c | 4 ++--
fs/ext4/inode.c | 6 +++---
fs/jbd/transaction.c | 2 +-
fs/jbd2/transaction.c | 2 +-
fs/notify/fanotify/Kconfig | 2 +-
fs/ocfs2/inode.c | 2 +-
fs/ocfs2/suballoc.c | 2 +-
fs/xfs/linux-2.6/xfs_super.c | 2 +-
include/acpi/actbl1.h | 2 +-
include/linux/cgroup.h | 2 +-
include/linux/firewire-cdev.h | 2 +-
include/linux/mfd/core.h | 2 +-
include/linux/poll.h | 2 +-
include/linux/suspend.h | 8 ++++----
include/linux/u64_stats_sync.h | 12 ++++++------
include/media/davinci/vpss.h | 2 +-
include/net/sctp/user.h | 4 ++--
include/scsi/fc/fc_fcp.h | 4 ++--
init/Kconfig | 2 +-
kernel/audit.c | 2 +-
kernel/debug/kdb/kdb_main.c | 2 +-
kernel/hrtimer.c | 2 +-
kernel/kexec.c | 2 +-
kernel/perf_event.c | 2 +-
kernel/power/hibernate.c | 4 ++--
kernel/power/suspend.c | 4 ++--
kernel/power/swap.c | 2 +-
kernel/sched.c | 2 +-
kernel/sysctl_binary.c | 2 +-
kernel/time.c | 4 ++--
kernel/time/clocksource.c | 2 +-
kernel/trace/trace_entries.h | 2 +-
lib/nlattr.c | 2 +-
lib/swiotlb.c | 2 +-
mm/page-writeback.c | 2 +-
mm/page_alloc.c | 2 +-
mm/percpu.c | 2 +-
mm/rmap.c | 2 +-
mm/sparse-vmemmap.c | 2 +-
net/Kconfig | 4 +++-
net/core/dev.c | 2 +-
net/dccp/Kconfig | 4 +++-
net/decnet/dn_dev.c | 2 +-
net/ipv4/Kconfig | 4 +++-
net/ipv4/tcp_output.c | 2 +-
net/ipv6/af_inet6.c | 2 +-
net/sched/Kconfig | 2 +-
scripts/kconfig/confdata.c | 2 +-
scripts/mod/modpost.c | 2 +-
security/apparmor/include/match.h | 2 +-
sound/core/init.c | 2 +-
sound/core/pcm_native.c | 2 +-
sound/isa/opl3sa2.c | 2 +-
sound/pci/ca0106/ca0106.h | 2 +-
sound/pci/ca0106/ca0106_main.c | 2 +-
sound/pci/emu10k1/emu10k1x.c | 2 +-
sound/pci/emu10k1/p16v.h | 2 +-
sound/pci/es1968.c | 2 +-
sound/pci/rme9652/hdspm.c | 6 +++---
sound/ppc/snd_ps3.c | 2 +-
sound/soc/codecs/max98088.c | 2 +-
sound/soc/s3c24xx/smdk_spdif.c | 6 +++---
325 files changed, 439 insertions(+), 433 deletions(-)

--
Jiri Kosina
SUSE Labs, Novell Inc.diff --cc drivers/net/wireless/iwlwifi/iwl-legacy.c
index a08b4e5,0000000..bb1a742
mode 100644,000000..100644
--- a/drivers/net/wireless/iwlwifi/iwl-legacy.c
+++ b/drivers/net/wireless/iwlwifi/iwl-legacy.c
@@@ -1,662 -1,0 +1,662 @@@
+/******************************************************************************
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
+ * USA
+ *
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+ *
+ * Contact Information:
+ * Intel Linux Wireless <ilw@xxxxxxxxxxxxxxx>
+ * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+ *****************************************************************************/
+
+#include <linux/kernel.h>
+#include <net/mac80211.h>
+
+#include "iwl-dev.h"
+#include "iwl-core.h"
+#include "iwl-helpers.h"
+#include "iwl-legacy.h"
+
+static void iwl_update_qos(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
+{
+ if (test_bit(STATUS_EXIT_PENDING, &priv->status))
+ return;
+
+ if (!ctx->is_active)
+ return;
+
+ ctx->qos_data.def_qos_parm.qos_flags = 0;
+
+ if (ctx->qos_data.qos_active)
+ ctx->qos_data.def_qos_parm.qos_flags |=
+ QOS_PARAM_FLG_UPDATE_EDCA_MSK;
+
+ if (ctx->ht.enabled)
+ ctx->qos_data.def_qos_parm.qos_flags |= QOS_PARAM_FLG_TGN_MSK;
+
+ IWL_DEBUG_QOS(priv, "send QoS cmd with Qos active=%d FLAGS=0x%X\n",
+ ctx->qos_data.qos_active,
+ ctx->qos_data.def_qos_parm.qos_flags);
+
+ iwl_send_cmd_pdu_async(priv, ctx->qos_cmd,
+ sizeof(struct iwl_qosparam_cmd),
+ &ctx->qos_data.def_qos_parm, NULL);
+}
+
+/**
+ * iwl_legacy_mac_config - mac80211 config callback
+ */
+int iwl_legacy_mac_config(struct ieee80211_hw *hw, u32 changed)
+{
+ struct iwl_priv *priv = hw->priv;
+ const struct iwl_channel_info *ch_info;
+ struct ieee80211_conf *conf = &hw->conf;
+ struct ieee80211_channel *channel = conf->channel;
+ struct iwl_ht_config *ht_conf = &priv->current_ht_config;
+ struct iwl_rxon_context *ctx;
+ unsigned long flags = 0;
+ int ret = 0;
+ u16 ch;
+ int scan_active = 0;
+ bool ht_changed[NUM_IWL_RXON_CTX] = {};
+
+ if (WARN_ON(!priv->cfg->ops->legacy))
+ return -EOPNOTSUPP;
+
+ mutex_lock(&priv->mutex);
+
+ IWL_DEBUG_MAC80211(priv, "enter to channel %d changed 0x%X\n",
+ channel->hw_value, changed);
+
+ if (unlikely(!priv->cfg->mod_params->disable_hw_scan &&
+ test_bit(STATUS_SCANNING, &priv->status))) {
+ scan_active = 1;
+ IWL_DEBUG_MAC80211(priv, "leave - scanning\n");
+ }
+
+ if (changed & (IEEE80211_CONF_CHANGE_SMPS |
+ IEEE80211_CONF_CHANGE_CHANNEL)) {
+ /* mac80211 uses static for non-HT which is what we want */
+ priv->current_ht_config.smps = conf->smps_mode;
+
+ /*
+ * Recalculate chain counts.
+ *
+ * If monitor mode is enabled then mac80211 will
+ * set up the SM PS mode to OFF if an HT channel is
+ * configured.
+ */
+ if (priv->cfg->ops->hcmd->set_rxon_chain)
+ for_each_context(priv, ctx)
+ priv->cfg->ops->hcmd->set_rxon_chain(priv, ctx);
+ }
+
+ /* during scanning mac80211 will delay channel setting until
+ * scan finish with changed = 0
+ */
+ if (!changed || (changed & IEEE80211_CONF_CHANGE_CHANNEL)) {
+ if (scan_active)
+ goto set_ch_out;
+
+ ch = channel->hw_value;
+ ch_info = iwl_get_channel_info(priv, channel->band, ch);
+ if (!is_channel_valid(ch_info)) {
+ IWL_DEBUG_MAC80211(priv, "leave - invalid channel\n");
+ ret = -EINVAL;
+ goto set_ch_out;
+ }
+
+ spin_lock_irqsave(&priv->lock, flags);
+
+ for_each_context(priv, ctx) {
+ /* Configure HT40 channels */
+ if (ctx->ht.enabled != conf_is_ht(conf)) {
+ ctx->ht.enabled = conf_is_ht(conf);
+ ht_changed[ctx->ctxid] = true;
+ }
+ if (ctx->ht.enabled) {
+ if (conf_is_ht40_minus(conf)) {
+ ctx->ht.extension_chan_offset =
+ IEEE80211_HT_PARAM_CHA_SEC_BELOW;
+ ctx->ht.is_40mhz = true;
+ } else if (conf_is_ht40_plus(conf)) {
+ ctx->ht.extension_chan_offset =
+ IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
+ ctx->ht.is_40mhz = true;
+ } else {
+ ctx->ht.extension_chan_offset =
+ IEEE80211_HT_PARAM_CHA_SEC_NONE;
+ ctx->ht.is_40mhz = false;
+ }
+ } else
+ ctx->ht.is_40mhz = false;
+
+ /*
+ * Default to no protection. Protection mode will
+ * later be set from BSS config in iwl_ht_conf
+ */
+ ctx->ht.protection = IEEE80211_HT_OP_MODE_PROTECTION_NONE;
+
+ /* if we are switching from ht to 2.4 clear flags
+ * from any ht related info since 2.4 does not
+ * support ht */
+ if ((le16_to_cpu(ctx->staging.channel) != ch))
+ ctx->staging.flags = 0;
+
+ iwl_set_rxon_channel(priv, channel, ctx);
+ iwl_set_rxon_ht(priv, ht_conf);
+
+ iwl_set_flags_for_band(priv, ctx, channel->band,
+ ctx->vif);
+ }
+
+ spin_unlock_irqrestore(&priv->lock, flags);
+
+ if (priv->cfg->ops->legacy->update_bcast_stations)
+ ret = priv->cfg->ops->legacy->update_bcast_stations(priv);
+
+ set_ch_out:
+ /* The list of supported rates and rate mask can be different
+ * for each band; since the band may have changed, reset
+ * the rate mask to what mac80211 lists */
+ iwl_set_rate(priv);
+ }
+
+ if (changed & (IEEE80211_CONF_CHANGE_PS |
+ IEEE80211_CONF_CHANGE_IDLE)) {
+ ret = iwl_power_update_mode(priv, false);
+ if (ret)
+ IWL_DEBUG_MAC80211(priv, "Error setting sleep level\n");
+ }
+
+ if (changed & IEEE80211_CONF_CHANGE_POWER) {
+ IWL_DEBUG_MAC80211(priv, "TX Power old=%d new=%d\n",
+ priv->tx_power_user_lmt, conf->power_level);
+
+ iwl_set_tx_power(priv, conf->power_level, false);
+ }
+
+ if (!iwl_is_ready(priv)) {
+ IWL_DEBUG_MAC80211(priv, "leave - not ready\n");
+ goto out;
+ }
+
+ if (scan_active)
+ goto out;
+
+ for_each_context(priv, ctx) {
+ if (memcmp(&ctx->active, &ctx->staging, sizeof(ctx->staging)))
+ iwlcore_commit_rxon(priv, ctx);
+ else
+ IWL_DEBUG_INFO(priv,
+ "Not re-sending same RXON configuration.\n");
+ if (ht_changed[ctx->ctxid])
+ iwl_update_qos(priv, ctx);
+ }
+
+out:
+ IWL_DEBUG_MAC80211(priv, "leave\n");
+ mutex_unlock(&priv->mutex);
+ return ret;
+}
+EXPORT_SYMBOL(iwl_legacy_mac_config);
+
+void iwl_legacy_mac_reset_tsf(struct ieee80211_hw *hw)
+{
+ struct iwl_priv *priv = hw->priv;
+ unsigned long flags;
+ /* IBSS can only be the IWL_RXON_CTX_BSS context */
+ struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS];
+
+ if (WARN_ON(!priv->cfg->ops->legacy))
+ return;
+
+ mutex_lock(&priv->mutex);
+ IWL_DEBUG_MAC80211(priv, "enter\n");
+
+ spin_lock_irqsave(&priv->lock, flags);
+ memset(&priv->current_ht_config, 0, sizeof(struct iwl_ht_config));
+ spin_unlock_irqrestore(&priv->lock, flags);
+
+ spin_lock_irqsave(&priv->lock, flags);
+
+ /* new association get rid of ibss beacon skb */
+ if (priv->beacon_skb)
+ dev_kfree_skb(priv->beacon_skb);
+
+ priv->beacon_skb = NULL;
+
+ priv->timestamp = 0;
+
+ spin_unlock_irqrestore(&priv->lock, flags);
+
+ iwl_scan_cancel_timeout(priv, 100);
+ if (!iwl_is_ready_rf(priv)) {
+ IWL_DEBUG_MAC80211(priv, "leave - not ready\n");
+ mutex_unlock(&priv->mutex);
+ return;
+ }
+
+ /* we are restarting association process
+ * clear RXON_FILTER_ASSOC_MSK bit
+ */
+ ctx->staging.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
+ iwlcore_commit_rxon(priv, ctx);
+
+ iwl_set_rate(priv);
+
+ mutex_unlock(&priv->mutex);
+
+ IWL_DEBUG_MAC80211(priv, "leave\n");
+}
+EXPORT_SYMBOL(iwl_legacy_mac_reset_tsf);
+
+static void iwl_ht_conf(struct iwl_priv *priv,
+ struct ieee80211_vif *vif)
+{
+ struct iwl_ht_config *ht_conf = &priv->current_ht_config;
+ struct ieee80211_sta *sta;
+ struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+ struct iwl_rxon_context *ctx = iwl_rxon_ctx_from_vif(vif);
+
+ IWL_DEBUG_ASSOC(priv, "enter:\n");
+
+ if (!ctx->ht.enabled)
+ return;
+
+ ctx->ht.protection =
+ bss_conf->ht_operation_mode & IEEE80211_HT_OP_MODE_PROTECTION;
+ ctx->ht.non_gf_sta_present =
+ !!(bss_conf->ht_operation_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT);
+
+ ht_conf->single_chain_sufficient = false;
+
+ switch (vif->type) {
+ case NL80211_IFTYPE_STATION:
+ rcu_read_lock();
+ sta = ieee80211_find_sta(vif, bss_conf->bssid);
+ if (sta) {
+ struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
+ int maxstreams;
+
+ maxstreams = (ht_cap->mcs.tx_params &
+ IEEE80211_HT_MCS_TX_MAX_STREAMS_MASK)
+ >> IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT;
+ maxstreams += 1;
+
+ if ((ht_cap->mcs.rx_mask[1] == 0) &&
+ (ht_cap->mcs.rx_mask[2] == 0))
+ ht_conf->single_chain_sufficient = true;
+ if (maxstreams <= 1)
+ ht_conf->single_chain_sufficient = true;
+ } else {
+ /*
+ * If at all, this can only happen through a race
+ * when the AP disconnects us while we're still
+ * setting up the connection, in that case mac80211
+ * will soon tell us about that.
+ */
+ ht_conf->single_chain_sufficient = true;
+ }
+ rcu_read_unlock();
+ break;
+ case NL80211_IFTYPE_ADHOC:
+ ht_conf->single_chain_sufficient = true;
+ break;
+ default:
+ break;
+ }
+
+ IWL_DEBUG_ASSOC(priv, "leave\n");
+}
+
+static inline void iwl_set_no_assoc(struct iwl_priv *priv,
+ struct ieee80211_vif *vif)
+{
+ struct iwl_rxon_context *ctx = iwl_rxon_ctx_from_vif(vif);
+
+ iwl_led_disassociate(priv);
+ /*
+ * inform the ucode that there is no longer an
+ * association and that no more packets should be
+ * sent
+ */
+ ctx->staging.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
+ ctx->staging.assoc_id = 0;
+ iwlcore_commit_rxon(priv, ctx);
+}
+
+static void iwlcore_beacon_update(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif)
+{
+ struct iwl_priv *priv = hw->priv;
+ unsigned long flags;
+ __le64 timestamp;
+ struct sk_buff *skb = ieee80211_beacon_get(hw, vif);
+
+ if (!skb)
+ return;
+
+ IWL_DEBUG_MAC80211(priv, "enter\n");
+
+ lockdep_assert_held(&priv->mutex);
+
+ if (!priv->beacon_ctx) {
+ IWL_ERR(priv, "update beacon but no beacon context!\n");
+ dev_kfree_skb(skb);
+ return;
+ }
+
+ spin_lock_irqsave(&priv->lock, flags);
+
+ if (priv->beacon_skb)
+ dev_kfree_skb(priv->beacon_skb);
+
+ priv->beacon_skb = skb;
+
+ timestamp = ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp;
+ priv->timestamp = le64_to_cpu(timestamp);
+
+ IWL_DEBUG_MAC80211(priv, "leave\n");
+ spin_unlock_irqrestore(&priv->lock, flags);
+
+ if (!iwl_is_ready_rf(priv)) {
+ IWL_DEBUG_MAC80211(priv, "leave - RF not ready\n");
+ return;
+ }
+
+ priv->cfg->ops->legacy->post_associate(priv);
+}
+
+void iwl_legacy_mac_bss_info_changed(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif,
+ struct ieee80211_bss_conf *bss_conf,
+ u32 changes)
+{
+ struct iwl_priv *priv = hw->priv;
+ struct iwl_rxon_context *ctx = iwl_rxon_ctx_from_vif(vif);
+ int ret;
+
+ if (WARN_ON(!priv->cfg->ops->legacy))
+ return;
+
+ IWL_DEBUG_MAC80211(priv, "changes = 0x%X\n", changes);
+
+ if (!iwl_is_alive(priv))
+ return;
+
+ mutex_lock(&priv->mutex);
+
+ if (changes & BSS_CHANGED_QOS) {
+ unsigned long flags;
+
+ spin_lock_irqsave(&priv->lock, flags);
+ ctx->qos_data.qos_active = bss_conf->qos;
+ iwl_update_qos(priv, ctx);
+ spin_unlock_irqrestore(&priv->lock, flags);
+ }
+
+ if (changes & BSS_CHANGED_BEACON_ENABLED) {
+ /*
+ * the add_interface code must make sure we only ever
+ * have a single interface that could be beaconing at
+ * any time.
+ */
+ if (vif->bss_conf.enable_beacon)
+ priv->beacon_ctx = ctx;
+ else
+ priv->beacon_ctx = NULL;
+ }
+
+ if (changes & BSS_CHANGED_BEACON && vif->type == NL80211_IFTYPE_AP) {
+ dev_kfree_skb(priv->beacon_skb);
+ priv->beacon_skb = ieee80211_beacon_get(hw, vif);
+ }
+
+ if (changes & BSS_CHANGED_BEACON_INT && vif->type == NL80211_IFTYPE_AP)
+ iwl_send_rxon_timing(priv, ctx);
+
+ if (changes & BSS_CHANGED_BSSID) {
+ IWL_DEBUG_MAC80211(priv, "BSSID %pM\n", bss_conf->bssid);
+
+ /*
+ * If there is currently a HW scan going on in the
+ * background then we need to cancel it else the RXON
+ * below/in post_associate will fail.
+ */
+ if (iwl_scan_cancel_timeout(priv, 100)) {
+ IWL_WARN(priv, "Aborted scan still in progress after 100ms\n");
+ IWL_DEBUG_MAC80211(priv, "leaving - scan abort failed.\n");
+ mutex_unlock(&priv->mutex);
+ return;
+ }
+
+ /* mac80211 only sets assoc when in STATION mode */
+ if (vif->type == NL80211_IFTYPE_ADHOC || bss_conf->assoc) {
+ memcpy(ctx->staging.bssid_addr,
+ bss_conf->bssid, ETH_ALEN);
+
+ /* currently needed in a few places */
+ memcpy(priv->bssid, bss_conf->bssid, ETH_ALEN);
+ } else {
+ ctx->staging.filter_flags &=
+ ~RXON_FILTER_ASSOC_MSK;
+ }
+
+ }
+
+ /*
+ * This needs to be after setting the BSSID in case
+ * mac80211 decides to do both changes at once because
+ * it will invoke post_associate.
+ */
+ if (vif->type == NL80211_IFTYPE_ADHOC && changes & BSS_CHANGED_BEACON)
+ iwlcore_beacon_update(hw, vif);
+
+ if (changes & BSS_CHANGED_ERP_PREAMBLE) {
+ IWL_DEBUG_MAC80211(priv, "ERP_PREAMBLE %d\n",
+ bss_conf->use_short_preamble);
+ if (bss_conf->use_short_preamble)
+ ctx->staging.flags |= RXON_FLG_SHORT_PREAMBLE_MSK;
+ else
+ ctx->staging.flags &= ~RXON_FLG_SHORT_PREAMBLE_MSK;
+ }
+
+ if (changes & BSS_CHANGED_ERP_CTS_PROT) {
+ IWL_DEBUG_MAC80211(priv, "ERP_CTS %d\n", bss_conf->use_cts_prot);
+ if (bss_conf->use_cts_prot && (priv->band != IEEE80211_BAND_5GHZ))
+ ctx->staging.flags |= RXON_FLG_TGG_PROTECT_MSK;
+ else
+ ctx->staging.flags &= ~RXON_FLG_TGG_PROTECT_MSK;
+ if (bss_conf->use_cts_prot)
+ ctx->staging.flags |= RXON_FLG_SELF_CTS_EN;
+ else
+ ctx->staging.flags &= ~RXON_FLG_SELF_CTS_EN;
+ }
+
+ if (changes & BSS_CHANGED_BASIC_RATES) {
+ /* XXX use this information
+ *
+ * To do that, remove code from iwl_set_rate() and put something
+ * like this here:
+ *
+ if (A-band)
+ ctx->staging.ofdm_basic_rates =
+ bss_conf->basic_rates;
+ else
+ ctx->staging.ofdm_basic_rates =
+ bss_conf->basic_rates >> 4;
+ ctx->staging.cck_basic_rates =
+ bss_conf->basic_rates & 0xF;
+ */
+ }
+
+ if (changes & BSS_CHANGED_HT) {
+ iwl_ht_conf(priv, vif);
+
+ if (priv->cfg->ops->hcmd->set_rxon_chain)
+ priv->cfg->ops->hcmd->set_rxon_chain(priv, ctx);
+ }
+
+ if (changes & BSS_CHANGED_ASSOC) {
+ IWL_DEBUG_MAC80211(priv, "ASSOC %d\n", bss_conf->assoc);
+ if (bss_conf->assoc) {
+ priv->timestamp = bss_conf->timestamp;
+
+ iwl_led_associate(priv);
+
+ if (!iwl_is_rfkill(priv))
+ priv->cfg->ops->legacy->post_associate(priv);
+ } else
+ iwl_set_no_assoc(priv, vif);
+ }
+
+ if (changes && iwl_is_associated_ctx(ctx) && bss_conf->aid) {
+ IWL_DEBUG_MAC80211(priv, "Changes (%#x) while associated\n",
+ changes);
+ ret = iwl_send_rxon_assoc(priv, ctx);
+ if (!ret) {
+ /* Sync active_rxon with latest change. */
+ memcpy((void *)&ctx->active,
+ &ctx->staging,
+ sizeof(struct iwl_rxon_cmd));
+ }
+ }
+
+ if (changes & BSS_CHANGED_BEACON_ENABLED) {
+ if (vif->bss_conf.enable_beacon) {
+ memcpy(ctx->staging.bssid_addr,
+ bss_conf->bssid, ETH_ALEN);
+ memcpy(priv->bssid, bss_conf->bssid, ETH_ALEN);
+ iwl_led_associate(priv);
+ priv->cfg->ops->legacy->config_ap(priv);
+ } else
+ iwl_set_no_assoc(priv, vif);
+ }
+
+ if (changes & BSS_CHANGED_IBSS) {
+ ret = priv->cfg->ops->legacy->manage_ibss_station(priv, vif,
+ bss_conf->ibss_joined);
+ if (ret)
+ IWL_ERR(priv, "failed to %s IBSS station %pM\n",
+ bss_conf->ibss_joined ? "add" : "remove",
+ bss_conf->bssid);
+ }
+
+ mutex_unlock(&priv->mutex);
+
+ IWL_DEBUG_MAC80211(priv, "leave\n");
+}
+EXPORT_SYMBOL(iwl_legacy_mac_bss_info_changed);
+
+irqreturn_t iwl_isr_legacy(int irq, void *data)
+{
+ struct iwl_priv *priv = data;
+ u32 inta, inta_mask;
+ u32 inta_fh;
+ unsigned long flags;
+ if (!priv)
+ return IRQ_NONE;
+
+ spin_lock_irqsave(&priv->lock, flags);
+
+ /* Disable (but don't clear!) interrupts here to avoid
+ * back-to-back ISRs and sporadic interrupts from our NIC.
+ * If we have something to service, the tasklet will re-enable ints.
+ * If we *don't* have something, we'll re-enable before leaving here. */
+ inta_mask = iwl_read32(priv, CSR_INT_MASK); /* just for debug */
+ iwl_write32(priv, CSR_INT_MASK, 0x00000000);
+
+ /* Discover which interrupts are active/pending */
+ inta = iwl_read32(priv, CSR_INT);
+ inta_fh = iwl_read32(priv, CSR_FH_INT_STATUS);
+
+ /* Ignore interrupt if there's nothing in NIC to service.
+ * This may be due to IRQ shared with another device,
+ * or due to sporadic interrupts thrown from our NIC. */
+ if (!inta && !inta_fh) {
+ IWL_DEBUG_ISR(priv,
+ "Ignore interrupt, inta == 0, inta_fh == 0\n");
+ goto none;
+ }
+
+ if ((inta == 0xFFFFFFFF) || ((inta & 0xFFFFFFF0) == 0xa5a5a5a0)) {
+ /* Hardware disappeared. It might have already raised
+ * an interrupt */
+ IWL_WARN(priv, "HARDWARE GONE?? INTA == 0x%08x\n", inta);
+ goto unplugged;
+ }
+
+ IWL_DEBUG_ISR(priv, "ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
+ inta, inta_mask, inta_fh);
+
+ inta &= ~CSR_INT_BIT_SCD;
+
+ /* iwl_irq_tasklet() will service interrupts and re-enable them */
+ if (likely(inta || inta_fh))
+ tasklet_schedule(&priv->irq_tasklet);
+
+unplugged:
+ spin_unlock_irqrestore(&priv->lock, flags);
+ return IRQ_HANDLED;
+
+none:
+ /* re-enable interrupts here since we don't have anything to service. */
- /* only Re-enable if diabled by irq */
++ /* only Re-enable if disabled by irq */
+ if (test_bit(STATUS_INT_ENABLED, &priv->status))
+ iwl_enable_interrupts(priv);
+ spin_unlock_irqrestore(&priv->lock, flags);
+ return IRQ_NONE;
+}
+EXPORT_SYMBOL(iwl_isr_legacy);
+
+/*
+ * iwl_legacy_tx_cmd_protection: Set rts/cts. 3945 and 4965 only share this
+ * function.
+ */
+void iwl_legacy_tx_cmd_protection(struct iwl_priv *priv,
+ struct ieee80211_tx_info *info,
+ __le16 fc, __le32 *tx_flags)
+{
+ if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) {
+ *tx_flags |= TX_CMD_FLG_RTS_MSK;
+ *tx_flags &= ~TX_CMD_FLG_CTS_MSK;
+ *tx_flags |= TX_CMD_FLG_FULL_TXOP_PROT_MSK;
+
+ if (!ieee80211_is_mgmt(fc))
+ return;
+
+ switch (fc & cpu_to_le16(IEEE80211_FCTL_STYPE)) {
+ case cpu_to_le16(IEEE80211_STYPE_AUTH):
+ case cpu_to_le16(IEEE80211_STYPE_DEAUTH):
+ case cpu_to_le16(IEEE80211_STYPE_ASSOC_REQ):
+ case cpu_to_le16(IEEE80211_STYPE_REASSOC_REQ):
+ *tx_flags &= ~TX_CMD_FLG_RTS_MSK;
+ *tx_flags |= TX_CMD_FLG_CTS_MSK;
+ break;
+ }
+ } else if (info->control.rates[0].flags &
+ IEEE80211_TX_RC_USE_CTS_PROTECT) {
+ *tx_flags &= ~TX_CMD_FLG_RTS_MSK;
+ *tx_flags |= TX_CMD_FLG_CTS_MSK;
+ *tx_flags |= TX_CMD_FLG_FULL_TXOP_PROT_MSK;
+ }
+}
+EXPORT_SYMBOL(iwl_legacy_tx_cmd_protection);